diff --git a/.configurations/configuration.dsc.yaml b/.configurations/configuration.dsc.yaml new file mode 100644 index 00000000000..41839b86f23 --- /dev/null +++ b/.configurations/configuration.dsc.yaml @@ -0,0 +1,67 @@ +# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2 +# Reference: https://github.com/microsoft/vscode/wiki/How-to-Contribute +properties: + resources: + - resource: Microsoft.WinGet.DSC/WinGetPackage + directives: + description: Install Git + allowPrerelease: true + settings: + id: Git.Git + source: winget + - resource: Microsoft.WinGet.DSC/WinGetPackage + id: npm + directives: + description: Install NodeJS version >=16.17.x and <17 + allowPrerelease: true + settings: + id: OpenJS.NodeJS.LTS + version: "16.20.0" + source: winget + - resource: NpmDsc/NpmPackage + id: yarn + dependsOn: + - npm + directives: + description: Install Yarn + allowPrerelease: true + settings: + Name: 'yarn' + Global: true + PackageDirectory: '${WinGetConfigRoot}\..\' + - resource: Microsoft.WinGet.DSC/WinGetPackage + directives: + description: Install Python 3.10 + allowPrerelease: true + settings: + id: Python.Python.3.10 + source: winget + - resource: Microsoft.WinGet.DSC/WinGetPackage + id: vsPackage + directives: + description: Install Visual Studio 2022 (any edition is OK) + allowPrerelease: true + settings: + id: Microsoft.VisualStudio.2022.BuildTools + source: winget + - resource: Microsoft.VisualStudio.DSC/VSComponents + dependsOn: + - vsPackage + directives: + description: Install required VS workloads + allowPrerelease: true + settings: + productId: Microsoft.VisualStudio.Product.BuildTools + channelId: VisualStudio.17.Release + includeRecommended: true + components: + - Microsoft.VisualStudio.Workload.VCTools + - resource: YarnDsc/YarnInstall + dependsOn: + - npm + directives: + description: Install dependencies + allowPrerelease: true + settings: + PackageDirectory: '${WinGetConfigRoot}\..\' + configurationVersion: 0.2.0 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 002b81d2161..58c0cebd204 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "VS Code", + "name": "Code - OSS with X11/Wayland", "build": { "dockerfile": "Dockerfile" }, diff --git a/.devcontainer/prebuilt/devcontainer.json b/.devcontainer/prebuilt/devcontainer.json index 455df4f9079..079b8de6cd2 100644 --- a/.devcontainer/prebuilt/devcontainer.json +++ b/.devcontainer/prebuilt/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "Code - OSS", + "name": "Code - OSS with VNC", // Image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile "image": "mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:branch-main", diff --git a/.eslintplugin/code-amd-node-module.ts b/.eslintplugin/code-amd-node-module.ts new file mode 100644 index 00000000000..35c89dcb219 --- /dev/null +++ b/.eslintplugin/code-amd-node-module.ts @@ -0,0 +1,60 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { join } from 'path'; + + +export = new class ApiProviderNaming implements eslint.Rule.RuleModule { + + readonly meta: eslint.Rule.RuleMetaData = { + messages: { + amdX: 'Use `import type` for import declarations, use `amdX#importAMDNodeModule` for import expressions' + } + }; + + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + + const modules = new Set(); + + try { + const { dependencies, optionalDependencies } = require(join(__dirname, '../package.json')); + const all = Object.keys(dependencies).concat(Object.keys(optionalDependencies)); + for (const key of all) { + modules.add(key); + } + + } catch (e) { + console.error(e); + throw e; + } + + + const checkImport = (node: any) => { + + if (node.type !== 'Literal' || typeof node.value !== 'string') { + return; + } + + if (node.parent.importKind === 'type') { + return; + } + + if (!modules.has(node.value)) { + return; + } + + context.report({ + node, + messageId: 'amdX' + }); + } + + return { + ['ImportExpression Literal']: checkImport, + ['ImportDeclaration Literal']: checkImport + }; + } +}; diff --git a/.eslintplugin/code-import-patterns.ts b/.eslintplugin/code-import-patterns.ts index c9a24c849d7..1f08bb4a4e8 100644 --- a/.eslintplugin/code-import-patterns.ts +++ b/.eslintplugin/code-import-patterns.ts @@ -18,7 +18,7 @@ interface ConditionalPattern { interface RawImportPatternsConfig { target: string; - layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-browser' | 'electron-main'; + layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main'; test?: boolean; restrictions: string | (string | ConditionalPattern)[]; } @@ -77,7 +77,7 @@ export = new class implements eslint.Rule.RuleModule { return this._optionsCache.get(options)!; } - type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-browser' | 'electron-main'; + type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main'; interface ILayerRule { layer: Layer; @@ -96,7 +96,6 @@ export = new class implements eslint.Rule.RuleModule { { layer: 'browser', deps: orSegment(['common', 'browser']), isBrowser: true }, { layer: 'electron-sandbox', deps: orSegment(['common', 'browser', 'electron-sandbox']), isBrowser: true }, { layer: 'node', deps: orSegment(['common', 'node']), isNode: true }, - { layer: 'electron-browser', deps: orSegment(['common', 'browser', 'node', 'electron-sandbox', 'electron-browser']), isBrowser: true, isNode: true }, { layer: 'electron-main', deps: orSegment(['common', 'node', 'electron-main']), isNode: true }, ]; @@ -181,8 +180,9 @@ export = new class implements eslint.Rule.RuleModule { const restrictions = (typeof option.restrictions === 'string' ? [option.restrictions] : option.restrictions).slice(0); if (targetIsVS) { - // Always add "vs/nls" + // Always add "vs/nls" and "vs/amdX" restrictions.push('vs/nls'); + restrictions.push('vs/amdX'); // TODO@jrieken remove after ESM is real } if (targetIsVS && option.layer) { diff --git a/.eslintplugin/code-no-native-private.ts b/.eslintplugin/code-no-native-private.ts new file mode 100644 index 00000000000..4d6be23b8f3 --- /dev/null +++ b/.eslintplugin/code-no-native-private.ts @@ -0,0 +1,33 @@ +/*--------------------------------------------------------------------------------------------- + * 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'; + +export = new class ApiProviderNaming implements eslint.Rule.RuleModule { + + readonly meta: eslint.Rule.RuleMetaData = { + messages: { + slow: 'Native private fields are much slower and should only be used when needed. Ignore this warning if you know what you are doing, use compile-time private otherwise. See https://github.com/microsoft/vscode/issues/185991#issuecomment-1614468158 for details', + } + }; + + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + + return { + ['PropertyDefinition PrivateIdentifier']: (node: any) => { + context.report({ + node, + messageId: 'slow' + }); + }, + ['MethodDefinition PrivateIdentifier']: (node: any) => { + context.report({ + node, + messageId: 'slow' + }); + } + }; + } +}; diff --git a/.eslintplugin/vscode-dts-string-type-literals.ts b/.eslintplugin/vscode-dts-string-type-literals.ts new file mode 100644 index 00000000000..8c3ead14427 --- /dev/null +++ b/.eslintplugin/vscode-dts-string-type-literals.ts @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as eslint from 'eslint'; +import { TSESTree } from '@typescript-eslint/experimental-utils'; + +export = new class ApiTypeDiscrimination implements eslint.Rule.RuleModule { + + readonly meta: eslint.Rule.RuleMetaData = { + docs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines' }, + messages: { + noTypeDiscrimination: 'Do not use type descrimination properties' + } + }; + + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + return { + ['TSPropertySignature[optional=undefined] TSTypeAnnotation TSLiteralType Literal']: (node: any) => { + + const raw = String((node).raw) + + if (/^('|").*\1$/.test(raw)) { + + context.report({ + node: node, + messageId: 'noTypeDiscrimination' + }); + } + } + } + } +}; diff --git a/.eslintrc.json b/.eslintrc.json index d95ee4630c3..2f52208fa18 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -69,6 +69,7 @@ } ], "local/code-translation-remind": "warn", + "local/code-no-native-private": "warn", "local/code-no-nls-in-standalone-editor": "warn", "local/code-no-standalone-editor": "warn", "local/code-no-unexternalized-strings": "warn", @@ -87,12 +88,6 @@ "common", "browser" ], - "electron-browser": [ - "common", - "browser", - "node", - "electron-sandbox" - ], "electron-main": [ "common", "node" @@ -136,6 +131,7 @@ "rules": { "local/vscode-dts-create-func": "warn", "local/vscode-dts-literal-or-types": "warn", + "local/vscode-dts-string-type-literals": "warn", "local/vscode-dts-interface-naming": "warn", "local/vscode-dts-cancellation": "warn", "local/vscode-dts-use-thenable": "warn", @@ -181,6 +177,7 @@ "invalidate", "open", "override", + "perform", "receive", "register", "remove", @@ -197,6 +194,14 @@ ] } }, + { + "files": [ + "src/**/{common,browser}/**/*.ts" + ], + "rules": { + "local/code-amd-node-module": "warn" + } + }, { "files": [ "src/**/*.ts" @@ -209,7 +214,6 @@ // imports that are allowed in all files of layers: // - browser // - electron-sandbox - // - electron-browser "when": "hasBrowser", "allow": [ "vs/css!./**/*" @@ -218,7 +222,6 @@ { // imports that are allowed in all files of layers: // - node - // - electron-browser // - electron-main "when": "hasNode", "allow": [ @@ -228,6 +231,9 @@ "@vscode/ripgrep", "@vscode/iconv-lite-umd", "@vscode/policy-watcher", + "@vscode/proxy-agent", + "@vscode/spdlog", + "@vscode/windows-process-tree", "assert", "child_process", "console", @@ -236,6 +242,7 @@ "electron", "events", "fs", + "fs/promises", "graceful-fs", "http", "https", @@ -247,7 +254,7 @@ "os", "path", "perf_hooks", - "spdlog", + "readline", "stream", "string_decoder", "tas-client-umd", @@ -255,13 +262,12 @@ "url", "util", "v8-inspect-profiler", - "vscode-proxy-agent", "vscode-regexpp", "vscode-textmate", - "windows-process-tree", "worker_threads", "xterm", "xterm-addon-canvas", + "xterm-addon-image", "xterm-addon-search", "xterm-addon-serialize", "xterm-addon-unicode11", @@ -296,14 +302,12 @@ // - src/vs/base/browser // - src/vs/base/electron-sandbox // - src/vs/base/node - // - src/vs/base/electron-browser // - src/vs/base/electron-main // - src/vs/base/test/common // - src/vs/base/test/worker // - src/vs/base/test/browser // - src/vs/base/test/electron-sandbox // - src/vs/base/test/node - // - src/vs/base/test/electron-browser // - src/vs/base/test/electron-main // // When /~ is used in the restrictions, it will be replaced with the correct @@ -428,7 +432,8 @@ "vs/workbench/api/~", "vs/workbench/~", "vs/workbench/services/*/~", - "vs/workbench/contrib/*/~" + "vs/workbench/contrib/*/~", + "vs/workbench/contrib/terminalContrib/*/~" ] }, { @@ -476,6 +481,35 @@ } // node module allowed even in /browser/ ] }, + { + "target": "src/vs/workbench/contrib/terminalContrib/*/~", + "restrictions": [ + "vs/base/~", + "vs/base/parts/*/~", + "vs/platform/*/~", + "vs/editor/~", + "vs/editor/contrib/*/~", + "vs/workbench/~", + "vs/workbench/services/*/~", + "vs/workbench/contrib/*/~", + // Only allow terminalContrib to import from itself, this works because + // terminalContrib is one extra folder deep + "vs/workbench/contrib/terminalContrib/*/~", + "vscode-notebook-renderer", // Type only import + { + "when": "hasBrowser", + "pattern": "xterm" + }, // node module allowed even in /browser/ + { + "when": "hasBrowser", + "pattern": "xterm-addon-*" + }, // node module allowed even in /browser/ + { + "when": "hasBrowser", + "pattern": "vscode-textmate" + } // node module allowed even in /browser/ + ] + }, { "target": "src/vs/code/~", "restrictions": [ @@ -512,6 +546,13 @@ "vs/server/~" ] }, + { + "target": "src/vs/workbench/contrib/terminal/terminal.all.ts", + "layer": "browser", + "restrictions": [ + "vs/workbench/contrib/**" + ] + }, { "target": "src/vs/workbench/workbench.common.main.ts", "layer": "browser", @@ -525,7 +566,8 @@ "vs/workbench/~", "vs/workbench/api/~", "vs/workbench/services/*/~", - "vs/workbench/contrib/*/~" + "vs/workbench/contrib/*/~", + "vs/workbench/contrib/terminal/terminal.all" ] }, { @@ -562,6 +604,12 @@ "vs/workbench/workbench.common.main" ] }, + { + "target": "src/vs/amdX.ts", + "restrictions": [ + "vs/base/common/*" + ] + }, { "target": "src/vs/workbench/{workbench.desktop.main.nls.js,workbench.web.main.nls.js}", "restrictions": [] diff --git a/.git-blame-ignore b/.git-blame-ignore index 24b19f36c30..457d2604f3c 100644 --- a/.git-blame-ignore +++ b/.git-blame-ignore @@ -15,6 +15,9 @@ ae1452eea678f5266ef513f22dacebb90955d6c9 # joaomoreno: add ghooks dev dependency 0dfc06e0f9de5925de792cdf9f0e6597bb25908f +# joaomoreno: line endings +12ab70d329a13dd5b18d892cd40edd7138259bc3 + # mjbvz: organize imports 494cbbd02d67e87727ec885f98d19551aa33aad1 a3cb14be7f2cceadb17adf843675b1a59537dbbd diff --git a/.github/classifier.json b/.github/classifier.json index c9810659a43..388a50d8db9 100644 --- a/.github/classifier.json +++ b/.github/classifier.json @@ -25,7 +25,7 @@ "comments": {"assign": ["alexr00"]}, "config": {"assign": ["sandy081"]}, "containers": {"assign": ["chrmarti"]}, - "context-keys": {"assign": ["alexdima"]}, + "context-keys": {"assign": ["ulugbekna"]}, "continue-working-on": {"assign": ["joyceerhl"]}, "css-less-scss": {"assign": ["aeschli"]}, "custom-editors": {"assign": ["mjbvz"]}, @@ -40,7 +40,7 @@ "editor-bracket-matching": {"assign": ["hediet"]}, "editor-clipboard": {"assign": ["alexdima", "rebornix"]}, "editor-code-actions": {"assign": ["mjbvz"]}, - "editor-color-picker": {"assign": ["rebornix"]}, + "editor-color-picker": {"assign": ["aiday-mar"]}, "editor-columnselect": {"assign": ["alexdima"]}, "editor-commands": {"assign": ["alexdima"]}, "editor-comments": {"assign": ["alexdima"]}, @@ -51,7 +51,7 @@ "editor-find": {"assign": ["rebornix"]}, "editor-folding": {"assign": ["aeschli"]}, "editor-highlight": {"assign": ["alexdima"]}, - "editor-hover": {"assign": ["alexdima"]}, + "editor-hover": {"assign": ["aiday-mar"]}, "editor-indent-detection": {"assign": ["alexdima"]}, "editor-indent-guides": {"assign": ["hediet"]}, "editor-input": {"assign": ["alexdima"]}, @@ -65,7 +65,7 @@ "editor-RTL": {"assign": ["alexdima"]}, "editor-scrollbar": {"assign": ["alexdima"]}, "editor-sorting": {"assign": ["alexdima"]}, - "editor-sticky-scroll": {"assign": ["jrieken"]}, + "editor-sticky-scroll": {"assign": ["aiday-mar"]}, "editor-symbols": {"assign": ["jrieken"]}, "editor-synced-region": {"assign": ["aeschli"]}, "editor-textbuffer": {"assign": ["alexdima", "rebornix"]}, @@ -114,9 +114,10 @@ "issue-reporter": {"assign": ["TylerLeonhardt"]}, "javascript": {"assign": ["mjbvz"]}, "json": {"assign": ["aeschli"]}, - "keybindings": {"assign": ["alexdima"]}, + "json-sorting": {"assign": ["aiday-mar"]}, + "keybindings": {"assign": ["ulugbekna"]}, "keybindings-editor": {"assign": ["sandy081"]}, - "keyboard-layout": {"assign": ["alexdima"]}, + "keyboard-layout": {"assign": ["ulugbekna"]}, "L10N": {"assign": ["TylerLeonhardt", "csigs"]}, "l10n-platform": {"assign": ["TylerLeonhardt"]}, "label-provider": {"assign": ["lramos15"]}, @@ -193,13 +194,14 @@ "remote-explorer": {"assign": ["alexr00"]}, "remote-tunnel": {"assign": ["aeschli", "connor4312"]}, "rename": {"assign": ["jrieken"]}, + "runCommands": {"assign": ["ulugbekna"]}, "sandbox": {"assign": ["deepak1556"]}, "sash-widget": {"assign": ["joaomoreno"]}, "scm": {"assign": ["lszomoru"]}, "screencast-mode": {"assign": ["joaomoreno"]}, - "search": {"assign": ["andreamah"]}, - "search-api": {"assign": ["andreamah"]}, - "search-editor": {"assign": ["andreamah"]}, + "search": {"assign": ["andreamah", "roblourens"]}, + "search-api": {"assign": ["andreamah", "roblourens"]}, + "search-editor": {"assign": ["andreamah", "roblourens"]}, "search-replace": {"assign": ["sandy081"]}, "semantic-tokens": {"assign": ["alexdima", "aeschli"]}, "server": {"assign": ["alexdima"]}, diff --git a/.github/commands.json b/.github/commands.json index d83ca4d0c5c..15c6cd953c5 100644 --- a/.github/commands.json +++ b/.github/commands.json @@ -209,6 +209,14 @@ "removeLabel": "~version-info-needed", "comment": "Thanks for creating this issue! We figured it's missing some basic information, such as a version number, or in some other way doesn't follow our [issue reporting guidelines](https://aka.ms/vscodeissuereporting). Please take the time to review these and update the issue.\n\nHappy Coding!" }, + { + "type": "label", + "name": "~confirmation-needed", + "action": "updateLabels", + "addLabel": "info-needed", + "removeLabel": "~confirmation-needed", + "comment": "Please diagnose the root cause of the issue by running the command `F1 > Help: Troubleshoot Issue` and following the instructions. Once you have done that, please update the issue with the results.\n\nHappy Coding!" + }, { "type": "comment", "name": "a11ymas", @@ -440,6 +448,20 @@ "addLabel": "*caused-by-extension", "comment": "It looks like this is caused by the Codespaces extension. Please file the issue in the [Codespaces Discussion Forum](http://aka.ms/ghcs-feedback). Make sure to check their issue reporting template and provide them relevant information such as the extension version you're using. See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting) for more information.\n\nHappy Coding!" }, + { + "type": "comment", + "name": "extCopilot", + "allowUsers": [ + "cleidigh", + "usernamehw", + "gjsjohnmurray", + "IllusionMH" + ], + "action": "close", + "reason": "not_planned", + "addLabel": "*caused-by-extension", + "comment": "It looks like this is caused by the Copilot extension. Please file the issue in the [Copilot Discussion Forum](https://github.com/community/community/discussions/categories/copilot). Make sure to check their issue reporting template and provide them relevant information such as the extension version you're using. See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting) for more information.\n\nHappy Coding!" + }, { "type": "comment", "name": "gifPlease", @@ -453,6 +475,19 @@ "addLabel": "info-needed", "comment": "Thanks for reporting this issue! Unfortunately, it's hard for us to understand what issue you're seeing. Please help us out by providing a screen recording showing exactly what isn't working as expected. While we can work with most standard formats, `.gif` files are preferred as they are displayed inline on GitHub. You may find https://gifcap.dev helpful as a browser-based gif recording tool.\n\nIf the issue depends on keyboard input, you can help us by enabling screencast mode for the recording (`Developer: Toggle Screencast Mode` in the command palette). Lastly, please attach this file via the GitHub web interface as emailed responses will strip files out from the issue.\n\nHappy coding!" }, + { + "type": "comment", + "name": "confirmPlease", + "allowUsers": [ + "cleidigh", + "usernamehw", + "gjsjohnmurray", + "IllusionMH" + ], + "action": "comment", + "addLabel": "info-needed", + "comment": "Please perform the following **three tasks** to diagnose the root cause of the issue:\n\n* [ ] **1.) Disable Extensions**\n * Select `View` and pick `Command Palette...`\n * Run `Developer: Reload With Extensions Disabled`\n * šŸ‘‰ See if the issue reproduces\n\n* [ ] **2.) Disable Configuration**\n * Select `View` and pick `Command Palette...`\n * Run `Profiles: Create a Temporary Profile`\n * šŸ‘‰ See if the issue reproduces\n\n* [ ] **3.) Try VS Code Insiders**\n * Download [VS Code Insiders](https://code.visualstudio.com/insiders/)\n * Install and Run it\n * šŸ‘‰ See if the issue reproduces\n \nThen pick one of the three resolutions depending on which step has helped:\n\n
\n Disabling my Extensions helped\n\nPlease run the command `Start Extension Bisect` and follow the instructions to find the extension that is causing this issue.\n\nimage\n\nPlease report the issue to the extension causing this.\n
\n\n
\n Disabling my configuration helped\nPlease report back more details about your configuration, including settings.\n
\n\n
\n Using VS Code Insiders has helped\nāœ… This likely means that the issue has been addressed already and will be available in an upcoming release. You can safely use VS Code Insiders until the new stable version is available.\n
" + }, { "__comment__": "Allows folks on the team to label issues by commenting: `\\label My-Label` ", "type": "comment", diff --git a/.github/commands/codespaces_issue.yml b/.github/commands/codespaces_issue.yml new file mode 100644 index 00000000000..7abacafaf21 --- /dev/null +++ b/.github/commands/codespaces_issue.yml @@ -0,0 +1,11 @@ +# Learn more about the syntax here: +# https://docs.github.com/en/early-access/github/save-time-with-slash-commands/syntax-for-user-defined-slash-commands +--- +trigger: codespaces_issue +title: Codespaces Issue +description: Report downstream + +steps: + - type: fill + template: |- + This looks like an issue with the Codespaces service which we don't track in this repository. You can report this to the Codespaces team at https://github.com/orgs/community/discussions/categories/codespaces diff --git a/.github/workflows/deep-classifier-runner.yml b/.github/workflows/deep-classifier-runner.yml index c951476c083..2d90770bd25 100644 --- a/.github/workflows/deep-classifier-runner.yml +++ b/.github/workflows/deep-classifier-runner.yml @@ -47,6 +47,8 @@ jobs: with: configPath: classifier allowLabels: "info-needed|new release|error-telemetry|*english-please|translation-required" - appInsightsKey: ${{secrets.TRIAGE_ACTIONS_APP_INSIGHTS}} - manifestDbConnectionString: ${{secrets.MANIFEST_DB_CONNECTION_STRING}} + tenantId: ${{secrets.TOOLS_TENANT_ID}} + clientId: ${{secrets.TOOLS_CLIENT_ID}} + clientSecret: ${{secrets.TOOLS_CLIENT_SECRET}} + clientScope: ${{secrets.TOOLS_CLIENT_SCOPE}} token: ${{secrets.VSCODE_ISSUE_TRIAGE_BOT_PAT}} diff --git a/.github/workflows/locker.yml b/.github/workflows/locker.yml index 1b560416df5..8b515b58bd0 100644 --- a/.github/workflows/locker.yml +++ b/.github/workflows/locker.yml @@ -23,6 +23,6 @@ jobs: daysSinceClose: 45 appInsightsKey: ${{secrets.TRIAGE_ACTIONS_APP_INSIGHTS}} daysSinceUpdate: 3 - ignoredLabel: "*out-of-scope" + ignoredLabel: "*out-of-scope,accessibility" ignoreLabelUntil: "author-verification-requested" labelUntil: "verified" diff --git a/.github/workflows/no-yarn-lock-changes.yml b/.github/workflows/no-yarn-lock-changes.yml index 5a90e5848fe..ac32bc367dc 100644 --- a/.github/workflows/no-yarn-lock-changes.yml +++ b/.github/workflows/no-yarn-lock-changes.yml @@ -19,8 +19,8 @@ jobs: echo "user: ${{ github.event.pull_request.user.login }}" echo "role: ${{ fromJson(steps.get_permissions.outputs.data).permission }}" echo "is dependabot: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }}" - echo "should_run: ${{ !contains(fromJson('["admin", "write"]'), fromJson(steps.get_permissions.outputs.data).permission) }}" - echo "should_run=${{ !contains(fromJson('["admin", "write"]'), fromJson(steps.get_permissions.outputs.data).permission) && github.event.pull_request.user.login != 'dependabot[bot]' }}" >> $GITHUB_OUTPUT + echo "should_run: ${{ !contains(fromJson('["admin", "maintain", "write"]'), fromJson(steps.get_permissions.outputs.data).permission) }}" + echo "should_run=${{ !contains(fromJson('["admin", "maintain", "write"]'), fromJson(steps.get_permissions.outputs.data).permission) && github.event.pull_request.user.login != 'dependabot[bot]' }}" >> $GITHUB_OUTPUT - name: Get file changes uses: trilom/file-changes-action@ce38c8ce2459ca3c303415eec8cb0409857b4272 if: ${{ steps.control.outputs.should_run == 'true' }} diff --git a/.github/workflows/rich-navigation.yml b/.github/workflows/rich-navigation.yml.off similarity index 98% rename from .github/workflows/rich-navigation.yml rename to .github/workflows/rich-navigation.yml.off index dd92342ef3a..c36c83dcb14 100644 --- a/.github/workflows/rich-navigation.yml +++ b/.github/workflows/rich-navigation.yml.off @@ -1,7 +1,6 @@ name: "Rich Navigation Indexing" on: workflow_dispatch: - pull_request: push: branches: - main diff --git a/.gitignore b/.gitignore index c338e141c8d..32f514ad07a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ vscode.lsif vscode.db /.profile-oss /cli/target +/cli/openssl +product.overrides.json diff --git a/.nvmrc b/.nvmrc index 0cf077e6b4c..5cb297e3e48 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -16.14 +16.17 diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 20d53a66c6e..0d3101d30a8 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,6 +4,8 @@ "recommendations": [ "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", + "GitHub.vscode-pull-request-github", + "ms-vscode.vscode-github-issue-notebooks", "ms-vscode.vscode-selfhost-test-provider" ] } diff --git a/.vscode/launch.json b/.vscode/launch.json index edabeade2a1..baa3cfb0c8b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -24,15 +24,15 @@ ] }, { - "type": "chrome", + "type": "node", "request": "attach", + "restart": true, "name": "Attach to Shared Process", - "timeout": 30000, - "port": 9222, - "urlFilter": "*sharedProcess*.html*", - "presentation": { - "hidden": true - } + "timeout": 0, + "port": 5879, + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ] }, { "type": "node", @@ -159,7 +159,7 @@ "--disable-extensions" ], "outFiles": [ - "${workspaceFolder}/out/**/*.js" + "${workspaceFolder}/extensions/vscode-api-tests/out/**/*.js" ], "presentation": { "group": "5_tests", @@ -177,7 +177,7 @@ "--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out/workspace-tests" ], "outFiles": [ - "${workspaceFolder}/out/**/*.js" + "${workspaceFolder}/extensions/vscode-api-tests/out/**/*.js" ], "presentation": { "group": "5_tests", @@ -236,13 +236,13 @@ "VSCODE_SKIP_PRELAUNCH": "1" }, "cleanUp": "wholeBrowser", - "urlFilter": "*workbench*.html*", "runtimeArgs": [ "--inspect-brk=5875", "--no-cached-data", "--crash-reporter-directory=${workspaceFolder}/.profile-oss/crashes", // for general runtime freezes: https://github.com/microsoft/vscode/issues/127861#issuecomment-904144910 "--disable-features=CalculateNativeWinOcclusion", + "--disable-extension=vscode.vscode-api-tests" ], "webRoot": "${workspaceFolder}", "cascadeTerminateToConfigurations": [ @@ -526,7 +526,7 @@ "name": "Monaco Editor Playground", "type": "chrome", "request": "launch", - "url": "https://microsoft.github.io/monaco-editor/playground.html?source=http%3A%2F%2Flocalhost%3A5001%2Fout%2Fvs", + "url": "http://localhost:5001", "preLaunchTask": "Launch Http Server", "presentation": { "group": "monaco", diff --git a/.vscode/notebooks/api.github-issues b/.vscode/notebooks/api.github-issues index a8478a35302..682cd02911b 100644 --- a/.vscode/notebooks/api.github-issues +++ b/.vscode/notebooks/api.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"March 2023\"" + "value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"June 2023\"" }, { "kind": 1, diff --git a/.vscode/notebooks/endgame.github-issues b/.vscode/notebooks/endgame.github-issues index 4a61518494e..e0a1b766d76 100644 --- a/.vscode/notebooks/endgame.github-issues +++ b/.vscode/notebooks/endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n\n$MILESTONE=milestone:\"February 2023\"" + "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n\n$MILESTONE=milestone:\"June 2023\"" }, { "kind": 1, @@ -112,7 +112,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -label:z-author-verified -label:unreleased" + "value": "$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:z-author-verified -label:unreleased" }, { "kind": 1, @@ -122,7 +122,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -label:z-author-verified label:unreleased" + "value": "$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:z-author-verified label:unreleased" }, { "kind": 1, diff --git a/.vscode/notebooks/my-endgame.github-issues b/.vscode/notebooks/my-endgame.github-issues index 57e276cb7f2..74316c9367e 100644 --- a/.vscode/notebooks/my-endgame.github-issues +++ b/.vscode/notebooks/my-endgame.github-issues @@ -7,7 +7,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n\n$MILESTONE=milestone:\"February 2023\"\n\n$MINE=assignee:@me" + "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n\n$MILESTONE=milestone:\"June 2023\"\n\n$MINE=assignee:@me" }, { "kind": 1, @@ -157,7 +157,7 @@ { "kind": 2, "language": "github-issues", - "value": "$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:andreamah -author:bamurtaugh -author:bpasero -author:chrisdias -author:chrmarti -author:Chuxel -author:claudiaregio -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:DonJayamanne -author:egamma -author:fiveisprime -author:gregvanl -author:hediet -author:isidorn -author:joaomoreno -author:joyceerhl -author:jrieken -author:karrtikr -author:kieferrm -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:roblourens -author:rzhao271 -author:sandy081 -author:sbatten -author:stevencl -author:tanhakabir -author:TylerLeonhardt -author:Tyriar -author:weinand -author:amunger" + "value": "$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:andreamah -author:bamurtaugh -author:bpasero -author:chrisdias -author:chrmarti -author:Chuxel -author:claudiaregio -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:DonJayamanne -author:egamma -author:fiveisprime -author:gregvanl -author:hediet -author:isidorn -author:joaomoreno -author:joyceerhl -author:jrieken -author:karrtikr -author:kieferrm -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:roblourens -author:rzhao271 -author:sandy081 -author:sbatten -author:stevencl -author:tanhakabir -author:TylerLeonhardt -author:Tyriar -author:weinand -author:amunger -author:karthiknadig -author:eleanorjboyd -author:Yoyokrazy -author:paulacamargo25 -author:ulugbekna -author:aiday-mar" }, { "kind": 1, @@ -177,6 +177,6 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request -label:on-release-notes\nrepo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:engineering -label:on-release-notes" + "value": "repo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request -label:on-release-notes\nrepo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:engineering -label:on-release-notes\nrepo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:plan-item -label:on-release-notes" } ] \ No newline at end of file diff --git a/.vscode/notebooks/my-work.github-issues b/.vscode/notebooks/my-work.github-issues index 2d824f742b2..9f66c4771f6 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/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-markdown-languageservice\n\n// current milestone name\n$milestone=milestone:\"March 2023\"" + "value": "// list of repos we work in\n$repos=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release\n\n// current milestone name\n$milestone=milestone:\"July 2023\"" }, { "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:color-palette -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:htmlfs -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:ipc -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-keybinding -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: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:sync-error-handling -label:table-widget -label:tasks -label:telemetry -label:terminal -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-search -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:tips-and-tricks -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:untitled-editor-hint -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-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-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom" + "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-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-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat" }, { "kind": 1, diff --git a/.vscode/notebooks/verification.github-issues b/.vscode/notebooks/verification.github-issues index 15cf60b17dd..f3c54eab361 100644 --- a/.vscode/notebooks/verification.github-issues +++ b/.vscode/notebooks/verification.github-issues @@ -2,7 +2,7 @@ { "kind": 1, "language": "markdown", - "value": "### Bug Verification Queries\r\n\r\nBefore shipping we want to verify _all_ bugs. That means when a bug is fixed we check that the fix actually works. It's always best to start with bugs that you have filed and the proceed with bugs that have been filed from users outside the development team. " + "value": "### Bug Verification Queries\n\nBefore shipping we want to verify _all_ bugs. That means when a bug is fixed we check that the fix actually works. It's always best to start with bugs that you have filed and the proceed with bugs that have been filed from users outside the development team. " }, { "kind": 1, @@ -12,7 +12,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n$milestone=milestone:\"February 2023\"" + "value": "$repos=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n$milestone=milestone:\"June 2023\"" }, { "kind": 1, @@ -32,7 +32,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate -author:@me -assignee:@me label:bug -label:verified -author:@me -author:aeschli -author:alexdima -author:alexr00 -author:bpasero -author:chrisdias -author:chrmarti -author:connor4312 -author:dbaeumer -author:deepak1556 -author:eamodio -author:egamma -author:gregvanl -author:isidorn -author:JacksonKearl -author:joaomoreno -author:jrieken -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:RMacfarlane -author:roblourens -author:sana-ajani -author:sandy081 -author:sbatten -author:Tyriar -author:weinand -author:rzhao271 -author:kieferrm -author:TylerLeonhardt -author:bamurtaugh -author:hediet -author:joyceerhl -author:rchiodo" + "value": "$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate -author:@me -assignee:@me label:bug -label:verified -author:@me -author:aeschli -author:alexdima -author:alexr00 -author:bpasero -author:chrisdias -author:chrmarti -author:connor4312 -author:dbaeumer -author:deepak1556 -author:eamodio -author:egamma -author:gregvanl -author:isidorn -author:JacksonKearl -author:joaomoreno -author:jrieken -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:RMacfarlane -author:roblourens -author:sana-ajani -author:sandy081 -author:sbatten -author:Tyriar -author:weinand -author:rzhao271 -author:kieferrm -author:TylerLeonhardt -author:bamurtaugh -author:hediet -author:joyceerhl -author:rchiodo" }, { "kind": 1, diff --git a/.vscode/notebooks/vscode-dev.github-issues b/.vscode/notebooks/vscode-dev.github-issues index 9266fd7654c..ffcd620be52 100644 --- a/.vscode/notebooks/vscode-dev.github-issues +++ b/.vscode/notebooks/vscode-dev.github-issues @@ -1,4 +1,9 @@ [ + { + "kind": 2, + "language": "github-issues", + "value": "$milestone=milestone:\"June 2023\"" + }, { "kind": 1, "language": "markdown", @@ -7,7 +12,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode-dev milestone:\"May 2022\" is:open" + "value": "repo:microsoft/vscode-dev $milestone is:open" }, { "kind": 2, @@ -32,11 +37,11 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode-remote-repositories-github milestone:\"May 2022\" is:open" + "value": "repo:microsoft/vscode-remote-repositories-github $milestone is:open" }, { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode-remotehub milestone:\"May 2022\" is:open" + "value": "repo:microsoft/vscode-remotehub $milestone is:open" } ] \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index c11a78e3264..85e608eb901 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,7 +17,6 @@ }, "search.exclude": { "**/node_modules": true, - "**/bower_components": true, "cli/target/**": true, ".build/**": true, "out/**": true, @@ -34,6 +33,30 @@ "src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts": true, "src/vs/editor/test/node/diffing/fixtures/**": true, }, + "files.readonlyInclude": { + "**/node_modules/**": true, + "**/yarn.lock": true, + "src/vs/workbench/workbench.web.main.css": true, + "src/vs/workbench/workbench.desktop.main.css": true, + "src/vs/workbench/workbench.desktop.main.nls.js": true, + "src/vs/workbench/workbench.web.main.nls.js": true, + "build/**/*.js": true, + "out/**": true, + "out-build/**": true, + "out-vscode/**": true, + "out-vscode-reh/**": true, + "extensions/**/dist/**": true, + "extensions/**/out/**": true, + "test/smoke/out/**": true, + "test/automation/out/**": true, + "test/integration/browser/out/**": true, + }, + "files.readonlyExclude": { + "build/builtin/*.js": true, + "build/monaco/*.js": true, + "build/npm/*.js": true, + "build/*.js": true + }, "lcov.path": [ "./.build/coverage/lcov.info", "./.build/coverage-single/lcov.info" @@ -120,5 +143,11 @@ }, "githubPullRequests.assignCreated": "${user}", "githubPullRequests.defaultMergeMethod": "squash", - "application.experimental.rendererProfiling": true + "githubPullRequests.ignoredPullRequestBranches": [ + "main" + ], + "application.experimental.rendererProfiling": true, + "editor.experimental.asyncTokenization": true, + "editor.experimental.asyncTokenizationVerification": true, + "diffEditor.experimental.useVersion2": true, } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index f97b01e8c62..666edb3fb2c 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -112,6 +112,17 @@ "dependsOrder": "sequence", "problemMatcher": [] }, + { + "label": "Kill VS Code - Build, Yarn, VS Code - Build", + "dependsOn": [ + "Kill VS Code - Build", + "npm: install", + "VS Code - Build" + ], + "group": "build", + "dependsOrder": "sequence", + "problemMatcher": [] + }, { "type": "npm", "script": "watch-webd", @@ -260,7 +271,7 @@ // Used for monaco editor playground launch config "label": "Launch Http Server", "type": "shell", - "command": "node_modules/.bin/http-server --cors --port 5001 -a 127.0.0.1 -c-1 -s", + "command": "node_modules/.bin/ts-node -T ./scripts/playground-server", "isBackground": true, "problemMatcher": { "pattern": { diff --git a/.yarnrc b/.yarnrc index 429dd44390a..3af2059dbd7 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1,4 +1,5 @@ disturl "https://electronjs.org/headers" -target "19.1.9" +target "22.3.14" +ms_build_id "21893604" runtime "electron" build_from_source "true" diff --git a/CodeQL.yml b/CodeQL.yml new file mode 100644 index 00000000000..9ef07560af3 --- /dev/null +++ b/CodeQL.yml @@ -0,0 +1,23 @@ +path_classifiers: + test: + # Classify all files in the top-level directories test/ and testsuites/ as test code. + - test + # Classify all files with suffix `.test` as test code. + # Note: use only forward slash / as a path separator. + # * Matches any sequence of characters except a forward slash. + # ** Matches any sequence of characters, including a forward slash. + # This wildcard must either be surrounded by forward slash symbols, or used as the first segment of a path. + # It matches zero or more whole directory segments. There is no need to use a wildcard at the end of a directory path because all sub-directories are automatically matched. + # That is, /anything/ matches the anything directory and all its subdirectories. + # Always enclose the expression in double quotes if it includes *. + - "**/*.test.ts" + + # The default behavior is to tag all files created during the + # build as `generated`. Results are hidden for generated code. You can tag + # further files as being generated by adding them to the `generated` section. + generated: + # generated code. + - out + - "out-build" + - "out-vscode" + - "**/out/**" diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt index 330b43c9b76..d5a4c5f2193 100644 --- a/ThirdPartyNotices.txt +++ b/ThirdPartyNotices.txt @@ -1191,7 +1191,7 @@ SOFTWARE. --------------------------------------------------------- -jeff-hykin/better-cpp-syntax 1.17.3 - MIT +jeff-hykin/better-cpp-syntax 1.17.4 - MIT https://github.com/jeff-hykin/better-cpp-syntax MIT License @@ -1275,7 +1275,7 @@ SOFTWARE. --------------------------------------------------------- -jeff-hykin/better-shell-syntax 1.3.3 - MIT +jeff-hykin/better-shell-syntax 1.5.4 - MIT https://github.com/jeff-hykin/better-shell-syntax MIT License @@ -1303,7 +1303,7 @@ SOFTWARE. --------------------------------------------------------- -jlelong/vscode-latex-basics 1.5.0 - MIT +jlelong/vscode-latex-basics 1.5.2 - MIT https://github.com/jlelong/vscode-latex-basics Copyright (c) vscode-latex-basics authors @@ -1654,8 +1654,8 @@ THE SOFTWARE. --------------------------------------------------------- -language-php 0.48.1 - MIT -https://github.com/atom/language-php +language-php 0.49.0 - MIT +https://github.com/KapitanOczywisty/language-php The MIT License (MIT) @@ -1772,389 +1772,6 @@ This software is provided by the copyright holders and contributors "as is" and --------------------------------------------------------- -mdn-data 1.1.12 - MPL -https://github.com/mdn/data - -Mozilla Public License Version 2.0 - -Copyright (c) 2018 Mozilla Corporation - -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. ---------------------------------------------------------- - ---------------------------------------------------------- - microsoft/TypeScript-TmLanguage 0.0.1 - MIT https://github.com/microsoft/TypeScript-TmLanguage @@ -2184,7 +1801,7 @@ THE SOFTWARE. --------------------------------------------------------- -microsoft/vscode-css 0.45.1 - MIT License +microsoft/vscode-css 0.0.0 - MIT License https://github.com/microsoft/vscode-css MIT License @@ -2278,7 +1895,7 @@ SOFTWARE. --------------------------------------------------------- -microsoft/vscode-mssql 1.17.0 - MIT +microsoft/vscode-mssql 1.20.0 - MIT https://github.com/microsoft/vscode-mssql ------------------------------------------ START OF LICENSE ----------------------------------------- @@ -2748,7 +2365,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SO --------------------------------------------------------- -trond-snekvik/vscode-rst 1.5.1 - MIT +trond-snekvik/vscode-rst 1.5.2 - MIT https://github.com/trond-snekvik/vscode-rst The MIT License (MIT) diff --git a/build/.cachesalt b/build/.cachesalt index f92fd935d7c..d63bdc31189 100644 --- a/build/.cachesalt +++ b/build/.cachesalt @@ -1 +1 @@ -2023-01-19T08:04:33.652Z +2023-06-12T12:55:48.130Z diff --git a/build/.moduleignore b/build/.moduleignore index 7b57188f137..abc37e3138c 100644 --- a/build/.moduleignore +++ b/build/.moduleignore @@ -12,6 +12,14 @@ fsevents/src/** fsevents/test/** !fsevents/**/*.node +@vscode/spdlog/binding.gyp +@vscode/spdlog/build/** +@vscode/spdlog/deps/** +@vscode/spdlog/src/** +@vscode/spdlog/test/** +@vscode/spdlog/*.yml +!@vscode/spdlog/build/Release/*.node + @vscode/sqlite3/binding.gyp @vscode/sqlite3/benchmark/** @vscode/sqlite3/cloudformation/** @@ -21,16 +29,23 @@ fsevents/test/** @vscode/sqlite3/src/** !@vscode/sqlite3/build/Release/*.node +@vscode/windows-mutex/binding.gyp +@vscode/windows-mutex/build/** +@vscode/windows-mutex/src/** +!@vscode/windows-mutex/**/*.node + +@vscode/windows-process-tree/binding.gyp +@vscode/windows-process-tree/build/** +@vscode/windows-process-tree/src/** +@vscode/windows-process-tree/tsconfig.json +@vscode/windows-process-tree/tslint.json +!@vscode/windows-process-tree/**/*.node + @vscode/windows-registry/binding.gyp @vscode/windows-registry/src/** @vscode/windows-registry/build/** !@vscode/windows-registry/build/Release/*.node -windows-mutex/binding.gyp -windows-mutex/build/** -windows-mutex/src/** -!windows-mutex/**/*.node - native-keymap/binding.gyp native-keymap/build/** native-keymap/src/** @@ -53,24 +68,11 @@ node-vsce-sign/** !node-vsce-sign/package.json !node-vsce-sign/bin/** -spdlog/binding.gyp -spdlog/build/** -spdlog/deps/** -spdlog/src/** -spdlog/test/** -spdlog/*.yml -!spdlog/build/Release/*.node - windows-foreground-love/binding.gyp windows-foreground-love/build/** windows-foreground-love/src/** !windows-foreground-love/**/*.node -windows-process-tree/binding.gyp -windows-process-tree/build/** -windows-process-tree/src/** -!windows-process-tree/**/*.node - keytar/binding.gyp keytar/build/** keytar/src/** @@ -102,6 +104,7 @@ vsda/src/** vsda/.gitignore vsda/binding.gyp vsda/README.md +vsda/SECURITY.md vsda/targets !vsda/build/Release/vsda.node @@ -121,9 +124,9 @@ vscode-encrypt/README.md @vscode/policy-watcher/index.d.ts !@vscode/policy-watcher/build/Release/vscode-policy-watcher.node -vscode-windows-ca-certs/**/* -!vscode-windows-ca-certs/package.json -!vscode-windows-ca-certs/**/*.node +@vscode/windows-ca-certs/**/* +!@vscode/windows-ca-certs/package.json +!@vscode/windows-ca-certs/**/*.node node-addon-api/**/* prebuild-install/**/* diff --git a/build/.moduleignore.darwin b/build/.moduleignore.darwin new file mode 100644 index 00000000000..dbc12762f7d --- /dev/null +++ b/build/.moduleignore.darwin @@ -0,0 +1,17 @@ +@vscode/windows-mutex/index.js +@vscode/windows-mutex/**/*.node +@vscode/windows-mutex/*.md +@vscode/windows-mutex/package.json + +@vscode/windows-process-tree/lib/** +@vscode/windows-process-tree/**/*.node +@vscode/windows-process-tree/LICENSE +@vscode/windows-process-tree/package.json +@vscode/windows-process-tree/*.md + +@vscode/windows-registry/dist/** +@vscode/windows-registry/**/*.node +@vscode/windows-registry/*.md +@vscode/windows-registry/*.txt +@vscode/windows-registry/package.json +!@vscode/windows-registry/dist/index.d.ts \ No newline at end of file diff --git a/build/.moduleignore.linux b/build/.moduleignore.linux new file mode 100644 index 00000000000..dbc12762f7d --- /dev/null +++ b/build/.moduleignore.linux @@ -0,0 +1,17 @@ +@vscode/windows-mutex/index.js +@vscode/windows-mutex/**/*.node +@vscode/windows-mutex/*.md +@vscode/windows-mutex/package.json + +@vscode/windows-process-tree/lib/** +@vscode/windows-process-tree/**/*.node +@vscode/windows-process-tree/LICENSE +@vscode/windows-process-tree/package.json +@vscode/windows-process-tree/*.md + +@vscode/windows-registry/dist/** +@vscode/windows-registry/**/*.node +@vscode/windows-registry/*.md +@vscode/windows-registry/*.txt +@vscode/windows-registry/package.json +!@vscode/windows-registry/dist/index.d.ts \ No newline at end of file diff --git a/build/.moduleignore.win32 b/build/.moduleignore.win32 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/build/.webignore b/build/.webignore index afb0cee5808..bc8fe659566 100644 --- a/build/.webignore +++ b/build/.webignore @@ -23,6 +23,9 @@ xterm/src/** xterm-addon-canvas/src/** xterm-addon-canvas/out/** +xterm-addon-image/src/** +xterm-addon-image/out/** + xterm-addon-search/src/** xterm-addon-search/out/** xterm-addon-search/fixtures/** @@ -46,6 +49,5 @@ xterm-addon-webgl/out/** !@microsoft/applicationinsights-core-js/browser/applicationinsights-core-js.min.js !@microsoft/applicationinsights-shims/dist/umd/applicationinsights-shims.min.js - - - +vsda/** +!vsda/rust/web/** diff --git a/build/azure-pipelines/.gdntsa b/build/azure-pipelines/.gdntsa deleted file mode 100644 index a9d98fe01f0..00000000000 --- a/build/azure-pipelines/.gdntsa +++ /dev/null @@ -1,21 +0,0 @@ -{ - "codebaseName": "vscode-client", - "ppe": false, - "notificationAliases": [ - "sbatten@microsoft.com" - ], - "codebaseAdmins": [ - "REDMOND\\stbatt", - "REDMOND\\monacotools", - ], - "instanceUrl": "https://msazure.visualstudio.com/defaultcollection", - "projectName": "One", - "areaPath": "One\\VSCode\\Visual Studio Code Client", - "iterationPath": "One", - "notifyAlways": true, - "tools": [ - "BinSkim", - "CredScan", - "CodeQL" - ] -} diff --git a/build/azure-pipelines/alpine/cli-build-alpine.yml b/build/azure-pipelines/alpine/cli-build-alpine.yml new file mode 100644 index 00000000000..5ad6495cf97 --- /dev/null +++ b/build/azure-pipelines/alpine/cli-build-alpine.yml @@ -0,0 +1,96 @@ +parameters: + - name: VSCODE_BUILD_ALPINE + type: boolean + default: false + - name: VSCODE_BUILD_ALPINE_ARM64 + type: boolean + default: false + - name: VSCODE_QUALITY + type: string + +steps: + - task: NodeTool@0 + inputs: + versionSpec: "16.x" + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - template: ../distro/download-distro.yml + + # Install yarn as the ARM64 build agent is using vanilla Ubuntu + - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}: + - task: Npm@1 + displayName: Install yarn + inputs: + command: custom + customCommand: install --global yarn + + - script: | + set -e + yarn --frozen-lockfile --ignore-optional + workingDirectory: build + displayName: Install pipeline build + + - script: node build/azure-pipelines/distro/apply-cli-patches + displayName: Apply distro patches + + - task: Npm@1 + displayName: Download openssl prebuilt + inputs: + command: custom + customCommand: pack @vscode-internal/openssl-prebuilt@0.0.8 + customRegistry: useFeed + customFeed: "Monaco/openssl-prebuilt" + workingDir: $(Build.ArtifactStagingDirectory) + + - script: | + set -e + mkdir $(Build.ArtifactStagingDirectory)/openssl + tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.8.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl + displayName: Extract openssl prebuilt + + # inspired by: https://github.com/emk/rust-musl-builder/blob/main/Dockerfile + - bash: | + set -e + sudo apt-get update + sudo apt-get install -yq build-essential musl-dev musl-tools linux-libc-dev pkgconf xutils-dev lld + sudo ln -s "/usr/bin/g++" "/usr/bin/musl-g++" || echo "link exists" + displayName: Install musl build dependencies + + - script: node build/azure-pipelines/cli/prepare.js + displayName: Prepare CLI build + env: + VSCODE_CLI_PREPARE_ROOT: $(Build.SourcesDirectory)/.build/distro + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + GITHUB_TOKEN: "$(github-distro-mixin-password)" + + - template: ../cli/install-rust-posix.yml + parameters: + targets: + - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}: + - aarch64-unknown-linux-musl + - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}: + - x86_64-unknown-linux-musl + + - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: aarch64-unknown-linux-musl + VSCODE_CLI_ARTIFACT: vscode_cli_alpine_arm64_cli + VSCODE_CLI_ENV: + CXX_aarch64-unknown-linux-musl: musl-g++ + CC_aarch64-unknown-linux-musl: musl-gcc + OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux-musl/lib + OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux-musl/include + OPENSSL_STATIC: "1" + + - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}: + - template: ../cli/cli-compile-and-publish.yml + parameters: + VSCODE_CLI_TARGET: x86_64-unknown-linux-musl + VSCODE_CLI_ARTIFACT: vscode_cli_alpine_x64_cli + VSCODE_CLI_ENV: + CXX_aarch64-unknown-linux-musl: musl-g++ + CC_aarch64-unknown-linux-musl: musl-gcc + OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux-musl/lib + OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux-musl/include + OPENSSL_STATIC: "1" diff --git a/build/azure-pipelines/linux/product-build-alpine.yml b/build/azure-pipelines/alpine/product-build-alpine.yml similarity index 50% rename from build/azure-pipelines/linux/product-build-alpine.yml rename to build/azure-pipelines/alpine/product-build-alpine.yml index 5b8bad51650..04f9ad2fcf2 100644 --- a/build/azure-pipelines/linux/product-build-alpine.yml +++ b/build/azure-pipelines/alpine/product-build-alpine.yml @@ -3,6 +3,12 @@ steps: inputs: versionSpec: "16.x" + - script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + displayName: "Register Docker QEMU" + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) + + - template: ../distro/download-distro.yml + - task: AzureKeyVault@1 displayName: "Azure Key Vault: Get Secrets" inputs: @@ -16,95 +22,55 @@ steps: path: $(Build.ArtifactStagingDirectory) displayName: Download compilation output - - script: | - set -e - tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz + - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz displayName: Extract compilation output + - script: node build/setup-npm-registry.js $NPM_REGISTRY + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Registry + + - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js alpine $VSCODE_ARCH > .build/yarnlockhash + displayName: Prepare node_modules cache key + + - task: Cache@2 + inputs: + key: '"node_modules" | .build/yarnlockhash' + path: .build/node_modules_cache + cacheHitVar: NODE_MODULES_RESTORED + displayName: Restore node_modules cache + + - script: tar -xzf .build/node_modules_cache/cache.tgz + condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Extract node_modules cache + + - script: | + set -e + npm config set registry "$NPM_REGISTRY" --location=project + npm config set always-auth=true --location=project + yarn config set registry "$NPM_REGISTRY" + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM & Yarn + + - task: npmAuthenticate@0 + inputs: + workingFile: .npmrc + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Authentication + - task: Docker@1 - displayName: "Pull image" inputs: azureSubscriptionEndpoint: "vscode-builds-subscription" azureContainerRegistry: vscodehub.azurecr.io command: "Run an image" imageName: "vscode-linux-build-agent:alpine-$(VSCODE_ARCH)" containerCommand: uname - - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - - script: node build/setup-npm-registry.js $NPM_REGISTRY - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Registry - - # In Alpine, we always want to setup and authenticate against the NPM_REGISTRY - # because of the Prebuild step, since it always runs `yarn` from inside an alpine - # container - - script: | - set -e - npm config set registry "$NPM_REGISTRY" --location=project - npm config set always-auth=true --location=project - yarn config set registry "$NPM_REGISTRY" - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM & Yarn - - - task: npmAuthenticate@0 - inputs: - workingFile: .npmrc - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Authentication - - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js "alpine" > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags - - - task: Cache@2 - inputs: - key: "nodeModules | $(Agent.OS) | .build/yarnlockhash" - path: .build/node_modules_cache - cacheHitVar: NODE_MODULES_RESTORED - displayName: Restore node_modules cache - - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz - condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Extract node_modules cache + displayName: "Pull image" + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - script: | set -e for i in {1..5}; do # try 5 times - yarn --frozen-lockfile --check-files --check-files && break + yarn --frozen-lockfile --check-files && break if [ $i -eq 3 ]; then echo "Yarn failed too many times" >&2 exit 1 @@ -115,15 +81,13 @@ steps: ELECTRON_SKIP_BINARY_DOWNLOAD: 1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Install dependencies + VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME: vscodehub.azurecr.io/vscode-linux-build-agent:alpine-$(VSCODE_ARCH) + displayName: Install build dependencies condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions + - script: node build/azure-pipelines/distro/mixin-npm + displayName: Mixin distro node modules + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - script: | set -e @@ -133,92 +97,62 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) displayName: Create node_modules archive - - script: | - set -e - node build/azure-pipelines/mixin - node build/azure-pipelines/mixin --server - displayName: Mix in quality + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality - - script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - displayName: "Register Docker QEMU" - condition: eq(variables['VSCODE_ARCH'], 'arm64') + - template: ../common/install-builtin-extensions.yml - script: | set -e - docker run -e VSCODE_QUALITY -e GITHUB_TOKEN -v $(pwd):/root/vscode -v ~/.netrc:/root/.netrc vscodehub.azurecr.io/vscode-linux-build-agent:alpine-$(VSCODE_ARCH) /root/vscode/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh + TARGET=$([ "$VSCODE_ARCH" == "x64" ] && echo "linux-alpine" || echo "alpine-arm64") + yarn gulp vscode-reh-$TARGET-min-ci + yarn gulp vscode-reh-web-$TARGET-min-ci env: GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Prebuild - - - script: | - set -e - - case $VSCODE_ARCH in - x64) - reh='vscode-reh-linux-alpine-min-ci' - rehweb='vscode-reh-web-linux-alpine-min-ci' - ;; - arm64) - reh='vscode-reh-alpine-arm64-min-ci' - rehweb='vscode-reh-web-alpine-arm64-min-ci' - ;; - esac - - yarn gulp $reh - yarn gulp $rehweb displayName: Build - script: | set -e + TARGET=$([ "$VSCODE_ARCH" == "x64" ] && echo "linux-alpine" || echo "alpine-arm64") REPO="$(pwd)" ROOT="$REPO/.." - case $VSCODE_ARCH in - x64) - PLATFORM_LINUX='linux-alpine' - ;; - arm64) - PLATFORM_LINUX='alpine-arm64' - ;; - esac - # Publish Remote Extension Host - LEGACY_SERVER_BUILD_NAME="vscode-reh-$PLATFORM_LINUX" - SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX" - SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX.tar.gz" + LEGACY_SERVER_BUILD_NAME="vscode-reh-$TARGET" + SERVER_BUILD_NAME="vscode-server-$TARGET" + SERVER_TARBALL_FILENAME="vscode-server-$TARGET.tar.gz" SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME" rm -rf $ROOT/vscode-server-*.tar.* (cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME) # Publish Remote Extension Host (Web) - LEGACY_SERVER_BUILD_NAME="vscode-reh-web-$PLATFORM_LINUX" - SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX-web" - SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX-web.tar.gz" + LEGACY_SERVER_BUILD_NAME="vscode-reh-web-$TARGET" + SERVER_BUILD_NAME="vscode-server-$TARGET-web" + SERVER_TARBALL_FILENAME="vscode-server-$TARGET-web.tar.gz" SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME" rm -rf $ROOT/vscode-server-*-web.tar.* (cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME) displayName: Prepare for publish - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) - publish: $(Agent.BuildDirectory)/vscode-server-alpine-$(VSCODE_ARCH).tar.gz artifact: vscode_server_alpine_$(VSCODE_ARCH)_archive-unsigned displayName: Publish server archive - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'x64')) + condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'x64')) - publish: $(Agent.BuildDirectory)/vscode-server-alpine-$(VSCODE_ARCH)-web.tar.gz artifact: vscode_web_alpine_$(VSCODE_ARCH)_archive-unsigned displayName: Publish web server archive - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'x64')) + condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'x64')) # Legacy x64 artifact name - publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine.tar.gz artifact: vscode_server_linux_alpine_archive-unsigned displayName: Publish x64 server archive - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), eq(variables['VSCODE_ARCH'], 'x64')) + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine-web.tar.gz artifact: vscode_web_linux_alpine_archive-unsigned displayName: Publish x64 web server archive - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), eq(variables['VSCODE_ARCH'], 'x64')) + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) diff --git a/build/azure-pipelines/cli/cli-apply-patches.yml b/build/azure-pipelines/cli/cli-apply-patches.yml new file mode 100644 index 00000000000..5c5eb829c6b --- /dev/null +++ b/build/azure-pipelines/cli/cli-apply-patches.yml @@ -0,0 +1,17 @@ +steps: + - template: ../distro/download-distro.yml + + - task: Cache@2 + inputs: + key: '"build_node_modules" | build/yarn.lock' + path: build/node_modules + cacheHitVar: BUILD_NODE_MODULES_RESTORED + displayName: Restore node_modules cache + + - script: yarn --frozen-lockfile --ignore-optional --check-files + workingDirectory: build + condition: and(succeeded(), ne(variables.BUILD_NODE_MODULES_RESTORED, 'true')) + displayName: Install pipeline build + + - script: node build/azure-pipelines/distro/apply-cli-patches + displayName: Apply distro patches diff --git a/build/azure-pipelines/cli/cli-compile-and-publish.yml b/build/azure-pipelines/cli/cli-compile-and-publish.yml index 5025994f3a2..a6468ad3ae9 100644 --- a/build/azure-pipelines/cli/cli-compile-and-publish.yml +++ b/build/azure-pipelines/cli/cli-compile-and-publish.yml @@ -6,42 +6,38 @@ parameters: - name: VSCODE_CLI_ENV type: object default: {} + - name: VSCODE_CHECK_ONLY + type: boolean + default: false steps: - - script: cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code - displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }} - workingDirectory: $(Build.SourcesDirectory)/cli - env: - CARGO_NET_GIT_FETCH_WITH_CLI: true - ${{ each pair in parameters.VSCODE_CLI_ENV }}: - ${{ pair.key }}: ${{ pair.value }} - - - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - Move-Item -Path $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code.exe -Destination "$(Build.ArtifactStagingDirectory)/${env:VSCODE_CLI_APPLICATION_NAME}.exe" - - - task: ArchiveFiles@2 - inputs: - rootFolderOrFile: $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME).exe - includeRootFolder: false - archiveType: zip - archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip - - - publish: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip - artifact: ${{ parameters.VSCODE_CLI_ARTIFACT }} - displayName: Publish ${{ parameters.VSCODE_CLI_ARTIFACT }} artifact + - ${{ if parameters.VSCODE_CHECK_ONLY }}: + - script: rustup component add clippy && cargo clippy --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code + displayName: Lint ${{ parameters.VSCODE_CLI_TARGET }} + workingDirectory: $(Build.SourcesDirectory)/cli + env: + CARGO_NET_GIT_FETCH_WITH_CLI: true + ${{ each pair in parameters.VSCODE_CLI_ENV }}: + ${{ pair.key }}: ${{ pair.value }} - ${{ else }}: - - script: | - set -e - mv $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME) + - script: cargo build --release --target ${{ parameters.VSCODE_CLI_TARGET }} --bin=code + displayName: Compile ${{ parameters.VSCODE_CLI_TARGET }} + workingDirectory: $(Build.SourcesDirectory)/cli + env: + CARGO_NET_GIT_FETCH_WITH_CLI: true + ${{ each pair in parameters.VSCODE_CLI_ENV }}: + ${{ pair.key }}: ${{ pair.value }} + + - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}: + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + Move-Item -Path $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code.exe -Destination "$(Build.ArtifactStagingDirectory)/${env:VSCODE_CLI_APPLICATION_NAME}.exe" - - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-darwin') }}: - task: ArchiveFiles@2 inputs: - rootFolderOrFile: $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME) + rootFolderOrFile: $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME).exe includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip @@ -51,14 +47,31 @@ steps: displayName: Publish ${{ parameters.VSCODE_CLI_ARTIFACT }} artifact - ${{ else }}: - - task: ArchiveFiles@2 - inputs: - rootFolderOrFile: $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME) - includeRootFolder: false - archiveType: tar - tarCompression: gz - archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz + - script: | + set -e + mv $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release/code $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME) - - publish: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz - artifact: ${{ parameters.VSCODE_CLI_ARTIFACT }} - displayName: Publish ${{ parameters.VSCODE_CLI_ARTIFACT }} artifact + - ${{ if contains(parameters.VSCODE_CLI_TARGET, '-darwin') }}: + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME) + includeRootFolder: false + archiveType: zip + archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip + + - publish: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.zip + artifact: ${{ parameters.VSCODE_CLI_ARTIFACT }} + displayName: Publish ${{ parameters.VSCODE_CLI_ARTIFACT }} artifact + + - ${{ else }}: + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: $(Build.ArtifactStagingDirectory)/$(VSCODE_CLI_APPLICATION_NAME) + includeRootFolder: false + archiveType: tar + tarCompression: gz + archiveFile: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz + + - publish: $(Build.ArtifactStagingDirectory)/${{ parameters.VSCODE_CLI_ARTIFACT }}.tar.gz + artifact: ${{ parameters.VSCODE_CLI_ARTIFACT }} + displayName: Publish ${{ parameters.VSCODE_CLI_ARTIFACT }} artifact diff --git a/build/azure-pipelines/cli/cli-darwin-sign.yml b/build/azure-pipelines/cli/cli-darwin-sign.yml index b8f9e965133..7d4cbdaecbf 100644 --- a/build/azure-pipelines/cli/cli-darwin-sign.yml +++ b/build/azure-pipelines/cli/cli-darwin-sign.yml @@ -4,11 +4,19 @@ parameters: default: [] steps: + - task: AzureKeyVault@1 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "ESRP-PKI,esrp-aad-username,esrp-aad-password" + - task: UseDotNet@2 inputs: - version: 2.x + version: 6.x - task: EsrpClientTool@1 + continueOnError: true displayName: Download ESRPClient - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: @@ -18,14 +26,10 @@ steps: artifact: ${{ target }} path: $(Build.ArtifactStagingDirectory)/pkg/${{ target }} - - script: | - set -e - node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" + - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" displayName: Codesign - - script: | - set -e - node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" + - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/pkg "*.zip" displayName: Notarize - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: diff --git a/build/azure-pipelines/cli/cli-win32-sign.yml b/build/azure-pipelines/cli/cli-win32-sign.yml index 810dd2f4467..fe46171aaac 100644 --- a/build/azure-pipelines/cli/cli-win32-sign.yml +++ b/build/azure-pipelines/cli/cli-win32-sign.yml @@ -12,9 +12,8 @@ steps: SecretsFilter: "ESRP-PKI,esrp-aad-username,esrp-aad-password" - task: UseDotNet@2 - displayName: "Use .NET" inputs: - version: 3.x + version: 6.x - task: EsrpClientTool@1 displayName: "Use ESRP client" @@ -42,10 +41,7 @@ steps: echo "##vso[task.setvariable variable=EsrpCliDllPath]$EsrpCliDllPath" displayName: Find ESRP CLI - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/sign "*.exe" } + - powershell: node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Build.ArtifactStagingDirectory)/sign "*.exe" displayName: "Code sign" - ${{ each target in parameters.VSCODE_CLI_ARTIFACTS }}: diff --git a/build/azure-pipelines/cli/prepare.js b/build/azure-pipelines/cli/prepare.js index d5a304d185e..bd11bc6a0a4 100644 --- a/build/azure-pipelines/cli/prepare.js +++ b/build/azure-pipelines/cli/prepare.js @@ -16,12 +16,12 @@ if (isOSS) { productJsonPath = path.join(root, 'product.json'); } else { - productJsonPath = path.join(root, 'quality', process.env.VSCODE_QUALITY, 'product.json'); + productJsonPath = path.join(root, 'mixin', process.env.VSCODE_QUALITY, 'product.json'); } console.error('Loading product.json from', productJsonPath); const product = readJSON(productJsonPath); -const allProductsAndQualities = isOSS ? [product] : fs.readdirSync(path.join(root, 'quality')) - .map(quality => ({ quality, json: readJSON(path.join(root, 'quality', quality, 'product.json')) })); +const allProductsAndQualities = isOSS ? [product] : fs.readdirSync(path.join(root, 'mixin')) + .map(quality => ({ quality, json: readJSON(path.join(root, 'mixin', quality, 'product.json')) })); const commit = (0, getVersion_1.getVersion)(root); const makeQualityMap = (m) => { const output = {}; @@ -35,6 +35,7 @@ const makeQualityMap = (m) => { */ const setLauncherEnvironmentVars = () => { const vars = new Map([ + ['VSCODE_CLI_ALREADY_PREPARED', 'true'], ['VSCODE_CLI_REMOTE_LICENSE_TEXT', product.serverLicense?.join('\\n')], ['VSCODE_CLI_REMOTE_LICENSE_PROMPT', product.serverLicensePrompt], ['VSCODE_CLI_AI_KEY', product.aiConfig?.cliKey], @@ -48,7 +49,10 @@ const setLauncherEnvironmentVars = () => { ['VSCODE_CLI_DOCUMENTATION_URL', product.documentationUrl], ['VSCODE_CLI_APPLICATION_NAME', product.applicationName], ['VSCODE_CLI_EDITOR_WEB_URL', product.tunnelApplicationConfig?.editorWebUrl], + ['VSCODE_CLI_TUNNEL_SERVICE_MUTEX', product.win32TunnelServiceMutex], + ['VSCODE_CLI_TUNNEL_CLI_MUTEX', product.win32TunnelMutex], ['VSCODE_CLI_COMMIT', commit], + ['VSCODE_CLI_DEFAULT_PARENT_DATA_DIR', product.dataFolderName], [ 'VSCODE_CLI_WIN32_APP_IDS', !isOSS && JSON.stringify(makeQualityMap(json => Object.entries(json) @@ -86,4 +90,4 @@ const setLauncherEnvironmentVars = () => { if (require.main === module) { setLauncherEnvironmentVars(); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXBhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxxREFBa0Q7QUFDbEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxREFBcUQ7QUFFckQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUU3RSxJQUFJLGVBQXVCLENBQUM7QUFDNUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFDbEYsSUFBSSxLQUFLLEVBQUU7SUFDVixlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7Q0FDbEQ7S0FBTTtJQUNOLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7Q0FDMUY7QUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMxQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztLQUM1RixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQztBQUVoQyxNQUFNLGNBQWMsR0FBRyxDQUFJLENBQTJDLEVBQXFCLEVBQUU7SUFDNUYsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksdUJBQXVCLEVBQUU7UUFDeEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLEVBQUU7SUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDcEIsQ0FBQyxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxDQUFDLGtDQUFrQyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUNqRSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQy9DLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7UUFDekQsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzNDLENBQUMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNqRCxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDdkMsQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzVDLENBQUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUMxQyxDQUFDLHFDQUFxQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMxRCxDQUFDLDZCQUE2QixFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDeEQsQ0FBQywyQkFBMkIsRUFBRSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsWUFBWSxDQUFDO1FBQzVFLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDO1FBQzdCO1lBQ0MsMEJBQTBCO1lBQzFCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQ3ZCLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2lCQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN6RDtTQUNEO1FBQ0Q7WUFDQywwQkFBMEI7WUFDMUIsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0Q7UUFDRDtZQUNDLGlDQUFpQztZQUNqQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN0RTtRQUNEO1lBQ0MsNEJBQTRCO1lBQzVCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDNUU7UUFDRDtZQUNDLGtDQUFrQztZQUNsQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNsRTtLQUNELENBQUMsQ0FBQztJQUVILElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsS0FBSyxNQUFNLEVBQUU7UUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUQ7U0FBTTtRQUNOLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDaEMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDL0Q7U0FDRDtLQUNEO0FBRUYsQ0FBQyxDQUFDO0FBRUYsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUM1QiwwQkFBMEIsRUFBRSxDQUFDO0NBQzdCIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXBhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxxREFBa0Q7QUFDbEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxREFBcUQ7QUFFckQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUU3RSxJQUFJLGVBQXVCLENBQUM7QUFDNUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFDbEYsSUFBSSxLQUFLLEVBQUU7SUFDVixlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7Q0FDbEQ7S0FBTTtJQUNOLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7Q0FDeEY7QUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMxQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFD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 \ No newline at end of file diff --git a/build/azure-pipelines/cli/prepare.ts b/build/azure-pipelines/cli/prepare.ts index d0ac91cfbf4..7157dae3ecd 100644 --- a/build/azure-pipelines/cli/prepare.ts +++ b/build/azure-pipelines/cli/prepare.ts @@ -16,13 +16,13 @@ const isOSS = process.env.VSCODE_QUALITY === 'oss' || !process.env.VSCODE_QUALIT if (isOSS) { productJsonPath = path.join(root, 'product.json'); } else { - productJsonPath = path.join(root, 'quality', process.env.VSCODE_QUALITY!, 'product.json'); + productJsonPath = path.join(root, 'mixin', process.env.VSCODE_QUALITY!, 'product.json'); } console.error('Loading product.json from', productJsonPath); const product = readJSON(productJsonPath); -const allProductsAndQualities = isOSS ? [product] : fs.readdirSync(path.join(root, 'quality')) - .map(quality => ({ quality, json: readJSON(path.join(root, 'quality', quality, 'product.json')) })); +const allProductsAndQualities = isOSS ? [product] : fs.readdirSync(path.join(root, 'mixin')) + .map(quality => ({ quality, json: readJSON(path.join(root, 'mixin', quality, 'product.json')) })); const commit = getVersion(root); const makeQualityMap = (m: (productJson: any, quality: string) => T): Record => { @@ -38,6 +38,7 @@ const makeQualityMap = (m: (productJson: any, quality: string) => T): Record< */ const setLauncherEnvironmentVars = () => { const vars = new Map([ + ['VSCODE_CLI_ALREADY_PREPARED', 'true'], ['VSCODE_CLI_REMOTE_LICENSE_TEXT', product.serverLicense?.join('\\n')], ['VSCODE_CLI_REMOTE_LICENSE_PROMPT', product.serverLicensePrompt], ['VSCODE_CLI_AI_KEY', product.aiConfig?.cliKey], @@ -51,7 +52,10 @@ const setLauncherEnvironmentVars = () => { ['VSCODE_CLI_DOCUMENTATION_URL', product.documentationUrl], ['VSCODE_CLI_APPLICATION_NAME', product.applicationName], ['VSCODE_CLI_EDITOR_WEB_URL', product.tunnelApplicationConfig?.editorWebUrl], + ['VSCODE_CLI_TUNNEL_SERVICE_MUTEX', product.win32TunnelServiceMutex], + ['VSCODE_CLI_TUNNEL_CLI_MUTEX', product.win32TunnelMutex], ['VSCODE_CLI_COMMIT', commit], + ['VSCODE_CLI_DEFAULT_PARENT_DATA_DIR', product.dataFolderName], [ 'VSCODE_CLI_WIN32_APP_IDS', !isOSS && JSON.stringify( diff --git a/build/azure-pipelines/common/computeNodeModulesCacheKey.js b/build/azure-pipelines/common/computeNodeModulesCacheKey.js index 062754cfce3..b5df67c04ea 100644 --- a/build/azure-pipelines/common/computeNodeModulesCacheKey.js +++ b/build/azure-pipelines/common/computeNodeModulesCacheKey.js @@ -21,7 +21,8 @@ for (const dir of dirs) { dependencies: packageJson.dependencies, devDependencies: packageJson.devDependencies, optionalDependencies: packageJson.optionalDependencies, - resolutions: packageJson.resolutions + resolutions: packageJson.resolutions, + distro: packageJson.distro }; shasum.update(JSON.stringify(relevantPackageJsonSections)); const yarnLockPath = path.join(ROOT, dir, 'yarn.lock'); @@ -32,4 +33,4 @@ for (let i = 2; i < process.argv.length; i++) { shasum.update(process.argv[i]); } process.stdout.write(shasum.digest('hex')); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZU5vZGVNb2R1bGVzQ2FjaGVLZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21wdXRlTm9kZU1vZHVsZXNDYWNoZUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUUzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUUvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVsRSwyQ0FBMkM7QUFDM0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7SUFDdkIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sMkJBQTJCLEdBQUc7UUFDbkMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1FBQ3RDLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZTtRQUM1QyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO1FBQ3RELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztLQUNwQyxDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUUzRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Q0FDN0M7QUFFRCx1Q0FBdUM7QUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CO0FBRUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZU5vZGVNb2R1bGVzQ2FjaGVLZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21wdXRlTm9kZU1vZHVsZXNDYWNoZUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUUzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUUvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVsRSwyQ0FBMkM7QUFDM0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7SUFDdkIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sMkJBQTJCLEdBQUc7UUFDbkMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1FBQ3RDLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZTtRQUM1QyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO1FBQ3RELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztRQUNwQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07S0FDMUIsQ0FBQztJQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7SUFFM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0NBQzdDO0FBRUQsdUNBQXVDO0FBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQjtBQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/build/azure-pipelines/common/computeNodeModulesCacheKey.ts b/build/azure-pipelines/common/computeNodeModulesCacheKey.ts index 751f928da9f..f9d70503685 100644 --- a/build/azure-pipelines/common/computeNodeModulesCacheKey.ts +++ b/build/azure-pipelines/common/computeNodeModulesCacheKey.ts @@ -24,7 +24,8 @@ for (const dir of dirs) { dependencies: packageJson.dependencies, devDependencies: packageJson.devDependencies, optionalDependencies: packageJson.optionalDependencies, - resolutions: packageJson.resolutions + resolutions: packageJson.resolutions, + distro: packageJson.distro }; shasum.update(JSON.stringify(relevantPackageJsonSections)); diff --git a/build/azure-pipelines/common/createAsset.js b/build/azure-pipelines/common/createAsset.js index df99da7e4dd..c46745f351e 100644 --- a/build/azure-pipelines/common/createAsset.js +++ b/build/azure-pipelines/common/createAsset.js @@ -143,7 +143,7 @@ async function main() { const platform = getPlatform(product, os, arch, unprocessedType); const type = getRealType(unprocessedType); const quality = getEnv('VSCODE_QUALITY'); - const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION'); + const commit = getEnv('BUILD_SOURCEVERSION'); console.log('Creating asset...'); const stat = await new Promise((c, e) => fs.stat(filePath, (err, stat) => err ? e(err) : c(stat))); const size = stat.size; @@ -230,4 +230,4 @@ main().then(() => { console.error(err); process.exit(1); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBc3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUV6QixpQ0FBaUM7QUFDakMsc0RBQXdJO0FBQ3hJLDZCQUE2QjtBQUM3QiwwQ0FBNkM7QUFDN0MsOENBQXlEO0FBQ3pELG1DQUFnQztBQWFoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pCO0FBRUQsd0ZBQXdGO0FBQ3hGLFNBQVMsV0FBVyxDQUFDLE9BQWUsRUFBRSxFQUFVLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFDM0UsUUFBUSxFQUFFLEVBQUU7UUFDWCxLQUFLLE9BQU87WUFDWCxRQUFRLE9BQU8sRUFBRTtnQkFDaEIsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7b0JBQzFELFFBQVEsSUFBSSxFQUFFO3dCQUNiLEtBQUssU0FBUzs0QkFDYixPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUM7d0JBQzNCLEtBQUssT0FBTzs0QkFDWCxPQUFPLEtBQUssQ0FBQzt3QkFDZCxLQUFLLFlBQVk7NEJBQ2hCLE9BQU8sR0FBRyxLQUFLLE9BQU8sQ0FBQzt3QkFDeEI7NEJBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsT0FBTyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDbkU7aUJBQ0Q7Z0JBQ0QsS0FBSyxRQUFRO29CQUNaLElBQUksSUFBSSxLQUFLLE9BQU8s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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBc3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUV6QixpQ0FBaUM7QUFDakMsc0RBQXdJO0FBQ3hJLDZCQUE2QjtBQUM3QiwwQ0FBNkM7QUFDN0MsOENBQXlEO0FBQ3pELG1DQUFnQztBQWFoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pCO0FBRUQsd0ZBQXdGO0FBQ3hGLFNBQVMsV0FBVyxDQUFDLE9BQWUsRUFBRSxFQUFVLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFDM0UsUUFBUSxFQUFFLEVBQUU7UUFDWCxLQUFLLE9BQU87WUFDWCxRQUFRLE9BQU8sRUFBRTtnQkFDaEIsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7b0JBQzFELFFBQVEsSUFBSSxFQUFFO3dCQUNiLEtBQUssU0FBUzs0QkFDYixPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUM7d0JBQzNCLEtBQUssT0FBTzs0QkFDWCxPQUFPLEtBQUssQ0FBQzt3QkFDZCxLQUFLLFlBQVk7NEJBQ2hCLE9BQU8sR0FBRyxLQUFLLE9BQU8sQ0FBQzt3QkFDeEI7NEJBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsT0FBTyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDbkU7aUJBQ0Q7Z0JBQ0QsS0FBSyxRQUFRO29CQUNaLElBQUksSUFBSSxLQUFLLE9BQU8s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 \ No newline at end of file diff --git a/build/azure-pipelines/common/createAsset.ts b/build/azure-pipelines/common/createAsset.ts index 139338dd24b..2f3f27c1d5b 100644 --- a/build/azure-pipelines/common/createAsset.ts +++ b/build/azure-pipelines/common/createAsset.ts @@ -163,7 +163,7 @@ async function main(): Promise { const platform = getPlatform(product, os, arch, unprocessedType); const type = getRealType(unprocessedType); const quality = getEnv('VSCODE_QUALITY'); - const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION'); + const commit = getEnv('BUILD_SOURCEVERSION'); console.log('Creating asset...'); diff --git a/build/azure-pipelines/common/createBuild.js b/build/azure-pipelines/common/createBuild.js index ea48749d24b..23f7bb4fb90 100644 --- a/build/azure-pipelines/common/createBuild.js +++ b/build/azure-pipelines/common/createBuild.js @@ -21,9 +21,9 @@ function getEnv(name) { async function main() { const [, , _version] = process.argv; const quality = getEnv('VSCODE_QUALITY'); - const commit = process.env['VSCODE_DISTRO_COMMIT']?.trim() || getEnv('BUILD_SOURCEVERSION'); + const commit = getEnv('BUILD_SOURCEVERSION'); const queuedBy = getEnv('BUILD_QUEUEDBY'); - const sourceBranch = process.env['VSCODE_DISTRO_REF']?.trim() || getEnv('BUILD_SOURCEBRANCH'); + const sourceBranch = getEnv('BUILD_SOURCEBRANCH'); const version = _version + (quality === 'stable' ? '' : `-${quality}`); console.log('Creating build...'); console.log('Quality:', quality); @@ -34,7 +34,7 @@ async function main() { timestamp: (new Date()).getTime(), version, isReleased: false, - private: Boolean(process.env['VSCODE_DISTRO_REF']?.trim()), + private: process.env['VSCODE_PRIVATE_BUILD']?.toLowerCase() === 'true', sourceBranch, queuedBy, assets: [], @@ -52,4 +52,4 @@ main().then(() => { console.error(err); process.exit(1); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVCdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDhDQUF5RDtBQUN6RCwwQ0FBNkM7QUFDN0MsbUNBQWdDO0FBRWhDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakI7QUFFRCxTQUFTLE1BQU0sQ0FBQyxJQUFZO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFakMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDeEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNsQixNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sT0FBTyxHQUFHLFFBQVEsR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXZFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRztRQUNiLEVBQUUsRUFBRSxNQUFNO1FBQ1YsU0FBUyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNqQyxPQUFPO1FBQ1AsVUFBVSxFQUFFLEtBQUs7UUFDakIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDMUQsWUFBWTtRQUNaLFFBQVE7UUFDUixNQUFNLEVBQUUsRUFBRTtRQUNWLE9BQU8sRUFBRSxFQUFFO0tBQ1gsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksaUNBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFFLENBQUMsQ0FBQztJQUN6SixNQUFNLE1BQU0sR0FBRyxJQUFJLHFCQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDekcsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3JFLE1BQU0sSUFBQSxhQUFLLEVBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVCdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDhDQUF5RDtBQUN6RCwwQ0FBNkM7QUFDN0MsbUNBQWdDO0FBRWhDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakI7QUFFRCxTQUFTLE1BQU0sQ0FBQyxJQUFZO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFakMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDeEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNsQixNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxRQUFRLEdBQUcsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUV2RSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFL0IsTUFBTSxLQUFLLEdBQUc7UUFDYixFQUFFLEVBQUUsTUFBTTtRQUNWLFNBQVMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7UUFDakMsT0FBTztRQUNQLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssTUFBTTtRQUN0RSxZQUFZO1FBQ1osUUFBUTtRQUNSLE1BQU0sRUFBRSxFQUFFO1FBQ1YsT0FBTyxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxpQ0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUUsQ0FBQyxDQUFDO0lBQ3pKLE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN6RyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckUsTUFBTSxJQUFBLGFBQUssRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMifQ== \ No newline at end of file diff --git a/build/azure-pipelines/common/createBuild.ts b/build/azure-pipelines/common/createBuild.ts index 512f3610116..afc5f59003a 100644 --- a/build/azure-pipelines/common/createBuild.ts +++ b/build/azure-pipelines/common/createBuild.ts @@ -25,9 +25,9 @@ function getEnv(name: string): string { async function main(): Promise { const [, , _version] = process.argv; const quality = getEnv('VSCODE_QUALITY'); - const commit = process.env['VSCODE_DISTRO_COMMIT']?.trim() || getEnv('BUILD_SOURCEVERSION'); + const commit = getEnv('BUILD_SOURCEVERSION'); const queuedBy = getEnv('BUILD_QUEUEDBY'); - const sourceBranch = process.env['VSCODE_DISTRO_REF']?.trim() || getEnv('BUILD_SOURCEBRANCH'); + const sourceBranch = getEnv('BUILD_SOURCEBRANCH'); const version = _version + (quality === 'stable' ? '' : `-${quality}`); console.log('Creating build...'); @@ -40,7 +40,7 @@ async function main(): Promise { timestamp: (new Date()).getTime(), version, isReleased: false, - private: Boolean(process.env['VSCODE_DISTRO_REF']?.trim()), + private: process.env['VSCODE_PRIVATE_BUILD']?.toLowerCase() === 'true', sourceBranch, queuedBy, assets: [], diff --git a/build/azure-pipelines/common/install-builtin-extensions.yml b/build/azure-pipelines/common/install-builtin-extensions.yml new file mode 100644 index 00000000000..c1ee18d05b5 --- /dev/null +++ b/build/azure-pipelines/common/install-builtin-extensions.yml @@ -0,0 +1,24 @@ +steps: + - pwsh: mkdir .build -ea 0 + condition: and(succeeded(), contains(variables['Agent.OS'], 'windows')) + displayName: Create .build folder + + - script: mkdir -p .build + condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows'))) + displayName: Create .build folder + + - script: node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash + displayName: Prepare built-in extensions cache key + + - task: Cache@2 + inputs: + key: '"builtin-extensions" | .build/builtindepshash' + path: .build/builtInExtensions + cacheHitVar: BUILTIN_EXTENSIONS_RESTORED + displayName: Restore built-in extensions cache + + - script: node build/lib/builtInExtensions.js + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + condition: and(succeeded(), ne(variables.BUILTIN_EXTENSIONS_RESTORED, 'true')) + displayName: Download built-in extensions diff --git a/build/azure-pipelines/common/releaseBuild.js b/build/azure-pipelines/common/releaseBuild.js index d56900b0e43..5ba4e218ae0 100644 --- a/build/azure-pipelines/common/releaseBuild.js +++ b/build/azure-pipelines/common/releaseBuild.js @@ -29,7 +29,7 @@ async function getConfig(client, quality) { return res.resources[0]; } async function main(force) { - const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION'); + const commit = getEnv('BUILD_SOURCEVERSION'); const quality = getEnv('VSCODE_QUALITY'); const aadCredentials = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']); const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], aadCredentials }); @@ -53,4 +53,4 @@ main(force === 'true').then(() => { console.error(err); process.exit(1); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZUJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVsZWFzZUJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcsOENBQXlEO0FBQ3pELDBDQUE2QztBQUM3QyxtQ0FBZ0M7QUFFaEMsU0FBUyxNQUFNLENBQUMsSUFBWTtJQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBT0QsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzNDLE9BQU87UUFDTixFQUFFLEVBQUUsT0FBTztRQUNYLE1BQU0sRUFBRSxLQUFLO0tBQ2IsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQW9CLEVBQUUsT0FBZTtJQUM3RCxNQUFNLEtBQUssR0FBRyx1Q0FBdUMsT0FBTyxHQUFHLENBQUM7SUFFaEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTlGLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQy9CLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDcEM7SUFFRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFXLENBQUM7QUFDbkMsQ0FBQztBQUVELEtBQUssVUFBVSxJQUFJLENBQUMsS0FBYztJQUNqQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDcEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFekMsTUFBTSxjQUFjLEdBQUcsSUFBSSxpQ0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUUsQ0FBQyxDQUFDO0lBQ3pKLE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUV6RyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1gsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWhELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLE9BQU8sYUFBYSxDQUFDLENBQUM7WUFDdEUsT0FBTztTQUNQO0tBQ0Q7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixNQUFNLEtBQUssQ0FBQyxDQUFDO0lBRTVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNyRSxNQUFNLElBQUEsYUFBSyxFQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQsTUFBTSxDQUFDLEVBQUUsQUFBRCxFQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFakMsSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtJQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZUJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVsZWFzZUJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcsOENBQXlEO0FBQ3pELDBDQUE2QztBQUM3QyxtQ0FBZ0M7QUFFaEMsU0FBUyxNQUFNLENBQUMsSUFBWTtJQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBT0QsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzNDLE9BQU87UUFDTixFQUFFLEVBQUUsT0FBTztRQUNYLE1BQU0sRUFBRSxLQUFLO0tBQ2IsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQW9CLEVBQUUsT0FBZTtJQUM3RCxNQUFNLEtBQUssR0FBRyx1Q0FBdUMsT0FBTyxHQUFHLENBQUM7SUFFaEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTlGLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQy9CLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDcEM7SUFFRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFXLENBQUM7QUFDbkMsQ0FBQztBQUVELEtBQUssVUFBVSxJQUFJLENBQUMsS0FBYztJQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLGlDQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBRSxDQUFDLENBQUM7SUFDekosTUFBTSxNQUFNLEdBQUcsSUFBSSxxQkFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBRXpHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDWCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsT0FBTyxhQUFhLENBQUMsQ0FBQztZQUN0RSxPQUFPO1NBQ1A7S0FDRDtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3JFLE1BQU0sSUFBQSxhQUFLLEVBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFFRCxNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUVqQyxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file diff --git a/build/azure-pipelines/common/releaseBuild.ts b/build/azure-pipelines/common/releaseBuild.ts index 68476cc2952..fda389f3455 100644 --- a/build/azure-pipelines/common/releaseBuild.ts +++ b/build/azure-pipelines/common/releaseBuild.ts @@ -42,7 +42,7 @@ async function getConfig(client: CosmosClient, quality: string): Promise } async function main(force: boolean): Promise { - const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION'); + const commit = getEnv('BUILD_SOURCEVERSION'); const quality = getEnv('VSCODE_QUALITY'); const aadCredentials = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!); diff --git a/build/azure-pipelines/common/sign.js b/build/azure-pipelines/common/sign.js index 8068ed47e93..fc522d4ef60 100644 --- a/build/azure-pipelines/common/sign.js +++ b/build/azure-pipelines/common/sign.js @@ -7,8 +7,27 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.main = void 0; const cp = require("child_process"); const fs = require("fs"); -const tmp = require("tmp"); +const path = require("path"); +const os = require("os"); const crypto = require("crypto"); +class Temp { + _files = []; + tmpNameSync() { + const file = path.join(os.tmpdir(), crypto.randomBytes(20).toString('hex')); + this._files.push(file); + return file; + } + dispose() { + for (const file of this._files) { + try { + fs.unlinkSync(file); + } + catch (err) { + // noop + } + } + } +} function getParams(type) { switch (type) { case 'windows': @@ -26,7 +45,8 @@ function getParams(type) { } } function main([esrpCliPath, type, cert, username, password, folderPath, pattern]) { - tmp.setGracefulCleanup(); + const tmp = new Temp(); + process.on('exit', () => tmp.dispose()); const patternPath = tmp.tmpNameSync(); fs.writeFileSync(patternPath, pattern); const paramsPath = tmp.tmpNameSync(); @@ -85,4 +105,4 @@ if (require.main === module) { main(process.argv.slice(2)); process.exit(0); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsb0NBQW9DO0FBQ3BDLHlCQUF5QjtBQUN6QiwyQkFBMkI7QUFDM0IsaUNBQWlDO0FBRWpDLFNBQVMsU0FBUyxDQUFDLElBQVk7SUFDOUIsUUFBUSxJQUFJLEVBQUU7UUFDYixLQUFLLFNBQVM7WUFDYixPQUFPLHdzQkFBd3NCLENBQUM7UUFDanRCLEtBQUssY0FBYztZQUNsQixPQUFPLGltQkFBaW1CLENBQUM7UUFDMW1CLEtBQUssS0FBSztZQUNULE9BQU8sK0hBQStILENBQUM7UUFDeEksS0FBSyxhQUFhO1lBQ2pCLE9BQU8sa01BQWtNLENBQUM7UUFDM00sS0FBSyxpQkFBaUI7WUFDckIsT0FBTywySEFBMkgsQ0FBQztRQUNwSTtZQUNDLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLFlBQVksQ0FBQyxDQUFDO0tBQ2hEO0FBQ0YsQ0FBQztBQUVELFNBQWdCLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBVztJQUNoRyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUV6QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFdkMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWhHLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLFNBQVMsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RSxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RCxVQUFVLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLEVBQUUsQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sSUFBSSxHQUFHO1FBQ1osV0FBVztRQUNYLFdBQVc7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSxhQUFhO1FBQ25CLElBQUksRUFBRSxjQUFjO1FBQ3BCLElBQUksRUFBRSxVQUFVO1FBQ2hCLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxPQUFPO1FBQ2IsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixJQUFJLEVBQUUsWUFBWTtRQUNsQixJQUFJLEVBQUUsbUNBQW1DO1FBQ3pDLElBQUksRUFBRSxrQkFBa0I7UUFDeEIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsS0FBSztRQUNYLElBQUksRUFBRSxJQUFJO1FBQ1YsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLElBQUksRUFBRSxHQUFHO1FBQ1QsSUFBSSxFQUFFLFdBQVc7UUFDakIsSUFBSSxFQUFFLDJCQUEyQjtRQUNqQyxJQUFJLEVBQUUsR0FBRztRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLE9BQU87S0FDYixDQUFDO0lBRUYsSUFBSTtRQUNILEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ3REO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoQjtBQUNGLENBQUM7QUE1REQsb0JBNERDO0FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsb0NBQW9DO0FBQ3BDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLGlDQUFpQztBQUVqQyxNQUFNLElBQUk7SUFDRCxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTlCLFdBQVc7UUFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELE9BQU87UUFDTixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSTtnQkFDSCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BCO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ2IsT0FBTzthQUNQO1NBQ0Q7SUFDRixDQUFDO0NBQ0Q7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzlCLFFBQVEsSUFBSSxFQUFFO1FBQ2IsS0FBSyxTQUFTO1lBQ2IsT0FBTyx3c0JBQXdzQixDQUFDO1FBQ2p0QixLQUFLLGNBQWM7WUFDbEIsT0FBTyxpbUJBQWltQixDQUFDO1FBQzFtQixLQUFLLEtBQUs7WUFDVCxPQUFPLCtIQUErSCxDQUFDO1FBQ3hJLEtBQUssYUFBYTtZQUNqQixPQUFPLGtNQUFrTSxDQUFDO1FBQzNNLEtBQUssaUJBQWlCO1lBQ3JCLE9BQU8sMkhBQTJILENBQUM7UUFDcEk7WUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxZQUFZLENB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 \ No newline at end of file diff --git a/build/azure-pipelines/common/sign.ts b/build/azure-pipelines/common/sign.ts index 7f1916d26a2..955c9389c02 100644 --- a/build/azure-pipelines/common/sign.ts +++ b/build/azure-pipelines/common/sign.ts @@ -5,9 +5,30 @@ import * as cp from 'child_process'; import * as fs from 'fs'; -import * as tmp from 'tmp'; +import * as path from 'path'; +import * as os from 'os'; import * as crypto from 'crypto'; +class Temp { + private _files: string[] = []; + + tmpNameSync(): string { + const file = path.join(os.tmpdir(), crypto.randomBytes(20).toString('hex')); + this._files.push(file); + return file; + } + + dispose(): void { + for (const file of this._files) { + try { + fs.unlinkSync(file); + } catch (err) { + // noop + } + } + } +} + function getParams(type: string): string { switch (type) { case 'windows': @@ -26,7 +47,8 @@ function getParams(type: string): string { } export function main([esrpCliPath, type, cert, username, password, folderPath, pattern]: string[]) { - tmp.setGracefulCleanup(); + const tmp = new Temp(); + process.on('exit', () => tmp.dispose()); const patternPath = tmp.tmpNameSync(); fs.writeFileSync(patternPath, pattern); diff --git a/build/azure-pipelines/common/telemetry-config.json b/build/azure-pipelines/common/telemetry-config.json index fcba1e042ba..46c8ef7311d 100644 --- a/build/azure-pipelines/common/telemetry-config.json +++ b/build/azure-pipelines/common/telemetry-config.json @@ -49,16 +49,6 @@ "excludedDirs": [], "applyEndpoints": true }, - { - "eventPrefix": "ms-vscode.node2/", - "sourceDirs": [ - "vscode-chrome-debug-core", - "vscode-node-debug2" - ], - "excludedDirs": [], - "applyEndpoints": true, - "patchDebugEvents": true - }, { "eventPrefix": "ms-vscode.node/", "sourceDirs": [ @@ -69,4 +59,4 @@ "applyEndpoints": true, "patchDebugEvents": true } -] \ No newline at end of file +] diff --git a/build/azure-pipelines/config/tsaoptions.json b/build/azure-pipelines/config/tsaoptions.json index 560d0c2513a..fa8e182d8f3 100644 --- a/build/azure-pipelines/config/tsaoptions.json +++ b/build/azure-pipelines/config/tsaoptions.json @@ -1,12 +1,21 @@ { - "instanceUrl": "https://msazure.visualstudio.com/defaultcollection", - "projectName": "One", - "areaPath": "One\\VSCode\\Client", - "iterationPath": "One", + "codebaseName": "devdiv_vscode-client", + "ppe": false, "notificationAliases": [ - "sbatten@microsoft.com" + "sbatten@microsoft.com" ], - "ppe": "false", - "template": "TFSMSAzure", - "codebaseName": "vscode-client" + "codebaseAdmins": [ + "REDMOND\\stbatt", + "REDMOND\\monacotools" + ], + "instanceUrl": "https://devdiv.visualstudio.com/defaultcollection", + "projectName": "DevDiv", + "areaPath": "DevDiv\\VS Code (compliance tracking only)\\Visual Studio Code Client", + "notifyAlways": true, + "template": "TFSDEVDIV", + "tools": [ + "BinSkim", + "CredScan", + "CodeQL" + ] } diff --git a/build/azure-pipelines/darwin/app-entitlements.plist b/build/azure-pipelines/darwin/app-entitlements.plist index 432c66c1dff..4073eafcf56 100644 --- a/build/azure-pipelines/darwin/app-entitlements.plist +++ b/build/azure-pipelines/darwin/app-entitlements.plist @@ -4,12 +4,6 @@ com.apple.security.cs.allow-jit - com.apple.security.cs.allow-unsigned-executable-memory - - com.apple.security.cs.allow-dyld-environment-variables - - com.apple.security.cs.disable-library-validation - com.apple.security.device.audio-input com.apple.security.device.camera diff --git a/build/azure-pipelines/darwin/cli-build-darwin.yml b/build/azure-pipelines/darwin/cli-build-darwin.yml index f4b30758bdd..8d98f0e93aa 100644 --- a/build/azure-pipelines/darwin/cli-build-darwin.yml +++ b/build/azure-pipelines/darwin/cli-build-darwin.yml @@ -7,36 +7,38 @@ parameters: - name: VSCODE_BUILD_MACOS_ARM64 type: boolean default: false + - name: VSCODE_CHECK_ONLY + type: boolean + default: false steps: + - task: NodeTool@0 + inputs: + versionSpec: "16.x" + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - template: ../cli/cli-apply-patches.yml + - task: Npm@1 displayName: Download openssl prebuilt inputs: command: custom - customCommand: pack @vscode-internal/openssl-prebuilt@0.0.3 + customCommand: pack @vscode-internal/openssl-prebuilt@0.0.8 customRegistry: useFeed - customFeed: 'Monaco/openssl-prebuilt' + customFeed: "Monaco/openssl-prebuilt" workingDir: $(Build.ArtifactStagingDirectory) - script: | set -e mkdir $(Build.ArtifactStagingDirectory)/openssl - tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.3.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl + tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.8.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl displayName: Extract openssl prebuilt - - task: NodeTool@0 - inputs: - versionSpec: "16.x" - - - template: ../mixin-distro-posix.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - - - script: | - set -e - node build/azure-pipelines/cli/prepare.js + - script: node build/azure-pipelines/cli/prepare.js displayName: Prepare CLI build env: + VSCODE_CLI_PREPARE_ROOT: $(Build.SourcesDirectory)/.build/distro + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} GITHUB_TOKEN: "$(github-distro-mixin-password)" - template: ../cli/install-rust-posix.yml @@ -52,15 +54,17 @@ steps: parameters: VSCODE_CLI_TARGET: x86_64-apple-darwin VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_x64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: - OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/lib - OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/include + OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/lib + OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/include - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: - template: ../cli/cli-compile-and-publish.yml parameters: VSCODE_CLI_TARGET: aarch64-apple-darwin VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_arm64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: - OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/lib - OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/include + OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/lib + OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/include diff --git a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml index 4557f65b99e..ec9ac07e606 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml @@ -9,47 +9,42 @@ steps: inputs: versionSpec: "16.x" - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" + - script: node build/setup-npm-registry.js $NPM_REGISTRY build + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Registry - script: | set -e npm config set registry "$NPM_REGISTRY" --location=project npm config set always-auth=true --location=project yarn config set registry "$NPM_REGISTRY" - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + workingDirectory: build + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM & Yarn - task: npmAuthenticate@0 inputs: - workingFile: .npmrc - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + workingFile: build/.npmrc + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Authentication - - script: node build/setup-npm-registry.js $NPM_REGISTRY - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Registry - - script: | set -e for i in {1..5}; do # try 5 times - yarn --cwd build --frozen-lockfile --check-files && break + yarn --frozen-lockfile --check-files && break if [ $i -eq 3 ]; then echo "Yarn failed too many times" >&2 exit 1 fi echo "Yarn failed $i, trying again..." done + workingDirectory: build displayName: Install build dependencies - template: ../cli/cli-darwin-sign.yml parameters: VSCODE_CLI_ARTIFACTS: - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: - - unsigned_vscode_cli_darwin_x64_cli + - unsigned_vscode_cli_darwin_x64_cli - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}: - - unsigned_vscode_cli_darwin_arm64_cli + - unsigned_vscode_cli_darwin_arm64_cli diff --git a/build/azure-pipelines/darwin/product-build-darwin-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-sign.yml index 4b9fe5487a1..076788581c0 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-sign.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-sign.yml @@ -3,147 +3,32 @@ steps: inputs: versionSpec: "16.x" + - task: UseDotNet@2 + inputs: + version: 6.x + + - task: EsrpClientTool@1 + continueOnError: true + displayName: Download ESRPClient + - task: AzureKeyVault@1 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" - - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - - script: node build/setup-npm-registry.js $NPM_REGISTRY - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Registry - - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags - - - task: Cache@2 - inputs: - key: "nodeModules | $(Agent.OS) | .build/yarnlockhash" - path: .build/node_modules_cache - cacheHitVar: NODE_MODULES_RESTORED - displayName: Restore node_modules cache - - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz - displayName: Extract node_modules cache - condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) - - - script: | - set -e - npm install -g node-gyp@latest - node-gyp --version - displayName: Update node-gyp - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - - script: | - set -e - npm config set registry "$NPM_REGISTRY" --location=project - npm config set always-auth=true --location=project - yarn config set registry "$NPM_REGISTRY" - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM & Yarn - - - task: npmAuthenticate@0 - inputs: - workingFile: .npmrc - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Authentication - - - script: | - set -e - export npm_config_arch=$(VSCODE_ARCH) - export npm_config_node_gyp=$(which node-gyp) - - for i in {1..5}; do # try 5 times - yarn --frozen-lockfile --check-files && break - if [ $i -eq 3 ]; then - echo "Yarn failed too many times" >&2 - exit 1 - fi - echo "Yarn failed $i, trying again..." - done - env: - ELECTRON_SKIP_BINARY_DOWNLOAD: 1 - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Install dependencies - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions - - - script: | - set -e - node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt - mkdir -p .build/node_modules_cache - tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Create node_modules archive + SecretsFilter: "ESRP-PKI,esrp-aad-username,esrp-aad-password" - download: current artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive displayName: Download $(VSCODE_ARCH) artifact - - task: UseDotNet@2 - inputs: - version: 2.x - - - task: EsrpClientTool@1 - displayName: Download ESRPClient - - - script: | - set -e - node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip + - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip displayName: Codesign - - script: | - set -e - node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip + - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip displayName: Notarize - - script: | - set -e - unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH) + - script: unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH) displayName: Extract signed app condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) @@ -151,22 +36,12 @@ steps: set -e APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)" APP_NAME="`ls $APP_ROOT | head -n 1`" - echo "##vso[task.setvariable variable=APP_PATH]$APP_ROOT/$APP_NAME" - displayName: Find application path - condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - - script: | - set -e - codesign -dv --deep --verbose=4 "$(APP_PATH)" + APP_PATH="$APP_ROOT/$APP_NAME" + codesign -dv --deep --verbose=4 "$APP_PATH" + "$APP_PATH/Contents/Resources/app/bin/code" --export-default-configuration=.build displayName: Verify signature condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - script: | - set -e - "$(APP_PATH)/Contents/Resources/app/bin/code" --export-default-configuration=.build - displayName: Verify signed application starts OK - condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - script: | # For legacy purposes, arch for x64 is just 'darwin' case $VSCODE_ARCH in diff --git a/build/azure-pipelines/darwin/product-build-darwin-test.yml b/build/azure-pipelines/darwin/product-build-darwin-test.yml index 29c7bf90925..0b445933265 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-test.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-test.yml @@ -9,48 +9,39 @@ parameters: type: boolean steps: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install" + - script: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Download Electron and Playwright - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - ./scripts/test.sh --tfs "Unit Tests" + - script: ./scripts/test.sh --tfs "Unit Tests" displayName: Run unit tests (Electron) timeoutInMinutes: 15 - - script: | - set -e - yarn test-node + - script: yarn test-node displayName: Run unit tests (node.js) timeoutInMinutes: 15 - - script: | - set -e - DEBUG=*browser* yarn test-browser-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests" + - script: yarn test-browser-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" displayName: Run unit tests (Browser, Chromium & Webkit) timeoutInMinutes: 30 - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - ./scripts/test.sh --build --tfs "Unit Tests" + - script: ./scripts/test.sh --build --tfs "Unit Tests" displayName: Run unit tests (Electron) timeoutInMinutes: 15 - - script: | - set -e - yarn test-node --build + - script: yarn test-node --build displayName: Run unit tests (node.js) timeoutInMinutes: 15 - - script: | - set -e - DEBUG=*browser* yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests" + - script: yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" displayName: Run unit tests (Browser, Chromium & Webkit) timeoutInMinutes: 30 @@ -65,6 +56,7 @@ steps: compile-extension:github-authentication \ compile-extension:html-language-features-server \ compile-extension:ipynb \ + compile-extension:notebook-renderers \ compile-extension:json-language-features-server \ compile-extension:markdown-language-features-server \ compile-extension:markdown-language-features \ @@ -77,8 +69,7 @@ steps: displayName: Build integration tests - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - ./scripts/test-integration.sh --tfs "Integration Tests" + - script: ./scripts/test-integration.sh --tfs "Integration Tests" displayName: Run integration tests (Electron) timeoutInMinutes: 20 @@ -88,18 +79,18 @@ steps: # including the remote server and configure the integration tests # to run with these builds instead of running out of sources. set -e - APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) + APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)" APP_NAME="`ls $APP_ROOT | head -n 1`" INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \ ./scripts/test-integration.sh --build --tfs "Integration Tests" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH) displayName: Run integration tests (Electron) timeoutInMinutes: 20 - - script: | - set -e - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \ - ./scripts/test-web-integration.sh --browser webkit + - script: ./scripts/test-web-integration.sh --browser webkit + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH) displayName: Run integration tests (Browser, Webkit) timeoutInMinutes: 20 @@ -108,33 +99,26 @@ steps: APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) APP_NAME="`ls $APP_ROOT | head -n 1`" INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \ ./scripts/test-remote-integration.sh + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH) displayName: Run integration tests (Remote) timeoutInMinutes: 20 - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}: - - script: | - set -e - ps -ef + - script: ps -ef displayName: Diagnostics before smoke test run continueOnError: true condition: succeededOrFailed() - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - yarn --cwd test/smoke compile + - script: yarn --cwd test/smoke compile displayName: Compile smoke tests - - script: | - set -e - yarn gulp compile-extension-media - displayName: Build extensions for smoke tests + - script: yarn gulp compile-extension-media + displayName: Compile extensions for smoke tests - - script: | - set -e - yarn smoketest-no-compile --tracing + - script: yarn smoketest-no-compile --tracing timeoutInMinutes: 20 displayName: Run smoke tests (Electron) @@ -147,10 +131,9 @@ steps: timeoutInMinutes: 20 displayName: Run smoke tests (Electron) - - script: | - set -e - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \ - yarn smoketest-no-compile --web --tracing --headless + - script: yarn smoketest-no-compile --web --tracing --headless + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH) timeoutInMinutes: 20 displayName: Run smoke tests (Browser, Chromium) @@ -159,14 +142,13 @@ steps: yarn gulp compile-extension:vscode-test-resolver APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) APP_NAME="`ls $APP_ROOT | head -n 1`" - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \ yarn smoketest-no-compile --tracing --remote --build "$APP_ROOT/$APP_NAME" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH) timeoutInMinutes: 20 displayName: Run smoke tests (Remote) - - script: | - set -e - ps -ef + - script: ps -ef displayName: Diagnostics after smoke test run continueOnError: true condition: succeededOrFailed() diff --git a/build/azure-pipelines/darwin/product-build-darwin-universal.yml b/build/azure-pipelines/darwin/product-build-darwin-universal.yml index 44d09ed7fa9..c52e8129a55 100644 --- a/build/azure-pipelines/darwin/product-build-darwin-universal.yml +++ b/build/azure-pipelines/darwin/product-build-darwin-universal.yml @@ -3,6 +3,8 @@ steps: inputs: versionSpec: "16.x" + - template: ../distro/download-distro.yml + - task: AzureKeyVault@1 displayName: "Azure Key Vault: Get Secrets" inputs: @@ -10,86 +12,27 @@ steps: KeyVaultName: vscode-build-secrets SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key" - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - - script: node build/setup-npm-registry.js $NPM_REGISTRY + - script: node build/setup-npm-registry.js $NPM_REGISTRY build condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Registry - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js x64 > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags - - - task: Cache@2 - inputs: - key: "nodeModules | $(Agent.OS) | .build/yarnlockhash" - path: .build/node_modules_cache - cacheHitVar: NODE_MODULES_RESTORED - displayName: Restore node_modules cache - - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz - displayName: Extract node_modules cache - condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) - - - script: | - set -e - npm install -g node-gyp@latest - node-gyp --version - displayName: Update node-gyp - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - script: | set -e npm config set registry "$NPM_REGISTRY" --location=project npm config set always-auth=true --location=project yarn config set registry "$NPM_REGISTRY" - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + workingDirectory: build + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM & Yarn - task: npmAuthenticate@0 inputs: - workingFile: .npmrc - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + workingFile: build/.npmrc + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Authentication - script: | set -e - export npm_config_arch=$(VSCODE_ARCH) - export npm_config_node_gyp=$(which node-gyp) - for i in {1..5}; do # try 5 times yarn --frozen-lockfile --check-files && break if [ $i -eq 3 ]; then @@ -98,32 +41,8 @@ steps: fi echo "Yarn failed $i, trying again..." done - env: - ELECTRON_SKIP_BINARY_DOWNLOAD: 1 - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Install dependencies - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions - - - script: | - set -e - node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt - mkdir -p .build/node_modules_cache - tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Create node_modules archive - - - script: | - set -e - node build/azure-pipelines/mixin - displayName: Mix in quality + workingDirectory: build + displayName: Install build dependencies - download: current artifact: unsigned_vscode_client_darwin_x64_archive @@ -133,13 +52,14 @@ steps: artifact: unsigned_vscode_client_darwin_arm64_archive displayName: Download arm64 artifact + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality + - script: | set -e - cp $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip $(agent.builddirectory)/VSCode-darwin-x64.zip - cp $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip $(agent.builddirectory)/VSCode-darwin-arm64.zip - unzip $(agent.builddirectory)/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64 - unzip $(agent.builddirectory)/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64 - DEBUG=* node build/darwin/create-universal-app.js + unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64 + unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64 + DEBUG=* node build/darwin/create-universal-app.js $(agent.builddirectory) displayName: Create Universal App - script: | @@ -151,12 +71,10 @@ steps: security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1) security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain - VSCODE_ARCH=$(VSCODE_ARCH) DEBUG=electron-osx-sign* node build/darwin/sign.js + DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory) displayName: Set Hardened Entitlements - - script: | - set -e - pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd + - script: pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd displayName: Archive build - publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index 036783c67a2..f7810b6f076 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -1,102 +1,59 @@ parameters: - - name: VSCODE_PUBLISH - type: boolean - name: VSCODE_QUALITY type: string + - name: VSCODE_CIBUILD + type: boolean - name: VSCODE_RUN_UNIT_TESTS type: boolean - name: VSCODE_RUN_INTEGRATION_TESTS type: boolean - name: VSCODE_RUN_SMOKE_TESTS type: boolean - - name: VSCODE_BUILD_TUNNEL_CLI - type: boolean steps: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - checkout: self - fetchDepth: 1 - retryCountOnTaskFailure: 3 + - checkout: self + fetchDepth: 1 + retryCountOnTaskFailure: 3 - task: NodeTool@0 inputs: versionSpec: "16.x" - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key" + - template: ../distro/download-distro.yml - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: Compilation - path: $(Build.ArtifactStagingDirectory) - displayName: Download compilation output + - task: AzureKeyVault@1 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key" - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz - displayName: Extract compilation output + - task: DownloadPipelineArtifact@2 + inputs: + artifact: Compilation + path: $(Build.ArtifactStagingDirectory) + displayName: Download compilation output - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro + - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz + displayName: Extract compilation output - script: node build/setup-npm-registry.js $NPM_REGISTRY condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Registry - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags + - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js darwin $VSCODE_ARCH > .build/yarnlockhash + displayName: Prepare node_modules cache key - task: Cache@2 inputs: - key: "nodeModules | $(Agent.OS) | .build/yarnlockhash" + key: '"node_modules" | .build/yarnlockhash' path: .build/node_modules_cache cacheHitVar: NODE_MODULES_RESTORED displayName: Restore node_modules cache - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz + - script: tar -xzf .build/node_modules_cache/cache.tgz condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) displayName: Extract node_modules cache @@ -134,12 +91,10 @@ steps: displayName: Install dependencies condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules - script: | set -e @@ -150,176 +105,129 @@ steps: displayName: Create node_modules archive - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - # This script brings in the right resources (images, icons, etc) based on the quality (insiders, stable, exploration) - - script: | - set -e - node build/azure-pipelines/mixin - displayName: Mix in quality + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality + + - template: ../common/install-builtin-extensions.yml - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci - displayName: Build client + - script: yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build client - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - node build/azure-pipelines/mixin --server - displayName: Mix in server quality + - script: yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci - displayName: Build Server + - script: yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server (web) - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp "transpile-client-swc" "transpile-extensions" + - ${{ else }}: + - script: yarn gulp transpile-client-swc transpile-extensions + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Transpile - - script: | - set -e - APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)" - APP_NAME="`ls $APP_ROOT | head -n 1`" - echo "##vso[task.setvariable variable=APP_PATH]$APP_ROOT/$APP_NAME" - displayName: Find application path - - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: unsigned_vscode_cli_darwin_arm64_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) - - - task: DownloadPipelineArtifact@2 - inputs: - artifact: unsigned_vscode_cli_darwin_x64_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - - - script: | - set -e - ARCHIVE_NAME=$(ls "$(Build.ArtifactStagingDirectory)/cli" | head -n 1) - unzip "$(Build.ArtifactStagingDirectory)/cli/$ARCHIVE_NAME" -d "$(Build.ArtifactStagingDirectory)/cli" - CLI_APP_NAME=$(node -p "require(\"$(APP_PATH)/Contents/Resources/app/product.json\").tunnelApplicationName") - APP_NAME=$(node -p "require(\"$(APP_PATH)/Contents/Resources/app/product.json\").applicationName") - mv "$(Build.ArtifactStagingDirectory)/cli/$APP_NAME" "$(APP_PATH)/Contents/Resources/app/bin/$CLI_APP_NAME" - chmod +x "$(APP_PATH)/Contents/Resources/app/bin/$CLI_APP_NAME" - displayName: Make CLI executable - - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - template: product-build-darwin-test.yml - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} - VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} + - template: product-build-darwin-test.yml + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} + VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - # Setting hardened entitlements is a requirement for: - # * Apple notarization - # * Running tests on Big Sur (because Big Sur has additional security precautions) - - script: | - set -e - security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain - security default-keychain -s $(agent.tempdirectory)/buildagent.keychain - security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain - echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12 - security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign - export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1) - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain - VSCODE_ARCH=$(VSCODE_ARCH) DEBUG=electron-osx-sign* node build/darwin/sign.js - displayName: Set Hardened Entitlements + - ${{ elseif and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}: + - task: DownloadPipelineArtifact@2 + inputs: + artifact: unsigned_vscode_cli_darwin_$(VSCODE_ARCH)_cli + patterns: "**" + path: $(Build.ArtifactStagingDirectory)/cli + displayName: Download VS Code CLI - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - script: | - set -e - pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd - displayName: Archive build + - script: | + set -e + APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)" + APP_NAME="`ls $APP_ROOT | head -n 1`" + APP_PATH="$APP_ROOT/$APP_NAME" + ARCHIVE_NAME=$(ls "$(Build.ArtifactStagingDirectory)/cli" | head -n 1) + unzip "$(Build.ArtifactStagingDirectory)/cli/$ARCHIVE_NAME" -d "$(Build.ArtifactStagingDirectory)/cli" + CLI_APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").tunnelApplicationName") + APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").applicationName") + mv "$(Build.ArtifactStagingDirectory)/cli/$APP_NAME" "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME" + chmod +x "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME" + displayName: Make CLI executable - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - script: | - set -e + # Setting hardened entitlements is a requirement for: + # * Apple notarization + # * Running tests on Big Sur (because Big Sur has additional security precautions) + - script: | + set -e + security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain + security default-keychain -s $(agent.tempdirectory)/buildagent.keychain + security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain + echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12 + security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign + export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1) + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain + DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory) + displayName: Set Hardened Entitlements - # package Remote Extension Host - pushd .. && mv vscode-reh-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH) && zip -Xry vscode-server-darwin-$(VSCODE_ARCH).zip vscode-server-darwin-$(VSCODE_ARCH) && popd + - script: cd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * + displayName: Archive build - # package Remote Extension Host (Web) - pushd .. && mv vscode-reh-web-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH)-web && zip -Xry vscode-server-darwin-$(VSCODE_ARCH)-web.zip vscode-server-darwin-$(VSCODE_ARCH)-web && popd - displayName: Prepare to publish servers + - script: | + set -e - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: Generate SBOM (client) - inputs: - BuildDropPath: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) - PackageName: Visual Studio Code + # package Remote Extension Host + pushd .. && mv vscode-reh-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH) && zip -Xry vscode-server-darwin-$(VSCODE_ARCH).zip vscode-server-darwin-$(VSCODE_ARCH) && popd - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - publish: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)/_manifest - displayName: Publish SBOM (client) - artifact: vscode_client_darwin_$(VSCODE_ARCH)_sbom + # package Remote Extension Host (Web) + pushd .. && mv vscode-reh-web-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH)-web && zip -Xry vscode-server-darwin-$(VSCODE_ARCH)-web.zip vscode-server-darwin-$(VSCODE_ARCH)-web && popd + displayName: Prepare to publish servers - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: Generate SBOM (server) - inputs: - BuildDropPath: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) - PackageName: Visual Studio Code Server + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: Generate SBOM (client) + inputs: + BuildDropPath: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) + PackageName: Visual Studio Code - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - publish: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)/_manifest - displayName: Publish SBOM (server) - artifact: vscode_server_darwin_$(VSCODE_ARCH)_sbom + - publish: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)/_manifest + displayName: Publish SBOM (client) + artifact: vscode_client_darwin_$(VSCODE_ARCH)_sbom - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip - artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive - displayName: Publish client archive + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: Generate SBOM (server) + inputs: + BuildDropPath: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH) + PackageName: Visual Studio Code Server - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH).zip - artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned - displayName: Publish server archive + - publish: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)/_manifest + displayName: Publish SBOM (server) + artifact: vscode_server_darwin_$(VSCODE_ARCH)_sbom - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web.zip - artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned - displayName: Publish web server archive + - publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip + artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive + displayName: Publish client archive - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - task: AzureCLI@2 - inputs: - azureSubscription: "vscode-builds-subscription" - scriptType: pscore - scriptLocation: inlineScript - addSpnToEnvironment: true - inlineScript: | - Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId" - Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId" - Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey" + - publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH).zip + artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned + displayName: Publish server archive - - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}: - - script: | - set -e - AZURE_STORAGE_ACCOUNT="ticino" \ - AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \ - AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \ - AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ - VSCODE_ARCH="$(VSCODE_ARCH)" \ - node build/azure-pipelines/upload-configuration - displayName: Upload configuration (for Bing settings search) - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - continueOnError: true + - publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web.zip + artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned + displayName: Publish web server archive + + - task: AzureCLI@2 + inputs: + azureSubscription: "vscode-builds-subscription" + scriptType: pscore + scriptLocation: inlineScript + addSpnToEnvironment: true + inlineScript: | + Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId" + Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId" + Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey" diff --git a/build/azure-pipelines/distro-build.yml b/build/azure-pipelines/distro-build.yml index 1532f19c5f3..fe05f56723b 100644 --- a/build/azure-pipelines/distro-build.yml +++ b/build/azure-pipelines/distro-build.yml @@ -10,35 +10,4 @@ steps: - task: NodeTool@0 inputs: versionSpec: "16.x" - - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password" - - - script: | - set -e - - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - - git remote add distro "https://github.com/$VSCODE_MIXIN_REPO.git" - git fetch distro - - # Push main branch into oss/main - git push distro origin/main:refs/heads/oss/main - - # Push every release branch into oss/release - git for-each-ref --format="%(refname:short)" refs/remotes/origin/release/* | sed 's/^origin\/\(.*\)$/\0:refs\/heads\/oss\/\1/' | xargs git push distro - - git merge $(node -p "require('./package.json').distro") - - displayName: Sync & Merge Distro + - template: ./distro/download-distro.yml diff --git a/build/azure-pipelines/distro/apply-cli-patches.js b/build/azure-pipelines/distro/apply-cli-patches.js new file mode 100644 index 00000000000..68dec380e89 --- /dev/null +++ b/build/azure-pipelines/distro/apply-cli-patches.js @@ -0,0 +1,45 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const cp = require("child_process"); +const toml = require("@iarna/toml"); +function log(...args) { + console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args); +} +log(`Applying CLI patches...`); +const basePath = `.build/distro/cli-patches`; +const patchTomlSuffix = '.patch.toml'; +function deepMerge(target, source) { + for (const [key, value] of Object.entries(source)) { + if (value && typeof value === 'object' && !Array.isArray(value)) { + if (!target.hasOwnProperty(key)) { + target[key] = value; + } + else { + deepMerge(target[key], value); + } + } + else { + target[key] = value; + } + } + return target; +} +for (const patch of fs.readdirSync(basePath)) { + if (patch.endsWith(patchTomlSuffix)) { + // this does not support nested filepaths, but that's fine for now... + const originalPath = `cli/${patch.slice(0, -patchTomlSuffix.length)}.toml`; + const contents = toml.parse(fs.readFileSync(originalPath, 'utf8')); + deepMerge(contents, toml.parse(fs.readFileSync(`${basePath}/${patch}`, 'utf8'))); + fs.writeFileSync(originalPath, toml.stringify(contents)); + } + else { + cp.execSync(`git apply --ignore-whitespace --ignore-space-change ${basePath}/${patch}`, { stdio: 'inherit' }); + } + log('Applied CLI patch:', patch, 'āœ”ļøŽ'); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktY2xpLXBhdGNoZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcHBseS1jbGktcGF0Y2hlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUN6QixvQ0FBb0M7QUFDcEMsb0NBQW9DO0FBRXBDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBVztJQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFFRCxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUUvQixNQUFNLFFBQVEsR0FBRywyQkFBMkIsQ0FBQztBQUM3QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUM7QUFFdEMsU0FBUyxTQUFTLENBQUMsTUFBVyxFQUFFLE1BQVc7SUFDMUMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEQsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNwQjtpQkFBTTtnQkFDTixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzlCO1NBQ0Q7YUFBTTtZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDcEI7S0FDRDtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQUVELEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUM3QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDcEMscUVBQXFFO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkUsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxRQUFRLElBQUksS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUN6RDtTQUFNO1FBQ04sRUFBRSxDQUFDLFFBQVEsQ0FBQyx1REFBdUQsUUFBUSxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDOUc7SUFDRCxHQUFHLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3ZDIn0= \ No newline at end of file diff --git a/build/azure-pipelines/distro/apply-cli-patches.ts b/build/azure-pipelines/distro/apply-cli-patches.ts new file mode 100644 index 00000000000..65c39fda363 --- /dev/null +++ b/build/azure-pipelines/distro/apply-cli-patches.ts @@ -0,0 +1,45 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fs from 'fs'; +import * as cp from 'child_process'; +import * as toml from '@iarna/toml'; + +function log(...args: any[]): void { + console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args); +} + +log(`Applying CLI patches...`); + +const basePath = `.build/distro/cli-patches`; +const patchTomlSuffix = '.patch.toml'; + +function deepMerge(target: any, source: any): any { + for (const [key, value] of Object.entries(source)) { + if (value && typeof value === 'object' && !Array.isArray(value)) { + if (!target.hasOwnProperty(key)) { + target[key] = value; + } else { + deepMerge(target[key], value); + } + } else { + target[key] = value; + } + } + return target; +} + +for (const patch of fs.readdirSync(basePath)) { + if (patch.endsWith(patchTomlSuffix)) { + // this does not support nested filepaths, but that's fine for now... + const originalPath = `cli/${patch.slice(0, -patchTomlSuffix.length)}.toml`; + const contents = toml.parse(fs.readFileSync(originalPath, 'utf8')); + deepMerge(contents, toml.parse(fs.readFileSync(`${basePath}/${patch}`, 'utf8'))); + fs.writeFileSync(originalPath, toml.stringify(contents)); + } else { + cp.execSync(`git apply --ignore-whitespace --ignore-space-change ${basePath}/${patch}`, { stdio: 'inherit' }); + } + log('Applied CLI patch:', patch, 'āœ”ļøŽ'); +} diff --git a/build/azure-pipelines/distro/download-distro.yml b/build/azure-pipelines/distro/download-distro.yml new file mode 100644 index 00000000000..2e727b28b4d --- /dev/null +++ b/build/azure-pipelines/distro/download-distro.yml @@ -0,0 +1,56 @@ +steps: + - task: AzureKeyVault@1 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password" + + # TODO@joaomoreno: Keep pwsh once we move out of running entire jobs in containers + - pwsh: | + "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$Home/_netrc" -Encoding ASCII + condition: and(succeeded(), contains(variables['Agent.OS'], 'windows')) + displayName: Setup distro auth + + - pwsh: | + $ErrorActionPreference = "Stop" + $ArchivePath = "$(Agent.TempDirectory)/distro.zip" + $PackageJson = Get-Content -Path package.json -Raw | ConvertFrom-Json + $DistroVersion = $PackageJson.distro + + Invoke-WebRequest -Uri "https://api.github.com/repos/microsoft/vscode-distro/zipball/$DistroVersion" ` + -OutFile $ArchivePath ` + -Headers @{ "Accept" = "application/vnd.github+json"; "Authorization" = "Bearer $(github-distro-mixin-password)"; "X-GitHub-Api-Version" = "2022-11-28" } + + New-Item -ItemType Directory -Path .build -Force + Expand-Archive -Path $ArchivePath -DestinationPath .build + Rename-Item -Path ".build/microsoft-vscode-distro-$DistroVersion" -NewName distro + condition: and(succeeded(), contains(variables['Agent.OS'], 'windows')) + displayName: Download distro + + - script: | + mkdir -p .build + cat << EOF | tee ~/.netrc .build/.netrc > /dev/null + machine github.com + login vscode + password $(github-distro-mixin-password) + EOF + condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows'))) + displayName: Setup distro auth + + - script: | + set -e + ArchivePath="$(Agent.TempDirectory)/distro.zip" + DistroVersion=$(node -p "require('./package.json').distro") + + curl -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer $(github-distro-mixin-password)" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -o $ArchivePath \ + -L "https://api.github.com/repos/microsoft/vscode-distro/zipball/$DistroVersion" + + unzip $ArchivePath -d .build + mv .build/microsoft-vscode-distro-$DistroVersion .build/distro + cp remote/.yarnrc .build/distro/npm/remote/.yarnrc + condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows'))) + displayName: Download distro diff --git a/build/azure-pipelines/distro/mixin-npm.js b/build/azure-pipelines/distro/mixin-npm.js new file mode 100644 index 00000000000..ba17d6d9520 --- /dev/null +++ b/build/azure-pipelines/distro/mixin-npm.js @@ -0,0 +1,35 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const path = require("path"); +const { dirs } = require('../../npm/dirs'); +function log(...args) { + console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args); +} +function mixin(mixinPath) { + if (!fs.existsSync(`${mixinPath}/node_modules`)) { + log(`Skipping distro npm dependencies: ${mixinPath} (no node_modules)`); + return; + } + log(`Mixing in distro npm dependencies: ${mixinPath}`); + const distroPackageJson = JSON.parse(fs.readFileSync(`${mixinPath}/package.json`, 'utf8')); + const targetPath = path.relative('.build/distro/npm', mixinPath); + for (const dependency of Object.keys(distroPackageJson.dependencies)) { + fs.rmSync(`./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true }); + fs.cpSync(`${mixinPath}/node_modules/${dependency}`, `./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true, dereference: true }); + } + log(`Mixed in distro npm dependencies: ${mixinPath} āœ”ļøŽ`); +} +function main() { + log(`Mixing in distro npm dependencies...`); + const mixinPaths = dirs.filter(d => /^.build\/distro\/npm/.test(d)); + for (const mixinPath of mixinPaths) { + mixin(mixinPath); + } +} +main(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4tbnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWl4aW4tbnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUF1QixDQUFDO0FBRWpFLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBVztJQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxTQUFpQjtJQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsZUFBZSxDQUFDLEVBQUU7UUFDaEQsR0FBRyxDQUFDLHFDQUFxQyxTQUFTLG9CQUFvQixDQUFDLENBQUM7UUFDeEUsT0FBTztLQUNQO0lBRUQsR0FBRyxDQUFDLHNDQUFzQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRXZELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWpFLEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNyRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLGlCQUFpQixVQUFVLEVBQUUsRUFBRSxLQUFLLFVBQVUsaUJBQWlCLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3hKO0lBRUQsR0FBRyxDQUFDLHFDQUFxQyxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLElBQUk7SUFDWixHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUU1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7UUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2pCO0FBQ0YsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDIn0= \ No newline at end of file diff --git a/build/azure-pipelines/distro/mixin-npm.ts b/build/azure-pipelines/distro/mixin-npm.ts new file mode 100644 index 00000000000..da5eb24ca28 --- /dev/null +++ b/build/azure-pipelines/distro/mixin-npm.ts @@ -0,0 +1,43 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fs from 'fs'; +import * as path from 'path'; +const { dirs } = require('../../npm/dirs') as { dirs: string[] }; + +function log(...args: any[]): void { + console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args); +} + +function mixin(mixinPath: string) { + if (!fs.existsSync(`${mixinPath}/node_modules`)) { + log(`Skipping distro npm dependencies: ${mixinPath} (no node_modules)`); + return; + } + + log(`Mixing in distro npm dependencies: ${mixinPath}`); + + const distroPackageJson = JSON.parse(fs.readFileSync(`${mixinPath}/package.json`, 'utf8')); + const targetPath = path.relative('.build/distro/npm', mixinPath); + + for (const dependency of Object.keys(distroPackageJson.dependencies)) { + fs.rmSync(`./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true }); + fs.cpSync(`${mixinPath}/node_modules/${dependency}`, `./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true, dereference: true }); + } + + log(`Mixed in distro npm dependencies: ${mixinPath} āœ”ļøŽ`); +} + +function main() { + log(`Mixing in distro npm dependencies...`); + + const mixinPaths = dirs.filter(d => /^.build\/distro\/npm/.test(d)); + + for (const mixinPath of mixinPaths) { + mixin(mixinPath); + } +} + +main(); diff --git a/build/azure-pipelines/distro/mixin-quality.js b/build/azure-pipelines/distro/mixin-quality.js new file mode 100644 index 00000000000..3f1e1f5cc7d --- /dev/null +++ b/build/azure-pipelines/distro/mixin-quality.js @@ -0,0 +1,53 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const path = require("path"); +function log(...args) { + console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args); +} +function main() { + const quality = process.env['VSCODE_QUALITY']; + if (!quality) { + throw new Error('Missing VSCODE_QUALITY, skipping mixin'); + } + log(`Mixing in distro quality...`); + const basePath = `.build/distro/mixin/${quality}`; + for (const name of fs.readdirSync(basePath)) { + const distroPath = path.join(basePath, name); + const ossPath = path.relative(basePath, distroPath); + if (ossPath === 'product.json') { + const distro = JSON.parse(fs.readFileSync(distroPath, 'utf8')); + const oss = JSON.parse(fs.readFileSync(ossPath, 'utf8')); + let builtInExtensions = oss.builtInExtensions; + if (Array.isArray(distro.builtInExtensions)) { + log('Overwriting built-in extensions:', distro.builtInExtensions.map(e => e.name)); + builtInExtensions = distro.builtInExtensions; + } + else if (distro.builtInExtensions) { + const include = distro.builtInExtensions['include'] ?? []; + const exclude = distro.builtInExtensions['exclude'] ?? []; + log('OSS built-in extensions:', builtInExtensions.map(e => e.name)); + log('Including built-in extensions:', include.map(e => e.name)); + log('Excluding built-in extensions:', exclude); + builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name)); + builtInExtensions = [...builtInExtensions, ...include]; + log('Final built-in extensions:', builtInExtensions.map(e => e.name)); + } + else { + log('Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name)); + } + const result = { webBuiltInExtensions: oss.webBuiltInExtensions, ...distro, builtInExtensions }; + fs.writeFileSync(ossPath, JSON.stringify(result, null, '\t'), 'utf8'); + } + else { + fs.cpSync(distroPath, ossPath, { force: true, recursive: true }); + } + log(distroPath, 'āœ”ļøŽ'); + } +} +main(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4tcXVhbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1peGluLXF1YWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBbUI3QixTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQVc7SUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxJQUFJO0lBQ1osTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7S0FDMUQ7SUFFRCxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUVuQyxNQUFNLFFBQVEsR0FBRyx1QkFBdUIsT0FBTyxFQUFFLENBQUM7SUFFbEQsS0FBSyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBELElBQUksT0FBTyxLQUFLLGNBQWMsRUFBRTtZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFZLENBQUM7WUFDMUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxD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 \ No newline at end of file diff --git a/build/azure-pipelines/distro/mixin-quality.ts b/build/azure-pipelines/distro/mixin-quality.ts new file mode 100644 index 00000000000..b9b3c4f6c42 --- /dev/null +++ b/build/azure-pipelines/distro/mixin-quality.ts @@ -0,0 +1,80 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fs from 'fs'; +import * as path from 'path'; + +interface IBuiltInExtension { + readonly name: string; + readonly version: string; + readonly repo: string; + readonly metadata: any; +} + +interface OSSProduct { + readonly builtInExtensions: IBuiltInExtension[]; + readonly webBuiltInExtensions?: IBuiltInExtension[]; +} + +interface Product { + readonly builtInExtensions?: IBuiltInExtension[] | { 'include'?: IBuiltInExtension[]; 'exclude'?: string[] }; + readonly webBuiltInExtensions?: IBuiltInExtension[]; +} + +function log(...args: any[]): void { + console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args); +} + +function main() { + const quality = process.env['VSCODE_QUALITY']; + + if (!quality) { + throw new Error('Missing VSCODE_QUALITY, skipping mixin'); + } + + log(`Mixing in distro quality...`); + + const basePath = `.build/distro/mixin/${quality}`; + + for (const name of fs.readdirSync(basePath)) { + const distroPath = path.join(basePath, name); + const ossPath = path.relative(basePath, distroPath); + + if (ossPath === 'product.json') { + const distro = JSON.parse(fs.readFileSync(distroPath, 'utf8')) as Product; + const oss = JSON.parse(fs.readFileSync(ossPath, 'utf8')) as OSSProduct; + let builtInExtensions = oss.builtInExtensions; + + if (Array.isArray(distro.builtInExtensions)) { + log('Overwriting built-in extensions:', distro.builtInExtensions.map(e => e.name)); + + builtInExtensions = distro.builtInExtensions; + } else if (distro.builtInExtensions) { + const include = distro.builtInExtensions['include'] ?? []; + const exclude = distro.builtInExtensions['exclude'] ?? []; + + log('OSS built-in extensions:', builtInExtensions.map(e => e.name)); + log('Including built-in extensions:', include.map(e => e.name)); + log('Excluding built-in extensions:', exclude); + + builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name)); + builtInExtensions = [...builtInExtensions, ...include]; + + log('Final built-in extensions:', builtInExtensions.map(e => e.name)); + } else { + log('Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name)); + } + + const result = { webBuiltInExtensions: oss.webBuiltInExtensions, ...distro, builtInExtensions }; + fs.writeFileSync(ossPath, JSON.stringify(result, null, '\t'), 'utf8'); + } else { + fs.cpSync(distroPath, ossPath, { force: true, recursive: true }); + } + + log(distroPath, 'āœ”ļøŽ'); + } +} + +main(); diff --git a/build/azure-pipelines/linux/cli-build-linux.yml b/build/azure-pipelines/linux/cli-build-linux.yml index 02c6471d317..4df126682cf 100644 --- a/build/azure-pipelines/linux/cli-build-linux.yml +++ b/build/azure-pipelines/linux/cli-build-linux.yml @@ -1,81 +1,60 @@ parameters: - - name: VSCODE_BUILD_ALPINE - type: boolean - default: false - name: VSCODE_BUILD_LINUX type: boolean default: false - - name: VSCODE_BUILD_ALPINE_ARM64 - type: boolean - default: false - name: VSCODE_BUILD_LINUX_ARM64 type: boolean default: false - name: VSCODE_BUILD_LINUX_ARMHF type: boolean default: false + - name: VSCODE_CHECK_ONLY + type: boolean + default: false - name: VSCODE_QUALITY type: string steps: + - task: NodeTool@0 + inputs: + versionSpec: "16.x" + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - template: ../cli/cli-apply-patches.yml + - task: Npm@1 displayName: Download openssl prebuilt inputs: command: custom - customCommand: pack @vscode-internal/openssl-prebuilt@0.0.3 + customCommand: pack @vscode-internal/openssl-prebuilt@0.0.8 customRegistry: useFeed - customFeed: 'Monaco/openssl-prebuilt' + customFeed: "Monaco/openssl-prebuilt" workingDir: $(Build.ArtifactStagingDirectory) - script: | set -e mkdir $(Build.ArtifactStagingDirectory)/openssl - tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.3.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl + tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.8.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl displayName: Extract openssl prebuilt - # inspired by: https://github.com/emk/rust-musl-builder/blob/main/Dockerfile - - ${{ if or(eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}: - - bash: | - set -e - sudo apt-get update - sudo apt-get install -yq build-essential musl-dev musl-tools linux-libc-dev pkgconf xutils-dev - sudo ln -s "/usr/bin/g++" "/usr/bin/musl-g++" || echo "link exists" - displayName: Install musl build dependencies - - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}: - - bash: | - set -e - sudo apt-get install -yq gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf + - bash: sudo apt-get install -yq gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf displayName: Install arm32 toolchains - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: - - bash: | - set -e - sudo apt-get install -yq gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + - bash: sudo apt-get install -yq gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu displayName: Install arm64 toolchains - - task: NodeTool@0 - inputs: - versionSpec: "16.x" - - - template: ../mixin-distro-posix.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - - - script: | - set -e - node build/azure-pipelines/cli/prepare.js + - script: node build/azure-pipelines/cli/prepare.js displayName: Prepare CLI build env: + VSCODE_CLI_PREPARE_ROOT: $(Build.SourcesDirectory)/.build/distro + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} GITHUB_TOKEN: "$(github-distro-mixin-password)" - template: ../cli/install-rust-posix.yml parameters: targets: - - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}: - - aarch64-unknown-linux-musl - - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}: - - x86_64-unknown-linux-musl - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: - aarch64-unknown-linux-gnu - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: @@ -83,33 +62,12 @@ steps: - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}: - armv7-unknown-linux-gnueabihf - - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}: - - template: ../cli/cli-compile-and-publish.yml - parameters: - VSCODE_CLI_TARGET: aarch64-unknown-linux-musl - VSCODE_CLI_ARTIFACT: vscode_cli_alpine_arm64_cli - VSCODE_CLI_ENV: - CXX_aarch64-unknown-linux-musl: musl-g++ - CC_aarch64-unknown-linux-musl: musl-gcc - OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/lib - OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/include - - - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}: - - template: ../cli/cli-compile-and-publish.yml - parameters: - VSCODE_CLI_TARGET: x86_64-unknown-linux-musl - VSCODE_CLI_ARTIFACT: vscode_cli_alpine_x64_cli - VSCODE_CLI_ENV: - CXX_aarch64-unknown-linux-musl: musl-g++ - CC_aarch64-unknown-linux-musl: musl-gcc - OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/lib - OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/include - - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}: - template: ../cli/cli-compile-and-publish.yml parameters: VSCODE_CLI_TARGET: aarch64-unknown-linux-gnu VSCODE_CLI_ARTIFACT: vscode_cli_linux_arm64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/lib @@ -120,6 +78,7 @@ steps: parameters: VSCODE_CLI_TARGET: x86_64-unknown-linux-gnu VSCODE_CLI_ARTIFACT: vscode_cli_linux_x64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/lib OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/include @@ -129,6 +88,7 @@ steps: parameters: VSCODE_CLI_TARGET: armv7-unknown-linux-gnueabihf VSCODE_CLI_ARTIFACT: vscode_cli_linux_armhf_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/lib diff --git a/build/azure-pipelines/linux/product-build-linux-client.yml b/build/azure-pipelines/linux/product-build-linux-client.yml deleted file mode 100644 index cb5a5b47147..00000000000 --- a/build/azure-pipelines/linux/product-build-linux-client.yml +++ /dev/null @@ -1,397 +0,0 @@ -parameters: - - name: VSCODE_PUBLISH - type: boolean - - name: VSCODE_QUALITY - type: string - - name: VSCODE_RUN_UNIT_TESTS - type: boolean - - name: VSCODE_RUN_INTEGRATION_TESTS - type: boolean - - name: VSCODE_RUN_SMOKE_TESTS - type: boolean - - name: VSCODE_BUILD_TUNNEL_CLI - type: boolean - -steps: - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - checkout: self - fetchDepth: 1 - retryCountOnTaskFailure: 3 - - - task: NodeTool@0 - inputs: - versionSpec: "16.x" - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: Compilation - path: $(Build.ArtifactStagingDirectory) - displayName: Download compilation output - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: reh_node_modules-$(VSCODE_ARCH) - path: $(Build.ArtifactStagingDirectory) - displayName: Download server build dependencies - condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf')) - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - # Start X server - /etc/init.d/xvfb start - # Start dbus session - DBUS_LAUNCH_RESULT=$(sudo dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address) - echo "##vso[task.setvariable variable=DBUS_SESSION_BUS_ADDRESS]$DBUS_LAUNCH_RESULT" - displayName: Setup system services - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz - displayName: Extract compilation output - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - - script: node build/setup-npm-registry.js $NPM_REGISTRY - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Registry - - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags - - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - task: Cache@2 - inputs: - key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash" - path: .build/node_modules_cache - cacheHitVar: NODE_MODULES_RESTORED - displayName: Restore node_modules cache - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: Cache@2 - inputs: - key: "nodeModules | $(Agent.OS) | .build/yarnlockhash" - path: .build/node_modules_cache - cacheHitVar: NODE_MODULES_RESTORED - displayName: Restore node_modules cache - - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz - condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Extract node_modules cache - - - script: | - set -e - npm config set registry "$NPM_REGISTRY" --location=project - npm config set always-auth=true --location=project - yarn config set registry "$NPM_REGISTRY" - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM & Yarn - - - task: npmAuthenticate@0 - inputs: - workingFile: .npmrc - condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Authentication - - - script: | - set -e - node build/npm/setupBuildYarnrc - for i in {1..5}; do # try 5 times - yarn --cwd build --frozen-lockfile --check-files && break - if [ $i -eq 3 ]; then - echo "Yarn failed too many times" >&2 - exit 1 - fi - echo "Yarn failed $i, trying again..." - done - displayName: Install build dependencies - - - script: | - set -e - if [ "$NPM_ARCH" = "armv7l" ]; then - # There is no target_arch="armv7l" supported by node_gyp, - # arm versions for compilation are decided based on the CC - # macros. - # Mapping value is based on - # https://github.com/nodejs/node/blob/0903515e126c2697042d6546c6aa4b72e1a4b33e/configure.py#L49-L50 - export npm_config_arch="arm" - else - export npm_config_arch=$(NPM_ARCH) - fi - - if [ -z "$CC" ] || [ -z "$CXX" ]; then - # Download clang based on chromium revision used by vscode - curl -s https://raw.githubusercontent.com/chromium/chromium/98.0.4758.109/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux - # Download libcxx headers and objects from upstream electron releases - DEBUG=libcxx-fetcher \ - VSCODE_LIBCXX_OBJECTS_DIR=$PWD/.build/libcxx-objects \ - VSCODE_LIBCXX_HEADERS_DIR=$PWD/.build/libcxx_headers \ - VSCODE_LIBCXXABI_HEADERS_DIR=$PWD/.build/libcxxabi_headers \ - VSCODE_ARCH="$(NPM_ARCH)" \ - node build/linux/libcxx-fetcher.js - # Set compiler toolchain - # Flags for the client build are based on - # https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:build/config/arm.gni - # https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:build/config/compiler/BUILD.gn - # https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:build/config/c++/BUILD.gn - export CC=$PWD/.build/CR_Clang/bin/clang - export CXX=$PWD/.build/CR_Clang/bin/clang++ - export CXXFLAGS="-nostdinc++ -D__NO_INLINE__ -isystem$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit" - export LDFLAGS="-stdlib=libc++ -fuse-ld=lld -flto=thin -L$PWD/.build/libcxx-objects -lc++abi -Wl,--lto-O0" - export VSCODE_REMOTE_CC=$(which gcc) - export VSCODE_REMOTE_CXX=$(which g++) - fi - - for i in {1..5}; do # try 5 times - yarn --frozen-lockfile --check-files && break - if [ $i -eq 3 ]; then - echo "Yarn failed too many times" >&2 - exit 1 - fi - echo "Yarn failed $i, trying again..." - done - env: - ELECTRON_SKIP_BINARY_DOWNLOAD: 1 - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Install dependencies - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - rm -rf remote/node_modules - tar -xzf $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz --directory $(Build.SourcesDirectory)/remote - displayName: Extract server node_modules output - condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf')) - - - script: | - set -e - node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt - mkdir -p .build/node_modules_cache - tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - displayName: Create node_modules archive - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - node build/azure-pipelines/mixin - displayName: Mix in quality - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci - displayName: Build - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - node build/azure-pipelines/mixin --server - displayName: Mix in server quality - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci - displayName: Build Server - - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp "transpile-client-swc" "transpile-extensions" - displayName: Transpile - - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: vscode_cli_linux_arm64_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) - - - task: DownloadPipelineArtifact@2 - inputs: - artifact: vscode_cli_linux_x64_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - - - task: DownloadPipelineArtifact@2 - inputs: - artifact: vscode_cli_linux_armhf_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'armhf')) - - - script: | - set -e - tar -xzvf $(Build.ArtifactStagingDirectory)/cli/*.tar.gz -C $(Build.ArtifactStagingDirectory)/cli - CLI_APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").tunnelApplicationName") - APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").applicationName") - mv $(Build.ArtifactStagingDirectory)/cli/$APP_NAME $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/$CLI_APP_NAME - displayName: Make CLI executable - - - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - template: product-build-linux-client-test.yml - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} - VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - script: | - set -e - yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb" - yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm" - displayName: Build deb, rpm packages - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - script: | - set -e - yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap" - displayName: Prepare snap package - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - task: UseDotNet@2 - inputs: - version: 2.x - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - task: EsrpClientTool@1 - displayName: Download ESRPClient - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - script: | - set -e - node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" rpm $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm' - displayName: Codesign rpm - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - script: | - set -e - VSCODE_ARCH="$(VSCODE_ARCH)" \ - ./build/azure-pipelines/linux/prepare-publish.sh - displayName: Prepare for Publish - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: Generate SBOM (client) - inputs: - BuildDropPath: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) - PackageName: Visual Studio Code - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - publish: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/_manifest - displayName: Publish SBOM (client) - artifact: vscode_client_linux_$(VSCODE_ARCH)_sbom - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: Generate SBOM (server) - inputs: - BuildDropPath: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) - PackageName: Visual Studio Code Server - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - publish: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)/_manifest - displayName: Publish SBOM (server) - artifact: vscode_server_linux_$(VSCODE_ARCH)_sbom - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - publish: $(DEB_PATH) - artifact: vscode_client_linux_$(VSCODE_ARCH)_deb-package - displayName: Publish deb package - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - publish: $(RPM_PATH) - artifact: vscode_client_linux_$(VSCODE_ARCH)_rpm-package - displayName: Publish rpm package - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - publish: $(TARBALL_PATH) - artifact: vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned - displayName: Publish client archive - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz - artifact: vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned - displayName: Publish server archive - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz - artifact: vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned - displayName: Publish web server archive - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - task: PublishPipelineArtifact@0 - displayName: "Publish Pipeline Artifact" - inputs: - artifactName: "snap-$(VSCODE_ARCH)" - targetPath: .build/linux/snap-tarball diff --git a/build/azure-pipelines/linux/product-build-linux-server.yml b/build/azure-pipelines/linux/product-build-linux-server.yml deleted file mode 100644 index bae164fd660..00000000000 --- a/build/azure-pipelines/linux/product-build-linux-server.yml +++ /dev/null @@ -1,106 +0,0 @@ -parameters: - - name: VSCODE_QUALITY - type: string - -steps: - - task: NodeTool@0 - inputs: - versionSpec: "16.x" - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: Docker@1 - displayName: "Pull Docker image" - inputs: - azureSubscriptionEndpoint: "vscode-builds-subscription" - azureContainerRegistry: vscodehub.azurecr.io - command: "Run an image" - imageName: "vscode-linux-build-agent:centos7-devtoolset8-arm64" - containerCommand: uname - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - - script: | - set -e - npm config set registry "$NPM_REGISTRY" --location=project - npm config set always-auth=true --location=project - yarn config set registry "$NPM_REGISTRY" - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM & Yarn - - - task: npmAuthenticate@0 - inputs: - workingFile: .npmrc - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Authentication - - - script: node build/setup-npm-registry.js $NPM_REGISTRY - condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) - displayName: Setup NPM Registry - - - script: | - set -e - $(pwd)/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh - displayName: Install dependencies - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - displayName: Register Docker QEMU - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - docker run -e VSCODE_QUALITY -e GITHUB_TOKEN -v $(pwd):/root/vscode -v ~/.netrc:/root/.netrc vscodehub.azurecr.io/vscode-linux-build-agent:centos7-devtoolset8-arm64 /root/vscode/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh - displayName: Install dependencies via qemu - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) - - - script: | - set -e - tar -cz --ignore-failed-read -f $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz -C $(Build.SourcesDirectory)/remote node_modules - displayName: Compress node_modules output - - - task: PublishPipelineArtifact@0 - displayName: "Publish remote node_modules" - inputs: - artifactName: "reh_node_modules-$(VSCODE_ARCH)" - targetPath: $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz diff --git a/build/azure-pipelines/linux/product-build-linux-client-test.yml b/build/azure-pipelines/linux/product-build-linux-test.yml similarity index 78% rename from build/azure-pipelines/linux/product-build-linux-client-test.yml rename to build/azure-pipelines/linux/product-build-linux-test.yml index 36495873d96..75e73b679a8 100644 --- a/build/azure-pipelines/linux/product-build-linux-client-test.yml +++ b/build/azure-pipelines/linux/product-build-linux-test.yml @@ -9,10 +9,9 @@ parameters: type: boolean steps: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install" + - script: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Download Electron and Playwright - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: @@ -41,40 +40,34 @@ steps: - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests" + - script: ./scripts/test.sh --tfs "Unit Tests" + env: + DISPLAY: ":10" displayName: Run unit tests (Electron) timeoutInMinutes: 15 - - script: | - set -e - yarn test-node + - script: yarn test-node displayName: Run unit tests (node.js) timeoutInMinutes: 15 - - script: | - set -e - DEBUG=*browser* yarn test-browser-no-install --browser chromium --tfs "Browser Unit Tests" + - script: yarn test-browser-no-install --browser chromium --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" displayName: Run unit tests (Browser, Chromium) timeoutInMinutes: 15 - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - ./scripts/test.sh --build --tfs "Unit Tests" + - script: ./scripts/test.sh --build --tfs "Unit Tests" displayName: Run unit tests (Electron) timeoutInMinutes: 15 - - script: | - set -e - yarn test-node --build + - script: yarn test-node --build displayName: Run unit tests (node.js) timeoutInMinutes: 15 - - script: | - set -e - DEBUG=*browser* yarn test-browser-no-install --build --browser chromium --tfs "Browser Unit Tests" + - script: yarn test-browser-no-install --build --browser chromium --tfs "Browser Unit Tests" + env: + DEBUG: "*browser*" displayName: Run unit tests (Browser, Chromium) timeoutInMinutes: 15 @@ -89,6 +82,7 @@ steps: compile-extension:github-authentication \ compile-extension:html-language-features-server \ compile-extension:ipynb \ + compile-extension:notebook-renderers \ compile-extension:json-language-features-server \ compile-extension:markdown-language-features-server \ compile-extension:markdown-language-features \ @@ -102,21 +96,17 @@ steps: - ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - DISPLAY=:10 ./scripts/test-integration.sh --tfs "Integration Tests" + - script: ./scripts/test-integration.sh --tfs "Integration Tests" + env: + DISPLAY: ":10" displayName: Run integration tests (Electron) timeoutInMinutes: 20 - - script: | - set -e - ./scripts/test-web-integration.sh --browser chromium + - script: ./scripts/test-web-integration.sh --browser chromium displayName: Run integration tests (Browser, Chromium) timeoutInMinutes: 20 - - script: | - set -e - ./scripts/test-remote-integration.sh + - script: ./scripts/test-remote-integration.sh displayName: Run integration tests (Remote) timeoutInMinutes: 20 @@ -130,15 +120,15 @@ steps: APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") INTEGRATION_TEST_APP_NAME="$APP_NAME" \ INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \ ./scripts/test-integration.sh --build --tfs "Integration Tests" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH) displayName: Run integration tests (Electron) timeoutInMinutes: 20 - - script: | - set -e - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \ - ./scripts/test-web-integration.sh --browser chromium + - script: ./scripts/test-web-integration.sh --browser chromium + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH) displayName: Run integration tests (Browser, Chromium) timeoutInMinutes: 20 @@ -148,8 +138,9 @@ steps: APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") INTEGRATION_TEST_APP_NAME="$APP_NAME" \ INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \ ./scripts/test-remote-integration.sh + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH) displayName: Run integration tests (Remote) timeoutInMinutes: 20 @@ -164,49 +155,32 @@ steps: condition: succeededOrFailed() - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - yarn --cwd test/smoke compile + - script: yarn --cwd test/smoke compile displayName: Compile smoke tests - - script: | - set -e - yarn gulp \ - compile-extension:markdown-language-features \ - compile-extension-media + - script: yarn gulp compile-extension:markdown-language-features compile-extension-media compile-extension:vscode-test-resolver displayName: Build extensions for smoke tests - - script: | - set -e - yarn smoketest-no-compile --tracing + - script: yarn smoketest-no-compile --tracing timeoutInMinutes: 20 displayName: Run smoke tests (Electron) - - script: | - set -e - yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage" + - script: yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage" timeoutInMinutes: 20 displayName: Run smoke tests (Browser, Chromium) - - script: | - set -e - yarn gulp compile-extension:vscode-test-resolver - yarn smoketest-no-compile --remote --tracing + - script: yarn smoketest-no-compile --remote --tracing timeoutInMinutes: 20 displayName: Run smoke tests (Remote) - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) - yarn smoketest-no-compile --tracing --build "$APP_PATH" + - script: yarn smoketest-no-compile --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)" timeoutInMinutes: 20 displayName: Run smoke tests (Electron) - - script: | - set -e - VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \ - yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage" + - script: yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH) timeoutInMinutes: 20 displayName: Run smoke tests (Browser, Chromium) diff --git a/build/azure-pipelines/linux/product-build-linux.yml b/build/azure-pipelines/linux/product-build-linux.yml new file mode 100644 index 00000000000..38522b2d00e --- /dev/null +++ b/build/azure-pipelines/linux/product-build-linux.yml @@ -0,0 +1,298 @@ +parameters: + - name: VSCODE_QUALITY + type: string + - name: VSCODE_CIBUILD + type: boolean + - name: VSCODE_RUN_UNIT_TESTS + type: boolean + - name: VSCODE_RUN_INTEGRATION_TESTS + type: boolean + - name: VSCODE_RUN_SMOKE_TESTS + type: boolean + - name: VSCODE_ARCH + type: string + +steps: + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - checkout: self + fetchDepth: 1 + retryCountOnTaskFailure: 3 + + - task: NodeTool@0 + inputs: + versionSpec: "16.x" + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - template: ../distro/download-distro.yml + + - task: AzureKeyVault@1 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" + + - task: DownloadPipelineArtifact@2 + inputs: + artifact: Compilation + path: $(Build.ArtifactStagingDirectory) + displayName: Download compilation output + + - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz + displayName: Extract compilation output + + - script: | + set -e + # Start X server + /etc/init.d/xvfb start + # Start dbus session + DBUS_LAUNCH_RESULT=$(sudo dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address) + echo "##vso[task.setvariable variable=DBUS_SESSION_BUS_ADDRESS]$DBUS_LAUNCH_RESULT" + displayName: Setup system services + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) + + - script: node build/setup-npm-registry.js $NPM_REGISTRY + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Registry + + - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/yarnlockhash + displayName: Prepare node_modules cache key + + - task: Cache@2 + inputs: + key: '"node_modules" | .build/yarnlockhash' + path: .build/node_modules_cache + cacheHitVar: NODE_MODULES_RESTORED + displayName: Restore node_modules cache + + - script: tar -xzf .build/node_modules_cache/cache.tgz + condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Extract node_modules cache + + - script: | + set -e + npm config set registry "$NPM_REGISTRY" --location=project + npm config set always-auth=true --location=project + yarn config set registry "$NPM_REGISTRY" + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM & Yarn + + - task: npmAuthenticate@0 + inputs: + workingFile: .npmrc + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Authentication + + # TODO@joaomoreno TODO@deepak1556 this should be part of the base image + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: | + sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg + sudo mkdir -m 0755 -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt update && sudo apt install -y docker-ce-cli + displayName: Install Docker client + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + + - ${{ if and(ne(parameters.VSCODE_QUALITY, 'oss'), or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64'))) }}: + - task: Docker@1 + displayName: "Pull Docker image" + inputs: + azureSubscriptionEndpoint: "vscode-builds-subscription" + azureContainerRegistry: vscodehub.azurecr.io + command: "Run an image" + imageName: vscode-linux-build-agent:centos7-devtoolset8-${{ parameters.VSCODE_ARCH }} + containerCommand: uname + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + + - ${{ if and(ne(parameters.VSCODE_QUALITY, 'oss'), eq(parameters.VSCODE_ARCH, 'arm64')) }}: + - script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + displayName: Register Docker QEMU + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['VSCODE_ARCH'], 'arm64')) + + - script: | + set -e + + for i in {1..5}; do # try 5 times + yarn --cwd build --frozen-lockfile --check-files && break + if [ $i -eq 3 ]; then + echo "Yarn failed too many times" >&2 + exit 1 + fi + echo "Yarn failed $i, trying again..." + done + + if [ -z "$CC" ] || [ -z "$CXX" ]; then + # Download clang based on chromium revision used by vscode + curl -s https://raw.githubusercontent.com/chromium/chromium/108.0.5359.215/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux + # Download libcxx headers and objects from upstream electron releases + DEBUG=libcxx-fetcher \ + VSCODE_LIBCXX_OBJECTS_DIR=$PWD/.build/libcxx-objects \ + VSCODE_LIBCXX_HEADERS_DIR=$PWD/.build/libcxx_headers \ + VSCODE_LIBCXXABI_HEADERS_DIR=$PWD/.build/libcxxabi_headers \ + VSCODE_ARCH="$(NPM_ARCH)" \ + node build/linux/libcxx-fetcher.js + # Set compiler toolchain + # Flags for the client build are based on + # https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:build/config/arm.gni + # https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:build/config/compiler/BUILD.gn + # https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:build/config/c++/BUILD.gn + export CC=$PWD/.build/CR_Clang/bin/clang + export CXX=$PWD/.build/CR_Clang/bin/clang++ + export CXXFLAGS="-nostdinc++ -D__NO_INLINE__ -I$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit -D_LIBCPP_ABI_NAMESPACE=Cr" + export LDFLAGS="-stdlib=libc++ -fuse-ld=lld -flto=thin -L$PWD/.build/libcxx-objects -lc++abi -Wl,--lto-O0" + export VSCODE_REMOTE_CC=$(which gcc) + export VSCODE_REMOTE_CXX=$(which g++) + fi + + for i in {1..5}; do # try 5 times + yarn --frozen-lockfile --check-files && break + if [ $i -eq 3 ]; then + echo "Yarn failed too many times" >&2 + exit 1 + fi + echo "Yarn failed $i, trying again..." + done + env: + npm_config_arch: $(NPM_ARCH) + ELECTRON_SKIP_BINARY_DOWNLOAD: 1 + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 + GITHUB_TOKEN: "$(github-distro-mixin-password)" + ${{ if and(ne(parameters.VSCODE_QUALITY, 'oss'), or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64'))) }}: + VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME: vscodehub.azurecr.io/vscode-linux-build-agent:centos7-devtoolset8-${{ parameters.VSCODE_ARCH }} + displayName: Install dependencies + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules + + - script: | + set -e + node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt + mkdir -p .build/node_modules_cache + tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Create node_modules archive + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality + + - template: ../common/install-builtin-extensions.yml + + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build client + + - script: yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server + + - script: yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build server (web) + + - ${{ else }}: + - script: yarn gulp "transpile-client-swc" "transpile-extensions" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Transpile + + - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + - template: product-build-linux-test.yml + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} + VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} + + - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}: + - task: DownloadPipelineArtifact@2 + inputs: + artifact: vscode_cli_linux_$(VSCODE_ARCH)_cli + patterns: "**" + path: $(Build.ArtifactStagingDirectory)/cli + displayName: Download VS Code CLI + + - script: | + set -e + tar -xzvf $(Build.ArtifactStagingDirectory)/cli/*.tar.gz -C $(Build.ArtifactStagingDirectory)/cli + CLI_APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").tunnelApplicationName") + APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").applicationName") + mv $(Build.ArtifactStagingDirectory)/cli/$APP_NAME $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/$CLI_APP_NAME + displayName: Make CLI executable + + - script: yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb" + displayName: Build deb package + + - script: yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm" + displayName: Build rpm package + + - script: yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap" + displayName: Prepare snap package + + - task: UseDotNet@2 + inputs: + version: 6.x + + - task: EsrpClientTool@1 + continueOnError: true + displayName: Download ESRPClient + + - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll rpm $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm' + displayName: Codesign rpm + + - script: ./build/azure-pipelines/linux/prepare-publish.sh + displayName: Prepare for Publish + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: Generate SBOM (client) + inputs: + BuildDropPath: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) + PackageName: Visual Studio Code + + - publish: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/_manifest + displayName: Publish SBOM (client) + artifact: vscode_client_linux_$(VSCODE_ARCH)_sbom + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: Generate SBOM (server) + inputs: + BuildDropPath: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) + PackageName: Visual Studio Code Server + + - publish: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)/_manifest + displayName: Publish SBOM (server) + artifact: vscode_server_linux_$(VSCODE_ARCH)_sbom + + - publish: $(DEB_PATH) + artifact: vscode_client_linux_$(VSCODE_ARCH)_deb-package + displayName: Publish deb package + + - publish: $(RPM_PATH) + artifact: vscode_client_linux_$(VSCODE_ARCH)_rpm-package + displayName: Publish rpm package + + - publish: $(TARBALL_PATH) + artifact: vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned + displayName: Publish client archive + + - publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz + artifact: vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned + displayName: Publish server archive + + - publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz + artifact: vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned + displayName: Publish web server archive + + - task: PublishPipelineArtifact@0 + displayName: "Publish Pipeline Artifact" + inputs: + artifactName: "snap-$(VSCODE_ARCH)" + targetPath: .build/linux/snap-tarball diff --git a/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh b/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh deleted file mode 100755 index b5c316133d0..00000000000 --- a/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -set -e - -echo "Installing remote dependencies" -(cd remote && rm -rf node_modules) - -for i in {1..5}; do # try 5 times - yarn --cwd remote --frozen-lockfile --check-files && break - if [ $i -eq 3 ]; then - echo "Yarn failed too many times" >&2 - exit 1 - fi - echo "Yarn failed $i, trying again..." -done diff --git a/build/azure-pipelines/linux/snap-build-linux.yml b/build/azure-pipelines/linux/snap-build-linux.yml index 12829334956..9002fcff5d7 100644 --- a/build/azure-pipelines/linux/snap-build-linux.yml +++ b/build/azure-pipelines/linux/snap-build-linux.yml @@ -45,7 +45,7 @@ steps: x64) SNAPCRAFT_TARGET_ARGS="" ;; *) SNAPCRAFT_TARGET_ARGS="--target-arch $(VSCODE_ARCH)" ;; esac - (cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft prime $SNAPCRAFT_TARGET_ARGS && snap pack prime --compression=lzo --filename="$SNAP_PATH") + (cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft snap $SNAPCRAFT_TARGET_ARGS --output "$SNAP_PATH") # Export SNAP_PATH echo "##vso[task.setvariable variable=SNAP_PATH]$SNAP_PATH" @@ -54,4 +54,3 @@ steps: - publish: $(SNAP_PATH) artifact: vscode_client_linux_$(VSCODE_ARCH)_snap displayName: Publish snap package - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) diff --git a/build/azure-pipelines/mixin-distro-posix.yml b/build/azure-pipelines/mixin-distro-posix.yml deleted file mode 100644 index 725f62eea9d..00000000000 --- a/build/azure-pipelines/mixin-distro-posix.yml +++ /dev/null @@ -1,40 +0,0 @@ -parameters: - - name: VSCODE_QUALITY - type: string - -steps: - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password" - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro diff --git a/build/azure-pipelines/mixin-distro-win32.yml b/build/azure-pipelines/mixin-distro-win32.yml deleted file mode 100644 index e215c7bf86f..00000000000 --- a/build/azure-pipelines/mixin-distro-win32.yml +++ /dev/null @@ -1,40 +0,0 @@ -parameters: - - name: VSCODE_QUALITY - type: string - -steps: - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password" - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII - - exec { git config user.email "vscode@microsoft.com" } - exec { git config user.name "VSCode" } - displayName: Prepare tooling - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - - exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) } - Write-Host "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - exec { git checkout FETCH_HEAD } - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") } - displayName: Merge distro diff --git a/build/azure-pipelines/mixin.js b/build/azure-pipelines/mixin.js deleted file mode 100644 index 3dda0c05a46..00000000000 --- a/build/azure-pipelines/mixin.js +++ /dev/null @@ -1,87 +0,0 @@ -"use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); -const json = require("gulp-json-editor"); -const buffer = require('gulp-buffer'); -const filter = require("gulp-filter"); -const es = require("event-stream"); -const vfs = require("vinyl-fs"); -const fancyLog = require("fancy-log"); -const ansiColors = require("ansi-colors"); -const fs = require("fs"); -const path = require("path"); -async function mixinClient(quality) { - const productJsonFilter = filter(f => f.relative === 'product.json', { restore: true }); - fancyLog(ansiColors.blue('[mixin]'), `Mixing in client:`); - return new Promise((c, e) => { - vfs - .src(`quality/${quality}/**`, { base: `quality/${quality}` }) - .pipe(filter(f => !f.isDirectory())) - .pipe(filter(f => f.relative !== 'product.server.json')) - .pipe(productJsonFilter) - .pipe(buffer()) - .pipe(json((o) => { - const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8')); - let builtInExtensions = originalProduct.builtInExtensions; - if (Array.isArray(o.builtInExtensions)) { - fancyLog(ansiColors.blue('[mixin]'), 'Overwriting built-in extensions:', o.builtInExtensions.map(e => e.name)); - builtInExtensions = o.builtInExtensions; - } - else if (o.builtInExtensions) { - const include = o.builtInExtensions['include'] || []; - const exclude = o.builtInExtensions['exclude'] || []; - fancyLog(ansiColors.blue('[mixin]'), 'OSS built-in extensions:', builtInExtensions.map(e => e.name)); - fancyLog(ansiColors.blue('[mixin]'), 'Including built-in extensions:', include.map(e => e.name)); - fancyLog(ansiColors.blue('[mixin]'), 'Excluding built-in extensions:', exclude); - builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name)); - builtInExtensions = [...builtInExtensions, ...include]; - fancyLog(ansiColors.blue('[mixin]'), 'Final built-in extensions:', builtInExtensions.map(e => e.name)); - } - else { - fancyLog(ansiColors.blue('[mixin]'), 'Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name)); - } - return { webBuiltInExtensions: originalProduct.webBuiltInExtensions, ...o, builtInExtensions }; - })) - .pipe(productJsonFilter.restore) - .pipe(es.mapSync((f) => { - fancyLog(ansiColors.blue('[mixin]'), f.relative, ansiColors.green('āœ”ļøŽ')); - return f; - })) - .pipe(vfs.dest('.')) - .on('end', () => c()) - .on('error', (err) => e(err)); - }); -} -function mixinServer(quality) { - const serverProductJsonPath = `quality/${quality}/product.server.json`; - if (!fs.existsSync(serverProductJsonPath)) { - fancyLog(ansiColors.blue('[mixin]'), `Server product not found`, serverProductJsonPath); - return; - } - fancyLog(ansiColors.blue('[mixin]'), `Mixing in server:`); - const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8')); - const serverProductJson = JSON.parse(fs.readFileSync(serverProductJsonPath, 'utf8')); - fs.writeFileSync('product.json', JSON.stringify({ ...originalProduct, ...serverProductJson }, undefined, '\t')); - fancyLog(ansiColors.blue('[mixin]'), 'product.json', ansiColors.green('āœ”ļøŽ')); -} -function main() { - const quality = process.env['VSCODE_QUALITY']; - if (!quality) { - console.log('Missing VSCODE_QUALITY, skipping mixin'); - return; - } - if (process.argv[2] === '--server') { - mixinServer(quality); - } - else { - mixinClient(quality).catch(err => { - console.error(err); - process.exit(1); - }); - } -} -main(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtaXhpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlDQUF5QztBQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdEMsc0NBQXNDO0FBQ3RDLG1DQUFtQztBQUVuQyxnQ0FBZ0M7QUFDaEMsc0NBQXNDO0FBQ3RDLDBDQUEwQztBQUMxQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBbUI3QixLQUFLLFVBQVUsV0FBVyxDQUFDLE9BQWU7SUFDekMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXhGLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFMUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQixHQUFHO2FBQ0QsR0FBRyxDQUFDLFdBQVcsT0FBTyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxPQUFPLEVBQUUsRUFBRSxDQUFDO2FBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLHFCQUFxQixDQUFDLENBQUM7YUFDdkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtZQUN6QixNQUFNLGVB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 \ No newline at end of file diff --git a/build/azure-pipelines/mixin.ts b/build/azure-pipelines/mixin.ts deleted file mode 100644 index aec694a61df..00000000000 --- a/build/azure-pipelines/mixin.ts +++ /dev/null @@ -1,117 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as json from 'gulp-json-editor'; -const buffer = require('gulp-buffer'); -import * as filter from 'gulp-filter'; -import * as es from 'event-stream'; -import * as Vinyl from 'vinyl'; -import * as vfs from 'vinyl-fs'; -import * as fancyLog from 'fancy-log'; -import * as ansiColors from 'ansi-colors'; -import * as fs from 'fs'; -import * as path from 'path'; - -interface IBuiltInExtension { - readonly name: string; - readonly version: string; - readonly repo: string; - readonly metadata: any; -} - -interface OSSProduct { - readonly builtInExtensions: IBuiltInExtension[]; - readonly webBuiltInExtensions?: IBuiltInExtension[]; -} - -interface Product { - readonly builtInExtensions?: IBuiltInExtension[] | { 'include'?: IBuiltInExtension[]; 'exclude'?: string[] }; - readonly webBuiltInExtensions?: IBuiltInExtension[]; -} - -async function mixinClient(quality: string): Promise { - const productJsonFilter = filter(f => f.relative === 'product.json', { restore: true }); - - fancyLog(ansiColors.blue('[mixin]'), `Mixing in client:`); - - return new Promise((c, e) => { - vfs - .src(`quality/${quality}/**`, { base: `quality/${quality}` }) - .pipe(filter(f => !f.isDirectory())) - .pipe(filter(f => f.relative !== 'product.server.json')) - .pipe(productJsonFilter) - .pipe(buffer()) - .pipe(json((o: Product) => { - const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8')) as OSSProduct; - let builtInExtensions = originalProduct.builtInExtensions; - - if (Array.isArray(o.builtInExtensions)) { - fancyLog(ansiColors.blue('[mixin]'), 'Overwriting built-in extensions:', o.builtInExtensions.map(e => e.name)); - - builtInExtensions = o.builtInExtensions; - } else if (o.builtInExtensions) { - const include = o.builtInExtensions['include'] || []; - const exclude = o.builtInExtensions['exclude'] || []; - - fancyLog(ansiColors.blue('[mixin]'), 'OSS built-in extensions:', builtInExtensions.map(e => e.name)); - fancyLog(ansiColors.blue('[mixin]'), 'Including built-in extensions:', include.map(e => e.name)); - fancyLog(ansiColors.blue('[mixin]'), 'Excluding built-in extensions:', exclude); - - builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name)); - builtInExtensions = [...builtInExtensions, ...include]; - - fancyLog(ansiColors.blue('[mixin]'), 'Final built-in extensions:', builtInExtensions.map(e => e.name)); - } else { - fancyLog(ansiColors.blue('[mixin]'), 'Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name)); - } - - return { webBuiltInExtensions: originalProduct.webBuiltInExtensions, ...o, builtInExtensions }; - })) - .pipe(productJsonFilter.restore) - .pipe(es.mapSync((f: Vinyl) => { - fancyLog(ansiColors.blue('[mixin]'), f.relative, ansiColors.green('āœ”ļøŽ')); - return f; - })) - .pipe(vfs.dest('.')) - .on('end', () => c()) - .on('error', (err: any) => e(err)); - }); -} - -function mixinServer(quality: string) { - const serverProductJsonPath = `quality/${quality}/product.server.json`; - - if (!fs.existsSync(serverProductJsonPath)) { - fancyLog(ansiColors.blue('[mixin]'), `Server product not found`, serverProductJsonPath); - return; - } - - fancyLog(ansiColors.blue('[mixin]'), `Mixing in server:`); - - const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8')) as OSSProduct; - const serverProductJson = JSON.parse(fs.readFileSync(serverProductJsonPath, 'utf8')); - fs.writeFileSync('product.json', JSON.stringify({ ...originalProduct, ...serverProductJson }, undefined, '\t')); - fancyLog(ansiColors.blue('[mixin]'), 'product.json', ansiColors.green('āœ”ļøŽ')); -} - -function main() { - const quality = process.env['VSCODE_QUALITY']; - - if (!quality) { - console.log('Missing VSCODE_QUALITY, skipping mixin'); - return; - } - - if (process.argv[2] === '--server') { - mixinServer(quality); - } else { - mixinClient(quality).catch(err => { - console.error(err); - process.exit(1); - }); - } -} - -main(); diff --git a/build/azure-pipelines/product-build-pr-cache.yml b/build/azure-pipelines/oss/product-build-pr-cache-linux.yml similarity index 72% rename from build/azure-pipelines/product-build-pr-cache.yml rename to build/azure-pipelines/oss/product-build-pr-cache-linux.yml index 35c316555fd..97eba56abc3 100644 --- a/build/azure-pipelines/product-build-pr-cache.yml +++ b/build/azure-pipelines/oss/product-build-pr-cache-linux.yml @@ -11,28 +11,17 @@ steps: condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Registry - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags + - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/yarnlockhash + displayName: Prepare node_modules cache key - task: Cache@2 inputs: - key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash" + key: '"node_modules" | .build/yarnlockhash' path: .build/node_modules_cache cacheHitVar: NODE_MODULES_RESTORED displayName: Restore node_modules cache - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz + - script: tar -xzf .build/node_modules_cache/cache.tgz condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) displayName: Extract node_modules cache @@ -67,13 +56,6 @@ steps: displayName: Install dependencies condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions - - script: | set -e node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt diff --git a/build/azure-pipelines/product-build-pr-cache-win32.yml b/build/azure-pipelines/oss/product-build-pr-cache-win32.yml similarity index 67% rename from build/azure-pipelines/product-build-pr-cache-win32.yml rename to build/azure-pipelines/oss/product-build-pr-cache-win32.yml index 98e999813f0..61b0bf37d25 100644 --- a/build/azure-pipelines/product-build-pr-cache-win32.yml +++ b/build/azure-pipelines/oss/product-build-pr-cache-win32.yml @@ -7,36 +7,23 @@ steps: inputs: versionSpec: "16.x" - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build/setup-npm-registry.js $env:NPM_REGISTRY } + - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Registry - - powershell: | - if (!(Test-Path ".build")) { New-Item -Path ".build" -ItemType Directory } - node build/azure-pipelines/common/computeNodeModulesCacheKey.js $(VSCODE_ARCH) > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags + - pwsh: | + mkdir .build -ea 0 + node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/yarnlockhash + displayName: Prepare node_modules cache key - task: Cache@2 inputs: - key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash" + key: '"node_modules" | .build/yarnlockhash' path: .build/node_modules_cache cacheHitVar: NODE_MODULES_RESTORED displayName: Restore node_modules cache - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { 7z.exe x .build/node_modules_cache/cache.7z -aos } + - powershell: 7z.exe x .build/node_modules_cache/cache.7z -aoa condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) displayName: Extract node_modules cache @@ -69,14 +56,6 @@ steps: displayName: Install dependencies condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build/lib/builtInExtensions.js } - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions - - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" diff --git a/build/azure-pipelines/product-build-pr.yml b/build/azure-pipelines/product-build-pr.yml index 94daf187e9c..789996060ec 100644 --- a/build/azure-pipelines/product-build-pr.yml +++ b/build/azure-pipelines/product-build-pr.yml @@ -15,8 +15,6 @@ variables: value: "none" - name: VSCODE_CIBUILD value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }} - - name: VSCODE_PUBLISH - value: false - name: VSCODE_QUALITY value: oss - name: VSCODE_STEP_ON_IT @@ -26,7 +24,7 @@ jobs: - ${{ if ne(variables['VSCODE_CIBUILD'], true) }}: - job: Compile displayName: Compile & Hygiene - pool: vscode-1es-vscode-linux-20.04 + pool: 1es-oss-ubuntu-20.04-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 @@ -37,68 +35,68 @@ jobs: - job: Linuxx64UnitTest displayName: Linux (Unit Tests) - pool: vscode-1es-vscode-linux-20.04 + pool: 1es-oss-ubuntu-20.04-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 NPM_ARCH: x64 DISPLAY: ":10" steps: - - template: linux/product-build-linux-client.yml + - template: linux/product-build-linux.yml parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} + VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: true VSCODE_RUN_INTEGRATION_TESTS: false VSCODE_RUN_SMOKE_TESTS: false - job: Linuxx64IntegrationTest displayName: Linux (Integration Tests) - pool: vscode-1es-vscode-linux-20.04 + pool: 1es-oss-ubuntu-20.04-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 NPM_ARCH: x64 DISPLAY: ":10" steps: - - template: linux/product-build-linux-client.yml + - template: linux/product-build-linux.yml parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} + VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: true VSCODE_RUN_SMOKE_TESTS: false - job: Linuxx64SmokeTest displayName: Linux (Smoke Tests) - pool: vscode-1es-vscode-linux-20.04 + pool: 1es-oss-ubuntu-20.04-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 NPM_ARCH: x64 DISPLAY: ":10" steps: - - template: linux/product-build-linux-client.yml + - template: linux/product-build-linux.yml parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} + VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: false VSCODE_RUN_SMOKE_TESTS: true - job: LinuxCLI displayName: Linux (CLI) - pool: vscode-1es-vscode-linux-20.04 + pool: 1es-oss-ubuntu-20.04-x64 timeoutInMinutes: 30 steps: - template: cli/test.yml - job: Windowsx64UnitTests displayName: Windows (Unit Tests) - pool: vscode-1es-vscode-windows-2019 + pool: 1es-oss-windows-2019-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 @@ -106,16 +104,15 @@ jobs: steps: - template: win32/product-build-win32.yml parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: true VSCODE_RUN_INTEGRATION_TESTS: false VSCODE_RUN_SMOKE_TESTS: false - job: Windowsx64IntegrationTests displayName: Windows (Integration Tests) - pool: vscode-1es-vscode-windows-2019 + pool: 1es-oss-windows-2019-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 @@ -123,16 +120,15 @@ jobs: steps: - template: win32/product-build-win32.yml parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} VSCODE_RUN_UNIT_TESTS: false VSCODE_RUN_INTEGRATION_TESTS: true VSCODE_RUN_SMOKE_TESTS: false # - job: Windowsx64SmokeTests # displayName: Windows (Smoke Tests) - # pool: vscode-1es-vscode-windows-2019 + # pool: 1es-oss-windows-2019-x64 # timeoutInMinutes: 30 # variables: # VSCODE_ARCH: x64 @@ -140,9 +136,7 @@ jobs: # steps: # - template: win32/product-build-win32.yml # parameters: - # VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} # VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - # VSCODE_BUILD_TUNNEL_CLI: false # VSCODE_RUN_UNIT_TESTS: false # VSCODE_RUN_INTEGRATION_TESTS: false # VSCODE_RUN_SMOKE_TESTS: true @@ -150,21 +144,21 @@ jobs: - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: - job: Linuxx64MaintainNodeModulesCache displayName: Linux (Maintain node_modules cache) - pool: vscode-1es-vscode-linux-20.04 + pool: 1es-oss-ubuntu-20.04-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 steps: - - template: product-build-pr-cache.yml + - template: oss/product-build-pr-cache-linux.yml - job: Windowsx64MaintainNodeModulesCache displayName: Windows (Maintain node_modules cache) - pool: vscode-1es-vscode-windows-2019 + pool: 1es-oss-windows-2019-x64 timeoutInMinutes: 30 variables: VSCODE_ARCH: x64 steps: - - template: product-build-pr-cache-win32.yml + - template: oss/product-build-pr-cache-win32.yml # - job: macOSUnitTest # displayName: macOS (Unit Tests) @@ -177,7 +171,6 @@ jobs: # steps: # - template: darwin/product-build-darwin.yml # parameters: - # VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} # VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} # VSCODE_RUN_UNIT_TESTS: true # VSCODE_RUN_INTEGRATION_TESTS: false @@ -193,7 +186,6 @@ jobs: # steps: # - template: darwin/product-build-darwin.yml # parameters: - # VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} # VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} # VSCODE_RUN_UNIT_TESTS: false # VSCODE_RUN_INTEGRATION_TESTS: true @@ -209,7 +201,6 @@ jobs: # steps: # - template: darwin/product-build-darwin.yml # parameters: - # VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} # VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} # VSCODE_RUN_UNIT_TESTS: false # VSCODE_RUN_INTEGRATION_TESTS: false diff --git a/build/azure-pipelines/product-build.yml b/build/azure-pipelines/product-build.yml index 6c561a4fb12..7407cd1825b 100644 --- a/build/azure-pipelines/product-build.yml +++ b/build/azure-pipelines/product-build.yml @@ -6,17 +6,12 @@ schedules: branches: include: - main - - joao/web trigger: branches: include: ["main", "release/*"] parameters: - - name: VSCODE_DISTRO_REF - displayName: Distro Ref (Private build) - type: string - default: " " - name: VSCODE_QUALITY displayName: Quality type: string @@ -77,10 +72,6 @@ parameters: displayName: "šŸŽÆ Web" type: boolean default: true - - name: VSCODE_BUILD_TUNNEL_CLI - displayName: "Build Tunnel CLI" - type: boolean - default: true - name: VSCODE_PUBLISH displayName: "Publish to builds.code.visualstudio.com" type: boolean @@ -103,8 +94,8 @@ parameters: default: false variables: - - name: VSCODE_DISTRO_REF - value: ${{ parameters.VSCODE_DISTRO_REF }} + - name: VSCODE_PRIVATE_BUILD + value: ${{ ne(variables['Build.Repository.Uri'], 'https://github.com/microsoft/vscode.git') }} - name: NPM_REGISTRY value: ${{ parameters.NPM_REGISTRY }} - name: VSCODE_QUALITY @@ -122,11 +113,13 @@ variables: - name: VSCODE_CIBUILD value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }} - name: VSCODE_PUBLISH - value: ${{ and(eq(parameters.VSCODE_PUBLISH, true), eq(variables.VSCODE_CIBUILD, false)) }} + value: ${{ and(eq(parameters.VSCODE_PUBLISH, true), eq(variables.VSCODE_CIBUILD, false), eq(parameters.VSCODE_COMPILE_ONLY, false)) }} - name: VSCODE_PUBLISH_TO_MOONCAKE value: ${{ eq(parameters.VSCODE_PUBLISH_TO_MOONCAKE, true) }} - name: VSCODE_SCHEDULEDBUILD value: ${{ eq(variables['Build.Reason'], 'Schedule') }} + - name: VSCODE_7PM_BUILD + value: ${{ in(variables['Build.Reason'], 'BuildCompletion', 'ResourceTrigger') }} - name: VSCODE_STEP_ON_IT value: ${{ eq(parameters.VSCODE_STEP_ON_IT, true) }} - name: VSCODE_BUILD_MACOS_UNIVERSAL @@ -153,25 +146,26 @@ resources: endpoint: VSCodeHub options: --user 0:0 --cap-add SYS_ADMIN - container: vscode-arm64 - image: vscodehub.azurecr.io/vscode-linux-build-agent:stretch-arm64 + image: vscodehub.azurecr.io/vscode-linux-build-agent:bionic-arm64 endpoint: VSCodeHub options: --user 0:0 --cap-add SYS_ADMIN - container: vscode-armhf - image: vscodehub.azurecr.io/vscode-linux-build-agent:stretch-armhf - endpoint: VSCodeHub - options: --user 0:0 --cap-add SYS_ADMIN - - container: centos7-devtoolset8-x64 - image: vscodehub.azurecr.io/vscode-linux-build-agent:centos7-devtoolset8-x64 + image: vscodehub.azurecr.io/vscode-linux-build-agent:bionic-armhf endpoint: VSCodeHub options: --user 0:0 --cap-add SYS_ADMIN - container: snapcraft - image: snapcore/snapcraft:stable + image: vscodehub.azurecr.io/vscode-linux-build-agent:snapcraft-x64 + endpoint: VSCodeHub + pipelines: + - pipeline: vscode-7pm-kick-off + source: 'VS Code 7PM Kick-Off' + trigger: true stages: - stage: Compile jobs: - job: Compile - pool: vscode-1es-linux + pool: 1es-ubuntu-20.04-x64 variables: VSCODE_ARCH: x64 steps: @@ -179,594 +173,529 @@ stages: parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - - stage: CompileCLI - dependsOn: [] + - stage: CompileCLI + dependsOn: [] + jobs: + - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: + - job: CLILinuxX64 + pool: 1es-ubuntu-20.04-x64 + steps: + - template: ./linux/cli-build-linux.yml + parameters: + VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }} + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_LINUX: ${{ parameters.VSCODE_BUILD_LINUX }} + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true))) }}: + - job: CLILinuxGnuARM + pool: 1es-ubuntu-20.04-x64 + steps: + - template: ./linux/cli-build-linux.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_LINUX_ARMHF: ${{ parameters.VSCODE_BUILD_LINUX_ARMHF }} + VSCODE_BUILD_LINUX_ARM64: ${{ parameters.VSCODE_BUILD_LINUX_ARM64 }} + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}: + - job: CLIAlpineX64 + pool: 1es-ubuntu-20.04-x64 + steps: + - template: ./alpine/cli-build-alpine.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_ALPINE: ${{ parameters.VSCODE_BUILD_ALPINE }} + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}: + - job: CLIAlpineARM64 + pool: 1es-ubuntu-20.04-arm64 + steps: + - bash: sudo apt update && sudo apt install -y unzip + displayName: Install unzip + - template: ./alpine/cli-build-alpine.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_ALPINE_ARM64: ${{ parameters.VSCODE_BUILD_ALPINE_ARM64 }} + + - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: + - job: CLIMacOSX64 + pool: + vmImage: macOS-11 + steps: + - template: ./darwin/cli-build-darwin.yml + parameters: + VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }} + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }} + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}: + - job: CLIMacOSARM64 + pool: + vmImage: macOS-11 + steps: + - template: ./darwin/cli-build-darwin.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }} + + - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}: + - job: CLIWindowsX64 + pool: 1es-windows-2019-x64 + steps: + - template: ./win32/cli-build-win32.yml + parameters: + VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }} + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }} + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}: + - job: CLIWindowsARM64 + pool: 1es-windows-2019-x64 + steps: + - template: ./win32/cli-build-win32.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }} + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}: + - job: CLIWindowsX86 + pool: 1es-windows-2019-x64 + steps: + - template: ./win32/cli-build-win32.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_BUILD_WIN32_32BIT: ${{ parameters.VSCODE_BUILD_WIN32_32BIT }} + + - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}: + - stage: Windows + dependsOn: + - Compile + - CompileCLI + pool: 1es-windows-2019-x64 jobs: - - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}: - - job: LinuxX64 - pool: vscode-1es-linux + - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: + - job: WindowsUnitTests + displayName: Unit Tests + timeoutInMinutes: 60 + variables: + VSCODE_ARCH: x64 steps: - - template: ./linux/cli-build-linux.yml + - template: win32/product-build-win32.yml parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_LINUX: ${{ parameters.VSCODE_BUILD_LINUX }} - VSCODE_BUILD_ALPINE: ${{ parameters.VSCODE_BUILD_ALPINE }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: true + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false + - job: WindowsIntegrationTests + displayName: Integration Tests + timeoutInMinutes: 60 + variables: + VSCODE_ARCH: x64 + steps: + - template: win32/product-build-win32.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: true + VSCODE_RUN_SMOKE_TESTS: false + - job: WindowsSmokeTests + displayName: Smoke Tests + timeoutInMinutes: 60 + variables: + VSCODE_ARCH: x64 + steps: + - template: win32/product-build-win32.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: true - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true))) }}: - - job: LinuxGnuARM - pool: vscode-1es-linux + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32, true)) }}: + - job: Windows + timeoutInMinutes: 120 + variables: + VSCODE_ARCH: x64 steps: - - template: ./linux/cli-build-linux.yml + - template: win32/product-build-win32.yml parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_LINUX_ARMHF: ${{ parameters.VSCODE_BUILD_LINUX_ARMHF }} - VSCODE_BUILD_LINUX_ARM64: ${{ parameters.VSCODE_BUILD_LINUX_ARM64 }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}: - - job: LinuxAlpineARM64 - pool: vscode-1es-linux-20.04-arm64 + - job: WindowsCLISign + timeoutInMinutes: 90 steps: - - task: NodeTool@0 - displayName: Install Node.js - inputs: - versionSpec: 16.x - - script: | - set -e - npm install -g yarn - displayName: Install yarn - - template: ./linux/cli-build-linux.yml + - template: win32/product-build-win32-cli-sign.yml parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_ALPINE_ARM64: ${{ parameters.VSCODE_BUILD_ALPINE_ARM64 }} - - - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}: - - job: MacOSX64 - pool: - vmImage: macOS-11 - steps: - - template: ./darwin/cli-build-darwin.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }} - - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}: - - job: MacOSARM64 - pool: - vmImage: macOS-11 - steps: - - template: ./darwin/cli-build-darwin.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }} - - - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}: - - job: WindowsX64 - pool: vscode-1es-windows - steps: - - template: ./win32/cli-build-win32.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }} + VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }} + VSCODE_BUILD_WIN32_32BIT: ${{ parameters.VSCODE_BUILD_WIN32_32BIT }} + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}: + - job: Windows32 + timeoutInMinutes: 120 + variables: + VSCODE_ARCH: ia32 + steps: + - template: win32/product-build-win32.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}: - job: WindowsARM64 - pool: vscode-1es-windows + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: arm64 steps: - - template: ./win32/cli-build-win32.yml + - template: win32/product-build-win32.yml parameters: VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}: - - job: WindowsX86 - pool: vscode-1es-windows + - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}: + - stage: Linux + dependsOn: + - Compile + - CompileCLI + pool: 1es-ubuntu-20.04-x64 + jobs: + - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: + - job: Linuxx64UnitTest + displayName: Unit Tests + container: vscode-bionic-x64 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + DISPLAY: ":10" steps: - - template: ./win32/cli-build-win32.yml + - template: linux/product-build-linux.yml parameters: + VSCODE_ARCH: x64 VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_WIN32_32BIT: ${{ parameters.VSCODE_BUILD_WIN32_32BIT }} - - - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}: - - stage: Windows - dependsOn: - - Compile - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - - CompileCLI - pool: vscode-1es-windows - jobs: - - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: - - job: WindowsUnitTests - displayName: Unit Tests - timeoutInMinutes: 60 - variables: + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: true + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false + - job: Linuxx64IntegrationTest + displayName: Integration Tests + container: vscode-bionic-x64 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + DISPLAY: ":10" + steps: + - template: linux/product-build-linux.yml + parameters: VSCODE_ARCH: x64 - steps: - - template: win32/product-build-win32.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: true - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false - - job: WindowsIntegrationTests - displayName: Integration Tests - timeoutInMinutes: 60 - variables: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: true + VSCODE_RUN_SMOKE_TESTS: false + - job: Linuxx64SmokeTest + displayName: Smoke Tests + container: vscode-bionic-x64 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + DISPLAY: ":10" + steps: + - template: linux/product-build-linux.yml + parameters: VSCODE_ARCH: x64 - steps: - - template: win32/product-build-win32.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: true - VSCODE_RUN_SMOKE_TESTS: false - - job: WindowsSmokeTests - displayName: Smoke Tests - timeoutInMinutes: 60 - variables: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: true + + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}: + - job: Linuxx64 + container: vscode-bionic-x64 + variables: + VSCODE_ARCH: x64 + NPM_ARCH: x64 + DISPLAY: ":10" + steps: + - template: linux/product-build-linux.yml + parameters: VSCODE_ARCH: x64 - steps: - - template: win32/product-build-win32.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: true + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32, true)) }}: - - job: Windows - timeoutInMinutes: 120 - variables: - VSCODE_ARCH: x64 - steps: - - template: win32/product-build-win32.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}: + - job: LinuxSnap + dependsOn: + - Linuxx64 + container: snapcraft + variables: + VSCODE_ARCH: x64 + steps: + - template: linux/snap-build-linux.yml - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}: - - job: Windows32 - timeoutInMinutes: 120 - variables: - VSCODE_ARCH: ia32 - steps: - - template: win32/product-build-win32.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}: - - job: WindowsARM64 - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: arm64 - steps: - - template: win32/product-build-win32.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false - - - ${{ if and(eq(variables['VSCODE_PUBLISH'], true), eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true)) }}: - - job: windowsCLISign - timeoutInMinutes: 90 - steps: - - template: win32/product-build-win32-cli-sign.yml - parameters: - VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }} - VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }} - VSCODE_BUILD_WIN32_32BIT: ${{ parameters.VSCODE_BUILD_WIN32_32BIT }} - - - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}: - - stage: LinuxServerDependencies - dependsOn: [] # run in parallel to compile stage - pool: vscode-1es-linux - jobs: - - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}: - - job: x64 - container: centos7-devtoolset8-x64 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - steps: - - template: linux/product-build-linux-server.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}: - - job: arm64 - variables: - VSCODE_ARCH: arm64 - steps: - - template: linux/product-build-linux-server.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - - - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}: - - stage: Linux - dependsOn: - - Compile - - LinuxServerDependencies - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - - CompileCLI - pool: vscode-1es-linux - jobs: - - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: - - job: Linuxx64UnitTest - displayName: Unit Tests - container: vscode-bionic-x64 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - DISPLAY: ":10" - steps: - - template: linux/product-build-linux-client.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: true - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false - - job: Linuxx64IntegrationTest - displayName: Integration Tests - container: vscode-bionic-x64 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - DISPLAY: ":10" - steps: - - template: linux/product-build-linux-client.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: true - VSCODE_RUN_SMOKE_TESTS: false - - job: Linuxx64SmokeTest - displayName: Smoke Tests - container: vscode-bionic-x64 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - DISPLAY: ":10" - steps: - - template: linux/product-build-linux-client.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: true - - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}: - - job: Linuxx64 - container: vscode-bionic-x64 - variables: - VSCODE_ARCH: x64 - NPM_ARCH: x64 - DISPLAY: ":10" - steps: - - template: linux/product-build-linux-client.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true), ne(variables['VSCODE_PUBLISH'], 'false')) }}: - - job: LinuxSnap - dependsOn: - - Linuxx64 - container: snapcraft - variables: - VSCODE_ARCH: x64 - steps: - - template: linux/snap-build-linux.yml - - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}: - - job: LinuxArmhf - container: vscode-armhf - variables: + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}: + - job: LinuxArmhf + container: vscode-armhf + variables: + VSCODE_ARCH: armhf + NPM_ARCH: arm + steps: + - template: linux/product-build-linux.yml + parameters: VSCODE_ARCH: armhf - NPM_ARCH: armv7l - steps: - - template: linux/product-build-linux-client.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false - # TODO@joaomoreno: We don't ship ARM snaps for now - - ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}: - - job: LinuxSnapArmhf - dependsOn: - - LinuxArmhf - container: snapcraft - variables: - VSCODE_ARCH: armhf - steps: - - template: linux/snap-build-linux.yml - - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}: - - job: LinuxArm64 - container: vscode-arm64 - variables: + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}: + - job: LinuxArm64 + container: vscode-arm64 + variables: + VSCODE_ARCH: arm64 + NPM_ARCH: arm64 + steps: + - template: linux/product-build-linux.yml + parameters: VSCODE_ARCH: arm64 - NPM_ARCH: arm64 - steps: - - template: linux/product-build-linux-client.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false - - # TODO@joaomoreno: We don't ship ARM snaps for now - - ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}: - - job: LinuxSnapArm64 - dependsOn: - - LinuxArm64 - container: snapcraft - variables: - VSCODE_ARCH: arm64 - steps: - - template: linux/snap-build-linux.yml + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_ALPINE'], true)) }}: - - stage: Alpine - dependsOn: - - Compile - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - - CompileCLI - pool: vscode-1es-linux - jobs: - - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}: - - job: LinuxAlpine - variables: - VSCODE_ARCH: x64 - steps: - - template: linux/product-build-alpine.yml + - stage: Alpine + dependsOn: + - Compile + - CompileCLI + pool: 1es-ubuntu-20.04-x64 + jobs: + - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}: + - job: LinuxAlpine + variables: + VSCODE_ARCH: x64 + steps: + - template: alpine/product-build-alpine.yml - - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}: - - job: LinuxAlpineArm64 - timeoutInMinutes: 120 - variables: - VSCODE_ARCH: arm64 - steps: - - template: linux/product-build-alpine.yml + - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}: + - job: LinuxAlpineArm64 + timeoutInMinutes: 120 + variables: + VSCODE_ARCH: arm64 + steps: + - template: alpine/product-build-alpine.yml - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_MACOS'], true)) }}: - - stage: macOS - dependsOn: - - Compile - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: - - CompileCLI - pool: - vmImage: macOS-11 - variables: - BUILDSECMON_OPT_IN: true - jobs: - - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: - - job: macOSUnitTest - displayName: Unit Tests - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: x64 - steps: - - template: darwin/product-build-darwin.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: true - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false - - job: macOSIntegrationTest - displayName: Integration Tests - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: x64 - steps: - - template: darwin/product-build-darwin.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: true - VSCODE_RUN_SMOKE_TESTS: false - - job: macOSSmokeTest - displayName: Smoke Tests - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: x64 - steps: - - template: darwin/product-build-darwin.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: true + - stage: macOS + dependsOn: + - Compile + - CompileCLI + pool: + vmImage: macOS-11 + variables: + BUILDSECMON_OPT_IN: true + jobs: + - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}: + - job: macOSUnitTest + displayName: Unit Tests + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: x64 + steps: + - template: darwin/product-build-darwin.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: true + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false + - job: macOSIntegrationTest + displayName: Integration Tests + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: x64 + steps: + - template: darwin/product-build-darwin.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: true + VSCODE_RUN_SMOKE_TESTS: false + - job: macOSSmokeTest + displayName: Smoke Tests + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: x64 + steps: + - template: darwin/product-build-darwin.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: true - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS, true)) }}: - - job: macOS - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: x64 - steps: - - template: darwin/product-build-darwin.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS, true)) }}: + - job: macOS + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: x64 + steps: + - template: darwin/product-build-darwin.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false - - ${{ if eq(parameters.VSCODE_STEP_ON_IT, false) }}: - - job: macOSTest - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: x64 - steps: - - template: darwin/product-build-darwin.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: false - VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + - ${{ if eq(parameters.VSCODE_STEP_ON_IT, false) }}: + - job: macOSTest + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: x64 + steps: + - template: darwin/product-build-darwin.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} + VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }} - - ${{ if eq(variables['VSCODE_PUBLISH'], true) }}: - - job: macOSSign - dependsOn: - - macOS - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: x64 - steps: - - template: darwin/product-build-darwin-sign.yml + - job: macOSSign + dependsOn: + - macOS + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: x64 + steps: + - template: darwin/product-build-darwin-sign.yml - - ${{ if and(eq(variables['VSCODE_PUBLISH'], true), eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true)) }}: - - job: macOSCLISign - timeoutInMinutes: 90 - steps: - - template: darwin/product-build-darwin-cli-sign.yml - parameters: - VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }} - VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }} + - job: macOSCLISign + timeoutInMinutes: 90 + steps: + - template: darwin/product-build-darwin-cli-sign.yml + parameters: + VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }} + VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }} - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}: - - job: macOSARM64 - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: arm64 - steps: - - template: darwin/product-build-darwin.yml - parameters: - VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }} - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} - VSCODE_BUILD_TUNNEL_CLI: ${{ parameters.VSCODE_BUILD_TUNNEL_CLI }} - VSCODE_RUN_UNIT_TESTS: false - VSCODE_RUN_INTEGRATION_TESTS: false - VSCODE_RUN_SMOKE_TESTS: false + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}: + - job: macOSARM64 + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: arm64 + steps: + - template: darwin/product-build-darwin.yml + parameters: + VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }} + VSCODE_RUN_UNIT_TESTS: false + VSCODE_RUN_INTEGRATION_TESTS: false + VSCODE_RUN_SMOKE_TESTS: false - - ${{ if eq(variables['VSCODE_PUBLISH'], true) }}: - - job: macOSARM64Sign - dependsOn: - - macOSARM64 - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: arm64 - steps: - - template: darwin/product-build-darwin-sign.yml + - job: macOSARM64Sign + dependsOn: + - macOSARM64 + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: arm64 + steps: + - template: darwin/product-build-darwin-sign.yml - - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(variables['VSCODE_BUILD_MACOS_UNIVERSAL'], true)) }}: - - job: macOSUniversal - dependsOn: - - macOS - - macOSARM64 - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: universal - steps: - - template: darwin/product-build-darwin-universal.yml + - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(variables['VSCODE_BUILD_MACOS_UNIVERSAL'], true)) }}: + - job: macOSUniversal + dependsOn: + - macOS + - macOSARM64 + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: universal + steps: + - template: darwin/product-build-darwin-universal.yml - - ${{ if eq(variables['VSCODE_PUBLISH'], true) }}: - - job: macOSUniversalSign - dependsOn: - - macOSUniversal - timeoutInMinutes: 90 - variables: - VSCODE_ARCH: universal - steps: - - template: darwin/product-build-darwin-sign.yml + - job: macOSUniversalSign + dependsOn: + - macOSUniversal + timeoutInMinutes: 90 + variables: + VSCODE_ARCH: universal + steps: + - template: darwin/product-build-darwin-sign.yml - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WEB'], true)) }}: - - stage: Web - dependsOn: - - Compile - pool: vscode-1es-linux - jobs: - - ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}: - - job: Web - variables: - VSCODE_ARCH: x64 - steps: - - template: web/product-build-web.yml - - - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), ne(variables['VSCODE_PUBLISH'], 'false')) }}: - - stage: Publish - dependsOn: - - Compile - pool: vscode-1es-linux - variables: - - name: BUILDS_API_URL - value: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/ - jobs: - - job: PublishBuild - timeoutInMinutes: 180 - displayName: Publish Build + - stage: Web + dependsOn: + - Compile + pool: 1es-ubuntu-20.04-x64 + jobs: + - ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}: + - job: Web + variables: + VSCODE_ARCH: x64 steps: - - template: product-publish.yml + - template: web/product-build-web.yml - - ${{ if and(parameters.VSCODE_RELEASE, eq(parameters.VSCODE_DISTRO_REF, ' ')) }}: - - stage: ApproveRelease - dependsOn: [] # run in parallel to compile stage - pool: vscode-1es-linux - jobs: - - deployment: ApproveRelease - displayName: "Approve Release" - environment: "vscode" - variables: - skipComponentGovernanceDetection: true - strategy: - runOnce: - deploy: - steps: - - checkout: none + - ${{ if eq(variables['VSCODE_PUBLISH'], 'true') }}: + - stage: Publish + dependsOn: + - Compile + pool: 1es-ubuntu-20.04-x64 + variables: + - name: BUILDS_API_URL + value: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/ + jobs: + - job: PublishBuild + timeoutInMinutes: 180 + displayName: Publish Build + steps: + - template: product-publish.yml - - ${{ if or(and(parameters.VSCODE_RELEASE, eq(parameters.VSCODE_DISTRO_REF, ' ')), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true))) }}: - - stage: Release - dependsOn: - - Publish - - ${{ if and(parameters.VSCODE_RELEASE, eq(parameters.VSCODE_DISTRO_REF, ' ')) }}: - - ApproveRelease - pool: vscode-1es-linux - jobs: - - job: ReleaseBuild - displayName: Release Build - steps: - - template: product-release.yml - parameters: - VSCODE_RELEASE: ${{ parameters.VSCODE_RELEASE }} + - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}: + - stage: ApproveRelease + dependsOn: [] # run in parallel to compile stage + pool: 1es-ubuntu-20.04-x64 + jobs: + - deployment: ApproveRelease + displayName: "Approve Release" + environment: "vscode" + variables: + skipComponentGovernanceDetection: true + strategy: + runOnce: + deploy: + steps: + - checkout: none + + - ${{ if or(and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true))) }}: + - stage: Release + dependsOn: + - Publish + - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}: + - ApproveRelease + pool: 1es-ubuntu-20.04-x64 + jobs: + - job: ReleaseBuild + displayName: Release Build + steps: + - template: product-release.yml + parameters: + VSCODE_RELEASE: ${{ parameters.VSCODE_RELEASE }} diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml index fe1f55c6f27..8471cfdec3d 100644 --- a/build/azure-pipelines/product-compile.yml +++ b/build/azure-pipelines/product-compile.yml @@ -7,38 +7,31 @@ steps: inputs: versionSpec: "16.x" - - template: ./mixin-distro-posix.yml - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - template: ./distro/download-distro.yml + + - task: AzureKeyVault@1 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password" - script: node build/setup-npm-registry.js $NPM_REGISTRY condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Registry - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags + - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js compile > .build/yarnlockhash + displayName: Prepare node_modules cache key - # using `genericNodeModules` instead of `nodeModules` here to avoid sharing the cache with builds running inside containers - task: Cache@2 inputs: - key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash" + key: '"node_modules" | .build/yarnlockhash' path: .build/node_modules_cache cacheHitVar: NODE_MODULES_RESTORED displayName: Restore node_modules cache - # Cache built-in extensions to avoid GH rate limits. - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz + - script: tar -xzf .build/node_modules_cache/cache.tgz condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) displayName: Extract node_modules cache @@ -56,10 +49,7 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Authentication - - script: | - set -e - sudo apt update -y - sudo apt install -y build-essential pkg-config libx11-dev libx11-xcb-dev libxkbfile-dev libsecret-1-dev libnotify-bin + - script: sudo apt update -y && sudo apt install -y build-essential pkg-config libx11-dev libx11-xcb-dev libxkbfile-dev libsecret-1-dev libnotify-bin displayName: Install build tools condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) @@ -80,12 +70,10 @@ steps: displayName: Install dependencies condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules - script: | set -e @@ -95,87 +83,75 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) displayName: Create node_modules archive - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - # Mixin must run before optimize, because the CSS loader will inline small SVGs - - script: | - set -e - node build/azure-pipelines/mixin - displayName: Mix in quality + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - script: yarn --cwd build compile && ./.github/workflows/check-clean-git-state.sh + displayName: Check /build/ folder - - script: | - set -e - yarn npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Compile & Hygiene + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality + + - template: common/install-builtin-extensions.yml - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - yarn --cwd build compile - ./.github/workflows/check-clean-git-state.sh - displayName: Check /build/ folder + - script: yarn npm-run-all -lp core-ci-pr extensions-ci-pr hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Compile & Hygiene + - ${{ else }}: + - script: yarn npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Compile & Hygiene - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - yarn --cwd test/smoke compile - yarn --cwd test/integration/browser compile - displayName: Compile test suites - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + - script: | + set -e + yarn --cwd test/smoke compile + yarn --cwd test/integration/browser compile + displayName: Compile test suites + condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: AzureCLI@2 - inputs: - azureSubscription: "vscode-builds-subscription" - scriptType: pscore - scriptLocation: inlineScript - addSpnToEnvironment: true - inlineScript: | - Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId" - Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId" - Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey" + - task: AzureCLI@2 + inputs: + azureSubscription: "vscode-builds-subscription" + scriptType: pscore + scriptLocation: inlineScript + addSpnToEnvironment: true + inlineScript: | + Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId" + Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId" + Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey" - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - AZURE_STORAGE_ACCOUNT="ticino" \ - AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \ - AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \ - AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ - node build/azure-pipelines/upload-sourcemaps - displayName: Upload sourcemaps + - script: | + set -e + AZURE_STORAGE_ACCOUNT="ticino" \ + AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \ + AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \ + AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ + node build/azure-pipelines/upload-sourcemaps + displayName: Upload sourcemaps - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set - - ./build/azure-pipelines/common/extract-telemetry.sh - displayName: Extract Telemetry + - script: ./build/azure-pipelines/common/extract-telemetry.sh + displayName: Extract Telemetry - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - tar -cz --ignore-failed-read -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out - displayName: Compress compilation artifact + - script: tar -cz --ignore-failed-read --exclude='.build/node_modules_cache' --exclude='.build/node_modules_list.txt' --exclude='.build/distro' -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out + displayName: Compress compilation artifact - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: PublishPipelineArtifact@1 - inputs: - targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz - artifactName: Compilation - displayName: Publish compilation artifact + - task: PublishPipelineArtifact@1 + inputs: + targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz + artifactName: Compilation + displayName: Publish compilation artifact - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn download-builtin-extensions-cg - displayName: Built-in extensions component details + - script: yarn download-builtin-extensions-cg + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Built-in extensions component details - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 - displayName: "Component Detection" - inputs: - sourceScanPath: $(Build.SourcesDirectory) - alertWarningLevel: 'Medium' - continueOnError: true + - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 + displayName: "Component Detection" + inputs: + sourceScanPath: $(Build.SourcesDirectory) + alertWarningLevel: Medium + continueOnError: true diff --git a/build/azure-pipelines/product-publish.yml b/build/azure-pipelines/product-publish.yml index b0c7121843d..2e2d735da05 100644 --- a/build/azure-pipelines/product-publish.yml +++ b/build/azure-pipelines/product-publish.yml @@ -14,35 +14,8 @@ steps: - pwsh: Write-Host "##vso[build.addbuildtag]šŸš€" displayName: Add build tag - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - - pwsh: | - . build/azure-pipelines/win32/exec.ps1 - cd build - exec { yarn } + - pwsh: yarn + workingDirectory: build displayName: Install build dependencies - download: current @@ -79,24 +52,24 @@ steps: return } - $env:AZURE_TENANT_ID = "$(AZURE_TENANT_ID)" - $env:AZURE_CLIENT_ID = "$(AZURE_CLIENT_ID)" - $env:AZURE_CLIENT_SECRET = "$(AZURE_CLIENT_SECRET)" $VERSION = node -p "require('./package.json').version" Write-Host "Creating build with version: $VERSION" exec { node build/azure-pipelines/common/createBuild.js $VERSION } + env: + AZURE_TENANT_ID: "$(AZURE_TENANT_ID)" + AZURE_CLIENT_ID: "$(AZURE_CLIENT_ID)" + AZURE_CLIENT_SECRET: "$(AZURE_CLIENT_SECRET)" displayName: Create build if it hasn't been created before - - pwsh: | - $env:VSCODE_MIXIN_PASSWORD = "$(github-distro-mixin-password)" - $env:AZURE_TENANT_ID = "$(AZURE_TENANT_ID)" - $env:AZURE_CLIENT_ID = "$(AZURE_CLIENT_ID)" - $env:AZURE_CLIENT_SECRET = "$(AZURE_CLIENT_SECRET)" - $env:AZURE_MOONCAKE_TENANT_ID = "$(AZURE_MOONCAKE_TENANT_ID)" - $env:AZURE_MOONCAKE_CLIENT_ID = "$(AZURE_MOONCAKE_CLIENT_ID)" - $env:AZURE_MOONCAKE_CLIENT_SECRET = "$(AZURE_MOONCAKE_CLIENT_SECRET)" - build/azure-pipelines/product-publish.ps1 + - pwsh: build/azure-pipelines/product-publish.ps1 env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + AZURE_TENANT_ID: "$(AZURE_TENANT_ID)" + AZURE_CLIENT_ID: "$(AZURE_CLIENT_ID)" + AZURE_CLIENT_SECRET: "$(AZURE_CLIENT_SECRET)" + AZURE_MOONCAKE_TENANT_ID: "$(AZURE_MOONCAKE_TENANT_ID)" + AZURE_MOONCAKE_CLIENT_ID: "$(AZURE_MOONCAKE_CLIENT_ID)" + AZURE_MOONCAKE_CLIENT_SECRET: "$(AZURE_MOONCAKE_CLIENT_SECRET)" SYSTEM_ACCESSTOKEN: $(System.AccessToken) displayName: Process artifacts diff --git a/build/azure-pipelines/sdl-scan.yml b/build/azure-pipelines/sdl-scan.yml index 40e4fab6957..8c81ee20401 100644 --- a/build/azure-pipelines/sdl-scan.yml +++ b/build/azure-pipelines/sdl-scan.yml @@ -32,11 +32,15 @@ variables: value: x64 - name: Codeql.enabled value: true + - name: Codeql.TSAEnabled + value: true + - name: Codeql.TSAOptionsPath + value: '$(Build.SourcesDirectory)\build\azure-pipelines\config\tsaoptions.json' stages: - stage: Windows condition: eq(variables.SCAN_WINDOWS, 'true') - pool: vscode-1es-windows + pool: 1es-windows-2019-x64 jobs: - job: WindowsJob timeoutInMinutes: 0 @@ -50,6 +54,8 @@ stages: inputs: versionSpec: "16.x" + - template: ./distro/download-distro.yml + - task: AzureKeyVault@1 displayName: "Azure Key Vault: Get Secrets" inputs: @@ -57,30 +63,6 @@ stages: KeyVaultName: vscode-build-secrets SecretsFilter: "github-distro-mixin-password" - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII - - exec { git config user.email "vscode@microsoft.com" } - exec { git config user.name "VSCode" } - displayName: Prepare tooling - - # - powershell: | - # . build/azure-pipelines/win32/exec.ps1 - # $ErrorActionPreference = "Stop" - - # exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) } - # exec { git checkout FETCH_HEAD } - # condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - # displayName: Checkout override commit - - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") } - displayName: Merge distro - - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" @@ -108,37 +90,53 @@ stages: condition: eq(variables['Codeql.enabled'], 'True') - powershell: | - . build/azure-pipelines/win32/exec.ps1 - . build/azure-pipelines/win32/retry.ps1 + mkdir -Force .build/node-gyp + displayName: Create custom node-gyp directory + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + + - powershell: | + . ../../build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" - retry { exec { yarn --frozen-lockfile --check-files } } - env: - npm_config_arch: "$(NPM_ARCH)" - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 - GITHUB_TOKEN: "$(github-distro-mixin-password)" - CHILD_CONCURRENCY: 1 - displayName: Install dependencies + # TODO: Should be replaced with upstream URL once https://github.com/nodejs/node-gyp/pull/2825 + # gets merged. + exec { git clone https://github.com/rzhao271/node-gyp.git . } "Cloning rzhao271/node-gyp failed" + exec { git checkout 102b347da0c92c29f9c67df22e864e70249cf086 } "Checking out 102b347 failed" + exec { npm install } "Building rzhao271/node-gyp failed" + displayName: Install custom node-gyp + workingDirectory: .build/node-gyp + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - powershell: | . build/azure-pipelines/win32/exec.ps1 . build/azure-pipelines/win32/retry.ps1 $ErrorActionPreference = "Stop" - retry { exec { yarn compile } } + $env:npm_config_node_gyp = "$(Join-Path $pwd.Path '.build/node-gyp/bin/node-gyp.js')" + $env:npm_config_arch = "$(NPM_ARCH)" + retry { exec { yarn --frozen-lockfile --check-files } } env: - npm_config_arch: "$(NPM_ARCH)" PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 GITHUB_TOKEN: "$(github-distro-mixin-password)" CHILD_CONCURRENCY: 1 + displayName: Install dependencies + + - script: node build/azure-pipelines/distro/mixin-npm + displayName: Mixin distro node modules + + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality + env: + VSCODE_QUALITY: stable + + - powershell: yarn compile displayName: Compile - task: CodeQL3000Finalize@0 displayName: CodeQL Finalize condition: eq(variables['Codeql.enabled'], 'True') - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn gulp "vscode-symbols-win32-$(VSCODE_ARCH)" } + - powershell: yarn gulp "vscode-symbols-win32-$(VSCODE_ARCH)" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Download Symbols - task: BinSkim@4 @@ -163,7 +161,7 @@ stages: - task: TSAUpload@2 inputs: GdnPublishTsaOnboard: true - GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)\build\azure-pipelines\.gdntsa' + GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)\build\azure-pipelines\config\tsaoptions.json' - stage: Linux dependsOn: [] @@ -180,6 +178,8 @@ stages: inputs: versionSpec: "16.x" + - template: ./distro/download-distro.yml + - task: AzureKeyVault@1 displayName: "Azure Key Vault: Get Secrets" inputs: @@ -187,31 +187,6 @@ stages: KeyVaultName: vscode-build-secrets SecretsFilter: "github-distro-mixin-password" - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - # - script: | - # set -e - # git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - # echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - # git checkout FETCH_HEAD - # condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - # displayName: Checkout override commit - - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - script: | set -e npm config set registry "$NPM_REGISTRY" --location=project @@ -259,7 +234,7 @@ stages: # Set compiler toolchain export CC=$PWD/.build/CR_Clang/bin/clang export CXX=$PWD/.build/CR_Clang/bin/clang++ - export CXXFLAGS="-nostdinc++ -D__NO_INLINE__ -isystem$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit" + export CXXFLAGS="-std=c++17 -nostdinc++ -D__NO_INLINE__ -I$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit -D_LIBCPP_ABI_NAMESPACE=Cr" export LDFLAGS="-stdlib=libc++ -fuse-ld=lld -flto=thin -fsplit-lto-unit -L$PWD/.build/libcxx-objects -lc++abi" export VSCODE_REMOTE_CC=$(which gcc) export VSCODE_REMOTE_CXX=$(which g++) @@ -278,9 +253,23 @@ stages: GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Install dependencies - - script: | - set -e - yarn gulp vscode-symbols-linux-$(VSCODE_ARCH) + - script: yarn --frozen-lockfile --check-files + workingDirectory: .build/distro/npm + env: + npm_config_arch: $(NPM_ARCH) + displayName: Install distro node modules + + - script: node build/azure-pipelines/distro/mixin-npm + displayName: Mixin distro node modules + + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality + env: + VSCODE_QUALITY: stable + + - script: yarn gulp vscode-symbols-linux-$(VSCODE_ARCH) + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Build - task: BinSkim@3 @@ -291,4 +280,4 @@ stages: - task: TSAUpload@2 inputs: - GdnPublishTsaConfigFile: '$(Build.SourceDirectory)\build\azure-pipelines\.gdntsa' + GdnPublishTsaConfigFile: '$(Build.SourceDirectory)\build\azure-pipelines\config\tsaoptions.json' diff --git a/build/azure-pipelines/upload-cdn.js b/build/azure-pipelines/upload-cdn.js index 5a218735d3f..458a097f3a7 100644 --- a/build/azure-pipelines/upload-cdn.js +++ b/build/azure-pipelines/upload-cdn.js @@ -12,7 +12,7 @@ const gzip = require("gulp-gzip"); const mime = require("mime"); const identity_1 = require("@azure/identity"); const azure = require('gulp-azure-storage'); -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; +const commit = process.env['BUILD_SOURCEVERSION']; const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']); mime.define({ 'application/typescript': ['ts'], @@ -114,4 +114,4 @@ main().catch(err => { console.error(err); process.exit(1); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNkbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVwbG9hZC1jZG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxtQ0FBbUM7QUFDbkMsK0JBQStCO0FBQy9CLGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUM3Qiw4Q0FBeUQ7QUFDekQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFNUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN6RixNQUFNLFVBQVUsR0FBRyxJQUFJLGlDQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBRSxDQUFDLENBQUM7QUFFckosSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNYLHdCQUF3QixFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2hDLGtCQUFrQixFQUFFLENBQUMsZUFBZSxDQUFDO0NBQ3JDLENBQUMsQ0FBQztBQUVILGlDQUFpQztBQUNqQyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25DLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLHdCQUF3QjtJQUN4QixrQkFBa0I7SUFDbEIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsK0JBQStCO0lBQy9CLHVCQUF1QjtJQUN2QixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLDZCQUE2QjtJQUM3Qiw2QkFBNkI7SUFDN0Isd0JBQXdCO0lB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNkbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVwbG9hZC1jZG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxtQ0FBbUM7QUFDbkMsK0JBQStCO0FBQy9CLGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUM3Qiw4Q0FBeUQ7QUFDekQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFNUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksaUNBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFFLENBQUMsQ0FBQztBQUVySixJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ1gsd0JBQXdCLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDaEMsa0JBQWtCLEVBQUUsQ0FBQyxlQUFlLENBQUM7Q0FDckMsQ0FBQyxDQUFDO0FBRUgsaUNBQWlDO0FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkMsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QiwrQkFBK0I7SUFDL0IsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsNkJBQTZCO0lBQzdCLDZCQUE2QjtJQUM3Qix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixVQUFVO0lBQ1YsVUFBVTtJQUNWLGVBQWU7SUFDZixlQUFlO0lBQ2YsVUFBVTtJQUNWLFVBQVU7SUFDVixXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLFNBQVM7SUFDVCxlQUFlO0lBQ2YsWUFBWTtJQUNaLGVBQWU7SUFDZiwyQkFBMkI7SUFDM0IsVUFBVTtJQUNWLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsb0JBQW9CO0NBQ3BCLENBQUMsQ0FBQztBQUVILFNBQVMsSUFBSSxDQUFDLE1BQXdCO0lBQ3JDLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDbEIsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFHLENBQUMsVUFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUI7UUFDMUMsVUFBVTtRQUNWLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWM7UUFDckMsTUFBTSxFQUFFLE1BQU0sR0FBRyxHQUFHO1FBQ3BCLGVBQWUsRUFBRTtZQUNoQixlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDaEQsWUFBWSxFQUFFLDBCQUEwQjtTQUN4QztLQUNELENBQUMsQ0FBQztJQUVILE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNuRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXRDLE1BQU0sVUFBVSxHQUFHLEdBQUc7U0FDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEMsTUFBTSxZQUFZLEdBQUcsR0FBRztTQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO1NBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLFFBQVE7SUFDbEQsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDekIsSUFBSSxFQUFFLFdBQVc7UUFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFTO0tBQzVCLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixLQUFLLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7SUFDckUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMifQ== \ No newline at end of file diff --git a/build/azure-pipelines/upload-cdn.ts b/build/azure-pipelines/upload-cdn.ts index 753d63cb85d..81a4ac14eab 100644 --- a/build/azure-pipelines/upload-cdn.ts +++ b/build/azure-pipelines/upload-cdn.ts @@ -12,7 +12,7 @@ import * as mime from 'mime'; import { ClientSecretCredential } from '@azure/identity'; const azure = require('gulp-azure-storage'); -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; +const commit = process.env['BUILD_SOURCEVERSION']; const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!); mime.define({ diff --git a/build/azure-pipelines/upload-configuration.js b/build/azure-pipelines/upload-configuration.js index 09ee4aa59b8..39a44dc5c41 100644 --- a/build/azure-pipelines/upload-configuration.js +++ b/build/azure-pipelines/upload-configuration.js @@ -13,7 +13,7 @@ const util = require("../lib/util"); const identity_1 = require("@azure/identity"); const azure = require('gulp-azure-storage'); const packageJson = require("../../package.json"); -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; +const commit = process.env['BUILD_SOURCEVERSION']; function generateVSCodeConfigurationTask() { return new Promise((resolve, reject) => { const buildDir = process.env['AGENT_BUILDDIRECTORY']; @@ -109,4 +109,4 @@ if (require.main === module) { process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1cGxvYWQtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLG9DQUFvQztBQUNwQyxnQ0FBZ0M7QUFDaEMsb0NBQW9DO0FBQ3BDLDhDQUF5RDtBQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUM1QyxrREFBa0Q7QUFFbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUV6RixTQUFTLCtCQUErQjtJQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2QsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO1NBQzFEO1FBRUQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUU7WUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDN0YsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUI7UUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxRQUFRLEVBQUU7WUFDeEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1cGxvYWQtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLG9DQUFvQztBQUNwQyxnQ0FBZ0M7QUFDaEMsb0NBQW9DO0FBQ3BDLDhDQUF5RDtBQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUM1QyxrREFBa0Q7QUFFbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRWxELFNBQVMsK0JBQStCO0lBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRTtZQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUM3RixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMxQjtRQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFFBQVEsRUFBRTtZQUN4RixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDNUYsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFD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 \ No newline at end of file diff --git a/build/azure-pipelines/upload-configuration.ts b/build/azure-pipelines/upload-configuration.ts deleted file mode 100644 index 1455cfca78f..00000000000 --- a/build/azure-pipelines/upload-configuration.ts +++ /dev/null @@ -1,129 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as path from 'path'; -import * as os from 'os'; -import * as cp from 'child_process'; -import * as vfs from 'vinyl-fs'; -import * as util from '../lib/util'; -import { ClientSecretCredential } from '@azure/identity'; -const azure = require('gulp-azure-storage'); -import * as packageJson from '../../package.json'; - -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; - -function generateVSCodeConfigurationTask(): Promise { - return new Promise((resolve, reject) => { - const buildDir = process.env['AGENT_BUILDDIRECTORY']; - if (!buildDir) { - return reject(new Error('$AGENT_BUILDDIRECTORY not set')); - } - - if (!shouldSetupSettingsSearch()) { - console.log(`Only runs on main and release branches, not ${process.env.BUILD_SOURCEBRANCH}`); - return resolve(undefined); - } - - if (process.env.VSCODE_QUALITY !== 'insider' && process.env.VSCODE_QUALITY !== 'stable') { - console.log(`Only runs on insider and stable qualities, not ${process.env.VSCODE_QUALITY}`); - return resolve(undefined); - } - - const result = path.join(os.tmpdir(), 'configuration.json'); - const userDataDir = path.join(os.tmpdir(), 'tmpuserdata'); - const extensionsDir = path.join(os.tmpdir(), 'tmpextdir'); - const arch = process.env['VSCODE_ARCH']; - const appRoot = path.join(buildDir, `VSCode-darwin-${arch}`); - const appName = process.env.VSCODE_QUALITY === 'insider' ? 'Visual\\ Studio\\ Code\\ -\\ Insiders.app' : 'Visual\\ Studio\\ Code.app'; - const appPath = path.join(appRoot, appName, 'Contents', 'Resources', 'app', 'bin', 'code'); - const codeProc = cp.exec( - `${appPath} --export-default-configuration='${result}' --wait --user-data-dir='${userDataDir}' --extensions-dir='${extensionsDir}'`, - (err, stdout, stderr) => { - clearTimeout(timer); - if (err) { - console.log(`err: ${err} ${err.message} ${err.toString()}`); - reject(err); - } - - if (stdout) { - console.log(`stdout: ${stdout}`); - } - - if (stderr) { - console.log(`stderr: ${stderr}`); - } - - resolve(result); - } - ); - const timer = setTimeout(() => { - codeProc.kill(); - reject(new Error('export-default-configuration process timed out')); - }, 60 * 1000); - - codeProc.on('error', err => { - clearTimeout(timer); - reject(err); - }); - }); -} - -export function shouldSetupSettingsSearch(): boolean { - const branch = process.env.BUILD_SOURCEBRANCH; - return !!(branch && (/\/main$/.test(branch) || branch.indexOf('/release/') >= 0)); -} - -export function getSettingsSearchBuildId(packageJson: { version: string }) { - try { - const branch = process.env.BUILD_SOURCEBRANCH!; - const branchId = branch.indexOf('/release/') >= 0 ? 0 : - /\/main$/.test(branch) ? 1 : - 2; // Some unexpected branch - - const out = cp.execSync(`git rev-list HEAD --count`); - const count = parseInt(out.toString()); - - // - // 1.25.1, 1,234,567 commits, main = 1250112345671 - return util.versionStringToNumber(packageJson.version) * 1e8 + count * 10 + branchId; - } catch (e) { - throw new Error('Could not determine build number: ' + e.toString()); - } -} - -async function main(): Promise { - const configPath = await generateVSCodeConfigurationTask(); - - if (!configPath) { - return; - } - - const settingsSearchBuildId = getSettingsSearchBuildId(packageJson); - - if (!settingsSearchBuildId) { - throw new Error('Failed to compute build number'); - } - - const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!); - - return new Promise((c, e) => { - vfs.src(configPath) - .pipe(azure.upload({ - account: process.env.AZURE_STORAGE_ACCOUNT, - credential, - container: 'configuration', - prefix: `${settingsSearchBuildId}/${commit}/` - })) - .on('end', () => c()) - .on('error', (err: any) => e(err)); - }); -} - -if (require.main === module) { - main().catch(err => { - console.error(err); - process.exit(1); - }); -} diff --git a/build/azure-pipelines/upload-nlsmetadata.js b/build/azure-pipelines/upload-nlsmetadata.js index e02e8525489..0f9ff081777 100644 --- a/build/azure-pipelines/upload-nlsmetadata.js +++ b/build/azure-pipelines/upload-nlsmetadata.js @@ -12,7 +12,7 @@ const identity_1 = require("@azure/identity"); const path = require("path"); const fs_1 = require("fs"); const azure = require('gulp-azure-storage'); -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; +const commit = process.env['BUILD_SOURCEVERSION']; const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']); function main() { return new Promise((c, e) => { @@ -99,4 +99,4 @@ main().catch(err => { console.error(err); process.exit(1); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLW5sc21ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBsb2FkLW5sc21ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcsbUNBQW1DO0FBRW5DLGdDQUFnQztBQUNoQyx5Q0FBeUM7QUFDekMsa0NBQWtDO0FBQ2xDLDhDQUF5RDtBQUN6RCw2QkFBOEI7QUFDOUIsMkJBQWtDO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRTVDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDekYsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQ0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUUsQ0FBQyxDQUFDO0FBUXJKLFNBQVMsSUFBSTtJQUNaLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFFM0IsRUFBRSxDQUFDLEtBQUssQ0FDUCxHQUFHLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFDL0UsR0FBRyxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQ2hGLEdBQUcsQ0FBQyxHQUFHLENBQUMsK0NBQStDLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUN2RixHQUFHLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQzth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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLW5sc21ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBsb2FkLW5sc21ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcsbUNBQW1DO0FBRW5DLGdDQUFnQztBQUNoQyx5Q0FBeUM7QUFDekMsa0NBQWtDO0FBQ2xDLDhDQUF5RDtBQUN6RCw2QkFBOEI7QUFDOUIsMkJBQWtDO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRTVDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGlDQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBRSxDQUFDLENBQUM7QUFRckosU0FBUyxJQUFJO0lBQ1osT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUUzQixFQUFFLENBQUMsS0FBSyxDQUNQLEdBQUcsQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUMvRSxHQUFHLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFDaEYsR0FBRyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsRUFBRSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQ3ZGLEdBQUcsQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2FBQy9FLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDWCxRQUFRLEVB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 \ No newline at end of file diff --git a/build/azure-pipelines/upload-nlsmetadata.ts b/build/azure-pipelines/upload-nlsmetadata.ts index 4749e1f9605..416d0eec408 100644 --- a/build/azure-pipelines/upload-nlsmetadata.ts +++ b/build/azure-pipelines/upload-nlsmetadata.ts @@ -13,7 +13,7 @@ import path = require('path'); import { readFileSync } from 'fs'; const azure = require('gulp-azure-storage'); -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; +const commit = process.env['BUILD_SOURCEVERSION']; const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!); interface NlsMetadata { diff --git a/build/azure-pipelines/upload-sourcemaps.js b/build/azure-pipelines/upload-sourcemaps.js index 0b7013d21d9..6dba100a7cf 100644 --- a/build/azure-pipelines/upload-sourcemaps.js +++ b/build/azure-pipelines/upload-sourcemaps.js @@ -13,7 +13,7 @@ const deps = require("../lib/dependencies"); const identity_1 = require("@azure/identity"); const azure = require('gulp-azure-storage'); const root = path.dirname(path.dirname(__dirname)); -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; +const commit = process.env['BUILD_SOURCEVERSION']; const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']); // optionally allow to pass in explicit base/maps to upload const [, , base, maps] = process.argv; @@ -33,7 +33,8 @@ function main() { const productionDependencies = deps.getProductionDependencies(root); const productionDependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => `./${d}/**/*.map`); const nodeModules = vfs.src(productionDependenciesSrc, { base: '.' }) - .pipe(util.cleanNodeModules(path.join(root, 'build', '.moduleignore'))); + .pipe(util.cleanNodeModules(path.join(root, 'build', '.moduleignore'))) + .pipe(util.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`))); sources.push(nodeModules); const extensionsOut = vfs.src(['.build/extensions/**/*.js.map', '!**/node_modules/**'], { base: '.build' }); sources.push(extensionsOut); @@ -62,4 +63,4 @@ main().catch(err => { console.error(err); process.exit(1); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXNvdXJjZW1hcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1cGxvYWQtc291cmNlbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFFbkMsZ0NBQWdDO0FBQ2hDLG9DQUFvQztBQUNwQyxhQUFhO0FBQ2IsNENBQTRDO0FBQzVDLDhDQUF5RDtBQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUU1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNuRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3pGLE1BQU0sVUFBVSxHQUFHLElBQUksaUNBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFFLENBQUMsQ0FBQztBQUVySiwyREFBMkQ7QUFDM0QsTUFBTSxDQUFDLEVBQUUsQUFBRCxFQUFHLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBRXRDLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLFdBQVc7SUFDbkQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQzVCLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUU7UUFDN0IsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXNvdXJjZW1hcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1cGxvYWQtc291cmNlbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFFbkMsZ0NBQWdDO0FBQ2hDLG9DQUFvQztBQUNwQyxhQUFhO0FBQ2IsNENBQTRDO0FBQzVDLDhDQUF5RDtBQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUU1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNuRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQ0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUUsQ0FBQyxDQUFDO0FBRXJKLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFdEMsU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksV0FBVztJQUNuRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRTtRQUM3QixDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7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 \ No newline at end of file diff --git a/build/azure-pipelines/upload-sourcemaps.ts b/build/azure-pipelines/upload-sourcemaps.ts index 1f76c4c73f4..366ad945499 100644 --- a/build/azure-pipelines/upload-sourcemaps.ts +++ b/build/azure-pipelines/upload-sourcemaps.ts @@ -14,7 +14,7 @@ import { ClientSecretCredential } from '@azure/identity'; const azure = require('gulp-azure-storage'); const root = path.dirname(path.dirname(__dirname)); -const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; +const commit = process.env['BUILD_SOURCEVERSION']; const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!); // optionally allow to pass in explicit base/maps to upload @@ -39,7 +39,8 @@ function main(): Promise { const productionDependencies: { name: string; path: string; version: string }[] = deps.getProductionDependencies(root); const productionDependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => `./${d}/**/*.map`); const nodeModules = vfs.src(productionDependenciesSrc, { base: '.' }) - .pipe(util.cleanNodeModules(path.join(root, 'build', '.moduleignore'))); + .pipe(util.cleanNodeModules(path.join(root, 'build', '.moduleignore'))) + .pipe(util.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`))); sources.push(nodeModules); const extensionsOut = vfs.src(['.build/extensions/**/*.js.map', '!**/node_modules/**'], { base: '.build' }); diff --git a/build/azure-pipelines/web/product-build-web.yml b/build/azure-pipelines/web/product-build-web.yml index ee6961ea733..556f1f23efa 100644 --- a/build/azure-pipelines/web/product-build-web.yml +++ b/build/azure-pipelines/web/product-build-web.yml @@ -3,6 +3,8 @@ steps: inputs: versionSpec: "16.x" + - template: ../distro/download-distro.yml + - task: AzureKeyVault@1 displayName: "Azure Key Vault: Get Secrets" inputs: @@ -16,62 +18,24 @@ steps: path: $(Build.ArtifactStagingDirectory) displayName: Download compilation output - - script: | - set -e - tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz + - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz displayName: Extract compilation output - - script: | - set -e - cat << EOF > ~/.netrc - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - - - script: | - set -e - git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF - echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - git checkout FETCH_HEAD - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - script: | - set -e - git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") - displayName: Merge distro - - script: node build/setup-npm-registry.js $NPM_REGISTRY condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Registry - - script: | - mkdir -p .build - node build/azure-pipelines/common/computeNodeModulesCacheKey.js "web" > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags + - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js web > .build/yarnlockhash + displayName: Prepare node_modules cache key - task: Cache@2 inputs: - key: "nodeModules | $(Agent.OS) | .build/yarnlockhash" + key: '"node_modules" | .build/yarnlockhash' path: .build/node_modules_cache cacheHitVar: NODE_MODULES_RESTORED displayName: Restore node_modules cache - - task: Cache@2 - inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions - - - script: | - set -e - tar -xzf .build/node_modules_cache/cache.tgz + - script: tar -xzf .build/node_modules_cache/cache.tgz condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) displayName: Extract node_modules cache @@ -106,12 +70,9 @@ steps: displayName: Install dependencies condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - script: | - set -e - node build/lib/builtInExtensions.js - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions + - script: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules - script: | set -e @@ -121,15 +82,14 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) displayName: Create node_modules archive - - script: | - set -e - node build/azure-pipelines/mixin - displayName: Mix in quality + - script: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality - - script: | - set -e - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-web-min-ci + - template: ../common/install-builtin-extensions.yml + + - script: yarn gulp vscode-web-min-ci + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Build - task: AzureCLI@2 @@ -172,7 +132,6 @@ steps: AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \ node build/azure-pipelines/upload-nlsmetadata displayName: Upload NLS Metadata - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) - script: | set -e @@ -187,9 +146,7 @@ steps: cd $ROOT && tar --owner=0 --group=0 -czf $WEB_TARBALL_PATH $WEB_BUILD_NAME displayName: Prepare for publish - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) - publish: $(Agent.BuildDirectory)/vscode-web.tar.gz artifact: vscode_web_linux_standalone_archive-unsigned displayName: Publish web archive - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) diff --git a/build/azure-pipelines/win32/cli-build-win32.yml b/build/azure-pipelines/win32/cli-build-win32.yml index f75fe59fb1e..9a155a0c0be 100644 --- a/build/azure-pipelines/win32/cli-build-win32.yml +++ b/build/azure-pipelines/win32/cli-build-win32.yml @@ -8,38 +8,39 @@ parameters: - name: VSCODE_BUILD_WIN32_ARM64 type: boolean default: false + - name: VSCODE_CHECK_ONLY + type: boolean + default: false - name: VSCODE_QUALITY type: string steps: - - task: Npm@1 - displayName: Download openssl prebuilt - inputs: - command: custom - customCommand: pack @vscode-internal/openssl-prebuilt@0.0.3 - customRegistry: useFeed - customFeed: 'Monaco/openssl-prebuilt' - workingDir: $(Build.ArtifactStagingDirectory) - - - powershell: | - mkdir $(Build.ArtifactStagingDirectory)/openssl - tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.3.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl - displayName: Extract openssl prebuilt - - task: NodeTool@0 inputs: versionSpec: "16.x" - - template: ../mixin-distro-win32.yml - parameters: - VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }} + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - template: ../cli/cli-apply-patches.yml + + - task: Npm@1 + displayName: Download openssl prebuilt + inputs: + command: custom + customCommand: pack @vscode-internal/openssl-prebuilt@0.0.8 + customRegistry: useFeed + customFeed: "Monaco/openssl-prebuilt" + workingDir: $(Build.ArtifactStagingDirectory) - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build/azure-pipelines/cli/prepare.js } + mkdir $(Build.ArtifactStagingDirectory)/openssl + tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.8.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl + displayName: Extract openssl prebuilt + + - powershell: node build/azure-pipelines/cli/prepare.js displayName: Prepare CLI build env: + VSCODE_CLI_PREPARE_ROOT: $(Build.SourcesDirectory)/.build/distro + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} GITHUB_TOKEN: "$(github-distro-mixin-password)" - template: ../cli/install-rust-win32.yml @@ -57,24 +58,30 @@ steps: parameters: VSCODE_CLI_TARGET: x86_64-pc-windows-msvc VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_x64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-windows-static-md/lib OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-windows-static-md/include + RUSTFLAGS: "-C target-feature=+crt-static" - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}: - template: ../cli/cli-compile-and-publish.yml parameters: VSCODE_CLI_TARGET: aarch64-pc-windows-msvc VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_arm64_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-windows-static-md/lib OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-windows-static-md/include + RUSTFLAGS: "-C target-feature=+crt-static" - ${{ if eq(parameters.VSCODE_BUILD_WIN32_32BIT, true) }}: - template: ../cli/cli-compile-and-publish.yml parameters: VSCODE_CLI_TARGET: i686-pc-windows-msvc VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_ia32_cli + VSCODE_CHECK_ONLY: ${{ parameters.VSCODE_CHECK_ONLY }} VSCODE_CLI_ENV: OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x86-windows-static-md/lib OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x86-windows-static-md/include + RUSTFLAGS: "-C target-feature=+crt-static" diff --git a/build/azure-pipelines/win32/product-build-win32-cli-sign.yml b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml index b3e7cf3764a..31bffda4788 100644 --- a/build/azure-pipelines/win32/product-build-win32-cli-sign.yml +++ b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml @@ -12,10 +12,33 @@ steps: inputs: versionSpec: "16.x" - - pwsh: | - . build/azure-pipelines/win32/exec.ps1 - cd build - exec { yarn } + - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY build + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Registry + + - powershell: | + . azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { npm config set registry "$env:NPM_REGISTRY" --location=project } + exec { npm config set always-auth=true --location=project } + exec { yarn config set registry "$env:NPM_REGISTRY" } + workingDirectory: build + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM & Yarn + + - task: npmAuthenticate@0 + inputs: + workingFile: build/.npmrc + condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) + displayName: Setup NPM Authentication + + - powershell: | + . azure-pipelines/win32/exec.ps1 + . azure-pipelines/win32/retry.ps1 + $ErrorActionPreference = "Stop" + $env:CHILD_CONCURRENCY="1" + retry { exec { yarn --frozen-lockfile --check-files } } + workingDirectory: build displayName: Install build dependencies - template: ../cli/cli-win32-sign.yml diff --git a/build/azure-pipelines/win32/product-build-win32-test.yml b/build/azure-pipelines/win32/product-build-win32-test.yml index 9a17a88bca7..6ad4f2dffbc 100644 --- a/build/azure-pipelines/win32/product-build-win32-test.yml +++ b/build/azure-pipelines/win32/product-build-win32-test.yml @@ -9,57 +9,35 @@ parameters: type: boolean steps: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" - exec { yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install" } + - powershell: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Download Electron and Playwright - ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn electron $(VSCODE_ARCH) } - exec { .\scripts\test.bat --tfs "Unit Tests" } + - powershell: .\scripts\test.bat --tfs "Unit Tests" displayName: Run unit tests (Electron) timeoutInMinutes: 15 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn test-node } + - powershell: yarn test-node displayName: Run unit tests (node.js) timeoutInMinutes: 15 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node test/unit/browser/index.js --sequential --browser chromium --tfs "Browser Unit Tests" } + - powershell: node test/unit/browser/index.js --sequential --browser chromium --tfs "Browser Unit Tests" displayName: Run unit tests (Browser, Chromium) timeoutInMinutes: 20 - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn electron $(VSCODE_ARCH) } - exec { .\scripts\test.bat --build --tfs "Unit Tests" } + - powershell: .\scripts\test.bat --build --tfs "Unit Tests" displayName: Run unit tests (Electron) timeoutInMinutes: 15 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn test-node --build } + - powershell: yarn test-node --build displayName: Run unit tests (node.js) timeoutInMinutes: 15 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn test-browser-no-install --sequential --build --browser chromium --tfs "Browser Unit Tests" } + - powershell: yarn test-browser-no-install --sequential --build --browser chromium --tfs "Browser Unit Tests" displayName: Run unit tests (Browser, Chromium) timeoutInMinutes: 20 @@ -75,6 +53,7 @@ steps: compile-extension:github-authentication ` compile-extension:html-language-features-server ` compile-extension:ipynb ` + compile-extension:notebook-renderers ` compile-extension:json-language-features-server ` compile-extension:markdown-language-features-server ` compile-extension:markdown-language-features ` @@ -88,24 +67,15 @@ steps: displayName: Build integration tests - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { .\scripts\test-integration.bat --tfs "Integration Tests" } + - powershell: .\scripts\test-integration.bat --tfs "Integration Tests" displayName: Run integration tests (Electron) timeoutInMinutes: 20 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { .\scripts\test-web-integration.bat --browser firefox } + - powershell: .\scripts\test-web-integration.bat --browser firefox displayName: Run integration tests (Browser, Firefox) timeoutInMinutes: 20 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { .\scripts\test-remote-integration.bat } + - powershell: .\scripts\test-remote-integration.bat displayName: Run integration tests (Remote) timeoutInMinutes: 20 @@ -141,62 +111,44 @@ steps: timeoutInMinutes: 20 - ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - exec {.\build\azure-pipelines\win32\listprocesses.bat } + - powershell: .\build\azure-pipelines\win32\listprocesses.bat displayName: Diagnostics before smoke test run continueOnError: true condition: succeededOrFailed() - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn --cwd test/smoke compile } + - powershell: yarn --cwd test/smoke compile displayName: Compile smoke tests - - script: | - set -e - yarn gulp compile-extension-media + - powershell: yarn gulp compile-extension-media displayName: Build extensions for smoke tests - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn smoketest-no-compile --tracing } + - powershell: yarn smoketest-no-compile --tracing displayName: Run smoke tests (Electron) timeoutInMinutes: 20 - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" - exec { yarn smoketest-no-compile --tracing --build "$AppRoot" } + - powershell: yarn smoketest-no-compile --tracing --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" displayName: Run smoke tests (Electron) timeoutInMinutes: 20 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)" - exec { yarn smoketest-no-compile --web --tracing --headless } + - powershell: yarn smoketest-no-compile --web --tracing --headless + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH) displayName: Run smoke tests (Browser, Chromium) timeoutInMinutes: 20 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" - $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)" - exec { yarn gulp compile-extension:vscode-test-resolver } - exec { yarn smoketest-no-compile --tracing --remote --build "$AppRoot" } + - powershell: yarn gulp compile-extension:vscode-test-resolver + displayName: Compile test resolver extension + timeoutInMinutes: 20 + + - powershell: yarn smoketest-no-compile --tracing --remote --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)" + env: + VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH) displayName: Run smoke tests (Remote) timeoutInMinutes: 20 - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - exec {.\build\azure-pipelines\win32\listprocesses.bat } + - powershell: .\build\azure-pipelines\win32\listprocesses.bat displayName: Diagnostics after smoke test run continueOnError: true condition: succeededOrFailed() diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml index 472b51d96c8..ab985554bb7 100644 --- a/build/azure-pipelines/win32/product-build-win32.yml +++ b/build/azure-pipelines/win32/product-build-win32.yml @@ -1,22 +1,20 @@ parameters: - - name: VSCODE_PUBLISH - type: boolean - name: VSCODE_QUALITY type: string + - name: VSCODE_CIBUILD + type: boolean - name: VSCODE_RUN_UNIT_TESTS type: boolean - name: VSCODE_RUN_INTEGRATION_TESTS type: boolean - name: VSCODE_RUN_SMOKE_TESTS type: boolean - - name: VSCODE_BUILD_TUNNEL_CLI - type: boolean steps: - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - checkout: self - fetchDepth: 1 - retryCountOnTaskFailure: 3 + - checkout: self + fetchDepth: 1 + retryCountOnTaskFailure: 3 - task: NodeTool@0 inputs: @@ -28,94 +26,44 @@ steps: addToPath: true - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: AzureKeyVault@1 - displayName: "Azure Key Vault: Get Secrets" - inputs: - azureSubscription: "vscode-builds-subscription" - KeyVaultName: vscode-build-secrets - SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" + - template: ../distro/download-distro.yml - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifact: Compilation - path: $(Build.ArtifactStagingDirectory) - displayName: Download compilation output + - task: AzureKeyVault@1 + displayName: "Azure Key Vault: Get Secrets" + inputs: + azureSubscription: "vscode-builds-subscription" + KeyVaultName: vscode-build-secrets + SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password" - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: ExtractFiles@1 - displayName: Extract compilation output - inputs: - archiveFilePatterns: "$(Build.ArtifactStagingDirectory)/compilation.tar.gz" - cleanDestinationFolder: false + - task: DownloadPipelineArtifact@2 + inputs: + artifact: Compilation + path: $(Build.ArtifactStagingDirectory) + displayName: Download compilation output - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII + - task: ExtractFiles@1 + displayName: Extract compilation output + inputs: + archiveFilePatterns: "$(Build.ArtifactStagingDirectory)/compilation.tar.gz" + cleanDestinationFolder: false - exec { git config user.email "vscode@microsoft.com" } - exec { git config user.name "VSCode" } - displayName: Prepare tooling - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - - exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) } - Write-Host "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" - exec { git checkout FETCH_HEAD } - condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) - displayName: Checkout override commit - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") } - displayName: Merge distro - - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build/setup-npm-registry.js $env:NPM_REGISTRY } + - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Registry - - powershell: | - if (!(Test-Path ".build")) { New-Item -Path ".build" -ItemType Directory } - node build/azure-pipelines/common/computeNodeModulesCacheKey.js $(VSCODE_ARCH) > .build/yarnlockhash - node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash - displayName: Prepare yarn cache flags - - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - task: Cache@2 - inputs: - key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash" - path: .build/node_modules_cache - cacheHitVar: NODE_MODULES_RESTORED - displayName: Restore node_modules cache - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - task: Cache@2 - inputs: - key: "nodeModules | $(Agent.OS) | .build/yarnlockhash" - path: .build/node_modules_cache - cacheHitVar: NODE_MODULES_RESTORED - displayName: Restore node_modules cache + - pwsh: | + mkdir .build -ea 0 + node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/yarnlockhash + displayName: Prepare node_modules cache key - task: Cache@2 inputs: - key: '"builtInDeps" | .build/builtindepshash' - path: .build/builtInExtensions - displayName: Restore built-in extensions + key: '"node_modules" | .build/yarnlockhash' + path: .build/node_modules_cache + cacheHitVar: NODE_MODULES_RESTORED + displayName: Restore node_modules cache - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { 7z.exe x .build/node_modules_cache/cache.7z -aos } + - powershell: 7z.exe x .build/node_modules_cache/cache.7z -aoa condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true')) displayName: Extract node_modules cache @@ -134,10 +82,28 @@ steps: condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none')) displayName: Setup NPM Authentication + - powershell: | + mkdir -Force .build/node-gyp + displayName: Create custom node-gyp directory + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + + - powershell: | + . ../../build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + # TODO: Should be replaced with upstream URL once https://github.com/nodejs/node-gyp/pull/2825 + # gets merged. + exec { git clone https://github.com/rzhao271/node-gyp.git . } "Cloning rzhao271/node-gyp failed" + exec { git checkout 102b347da0c92c29f9c67df22e864e70249cf086 } "Checking out 102b347 failed" + exec { npm install } "Building rzhao271/node-gyp failed" + displayName: Install custom node-gyp + workingDirectory: .build/node-gyp + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + - powershell: | . build/azure-pipelines/win32/exec.ps1 . build/azure-pipelines/win32/retry.ps1 $ErrorActionPreference = "Stop" + $env:npm_config_node_gyp="$(Join-Path $pwd.Path '.build/node-gyp/bin/node-gyp.js')" $env:npm_config_arch="$(VSCODE_ARCH)" $env:CHILD_CONCURRENCY="1" retry { exec { yarn --frozen-lockfile --check-files } } @@ -148,13 +114,10 @@ steps: displayName: Install dependencies condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build/lib/builtInExtensions.js } - env: - GITHUB_TOKEN: "$(github-distro-mixin-password)" - displayName: Download missing built-in extensions + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - powershell: node build/azure-pipelines/distro/mixin-npm + condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true')) + displayName: Mixin distro node modules - powershell: | . build/azure-pipelines/win32/exec.ps1 @@ -166,72 +129,68 @@ steps: displayName: Create node_modules archive - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build/azure-pipelines/mixin } - displayName: Mix in quality + - powershell: node build/azure-pipelines/distro/mixin-quality + displayName: Mixin distro quality - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build\lib\policies } - displayName: Generate Group Policy definitions - retryCountOnTaskFailure: 3 - - - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" - exec { yarn gulp "transpile-client-swc" "transpile-extensions" } - displayName: Transpile - - - ${{ if eq(parameters.VSCODE_QUALITY, 'insider') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_EXPLORER_APPX_DIR=$(Join-Path $pwd.Path ".build/win32/appx") - exec { node build/win32/explorer-appx-fetcher } - env: - VSCODE_ARCH: "$(VSCODE_ARCH)" - displayName: Download Explorer Sparse Package - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) + - template: ../common/install-builtin-extensions.yml - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" - exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" } - echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)" - displayName: Build + - powershell: node build\lib\policies + displayName: Generate Group Policy definitions + retryCountOnTaskFailure: 3 - - ${{ if eq(parameters.VSCODE_BUILD_TUNNEL_CLI, true) }}: + - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}: + - powershell: yarn gulp "transpile-client-swc" "transpile-extensions" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Transpile + + - ${{ else }}: + - ${{ if eq(parameters.VSCODE_QUALITY, 'insider') }}: + - powershell: node build/win32/explorer-appx-fetcher .build/win32/appx + displayName: Download Explorer Sparse Package + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" } + echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build + + - powershell: yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Prepare Setup Package + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" } + exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" } + echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(CodeSigningFolderPath),$(agent.builddirectory)/vscode-reh-win32-$(VSCODE_ARCH)" + env: + GITHUB_TOKEN: "$(github-distro-mixin-password)" + displayName: Build Servers + condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) + + - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: + - template: product-build-win32-test.yml + parameters: + VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} + VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} + VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} + VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} + + - ${{ if ne(parameters.VSCODE_CIBUILD, true) }}: + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - task: DownloadPipelineArtifact@2 inputs: - artifact: unsigned_vscode_cli_win32_arm64_cli + artifact: unsigned_vscode_cli_win32_$(VSCODE_ARCH)_cli patterns: "**" path: $(Build.ArtifactStagingDirectory)/cli displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64')) - - - task: DownloadPipelineArtifact@2 - inputs: - artifact: unsigned_vscode_cli_win32_x64_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) - - - task: DownloadPipelineArtifact@2 - inputs: - artifact: unsigned_vscode_cli_win32_ia32_cli - patterns: "**" - path: $(Build.ArtifactStagingDirectory)/cli - displayName: Download VS Code CLI - condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'ia32')) - powershell: | . build/azure-pipelines/win32/exec.ps1 @@ -244,52 +203,13 @@ steps: Move-Item -Path "$(Build.ArtifactStagingDirectory)/cli/$AppName.exe" -Destination "$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/bin/$CliAppName.exe" displayName: Move VS Code CLI - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" - exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" } - displayName: Prepare Package - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build/azure-pipelines/mixin --server } - displayName: Mix in quality - condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" - exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" } - exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" } - echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(CodeSigningFolderPath),$(agent.builddirectory)/vscode-reh-win32-$(VSCODE_ARCH)" - displayName: Build Server - condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - - ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}: - - template: product-build-win32-test.yml - parameters: - VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }} - VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }} - VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }} - VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }} - - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - task: UseDotNet@2 inputs: - version: 3.x - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) + version: 6.x - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - task: EsrpClientTool@1 displayName: Download ESRPClient - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" @@ -301,28 +221,17 @@ steps: echo "##vso[task.setvariable variable=EsrpCliDllPath]$EsrpCliDllPath" displayName: Find ESRP CLI - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.dll,*.exe,*.node' } + - powershell: node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.dll,*.exe,*.node' displayName: Codesign - - ${{ if and(eq(parameters.VSCODE_QUALITY, 'insider'), eq(parameters.VSCODE_PUBLISH, true)) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows-appx $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.appx' } + - ${{ if eq(parameters.VSCODE_QUALITY, 'insider') }}: + - powershell: node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows-appx $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.appx' displayName: Codesign context menu appx package - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-archive" } + - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}: + - powershell: yarn gulp "vscode-win32-$(VSCODE_ARCH)-archive" displayName: Package archive - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" @@ -333,26 +242,19 @@ steps: exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-user-setup" --sign } displayName: Package setups - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - - powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - .\build\azure-pipelines\win32\prepare-publish.ps1 + - powershell: .\build\azure-pipelines\win32\prepare-publish.ps1 displayName: Publish - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: Generate SBOM (client) inputs: BuildDropPath: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH) PackageName: Visual Studio Code - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - publish: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/_manifest displayName: Publish SBOM (client) artifact: vscode_client_win32_$(VSCODE_ARCH)_sbom - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: Generate SBOM (server) inputs: @@ -360,35 +262,28 @@ steps: PackageName: Visual Studio Code Server condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - publish: $(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)/_manifest displayName: Publish SBOM (server) artifact: vscode_server_win32_$(VSCODE_ARCH)_sbom condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\$(ARCHIVE_NAME) artifact: vscode_client_win32_$(VSCODE_ARCH)_archive displayName: Publish archive - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\$(SYSTEM_SETUP_NAME) artifact: vscode_client_win32_$(VSCODE_ARCH)_setup displayName: Publish system setup - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\user-setup\$(USER_SETUP_NAME) artifact: vscode_client_win32_$(VSCODE_ARCH)_user-setup displayName: Publish user setup - condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH).zip artifact: vscode_server_win32_$(VSCODE_ARCH)_archive displayName: Publish server archive condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) - - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}: - publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH)-web.zip artifact: vscode_web_win32_$(VSCODE_ARCH)_archive displayName: Publish web server archive diff --git a/build/builtin/index.html b/build/builtin/index.html index 13c84e0375c..dc2a7ca6d0d 100644 --- a/build/builtin/index.html +++ b/build/builtin/index.html @@ -5,7 +5,6 @@ - Manage Built-in Extensions @@ -43,4 +42,4 @@
- \ No newline at end of file + diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt new file mode 100644 index 00000000000..beb2b9730b0 --- /dev/null +++ b/build/checksums/electron.txt @@ -0,0 +1,27 @@ +3ba067c6f338f9a525c4b697e9cf8e3c3b3d9f6abfdfb11fba47e053da0f3496 *electron-v22.3.14-darwin-arm64-symbols.zip +c08bf19e11c006346b210585cf0803cd0b07107a362a2414cc185f6a228afbf2 *electron-v22.3.14-darwin-arm64.zip +72ced94e7230d3138dd84acbf38dc593d4a93ec796a3a478f99aa6974030d79c *electron-v22.3.14-darwin-x64-symbols.zip +77c1c96411326b00d3ef7c9f6af96a3b4c2fa2314196fce3374fcf734dd8dc67 *electron-v22.3.14-darwin-x64.zip +d847c59f3835749dcdd5376daefb3a5992f1ed5d7693f871328296e1388fb69d *electron-v22.3.14-linux-arm64-symbols.zip +95bb9ee160c60b50ff25b307fb8bc36bdb5297d43c6e366f0b835f36c4f327c9 *electron-v22.3.14-linux-arm64.zip +38a51d81f9ffe6e2ebf25844999fddbeb4edc63ae22136af1502db373bb024ab *electron-v22.3.14-linux-armv7l-symbols.zip +bf589c74f07fe11586ffcf8c122d34b91c5ced08d54532ee883d1e025b6d1b02 *electron-v22.3.14-linux-armv7l.zip +28d0eda61ea736375c549d0955f36b7d3e3c2019453ef83d793dae8b0d74f461 *electron-v22.3.14-linux-x64-symbols.zip +89b72e40fb8b9106deda3e6ffa30dd80beaa8f2e2a9d037b55c034a5a27a7b60 *electron-v22.3.14-linux-x64.zip +b9ba15fcf7c60cf57e95fae731bc0c336e131ed4fac91b4c59d50a28407ca0b0 *electron-v22.3.14-win32-arm64-pdb.zip +9f375d01feeb9e28f9c0913a4e22be900c0a7ff4e51449bb9b859ce1bd18f9f3 *electron-v22.3.14-win32-arm64-symbols.zip +17e354aca0683f79d79f7fa7ecfa8a4381b356d04fa45ec0aa85b5f048151c10 *electron-v22.3.14-win32-arm64.zip +900ca316ce939547ab62847c8833a78c1002a69b936be7e9af328a3518a7d379 *electron-v22.3.14-win32-ia32-pdb.zip +90af7a48b4e722a3436b6a8893540fb746d99b4832ca48c355a63fa0930f6446 *electron-v22.3.14-win32-ia32-symbols.zip +487d811c7cf3282f4c3a17b5ab7ab1fd71dbc585449d77da3a9bf052657ac4ad *electron-v22.3.14-win32-ia32.zip +41ce6c3d87c89f6b48aac74649657a120c28c78513908996dc20e57a640d4653 *electron-v22.3.14-win32-x64-pdb.zip +57b35bfa186b64a9dd1eb2bb85141bb998d0378bb20ac8038718b41d16deb978 *electron-v22.3.14-win32-x64-symbols.zip +f45eba3faa7e10fb1c6e5cf044dd42733a7c8cb455de57647b74e7510b0b94b6 *electron-v22.3.14-win32-x64.zip +16a75de6e3e4643589237e6e1c680c43b4e77fe04918bfbe4408775b7e616afc *ffmpeg-v22.3.14-darwin-arm64.zip +92db0c163c326d33a516ebfc56c7bd4faae9456f4238dde916c580b459b8dc8d *ffmpeg-v22.3.14-darwin-x64.zip +59d2e2b2f2cc515a86a4e0cfd1116d10a8b25a8d58d45bb04de3512e156c944b *ffmpeg-v22.3.14-linux-arm64.zip +b9d3b227bee17666d395ee7882ef477a733c3eeef3f1d9f2e3616d2d02eb3376 *ffmpeg-v22.3.14-linux-armv7l.zip +fa07ef910b23a4ef4b6761bc16d20c0e70ff0259325c4d523129e2d9c5084174 *ffmpeg-v22.3.14-linux-x64.zip +7f744b657ae7c26f80cae0f2771a00edd368350229b85118a246573987dd6ff1 *ffmpeg-v22.3.14-win32-arm64.zip +562e04d2cf1c970b6128d66d08dfe8d88a28e54adf599293eee2bd6c292fd16b *ffmpeg-v22.3.14-win32-ia32.zip +f69510384ef912fd9b4961f97357789a4a36e8df6ff382aeeab23fbb063def9a *ffmpeg-v22.3.14-win32-x64.zip diff --git a/build/checksums/nodejs.txt b/build/checksums/nodejs.txt new file mode 100644 index 00000000000..5229a5bc80a --- /dev/null +++ b/build/checksums/nodejs.txt @@ -0,0 +1,7 @@ +f9f02f7872e2e8ee54320fce13deb9d56904f32bb0615b6e21aa3371d8899150 node-v16.17.1-darwin-arm64.tar.gz +3db26761ad8493b894d42260d7e65094b7af9bc473588739e61bc1c32d6ff955 node-v16.17.1-darwin-x64.tar.gz +adc7032888d4e672a4aac886baede8c04fccdd1a2e7ab4bcf325e3f336f44a3d node-v16.17.1-linux-arm64.tar.gz +aeab05e35f1d2824ecfb88ca321f1408b44d292b2775f2890972c828e00216d0 node-v16.17.1-linux-armv7l.tar.gz +da5658693243b3ecf6a4cba6751a71df1eb9e9703ca93b42a9404aed85f58ad0 node-v16.17.1-linux-x64.tar.gz +f518a70dcab7c3fac5b2e1ef100b4f628edfb160f4fafa9a94ef222da8a6e9ab win-x64/node.exe +2393aff88be19dbe0205cbde4ff0c1d89911b15de5c99c80f6e5e29604eecd12 win-x86/node.exe diff --git a/build/darwin/create-universal-app.js b/build/darwin/create-universal-app.js index 12283ddae34..a85f394ad75 100644 --- a/build/darwin/create-universal-app.js +++ b/build/darwin/create-universal-app.js @@ -4,17 +4,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); +const path = require("path"); +const fs = require("fs"); const vscode_universal_bundler_1 = require("vscode-universal-bundler"); const cross_spawn_promise_1 = require("@malept/cross-spawn-promise"); -const fs = require("fs-extra"); -const path = require("path"); -const product = require("../../product.json"); -async function main() { - const buildDir = process.env['AGENT_BUILDDIRECTORY']; +const root = path.dirname(path.dirname(__dirname)); +async function main(buildDir) { const arch = process.env['VSCODE_ARCH']; if (!buildDir) { - throw new Error('$AGENT_BUILDDIRECTORY not set'); + throw new Error('Build dir not provided'); } + const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); const appName = product.nameLong + '.app'; const x64AppPath = path.join(buildDir, 'VSCode-darwin-x64', appName); const arm64AppPath = path.join(buildDir, 'VSCode-darwin-arm64', appName); @@ -39,11 +39,11 @@ async function main() { outAppPath, force: true }); - const productJson = await fs.readJson(productJsonPath); + const productJson = JSON.parse(fs.readFileSync(productJsonPath, 'utf8')); Object.assign(productJson, { darwinUniversalAssetId: 'darwin-universal' }); - await fs.writeJson(productJsonPath, productJson); + fs.writeFileSync(productJsonPath, JSON.stringify(productJson, null, '\t')); // Verify if native module architecture is correct const findOutput = await (0, cross_spawn_promise_1.spawn)('find', [outAppPath, '-name', 'keytar.node']); const lipoOutput = await (0, cross_spawn_promise_1.spawn)('lipo', ['-archs', findOutput.replace(/\n$/, '')]); @@ -52,9 +52,9 @@ async function main() { } } if (require.main === module) { - main().catch(err => { + main(process.argv[2]).catch(err => { console.error(err); process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXVuaXZlcnNhbC1hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGUtdW5pdmVyc2FsLWFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHVFQUE0RDtBQUM1RCxxRUFBb0Q7QUFDcEQsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3Qiw4Q0FBOEM7QUFFOUMsS0FBSyxVQUFVLElBQUk7SUFDbEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztLQUNqRDtJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFakcsTUFBTSxJQUFBLDJDQUFnQixFQUFDO1FBQ3RCLFVBQVU7UUFDVixZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixXQUFXLEVBQUU7WUFDWixjQUFjO1lBQ2QsYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1lBQ2YsWUFBWTtZQUNaLGNBQWM7WUFDZCxRQUFRO1NBQ1I7UUFDRCxVQUFVO1FBQ1YsS0FBSyxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7UUFDMUIsc0JBQXNCLEVBQUUsa0JBQWtCO0tBQzFDLENBQUMsQ0FBQztJQUNILE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakQsa0RBQWtEO0lBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBQSwyQkFBSyxFQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsMkJBQUssRUFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssY0FBYyxFQUFFO1FBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFVBQVUsRUFBRSxDQUFDLENBQUM7S0FDckQ7QUFDRixDQUFDO0FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUM1QixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0NBQ0gifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXVuaXZlcnNhbC1hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGUtdW5pdmVyc2FsLWFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsdUVBQTREO0FBQzVELHFFQUFvRDtBQUVwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVuRCxLQUFLLFVBQVUsSUFBSSxDQUFDLFFBQWlCO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUMxQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFakcsTUFBTSxJQUFBLDJDQUFnQixFQUFDO1FBQ3RCLFVBQVU7UUFDVixZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixXQUFXLEVBQUU7WUFDWixjQUFjO1lBQ2QsYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1lBQ2YsWUFBWTtZQUNaLGNBQWM7WUFDZCxRQUFRO1NBQ1I7UUFDRCxVQUFVO1FBQ1YsS0FBSyxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7UUFDMUIsc0JBQXNCLEVBQUUsa0JBQWtCO0tBQzFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTNFLGtEQUFrRDtJQUNsRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsMkJBQUssRUFBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFBLDJCQUFLLEVBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLGNBQWMsRUFBRTtRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3JEO0FBQ0YsQ0FBQztBQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7SUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0NBQ0gifQ== \ No newline at end of file diff --git a/build/darwin/create-universal-app.ts b/build/darwin/create-universal-app.ts index 5f4b3170532..7b10af8af66 100644 --- a/build/darwin/create-universal-app.ts +++ b/build/darwin/create-universal-app.ts @@ -3,20 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import * as path from 'path'; +import * as fs from 'fs'; import { makeUniversalApp } from 'vscode-universal-bundler'; import { spawn } from '@malept/cross-spawn-promise'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import * as product from '../../product.json'; -async function main() { - const buildDir = process.env['AGENT_BUILDDIRECTORY']; +const root = path.dirname(path.dirname(__dirname)); + +async function main(buildDir?: string) { const arch = process.env['VSCODE_ARCH']; if (!buildDir) { - throw new Error('$AGENT_BUILDDIRECTORY not set'); + throw new Error('Build dir not provided'); } + const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); const appName = product.nameLong + '.app'; const x64AppPath = path.join(buildDir, 'VSCode-darwin-x64', appName); const arm64AppPath = path.join(buildDir, 'VSCode-darwin-arm64', appName); @@ -43,11 +44,11 @@ async function main() { force: true }); - const productJson = await fs.readJson(productJsonPath); + const productJson = JSON.parse(fs.readFileSync(productJsonPath, 'utf8')); Object.assign(productJson, { darwinUniversalAssetId: 'darwin-universal' }); - await fs.writeJson(productJsonPath, productJson); + fs.writeFileSync(productJsonPath, JSON.stringify(productJson, null, '\t')); // Verify if native module architecture is correct const findOutput = await spawn('find', [outAppPath, '-name', 'keytar.node']); @@ -58,7 +59,7 @@ async function main() { } if (require.main === module) { - main().catch(err => { + main(process.argv[2]).catch(err => { console.error(err); process.exit(1); }); diff --git a/build/darwin/sign.js b/build/darwin/sign.js index 0758551863e..4a6ccee4f5a 100644 --- a/build/darwin/sign.js +++ b/build/darwin/sign.js @@ -4,13 +4,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); -const codesign = require("electron-osx-sign"); +const fs = require("fs"); const path = require("path"); -const util = require("../lib/util"); -const product = require("../../product.json"); +const codesign = require("electron-osx-sign"); const cross_spawn_promise_1 = require("@malept/cross-spawn-promise"); -async function main() { - const buildDir = process.env['AGENT_BUILDDIRECTORY']; +const root = path.dirname(path.dirname(__dirname)); +function getElectronVersion() { + const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); + const target = /^target "(.*)"$/m.exec(yarnrc)[1]; + return target; +} +async function main(buildDir) { const tempDir = process.env['AGENT_TEMPDIRECTORY']; const arch = process.env['VSCODE_ARCH']; const identity = process.env['CODESIGN_IDENTITY']; @@ -20,6 +24,7 @@ async function main() { if (!tempDir) { throw new Error('$AGENT_TEMPDIRECTORY not set'); } + const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); const baseDir = path.dirname(__dirname); const appRoot = path.join(buildDir, `VSCode-darwin-${arch}`); const appName = product.nameLong + '.app'; @@ -38,7 +43,7 @@ async function main() { 'pre-auto-entitlements': false, 'pre-embed-provisioning-profile': false, keychain: path.join(tempDir, 'buildagent.keychain'), - version: util.getElectronVersion(), + version: getElectronVersion(), identity, 'gatekeeper-assess': false }; @@ -100,9 +105,9 @@ async function main() { await codesign.signAsync(appOpts); } if (require.main === module) { - main().catch(err => { + main(process.argv[2]).catch(err => { console.error(err); process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyw4Q0FBOEM7QUFDOUMsNkJBQTZCO0FBQzdCLG9DQUFvQztBQUNwQyw4Q0FBOEM7QUFDOUMscUVBQW9EO0FBRXBELEtBQUssVUFBVSxJQUFJO0lBQ2xCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztLQUNqRDtJQUVELElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMvRSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDNUMsTUFBTSxnQkFB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDhDQUE4QztBQUM5QyxxRUFBb0Q7QUFFcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFbkQsU0FBUyxrQkFBa0I7SUFDMUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUksQ0FBQyxRQUFpQjtJQUNwQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztLQUNqRDtJQUVELElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVB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 \ No newline at end of file diff --git a/build/darwin/sign.ts b/build/darwin/sign.ts index 776a7207074..01e9ebf2d4b 100644 --- a/build/darwin/sign.ts +++ b/build/darwin/sign.ts @@ -3,14 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as codesign from 'electron-osx-sign'; +import * as fs from 'fs'; import * as path from 'path'; -import * as util from '../lib/util'; -import * as product from '../../product.json'; +import * as codesign from 'electron-osx-sign'; import { spawn } from '@malept/cross-spawn-promise'; -async function main(): Promise { - const buildDir = process.env['AGENT_BUILDDIRECTORY']; +const root = path.dirname(path.dirname(__dirname)); + +function getElectronVersion(): string { + const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); + const target = /^target "(.*)"$/m.exec(yarnrc)![1]; + return target; +} + +async function main(buildDir?: string): Promise { const tempDir = process.env['AGENT_TEMPDIRECTORY']; const arch = process.env['VSCODE_ARCH']; const identity = process.env['CODESIGN_IDENTITY']; @@ -23,6 +29,7 @@ async function main(): Promise { throw new Error('$AGENT_TEMPDIRECTORY not set'); } + const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); const baseDir = path.dirname(__dirname); const appRoot = path.join(buildDir, `VSCode-darwin-${arch}`); const appName = product.nameLong + '.app'; @@ -42,7 +49,7 @@ async function main(): Promise { 'pre-auto-entitlements': false, 'pre-embed-provisioning-profile': false, keychain: path.join(tempDir, 'buildagent.keychain'), - version: util.getElectronVersion(), + version: getElectronVersion(), identity, 'gatekeeper-assess': false }; @@ -111,7 +118,7 @@ async function main(): Promise { } if (require.main === module) { - main().catch(err => { + main(process.argv[2]).catch(err => { console.error(err); process.exit(1); }); diff --git a/build/filters.js b/build/filters.js index 16d4f7dd46f..095cf733f8c 100644 --- a/build/filters.js +++ b/build/filters.js @@ -194,3 +194,7 @@ module.exports.eslintFilter = [ .filter(line => !!line) .map(line => `!${line}`) ]; + +module.exports.stylelintFilter = [ + 'src/**/*.css' +]; diff --git a/build/gulpfile.cli.js b/build/gulpfile.cli.js new file mode 100644 index 00000000000..2ed09314fc5 --- /dev/null +++ b/build/gulpfile.cli.js @@ -0,0 +1,189 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +//@ts-check + +const es = require('event-stream'); +const gulp = require('gulp'); +const path = require('path'); +const fancyLog = require('fancy-log'); +const ansiColors = require('ansi-colors'); +const cp = require('child_process'); +const { tmpdir } = require('os'); +const { promises: fs, existsSync, mkdirSync, rmSync } = require('fs'); + +const task = require('./lib/task'); +const watcher = require('./lib/watch'); +const { debounce } = require('./lib/util'); +const createReporter = require('./lib/reporter').createReporter; + +const root = 'cli'; +const rootAbs = path.resolve(__dirname, '..', root); +const src = `${root}/src`; +const targetCliPath = path.join(root, 'target', 'debug', process.platform === 'win32' ? 'code.exe' : 'code'); + +const platformOpensslDirName = + process.platform === 'win32' ? ( + process.arch === 'arm64' + ? 'arm64-windows-static-md' + : process.arch === 'ia32' + ? 'x86-windows-static-md' + : 'x64-windows-static-md') + : process.platform === 'darwin' ? ( + process.arch === 'arm64' + ? 'arm64-osx' + : 'x64-osx') + : (process.arch === 'arm64' + ? 'arm64-linux' + : process.arch === 'arm' + ? 'arm-linux' + : 'x64-linux'); +const platformOpensslDir = path.join(rootAbs, 'openssl', 'package', 'out', platformOpensslDirName); + +const hasLocalRust = (() => { + /** @type boolean | undefined */ + let result = undefined; + return () => { + if (result !== undefined) { + return result; + } + + try { + const r = cp.spawnSync('cargo', ['--version']); + result = r.status === 0; + } catch (e) { + result = false; + } + + return result; + }; +})(); + +const debounceEsStream = (fn, duration = 100) => { + let handle = undefined; + let pending = []; + const sendAll = (pending) => (event, ...args) => { + for (const stream of pending) { + pending.emit(event, ...args); + } + }; + + return es.map(function (_, callback) { + console.log('defer'); + if (handle !== undefined) { + clearTimeout(handle); + } + + handle = setTimeout(() => { + handle = undefined; + + const previous = pending; + pending = []; + fn() + .on('error', sendAll('error')) + .on('data', sendAll('data')) + .on('end', sendAll('end')); + }, duration); + + pending.push(this); + }); +}; + +const compileFromSources = (callback) => { + const proc = cp.spawn('cargo', ['--color', 'always', 'build'], { + cwd: root, + stdio: ['ignore', 'pipe', 'pipe'], + env: existsSync(platformOpensslDir) ? { OPENSSL_DIR: platformOpensslDir, ...process.env } : process.env + }); + + /** @type Buffer[] */ + const stdoutErr = []; + proc.stdout.on('data', d => stdoutErr.push(d)); + proc.stderr.on('data', d => stdoutErr.push(d)); + proc.on('error', callback); + proc.on('exit', code => { + if (code !== 0) { + callback(Buffer.concat(stdoutErr).toString()); + } else { + callback(); + } + }); +}; + +const acquireBuiltOpenSSL = (callback) => { + const untar = require('gulp-untar'); + const gunzip = require('gulp-gunzip'); + const dir = path.join(tmpdir(), 'vscode-openssl-download'); + mkdirSync(dir, { recursive: true }); + + cp.spawnSync( + process.platform === 'win32' ? 'npm.cmd' : 'npm', + ['pack', '@vscode/openssl-prebuilt'], + { stdio: ['ignore', 'ignore', 'inherit'], cwd: dir } + ); + + gulp.src('*.tgz', { cwd: dir }) + .pipe(gunzip()) + .pipe(untar()) + .pipe(gulp.dest(`${root}/openssl`)) + .on('error', callback) + .on('end', () => { + rmSync(dir, { recursive: true, force: true }); + callback(); + }); +}; + +const compileWithOpenSSLCheck = (/** @type import('./lib/reporter').IReporter */ reporter) => es.map((_, callback) => { + compileFromSources(err => { + if (!err) { + // no-op + } else if (err.toString().includes('Could not find directory of OpenSSL installation') && !existsSync(platformOpensslDir)) { + fancyLog(ansiColors.yellow(`[cli]`), 'OpenSSL libraries not found, acquiring prebuilt bits...'); + acquireBuiltOpenSSL(err => { + if (err) { + callback(err); + } else { + compileFromSources(err => { + if (err) { + reporter(err.toString()); + } + callback(null, ''); + }); + } + }); + } else { + reporter(err.toString()); + } + + callback(null, ''); + }); +}); + +const warnIfRustNotInstalled = () => { + if (!hasLocalRust()) { + fancyLog(ansiColors.yellow(`[cli]`), 'No local Rust install detected, compilation may fail.'); + fancyLog(ansiColors.yellow(`[cli]`), 'Get rust from: https://rustup.rs/'); + } +}; + +const compileCliTask = task.define('compile-cli', () => { + warnIfRustNotInstalled(); + const reporter = createReporter('cli'); + return gulp.src(`${root}/Cargo.toml`) + .pipe(compileWithOpenSSLCheck(reporter)) + .pipe(reporter.end(true)); +}); + + +const watchCliTask = task.define('watch-cli', () => { + warnIfRustNotInstalled(); + return watcher(`${src}/**`, { read: false }) + .pipe(debounce(compileCliTask)); +}); + +gulp.task(compileCliTask); +gulp.task(watchCliTask); diff --git a/build/gulpfile.compile.js b/build/gulpfile.compile.js index 1424c90e3d0..c4947e76cbf 100644 --- a/build/gulpfile.compile.js +++ b/build/gulpfile.compile.js @@ -11,15 +11,22 @@ const task = require('./lib/task'); const compilation = require('./lib/compilation'); const optimize = require('./lib/optimize'); -// Full compile, including nls and inline sources in sourcemaps, for build -const compileBuildTask = task.define('compile-build', - task.series( +function makeCompileBuildTask(disableMangle) { + return task.series( util.rimraf('out-build'), util.buildWebNodePaths('out-build'), compilation.compileApiProposalNamesTask, - compilation.compileTask('src', 'out-build', true), + compilation.compileTask('src', 'out-build', true, { disableMangle }), optimize.optimizeLoaderTask('out-build', 'out-build', true) - ) -); + ); +} + +// Full compile, including nls and inline sources in sourcemaps, mangling, minification, for build +const compileBuildTask = task.define('compile-build', makeCompileBuildTask(false)); gulp.task(compileBuildTask); exports.compileBuildTask = compileBuildTask; + +// Full compile for PR ci, e.g no mangling +const compileBuildTaskPullRequest = task.define('compile-build-pr', makeCompileBuildTask(true)); +gulp.task(compileBuildTaskPullRequest); +exports.compileBuildTaskPullRequest = compileBuildTaskPullRequest; diff --git a/build/gulpfile.editor.js b/build/gulpfile.editor.js index fb3a148f9a8..f9f76e4d371 100644 --- a/build/gulpfile.editor.js +++ b/build/gulpfile.editor.js @@ -85,7 +85,8 @@ const extractEditorSrcTask = task.define('extract-editor-src', () => { }); }); -const compileEditorAMDTask = task.define('compile-editor-amd', compilation.compileTask('out-editor-src', 'out-editor-build', true)); +// Disable mangling for the editor, as it complicates debugging & quite a few users rely on private/protected fields. +const compileEditorAMDTask = task.define('compile-editor-amd', compilation.compileTask('out-editor-src', 'out-editor-build', true, { disableMangle: true })); const optimizeEditorAMDTask = task.define('optimize-editor-amd', optimize.optimizeTask( { diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js index 3c5f90f16d6..e2c9e3d9aba 100644 --- a/build/gulpfile.extensions.js +++ b/build/gulpfile.extensions.js @@ -58,6 +58,7 @@ const compilations = [ 'media-preview/tsconfig.json', 'merge-conflict/tsconfig.json', 'microsoft-authentication/tsconfig.json', + 'notebook-renderers/tsconfig.json', 'npm/tsconfig.json', 'php-language-features/tsconfig.json', 'search-result/tsconfig.json', @@ -237,12 +238,22 @@ const cleanExtensionsBuildTask = task.define('clean-extensions-build', util.rimr const compileExtensionsBuildTask = task.define('compile-extensions-build', task.series( cleanExtensionsBuildTask, task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream(false).pipe(gulp.dest('.build'))), - task.define('bundle-extensions-build', () => ext.packageLocalExtensionsStream(false).pipe(gulp.dest('.build'))), + task.define('bundle-extensions-build', () => ext.packageLocalExtensionsStream(false, false).pipe(gulp.dest('.build'))), )); gulp.task(compileExtensionsBuildTask); gulp.task(task.define('extensions-ci', task.series(compileExtensionsBuildTask, compileExtensionMediaBuildTask))); +const compileExtensionsBuildPullRequestTask = task.define('compile-extensions-build-pr', task.series( + cleanExtensionsBuildTask, + task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream(false).pipe(gulp.dest('.build'))), + task.define('bundle-extensions-build-pr', () => ext.packageLocalExtensionsStream(false, true).pipe(gulp.dest('.build'))), +)); + +gulp.task(compileExtensionsBuildPullRequestTask); +gulp.task(task.define('extensions-ci-pr', task.series(compileExtensionsBuildPullRequestTask, compileExtensionMediaBuildTask))); + + exports.compileExtensionsBuildTask = compileExtensionsBuildTask; //#endregion diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js index ae33cc9b129..a235f55c79e 100644 --- a/build/gulpfile.reh.js +++ b/build/gulpfile.reh.js @@ -28,6 +28,7 @@ const { compileBuildTask } = require('./gulpfile.compile'); const { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions'); const { vscodeWebEntryPoints, vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web'); const cp = require('child_process'); +const log = require('fancy-log'); const REPO_ROOT = path.dirname(__dirname); const commit = getVersion(REPO_ROOT); @@ -41,7 +42,6 @@ const BUILD_TARGETS = [ { platform: 'win32', arch: 'x64' }, { platform: 'darwin', arch: 'x64' }, { platform: 'darwin', arch: 'arm64' }, - { platform: 'linux', arch: 'ia32' }, { platform: 'linux', arch: 'x64' }, { platform: 'linux', arch: 'armhf' }, { platform: 'linux', arch: 'arm64' }, @@ -71,14 +71,13 @@ const serverResources = [ 'out-build/vs/base/node/ps.sh', // Terminal shell integration - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.fish', 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1', 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh', 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh', 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh', 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh', 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh', - 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.fish', + 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish', '!**/test/**' ]; @@ -126,11 +125,43 @@ const serverWithWebEntryPoints = [ function getNodeVersion() { const yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8'); - const target = /^target "(.*)"$/m.exec(yarnrc)[1]; - return target; + const nodeVersion = /^target "(.*)"$/m.exec(yarnrc)[1]; + const internalNodeVersion = /^ms_build_id "(.*)"$/m.exec(yarnrc)[1]; + return { nodeVersion, internalNodeVersion }; } -const nodeVersion = getNodeVersion(); +function getNodeChecksum(nodeVersion, platform, arch) { + let expectedName; + switch (platform) { + case 'win32': + expectedName = `win-${arch}/node.exe`; + break; + + case 'darwin': + case 'alpine': + case 'linux': + expectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`; + break; + } + + const nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8'); + for (const line of nodeJsChecksums.split('\n')) { + const [checksum, name] = line.split(/\s+/); + if (name === expectedName) { + return checksum; + } + } + return undefined; +} + +function extractAlpinefromDocker(nodeVersion, platform, arch) { + const imageName = arch === 'arm64' ? 'arm64v8/node' : 'node'; + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`); + const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' }); + return es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]); +} + +const { nodeVersion, internalNodeVersion } = getNodeVersion(); BUILD_TARGETS.forEach(({ platform, arch }) => { gulp.task(task.define(`node-${platform}-${arch}`, () => { @@ -154,33 +185,53 @@ if (defaultNodeTask) { } function nodejs(platform, arch) { - const remote = require('gulp-remote-retry-src'); + const { fetchUrls, fetchGithub } = require('./lib/fetch'); const untar = require('gulp-untar'); + const crypto = require('crypto'); if (arch === 'ia32') { arch = 'x86'; - } - - if (platform === 'win32') { - return remote(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org' }) - .pipe(rename('node.exe')); - } - - if (arch === 'alpine' || platform === 'alpine') { - const imageName = arch === 'arm64' ? 'arm64v8/node' : 'node'; - const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' }); - return es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]); - } - - if (arch === 'armhf') { + } else if (arch === 'armhf') { arch = 'armv7l'; + } else if (arch === 'alpine') { + platform = 'alpine'; + arch = 'x64'; } - return remote(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org' }) - .pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) - .pipe(filter('**/node')) - .pipe(util.setExecutableBit('**')) - .pipe(rename('node')); + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`); + + const checksumSha256 = getNodeChecksum(nodeVersion, platform, arch); + + if (checksumSha256) { + log(`Using SHA256 checksum for checking integrity: ${checksumSha256}`); + } else { + log.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`); + } + + switch (platform) { + case 'win32': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `win-${arch}-node.exe`, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 })) + .pipe(rename('node.exe')); + case 'darwin': + case 'linux': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 }) + ).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) + .pipe(rename('node')); + case 'alpine': + return product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) + .pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) + .pipe(rename('node')) + : extractAlpinefromDocker(nodeVersion, platform, arch); + } } function packageTask(type, platform, arch, sourceFolderName, destinationFolderName) { @@ -261,6 +312,7 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa // filter out unnecessary files, no source maps in server build .pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map'])) .pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore'))) + .pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`))) .pipe(jsFilter) .pipe(util.stripSourceMappingURL()) .pipe(jsFilter.restore); @@ -304,8 +356,6 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa .pipe(replace('@@COMMIT@@', commit)) .pipe(replace('@@APPNAME@@', product.applicationName)) .pipe(rename(`bin/helpers/browser.cmd`)), - gulp.src('resources/server/bin/server-old.cmd', { base: '.' }) - .pipe(rename(`server.cmd`)), gulp.src('resources/server/bin/code-server.cmd', { base: '.' }) .pipe(rename(`bin/${product.serverApplicationName}.cmd`)), ); @@ -327,13 +377,6 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa .pipe(rename(`bin/${product.serverApplicationName}`)) .pipe(util.setExecutableBit()) ); - if (type !== 'reh-web') { - result = es.merge(result, - gulp.src('resources/server/bin/server-old.sh', { base: '.' }) - .pipe(rename(`server.sh`)) - .pipe(util.setExecutableBit()), - ); - } } return result.pipe(vfs.dest(destination)); diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js index ff0ed1b31c7..62691fcc8cf 100644 --- a/build/gulpfile.scan.js +++ b/build/gulpfile.scan.js @@ -9,7 +9,7 @@ const gulp = require('gulp'); const path = require('path'); const task = require('./lib/task'); const util = require('./lib/util'); -const electron = require('gulp-atom-electron'); +const electron = require('@vscode/gulp-electron'); const { config } = require('./lib/electron'); const filter = require('gulp-filter'); const deps = require('./lib/dependencies'); @@ -21,7 +21,6 @@ const BUILD_TARGETS = [ { platform: 'win32', arch: 'x64' }, { platform: 'win32', arch: 'arm64' }, { platform: 'darwin', arch: null, opts: { stats: true } }, - { platform: 'linux', arch: 'ia32' }, { platform: 'linux', arch: 'x64' }, { platform: 'linux', arch: 'armhf' }, { platform: 'linux', arch: 'arm64' }, @@ -81,8 +80,7 @@ function nodeModules(destinationExe, destinationPdb, platform) { // We don't build the prebuilt node files so we don't scan them '!**/prebuilds/**/*.node', // These are 3rd party modules that we should ignore - '!**/@parcel/watcher/**/*', - '!**/native-is-elevated/**/*'])) + '!**/@parcel/watcher/**/*'])) .pipe(gulp.dest(destinationExe)); }; diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 938943d7809..9505e8fe5ca 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -33,7 +33,6 @@ const createAsar = require('./lib/asar').createAsar; const minimist = require('minimist'); const { compileBuildTask } = require('./gulpfile.compile'); const { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions'); -const { getSettingsSearchBuildId, shouldSetupSettingsSearch } = require('./azure-pipelines/upload-configuration'); const { promisify } = require('util'); const glob = promisify(require('glob')); const rcedit = promisify(require('rcedit')); @@ -45,7 +44,6 @@ const vscodeEntryPoints = [ buildfile.workerExtensionHost, buildfile.workerNotebook, buildfile.workerLanguageDetection, - buildfile.workerSharedProcess, buildfile.workerLocalFileSearch, buildfile.workerProfileAnalysis, buildfile.workbenchDesktop, @@ -60,15 +58,16 @@ const vscodeResources = [ 'out-build/bootstrap-window.js', 'out-build/vs/**/*.{svg,png,html,jpg,mp3}', '!out-build/vs/code/browser/**/*.html', + '!out-build/vs/code/**/*-dev.html', '!out-build/vs/editor/standalone/**/*.svg', 'out-build/vs/base/common/performance.js', 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh,cpuUsage.sh,ps.sh}', 'out-build/vs/base/browser/ui/codicons/codicon/**', - 'out-build/vs/base/parts/sandbox/electron-browser/preload.js', + 'out-build/vs/base/parts/sandbox/electron-sandbox/preload.js', 'out-build/vs/workbench/browser/media/*-theme.css', 'out-build/vs/workbench/contrib/debug/**/*.json', 'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt', - 'out-build/vs/workbench/contrib/terminal/browser/media/*.fish', + 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/*.fish', 'out-build/vs/workbench/contrib/terminal/browser/media/*.ps1', 'out-build/vs/workbench/contrib/terminal/browser/media/*.sh', 'out-build/vs/workbench/contrib/terminal/browser/media/*.zsh', @@ -125,8 +124,7 @@ const optimizeVSCodeTask = task.define('optimize-vscode', task.series( manual: [ { src: [...windowBootstrapFiles, 'out-build/vs/code/electron-sandbox/workbench/workbench.js'], out: 'vs/code/electron-sandbox/workbench/workbench.js' }, { src: [...windowBootstrapFiles, 'out-build/vs/code/electron-sandbox/issue/issueReporter.js'], out: 'vs/code/electron-sandbox/issue/issueReporter.js' }, - { src: [...windowBootstrapFiles, 'out-build/vs/code/electron-sandbox/processExplorer/processExplorer.js'], out: 'vs/code/electron-sandbox/processExplorer/processExplorer.js' }, - { src: [...windowBootstrapFiles, 'out-build/vs/code/node/sharedProcess/sharedProcess.js'], out: 'vs/code/node/sharedProcess/sharedProcess.js' } + { src: [...windowBootstrapFiles, 'out-build/vs/code/electron-sandbox/processExplorer/processExplorer.js'], out: 'vs/code/electron-sandbox/processExplorer/processExplorer.js' } ] } ) @@ -151,6 +149,16 @@ const core = task.define('core-ci', task.series( )); gulp.task(core); +const corePr = task.define('core-ci-pr', task.series( + gulp.task('compile-build-pr'), + task.parallel( + gulp.task('minify-vscode'), + gulp.task('minify-vscode-reh'), + gulp.task('minify-vscode-reh-web'), + ) +)); +gulp.task(corePr); + /** * Compute checksums for some files. * @@ -192,13 +200,13 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op platform = platform || process.platform; return () => { - const electron = require('gulp-atom-electron'); + const electron = require('@vscode/gulp-electron'); const json = require('gulp-json-editor'); const out = sourceFolderName; const checksums = computeChecksums(out, [ - 'vs/base/parts/sandbox/electron-browser/preload.js', + 'vs/base/parts/sandbox/electron-sandbox/preload.js', 'vs/workbench/workbench.desktop.main.js', 'vs/workbench/workbench.desktop.main.css', 'vs/workbench/api/node/extensionHostProcess.js', @@ -245,14 +253,10 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op const date = new Date().toISOString(); const productJsonUpdate = { commit, date, checksums, version }; - if (shouldSetupSettingsSearch()) { - productJsonUpdate.settingsSearchBuildId = getSettingsSearchBuildId(packageJson); - } - const productJsonStream = gulp.src(['product.json'], { base: '.' }) .pipe(json(productJsonUpdate)); - const license = gulp.src(['LICENSES.chromium.html', product.licenseFileName, 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.', allowEmpty: true }); + const license = gulp.src([product.licenseFileName, 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.', allowEmpty: true }); // TODO the API should be copied to `out` during compile, not here const api = gulp.src('src/vscode-dts/vscode.d.ts').pipe(rename('out/vscode-dts/vscode.d.ts')); @@ -267,6 +271,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op const deps = gulp.src(dependenciesSrc, { base: '.', dot: true }) .pipe(filter(['**', `!**/${config.version}/**`, '!**/bin/darwin-arm64-87/**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map'])) .pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore'))) + .pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`))) .pipe(jsFilter) .pipe(util.rewriteSourceMappingURL(sourceMappingURLBase)) .pipe(jsFilter.restore) @@ -336,8 +341,8 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op .pipe(util.skipDirectories()) .pipe(util.fixWin32DirectoryPermissions()) .pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523 - .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: true })) - .pipe(filter(['**', '!LICENSE', '!LICENSES.chromium.html', '!version'], { dot: true })); + .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) + .pipe(filter(['**', '!LICENSE', '!version'], { dot: true })); if (platform === 'linux') { result = es.merge(result, gulp.src('resources/completions/bash/code', { base: '.' }) diff --git a/build/gulpfile.vscode.web.js b/build/gulpfile.vscode.web.js index f8305b89d10..85129a523da 100644 --- a/build/gulpfile.vscode.web.js +++ b/build/gulpfile.vscode.web.js @@ -55,7 +55,7 @@ const vscodeWebResources = [ ...vscodeWebResourceIncludes, // Excludes - '!out-build/vs/**/{node,electron-browser,electron-main}/**', + '!out-build/vs/**/{node,electron-sandbox,electron-main}/**', '!out-build/vs/editor/standalone/**', '!out-build/vs/workbench/**/*-tb.png', '!**/test/**' @@ -83,7 +83,7 @@ const buildDate = new Date().toISOString(); */ const createVSCodeWebProductConfigurationPatcher = (product) => { /** - * @param content {string} The contens of the file + * @param content {string} The contents of the file * @param path {string} The absolute file path, always using `/`, even on Windows */ const result = (content, path) => { @@ -108,7 +108,7 @@ const createVSCodeWebProductConfigurationPatcher = (product) => { */ const createVSCodeWebBuiltinExtensionsPatcher = (extensionsRoot) => { /** - * @param content {string} The contens of the file + * @param content {string} The contents of the file * @param path {string} The absolute file path, always using `/`, even on Windows */ const result = (content, path) => { @@ -128,7 +128,7 @@ const createVSCodeWebBuiltinExtensionsPatcher = (extensionsRoot) => { */ const combineContentPatchers = (...patchers) => { /** - * @param content {string} The contens of the file + * @param content {string} The contents of the file * @param path {string} The absolute file path, always using `/`, even on Windows */ const result = (content, path) => { @@ -233,7 +233,7 @@ function packageTask(sourceFolderName, destinationFolderName) { const compileWebExtensionsBuildTask = task.define('compile-web-extensions-build', task.series( task.define('clean-web-extensions-build', util.rimraf('.build/web/extensions')), - task.define('bundle-web-extensions-build', () => extensions.packageLocalExtensionsStream(true).pipe(gulp.dest('.build/web'))), + task.define('bundle-web-extensions-build', () => extensions.packageLocalExtensionsStream(true, false).pipe(gulp.dest('.build/web'))), task.define('bundle-marketplace-web-extensions-build', () => extensions.packageMarketplaceExtensionsStream(true).pipe(gulp.dest('.build/web'))), task.define('bundle-web-extension-media-build', () => extensions.buildExtensionMedia(false, '.build/web/extensions')), )); diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js index 0d3abdae01b..6e9a6f331ba 100644 --- a/build/gulpfile.vscode.win32.js +++ b/build/gulpfile.vscode.win32.js @@ -99,6 +99,9 @@ function buildWin32Setup(arch, target) { RegValueName: product.win32RegValueName, ShellNameShort: product.win32ShellNameShort, AppMutex: product.win32MutexName, + TunnelMutex: product.win32TunnelMutex, + TunnelServiceMutex: product.win32TunnelServiceMutex, + ApplicationName: product.applicationName, Arch: arch, AppId: { 'ia32': ia32AppId, 'x64': x64AppId, 'arm64': arm64AppId }[arch], IncompatibleTargetAppId: { 'ia32': product.win32AppId, 'x64': product.win32x64AppId, 'arm64': product.win32arm64AppId }[arch], diff --git a/build/hygiene.js b/build/hygiene.js index 67f074c4ac0..b8881081b2e 100644 --- a/build/hygiene.js +++ b/build/hygiene.js @@ -11,7 +11,7 @@ const path = require('path'); const fs = require('fs'); const pall = require('p-all'); -const { all, copyrightFilter, unicodeFilter, indentationFilter, tsFormattingFilter, eslintFilter } = require('./filters'); +const { all, copyrightFilter, unicodeFilter, indentationFilter, tsFormattingFilter, eslintFilter, stylelintFilter } = require('./filters'); const copyrightHeaderLines = [ '/*---------------------------------------------------------------------------------------------', @@ -22,6 +22,7 @@ const copyrightHeaderLines = [ function hygiene(some, linting = true) { const gulpeslint = require('gulp-eslint'); + const gulpstylelint = require('./stylelint'); const tsfmt = require('typescript-formatter'); let errorCount = 0; @@ -185,6 +186,16 @@ function hygiene(some, linting = true) { }) ) ); + streams.push( + result.pipe(filter(stylelintFilter)).pipe(gulpstylelint(((message, isError) => { + if (isError) { + console.error(message); + errorCount++; + } else { + console.warn(message); + } + }))) + ); } let count = 0; diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js index 5f0e483ea08..222a3c014b2 100644 --- a/build/lib/builtInExtensions.js +++ b/build/lib/builtInExtensions.js @@ -134,4 +134,4 @@ if (require.main === module) { process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRJbkV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJidWlsdEluRXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QixpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLHNDQUFzQztBQUN0QyxnQ0FBZ0M7QUFDaEMsb0NBQW9DO0FBQ3BDLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFHMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBbUJqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLE1BQU0saUJBQWlCLEdBQTJCLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7QUFDdEYsTUFBTSxvQkFBb0IsR0FBMkIsV0FBVyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUM1RixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDakcsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7QUFFdEYsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFrQjtJQUNqQyxJQUFJLGNBQWMsRUFBRTtRQUNuQixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztLQUN0QjtBQUNGLENB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRJbkV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJidWlsdEluRXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QixpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLHNDQUFzQztBQUN0QyxnQ0FBZ0M7QUFDaEMsb0NBQW9DO0FBQ3BDLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFHMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBb0JqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLE1BQU0saUJBQWlCLEdBQTJCLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7QUFDdEYsTUFBTSxvQkFBb0IsR0FBMkIsV0FBVyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUM1RixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDakcsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7QUFFdEYsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFrQjtJQUNqQyxJQUFJLGNBQWMsRUFBRTtRQUNuQixRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztLQUN0QjtBQUNGLENB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 \ No newline at end of file diff --git a/build/lib/builtInExtensions.ts b/build/lib/builtInExtensions.ts index 912e05653ac..fefed436bb9 100644 --- a/build/lib/builtInExtensions.ts +++ b/build/lib/builtInExtensions.ts @@ -20,6 +20,7 @@ const mkdirp = require('mkdirp'); export interface IExtensionDefinition { name: string; version: string; + sha256: string; repo: string; platforms?: string[]; metadata: { diff --git a/build/lib/builtInExtensionsCG.js b/build/lib/builtInExtensionsCG.js index afe29e43433..62e215f7f86 100644 --- a/build/lib/builtInExtensionsCG.js +++ b/build/lib/builtInExtensionsCG.js @@ -4,7 +4,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); -const got_1 = require("got"); +const node_fetch_1 = require("node-fetch"); const fs = require("fs"); const path = require("path"); const url = require("url"); @@ -14,30 +14,31 @@ const rootCG = path.join(root, 'extensionsCG'); const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); const builtInExtensions = productjson.builtInExtensions || []; const webBuiltInExtensions = productjson.webBuiltInExtensions || []; -const token = process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined; +const token = process.env['GITHUB_TOKEN']; const contentBasePath = 'raw.githubusercontent.com'; const contentFileNames = ['package.json', 'package-lock.json', 'yarn.lock']; async function downloadExtensionDetails(extension) { const extensionLabel = `${extension.name}@${extension.version}`; const repository = url.parse(extension.repo).path.substr(1); const repositoryContentBaseUrl = `https://${token ? `${token}@` : ''}${contentBasePath}/${repository}/v${extension.version}`; - const promises = []; - for (const fileName of contentFileNames) { - promises.push(new Promise(resolve => { - (0, got_1.default)(`${repositoryContentBaseUrl}/${fileName}`) - .then(response => { - resolve({ fileName, body: response.rawBody }); - }) - .catch(error => { - if (error.response.statusCode === 404) { - resolve({ fileName, body: undefined }); - } - else { - resolve({ fileName, body: null }); - } - }); - })); + async function getContent(fileName) { + try { + const response = await (0, node_fetch_1.default)(`${repositoryContentBaseUrl}/${fileName}`); + if (response.ok) { + return { fileName, body: await response.buffer() }; + } + else if (response.status === 404) { + return { fileName, body: undefined }; + } + else { + return { fileName, body: null }; + } + } + catch (e) { + return { fileName, body: null }; + } } + const promises = contentFileNames.map(getContent); console.log(extensionLabel); const results = await Promise.all(promises); for (const result of results) { @@ -76,4 +77,4 @@ main().then(() => { console.error(err); process.exit(1); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRJbkV4dGVuc2lvbnNDRy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWx0SW5FeHRlbnNpb25zQ0cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyw2QkFBc0I7QUFDdEIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwyQkFBMkI7QUFDM0IsMENBQTJDO0FBRzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEcsTUFBTSxpQkFBaUIsR0FBMkIsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztBQUN0RixNQUFNLG9CQUFvQixHQUEyQixXQUFXLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO0FBQzVGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUUvRixNQUFNLGVBQWUsR0FBRywyQkFBMkIsQ0FBQztBQUNwRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsY0FBYyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRTVFLEtBQUssVUFBVSx3QkFBd0IsQ0FBQyxTQUErQjtJQUN0RSxNQUFNLGNBQWMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hF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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRJbkV4dGVuc2lvbnNDRy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWx0SW5FeHRlbnNpb25zQ0cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRywyQ0FBK0I7QUFDL0IseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwyQkFBMkI7QUFDM0IsMENBQTJDO0FBRzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEcsTUFBTSxpQkFBaUIsR0FBMkIsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztBQUN0RixNQUFNLG9CQUFvQixHQUEyQixXQUFXLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO0FBQzVGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUMsTUFBTSxlQUFlLEdBQUcsMkJBQTJCLENBQUM7QUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU1RSxLQUFLLFVBQVUsd0JBQXdCLENBQUMsU0FBK0I7SUFDdEUsTUFBTSxjQUFjLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoRSxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJ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 \ No newline at end of file diff --git a/build/lib/builtInExtensionsCG.ts b/build/lib/builtInExtensionsCG.ts index 09b0bedd126..a84f4312b99 100644 --- a/build/lib/builtInExtensionsCG.ts +++ b/build/lib/builtInExtensionsCG.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import got from 'got'; +import fetch from 'node-fetch'; import * as fs from 'fs'; import * as path from 'path'; import * as url from 'url'; @@ -15,7 +15,7 @@ const rootCG = path.join(root, 'extensionsCG'); const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); const builtInExtensions = productjson.builtInExtensions || []; const webBuiltInExtensions = productjson.webBuiltInExtensions || []; -const token = process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined; +const token = process.env['GITHUB_TOKEN']; const contentBasePath = 'raw.githubusercontent.com'; const contentFileNames = ['package.json', 'package-lock.json', 'yarn.lock']; @@ -25,23 +25,24 @@ async function downloadExtensionDetails(extension: IExtensionDefinition): Promis const repository = url.parse(extension.repo).path!.substr(1); const repositoryContentBaseUrl = `https://${token ? `${token}@` : ''}${contentBasePath}/${repository}/v${extension.version}`; - const promises = []; - for (const fileName of contentFileNames) { - promises.push(new Promise<{ fileName: string; body: Buffer | undefined | null }>(resolve => { - got(`${repositoryContentBaseUrl}/${fileName}`) - .then(response => { - resolve({ fileName, body: response.rawBody }); - }) - .catch(error => { - if (error.response.statusCode === 404) { - resolve({ fileName, body: undefined }); - } else { - resolve({ fileName, body: null }); - } - }); - })); + + async function getContent(fileName: string): Promise<{ fileName: string; body: Buffer | undefined | null }> { + try { + const response = await fetch(`${repositoryContentBaseUrl}/${fileName}`); + if (response.ok) { + return { fileName, body: await response.buffer() }; + } else if (response.status === 404) { + return { fileName, body: undefined }; + } else { + return { fileName, body: null }; + } + } catch (e) { + return { fileName, body: null }; + } } + const promises = contentFileNames.map(getContent); + console.log(extensionLabel); const results = await Promise.all(promises); for (const result of results) { diff --git a/build/lib/compilation.js b/build/lib/compilation.js index 8449e983c88..2270e054ba5 100644 --- a/build/lib/compilation.js +++ b/build/lib/compilation.js @@ -19,7 +19,7 @@ const os = require("os"); const ts = require("typescript"); const File = require("vinyl"); const task = require("./task"); -const mangleTypeScript_1 = require("./mangleTypeScript"); +const index_1 = require("./mangle/index"); const watch = require('./watch'); // --- gulp-tsb: compile and transpile -------------------------------- const reporter = (0, reporter_1.createReporter)(); @@ -91,7 +91,7 @@ function transpileTask(src, out, swc) { }; } exports.transpileTask = transpileTask; -function compileTask(src, out, build) { +function compileTask(src, out, build, options = {}) { return function () { if (os.totalmem() < 4000000000) { throw new Error('compilation requires 4GB of RAM'); @@ -104,21 +104,21 @@ function compileTask(src, out, build) { } // mangle: TypeScript to TypeScript let mangleStream = es.through(); - if (build) { - let ts2tsMangler = new mangleTypeScript_1.Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data)); - const newContentsByFileName = ts2tsMangler.computeNewFileContents(); - mangleStream = es.through(function write(data) { + if (build && !options.disableMangle) { + let ts2tsMangler = new index_1.Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true }); + const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState'])); + mangleStream = es.through(async function write(data) { const tsNormalPath = ts.normalizePath(data.path); - const newContents = newContentsByFileName.get(tsNormalPath); + const newContents = (await newContentsByFileName).get(tsNormalPath); if (newContents !== undefined) { data.contents = Buffer.from(newContents.out); data.sourceMap = newContents.sourceMap && JSON.parse(newContents.sourceMap); } this.push(data); - }, function end() { - this.push(null); + }, async function end() { // free resources - newContentsByFileName.clear(); + (await newContentsByFileName).clear(); + this.push(null); ts2tsMangler = undefined; }); } @@ -281,4 +281,4 @@ exports.watchApiProposalNamesTask = task.define('watch-api-proposal-names', () = .pipe(util.debounce(task)) .pipe(gulp.dest('src')); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxtQ0FBbUM7QUFDbkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsMENBQTBDO0FBQzFDLDZCQUE2QjtBQUM3Qix5Q0FBNEM7QUFDNUMsK0JBQStCO0FBQy9CLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFDMUMseUJBQXlCO0FBQ3pCLGlDQUFrQztBQUNsQyw4QkFBOEI7QUFDOUIsK0JBQStCO0FBQy9CLHlEQUE2QztBQUU3QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFHakMsdUVBQXVFO0FBRXZFLE1BQU0sUUFBUSxHQUFHLElBQUEseUJBQWMsR0FBRSxDQUFDO0FBRWxDLFNBQVMsNEJBQTRCLENBQUMsR0FBVztJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQXVCLEVBQUUsQ0FBQztJQUN2QyxPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN4QixPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLHNDQUFzQztRQUMvRSxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztLQUMxQjtJQUNELE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJ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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxtQ0FBbUM7QUFDbkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsMENBQTBDO0FBQzFDLDZCQUE2QjtBQUM3Qix5Q0FBNEM7QUFDNUMsK0JBQStCO0FBQy9CLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFDMUMseUJBQXlCO0FBQ3pCLGlDQUFrQztBQUNsQyw4QkFBOEI7QUFDOUIsK0JBQStCO0FBQy9CLDBDQUF5QztBQUV6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFHakMsdUVBQXVFO0FBRXZFLE1BQU0sUUFBUSxHQUFHLElBQUEseUJBQWMsR0FBRSxDQUFDO0FBRWxDLFNBQVMsNEJBQTRCLENBQUMsR0FBVztJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQXVCLEVBQUUsQ0FBQztJQUN2QyxPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN4QixPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLHNDQUFzQztRQUMvRSxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztLQUMxQjtJQUNELE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJ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 \ No newline at end of file diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts index 8e2f7bf4585..d5da3f1cd89 100644 --- a/build/lib/compilation.ts +++ b/build/lib/compilation.ts @@ -17,7 +17,7 @@ import * as os from 'os'; import ts = require('typescript'); import * as File from 'vinyl'; import * as task from './task'; -import { Mangler } from './mangleTypeScript'; +import { Mangler } from './mangle/index'; import { RawSourceMap } from 'source-map'; const watch = require('./watch'); @@ -106,7 +106,7 @@ export function transpileTask(src: string, out: string, swc: boolean): () => Nod }; } -export function compileTask(src: string, out: string, build: boolean): () => NodeJS.ReadWriteStream { +export function compileTask(src: string, out: string, build: boolean, options: { disableMangle?: boolean } = {}): () => NodeJS.ReadWriteStream { return function () { @@ -123,22 +123,23 @@ export function compileTask(src: string, out: string, build: boolean): () => Nod // mangle: TypeScript to TypeScript let mangleStream = es.through(); - if (build) { - let ts2tsMangler = new Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data)); - const newContentsByFileName = ts2tsMangler.computeNewFileContents(); - mangleStream = es.through(function write(data: File & { sourceMap?: RawSourceMap }) { + if (build && !options.disableMangle) { + let ts2tsMangler = new Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true }); + const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState'])); + mangleStream = es.through(async function write(data: File & { sourceMap?: RawSourceMap }) { type TypeScriptExt = typeof ts & { normalizePath(path: string): string }; const tsNormalPath = (ts).normalizePath(data.path); - const newContents = newContentsByFileName.get(tsNormalPath); + const newContents = (await newContentsByFileName).get(tsNormalPath); if (newContents !== undefined) { data.contents = Buffer.from(newContents.out); data.sourceMap = newContents.sourceMap && JSON.parse(newContents.sourceMap); } this.push(data); - }, function end() { - this.push(null); + }, async function end() { // free resources - newContentsByFileName.clear(); + (await newContentsByFileName).clear(); + + this.push(null); (ts2tsMangler) = undefined; }); } diff --git a/build/lib/dependencies.js b/build/lib/dependencies.js index 9d0f5417512..8e2ddb47662 100644 --- a/build/lib/dependencies.js +++ b/build/lib/dependencies.js @@ -5,9 +5,11 @@ *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.getProductionDependencies = void 0; +const fs = require("fs"); const path = require("path"); const cp = require("child_process"); const parseSemver = require('parse-semver'); +const root = fs.realpathSync(path.dirname(path.dirname(__dirname))); function asYarnDependency(prefix, tree) { let parseResult; try { @@ -34,27 +36,41 @@ function asYarnDependency(prefix, tree) { } return { name, version, path: dependencyPath, children }; } -function getYarnProductionDependencies(cwd) { - const raw = cp.execSync('yarn list --json', { cwd, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] }); +function getYarnProductionDependencies(folderPath) { + const raw = cp.execSync('yarn list --json', { cwd: folderPath, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] }); const match = /^{"type":"tree".*$/m.exec(raw); if (!match || match.length !== 1) { throw new Error('Could not parse result of `yarn list --json`'); } const trees = JSON.parse(match[0]).data.trees; return trees - .map(tree => asYarnDependency(path.join(cwd, 'node_modules'), tree)) + .map(tree => asYarnDependency(path.join(folderPath, 'node_modules'), tree)) .filter((dep) => !!dep); } -function getProductionDependencies(cwd) { +function getProductionDependencies(folderPath) { const result = []; - const deps = getYarnProductionDependencies(cwd); + const deps = getYarnProductionDependencies(folderPath); const flatten = (dep) => { result.push({ name: dep.name, version: dep.version, path: dep.path }); dep.children.forEach(flatten); }; deps.forEach(flatten); + // Account for distro npm dependencies + const realFolderPath = fs.realpathSync(folderPath); + const relativeFolderPath = path.relative(root, realFolderPath); + const distroPackageJsonPath = `${root}/.build/distro/npm/${relativeFolderPath}/package.json`; + if (fs.existsSync(distroPackageJsonPath)) { + const distroPackageJson = JSON.parse(fs.readFileSync(distroPackageJsonPath, 'utf8')); + const distroDependencyNames = Object.keys(distroPackageJson.dependencies ?? {}); + for (const name of distroDependencyNames) { + result.push({ + name, + version: distroPackageJson.dependencies[name], + path: path.join(realFolderPath, 'node_modules', name) + }); + } + } return [...new Set(result)]; } exports.getProductionDependencies = getProductionDependencies; if (require.main === module) { - const root = path.dirname(path.dirname(__dirname)); console.log(JSON.stringify(getProductionDependencies(root), null, ' ')); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwZW5kZW5jaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLDZCQUE2QjtBQUM3QixvQ0FBb0M7QUFDcEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBaUI1QyxTQUFTLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxJQUFVO0lBQ25ELElBQUksV0FBVyxDQUFDO0lBRWhCLElBQUk7UUFDSCxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNyQztJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ2IsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztLQUNaO0lBRUQsbUNBQW1DO0lBQ25DLElBQUksV0FBVyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFO1FBQzlDLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFFRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBRXBCLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU3RSxJQUFJLEdBQUcsRUFBRTtZQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkI7S0FDRDtJQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQUMsR0FBVztJQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4SixNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7S0FDaEU7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUM7SUFFeEQsT0FBTyxLQUFLO1NBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkUsTUFBTSxDQUFhLENBQUMsR0FBRyxFQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxHQUFXO0lBQ3BELE1BQU0sTUFBTSxHQUFxQixFQUFFLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFlLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQU5ELDhEQU1DO0FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekUifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwZW5kZW5jaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0Isb0NBQW9DO0FBQ3BDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM1QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFpQnBFLFNBQVMsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLElBQVU7SUFDbkQsSUFBSSxXQUFXLENBQUM7SUFFaEIsSUFBSTtRQUNILFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JDO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDYixHQUFHLENBQUMsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFFRCxtQ0FBbUM7SUFDbkMsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDOUMsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUVELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUNwQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFFcEIsS0FBSyxNQUFNLEtBQUssSUFBSSxD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 \ No newline at end of file diff --git a/build/lib/dependencies.ts b/build/lib/dependencies.ts index 05b15e344cf..3b314e7d0c5 100644 --- a/build/lib/dependencies.ts +++ b/build/lib/dependencies.ts @@ -3,9 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import * as fs from 'fs'; import * as path from 'path'; import * as cp from 'child_process'; const parseSemver = require('parse-semver'); +const root = fs.realpathSync(path.dirname(path.dirname(__dirname))); interface Tree { readonly name: string; @@ -54,8 +56,8 @@ function asYarnDependency(prefix: string, tree: Tree): Dependency | null { return { name, version, path: dependencyPath, children }; } -function getYarnProductionDependencies(cwd: string): Dependency[] { - const raw = cp.execSync('yarn list --json', { cwd, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] }); +function getYarnProductionDependencies(folderPath: string): Dependency[] { + const raw = cp.execSync('yarn list --json', { cwd: folderPath, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] }); const match = /^{"type":"tree".*$/m.exec(raw); if (!match || match.length !== 1) { @@ -65,19 +67,37 @@ function getYarnProductionDependencies(cwd: string): Dependency[] { const trees = JSON.parse(match[0]).data.trees as Tree[]; return trees - .map(tree => asYarnDependency(path.join(cwd, 'node_modules'), tree)) + .map(tree => asYarnDependency(path.join(folderPath, 'node_modules'), tree)) .filter((dep): dep is Dependency => !!dep); } -export function getProductionDependencies(cwd: string): FlatDependency[] { +export function getProductionDependencies(folderPath: string): FlatDependency[] { const result: FlatDependency[] = []; - const deps = getYarnProductionDependencies(cwd); + const deps = getYarnProductionDependencies(folderPath); const flatten = (dep: Dependency) => { result.push({ name: dep.name, version: dep.version, path: dep.path }); dep.children.forEach(flatten); }; deps.forEach(flatten); + + // Account for distro npm dependencies + const realFolderPath = fs.realpathSync(folderPath); + const relativeFolderPath = path.relative(root, realFolderPath); + const distroPackageJsonPath = `${root}/.build/distro/npm/${relativeFolderPath}/package.json`; + + if (fs.existsSync(distroPackageJsonPath)) { + const distroPackageJson = JSON.parse(fs.readFileSync(distroPackageJsonPath, 'utf8')); + const distroDependencyNames = Object.keys(distroPackageJson.dependencies ?? {}); + + for (const name of distroDependencyNames) { + result.push({ + name, + version: distroPackageJson.dependencies[name], + path: path.join(realFolderPath, 'node_modules', name) + }); + } + } + return [...new Set(result)]; } if (require.main === module) { - const root = path.dirname(path.dirname(__dirname)); console.log(JSON.stringify(getProductionDependencies(root), null, ' ')); } diff --git a/build/lib/electron.js b/build/lib/electron.js index 90883f212eb..f06445d87fa 100644 --- a/build/lib/electron.js +++ b/build/lib/electron.js @@ -75,11 +75,13 @@ function darwinBundleDocumentTypes(types, icon) { }; }); } +const { electronVersion, msBuildId } = util.getElectronVersion(); exports.config = { - version: product.electronRepository ? '19.1.11' : util.getElectronVersion(), + version: electronVersion, + tag: product.electronRepository ? `v${electronVersion}-${msBuildId}` : undefined, productAppName: product.nameLong, companyName: 'Microsoft Corporation', - copyright: 'Copyright (C) 2022 Microsoft. All rights reserved', + copyright: 'Copyright (C) 2023 Microsoft. All rights reserved', darwinIcon: 'resources/darwin/code.icns', darwinBundleIdentifier: product.darwinBundleIdentifier, darwinApplicationCategoryType: 'public.app-category.developer-tools', @@ -172,17 +174,19 @@ exports.config = { darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined, linuxExecutableName: product.applicationName, winIcon: 'resources/win32/code.ico', - token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined, - repo: product.electronRepository || undefined + token: process.env['GITHUB_TOKEN'], + repo: product.electronRepository || undefined, + validateChecksum: true, + checksumFile: path.join(root, 'build', 'checksums', 'electron.txt'), }; function getElectron(arch) { return () => { - const electron = require('gulp-atom-electron'); + const electron = require('@vscode/gulp-electron'); const json = require('gulp-json-editor'); const electronOpts = _.extend({}, exports.config, { platform: process.platform, arch: arch === 'armhf' ? 'arm' : arch, - ffmpegChromium: true, + ffmpegChromium: false, keepDefaultApp: true }); return vfs.src('package.json') @@ -193,7 +197,7 @@ function getElectron(arch) { }; } async function main(arch = process.arch) { - const version = product.electronRepository ? '19.1.11' : util.getElectronVersion(); + const version = electronVersion; const electronPath = path.join(root, '.build', 'electron'); const versionFile = path.join(electronPath, 'version'); const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`; @@ -208,4 +212,4 @@ if (require.main === module) { process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlY3Ryb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbGVjdHJvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQiw2Q0FBMEM7QUFZMUMsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFZO0lBQ3JDLE9BQU8sR0FBRyxLQUFLLFVBQVUsSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLGFBQWEsQ0FBQztBQUMxRixDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDckYsTUFBTSxNQUFNLEdBQUcsSUFBQSx1QkFBVSxFQUFDLElBQUksQ0FBQyxDQUFDO0FBRWhDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFbkk7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsd0JBQXdCLENBQUMsVUFBb0IsRUFBRSxJQUFZLEVBQUUsWUFBNEMsRUFBRSxJQUFlO0lBQ2xJLDJGQUEyRjtJQUMzRixJQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlY3Ryb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbGVjdHJvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQiw2Q0FBMEM7QUFZMUMsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFZO0lBQ3JDLE9BQU8sR0FBRyxLQUFLLFVBQVUsSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLGFBQWEsQ0FBQztBQUMxRixDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDckYsTUFBTSxNQUFNLEdBQUcsSUFBQSx1QkFBVSxFQUFDLElBQUksQ0FBQyxDQUFDO0FBRWhDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFbkk7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsd0JBQXdCLENBQUMsVUFBb0IsRUFBRSxJQUFZLEVBQUUsWUFBNEMsRUFBRSxJQUFlO0lBQ2xJLDJGQUEyRjtJQUMzRixJQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFB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 \ No newline at end of file diff --git a/build/lib/electron.ts b/build/lib/electron.ts index b6b25e16098..0c3df8cfd71 100644 --- a/build/lib/electron.ts +++ b/build/lib/electron.ts @@ -90,11 +90,14 @@ function darwinBundleDocumentTypes(types: { [name: string]: string | string[] }, }); } +const { electronVersion, msBuildId } = util.getElectronVersion(); + export const config = { - version: product.electronRepository ? '19.1.11' : util.getElectronVersion(), + version: electronVersion, + tag: product.electronRepository ? `v${electronVersion}-${msBuildId}` : undefined, productAppName: product.nameLong, companyName: 'Microsoft Corporation', - copyright: 'Copyright (C) 2022 Microsoft. All rights reserved', + copyright: 'Copyright (C) 2023 Microsoft. All rights reserved', darwinIcon: 'resources/darwin/code.icns', darwinBundleIdentifier: product.darwinBundleIdentifier, darwinApplicationCategoryType: 'public.app-category.developer-tools', @@ -187,19 +190,21 @@ export const config = { darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined, linuxExecutableName: product.applicationName, winIcon: 'resources/win32/code.ico', - token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined, - repo: product.electronRepository || undefined + token: process.env['GITHUB_TOKEN'], + repo: product.electronRepository || undefined, + validateChecksum: true, + checksumFile: path.join(root, 'build', 'checksums', 'electron.txt'), }; function getElectron(arch: string): () => NodeJS.ReadWriteStream { return () => { - const electron = require('gulp-atom-electron'); + const electron = require('@vscode/gulp-electron'); const json = require('gulp-json-editor') as typeof import('gulp-json-editor'); const electronOpts = _.extend({}, config, { platform: process.platform, arch: arch === 'armhf' ? 'arm' : arch, - ffmpegChromium: true, + ffmpegChromium: false, keepDefaultApp: true }); @@ -212,7 +217,7 @@ function getElectron(arch: string): () => NodeJS.ReadWriteStream { } async function main(arch = process.arch): Promise { - const version = product.electronRepository ? '19.1.11' : util.getElectronVersion(); + const version = electronVersion; const electronPath = path.join(root, '.build', 'electron'); const versionFile = path.join(electronPath, 'version'); const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`; diff --git a/build/lib/extensions.js b/build/lib/extensions.js index 2f29f2ad2c3..5f6718411a5 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -11,8 +11,6 @@ const cp = require("child_process"); const glob = require("glob"); const gulp = require("gulp"); const path = require("path"); -const through2 = require("through2"); -const got_1 = require("got"); const File = require("vinyl"); const stats_1 = require("./stats"); const util2 = require("./util"); @@ -26,6 +24,7 @@ const jsoncParser = require("jsonc-parser"); const dependencies_1 = require("./dependencies"); const builtInExtensions_1 = require("./builtInExtensions"); const getVersion_1 = require("./getVersion"); +const fetch_1 = require("./fetch"); const root = path.dirname(path.dirname(__dirname)); const commit = (0, getVersion_1.getVersion)(root); const sourceMappingURLBase = `https://ticino.blob.core.windows.net/sourcemaps/${commit}`; @@ -57,11 +56,11 @@ function updateExtensionPackageJSON(input, update) { })) .pipe(packageJsonFilter.restore); } -function fromLocal(extensionPath, forWeb) { +function fromLocal(extensionPath, forWeb, disableMangle) { const webpackConfigFileName = forWeb ? 'extension-browser.webpack.config.js' : 'extension.webpack.config.js'; const isWebPacked = fs.existsSync(path.join(extensionPath, webpackConfigFileName)); let input = isWebPacked - ? fromLocalWebpack(extensionPath, webpackConfigFileName) + ? fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) : fromLocalNormal(extensionPath); if (isWebPacked) { input = updateExtensionPackageJSON(input, (data) => { @@ -76,7 +75,7 @@ function fromLocal(extensionPath, forWeb) { } return input; } -function fromLocalWebpack(extensionPath, webpackConfigFileName) { +function fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) { const vsce = require('@vscode/vsce'); const webpack = require('webpack'); const webpackGulp = require('webpack-stream'); @@ -123,6 +122,19 @@ function fromLocalWebpack(extensionPath, webpackConfigFileName) { ...config, ...{ mode: 'production' } }; + if (disableMangle) { + if (Array.isArray(config.module.rules)) { + for (const rule of config.module.rules) { + if (Array.isArray(rule.use)) { + for (const use of rule.use) { + if (String(use.loader).endsWith('mangle-loader.js')) { + use.options.disabled = true; + } + } + } + } + } + } const relativeOutputPath = path.relative(extensionPath, webpackConfig.output.path); return webpackGulp(webpackConfig, webpack, webpackDone) .pipe(es.through(function (data) { @@ -180,21 +192,19 @@ const baseHeaders = { 'User-Agent': userAgent, 'X-Market-User-Id': '291C1CD0-051A-4123-9B4B-30D60EF52EE2', }; -function fromMarketplace(serviceUrl, { name: extensionName, version, metadata }) { - const remote = require('gulp-remote-retry-src'); +function fromMarketplace(serviceUrl, { name: extensionName, version, sha256, metadata }) { const json = require('gulp-json-editor'); const [publisher, name] = extensionName.split('.'); const url = `${serviceUrl}/publishers/${publisher}/vsextensions/${name}/${version}/vspackage`; fancyLog('Downloading extension:', ansiColors.yellow(`${extensionName}@${version}`), '...'); - const options = { - base: url, - requestOptions: { - gzip: true, - headers: baseHeaders - } - }; const packageJsonFilter = filter('package.json', { restore: true }); - return remote('', options) + return (0, fetch_1.fetchUrls)('', { + base: url, + nodeFetchOptions: { + headers: baseHeaders + }, + checksumSha256: sha256 + }) .pipe(vzip.src()) .pipe(filter('extension/**')) .pipe(rename(p => p.dirname = p.dirname.replace(/^extension\/?/, ''))) @@ -204,34 +214,15 @@ function fromMarketplace(serviceUrl, { name: extensionName, version, metadata }) .pipe(packageJsonFilter.restore); } exports.fromMarketplace = fromMarketplace; -const ghApiHeaders = { - Accept: 'application/vnd.github.v3+json', - 'User-Agent': userAgent, -}; -if (process.env.GITHUB_TOKEN) { - ghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64'); -} -const ghDownloadHeaders = { - ...ghApiHeaders, - Accept: 'application/octet-stream', -}; -function fromGithub({ name, version, repo, metadata }) { - const remote = require('gulp-remote-retry-src'); +function fromGithub({ name, version, repo, sha256, metadata }) { const json = require('gulp-json-editor'); fancyLog('Downloading extension from GH:', ansiColors.yellow(`${name}@${version}`), '...'); const packageJsonFilter = filter('package.json', { restore: true }); - return remote([`/repos${new URL(repo).pathname}/releases/tags/v${version}`], { - base: 'https://api.github.com', - requestOptions: { headers: ghApiHeaders } - }).pipe(through2.obj(function (file, _enc, callback) { - const asset = JSON.parse(file.contents.toString()).assets.find((a) => a.name.endsWith('.vsix')); - if (!asset) { - return callback(new Error(`Could not find vsix in release of ${repo} @ ${version}`)); - } - const res = got_1.default.stream(asset.url, { headers: ghDownloadHeaders, followRedirect: true }); - file.contents = res.pipe(through2()); - callback(null, file); - })) + return (0, fetch_1.fetchGithub)(new URL(repo).pathname, { + version, + name: name => name.endsWith('.vsix'), + checksumSha256: sha256 + }) .pipe(buffer()) .pipe(vzip.src()) .pipe(filter('extension/**')) @@ -285,7 +276,7 @@ function isWebExtension(manifest) { } return true; } -function packageLocalExtensionsStream(forWeb) { +function packageLocalExtensionsStream(forWeb, disableMangle) { const localExtensionsDescriptions = (glob.sync('extensions/*/package.json') .map(manifestPath => { const absoluteManifestPath = path.join(root, manifestPath); @@ -297,7 +288,7 @@ function packageLocalExtensionsStream(forWeb) { .filter(({ name }) => builtInExtensions.every(b => b.name !== name)) .filter(({ manifestPath }) => (forWeb ? isWebExtension(require(manifestPath)) : true))); const localExtensionsStream = minifyExtensionResources(es.merge(...localExtensionsDescriptions.map(extension => { - return fromLocal(extension.path, forWeb) + return fromLocal(extension.path, forWeb, disableMangle) .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`)); }))); let result; @@ -309,7 +300,8 @@ function packageLocalExtensionsStream(forWeb) { const productionDependencies = (0, dependencies_1.getProductionDependencies)('extensions/'); const dependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat(); result = es.merge(localExtensionsStream, gulp.src(dependenciesSrc, { base: '.' }) - .pipe(util2.cleanNodeModules(path.join(root, 'build', '.moduleignore')))); + .pipe(util2.cleanNodeModules(path.join(root, 'build', '.moduleignore'))) + .pipe(util2.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`)))); } return (result .pipe(util2.setExecutableBit(['**/*.sh']))); @@ -353,20 +345,12 @@ function scanBuiltinExtensions(extensionsRoot, exclude = []) { const children = fs.readdirSync(path.join(extensionsRoot, extensionFolder)); const packageNLSPath = children.filter(child => child === 'package.nls.json')[0]; const packageNLS = packageNLSPath ? JSON.parse(fs.readFileSync(path.join(extensionsRoot, extensionFolder, packageNLSPath)).toString()) : undefined; - let browserNlsMetadataPath; - if (packageJSON.browser) { - const browserEntrypointFolderPath = path.join(extensionFolder, path.dirname(packageJSON.browser)); - if (fs.existsSync(path.join(extensionsRoot, browserEntrypointFolderPath, 'nls.metadata.json'))) { - browserNlsMetadataPath = path.join(browserEntrypointFolderPath, 'nls.metadata.json'); - } - } const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0]; const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0]; scannedExtensions.push({ extensionPath: extensionFolder, packageJSON, packageNLS, - browserNlsMetadataPath, readmePath: readme ? path.join(extensionFolder, readme) : undefined, changelogPath: changelog ? path.join(extensionFolder, changelog) : undefined, }); @@ -517,4 +501,4 @@ async function buildExtensionMedia(isWatch, outputRoot) { }))); } exports.buildExtensionMedia = buildExtensionMedia; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsbUNBQW1DO0FBQ25DLHlCQUF5QjtBQUN6QixvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IscUNBQXFDO0FBQ3JDLDZCQUFzQjtBQUV0Qiw4QkFBOEI7QUFDOUIsbUNBQTRDO0FBQzVDLGdDQUFnQztBQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN2QyxzQ0FBdUM7QUFDdkMsc0NBQXVDO0FBQ3ZDLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLDRDQUE0QztBQUU1QyxpREFBMkQ7QUFDM0QsMkRBQXlEO0FBQ3pELDZDQUEwQztBQUUxQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFVLEVBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsTUFBTSxvQkFBb0IsR0FBRyxtREFBbUQsTUFBTSxFQUFFLENBQUM7QUFFekYsU0FBUyx3QkFBd0IsQ0FBQyxLQUFhO0lBQzlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEYsT0FBTyxLQUFLO1NBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDZCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU8sRUFBRSxFQUFFO1FBQzVCLE1B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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsbUNBQW1DO0FBQ25DLHlCQUF5QjtBQUN6QixvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLG1DQUE0QztBQUM1QyxnQ0FBZ0M7QUFDaEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkMsc0NBQXVDO0FBQ3ZDLHNDQUF1QztBQUN2QyxzQ0FBc0M7QUFDdEMsMENBQTBDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN0Qyw0Q0FBNEM7QUFFNUMsaURBQTJEO0FBQzNELDJEQUErRTtBQUMvRSw2Q0FBMEM7QUFDMUMsbUNBQWlEO0FBRWpELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxNQUFNLG9CQUFvQixHQUFHLG1EQUFtRCxNQUFNLEVBQUUsQ0FBQztBQUV6RixTQUFTLHdCQUF3QixDQUFDLEtBQWE7SUFDOUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRixPQUFPLEtBQUs7U0FDVixJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNkLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTyxFQUFFLEVBQUU7UUFDNUIsTUFBTSxNQUFNLEdBQTZC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 \ No newline at end of file diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index 42ea8d79d6f..6edfdcb63fb 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -9,8 +9,6 @@ import * as cp from 'child_process'; import * as glob from 'glob'; import * as gulp from 'gulp'; import * as path from 'path'; -import * as through2 from 'through2'; -import got from 'got'; import { Stream } from 'stream'; import * as File from 'vinyl'; import { createStatsStream } from './stats'; @@ -24,8 +22,9 @@ const buffer = require('gulp-buffer'); import * as jsoncParser from 'jsonc-parser'; import webpack = require('webpack'); import { getProductionDependencies } from './dependencies'; -import { getExtensionStream } from './builtInExtensions'; +import { IExtensionDefinition, getExtensionStream } from './builtInExtensions'; import { getVersion } from './getVersion'; +import { fetchUrls, fetchGithub } from './fetch'; const root = path.dirname(path.dirname(__dirname)); const commit = getVersion(root); @@ -61,12 +60,12 @@ function updateExtensionPackageJSON(input: Stream, update: (data: any) => any): .pipe(packageJsonFilter.restore); } -function fromLocal(extensionPath: string, forWeb: boolean): Stream { +function fromLocal(extensionPath: string, forWeb: boolean, disableMangle: boolean): Stream { const webpackConfigFileName = forWeb ? 'extension-browser.webpack.config.js' : 'extension.webpack.config.js'; const isWebPacked = fs.existsSync(path.join(extensionPath, webpackConfigFileName)); let input = isWebPacked - ? fromLocalWebpack(extensionPath, webpackConfigFileName) + ? fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) : fromLocalNormal(extensionPath); if (isWebPacked) { @@ -85,7 +84,7 @@ function fromLocal(extensionPath: string, forWeb: boolean): Stream { } -function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string): Stream { +function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, disableMangle: boolean): Stream { const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce'); const webpack = require('webpack'); const webpackGulp = require('webpack-stream'); @@ -141,6 +140,19 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string): ...config, ...{ mode: 'production' } }; + if (disableMangle) { + if (Array.isArray(config.module.rules)) { + for (const rule of config.module.rules) { + if (Array.isArray(rule.use)) { + for (const use of rule.use) { + if (String(use.loader).endsWith('mangle-loader.js')) { + use.options.disabled = true; + } + } + } + } + } + } const relativeOutputPath = path.relative(extensionPath, webpackConfig.output.path); return webpackGulp(webpackConfig, webpack, webpackDone) @@ -209,8 +221,7 @@ const baseHeaders = { 'X-Market-User-Id': '291C1CD0-051A-4123-9B4B-30D60EF52EE2', }; -export function fromMarketplace(serviceUrl: string, { name: extensionName, version, metadata }: IBuiltInExtension): Stream { - const remote = require('gulp-remote-retry-src'); +export function fromMarketplace(serviceUrl: string, { name: extensionName, version, sha256, metadata }: IExtensionDefinition): Stream { const json = require('gulp-json-editor') as typeof import('gulp-json-editor'); const [publisher, name] = extensionName.split('.'); @@ -218,17 +229,15 @@ export function fromMarketplace(serviceUrl: string, { name: extensionName, versi fancyLog('Downloading extension:', ansiColors.yellow(`${extensionName}@${version}`), '...'); - const options = { - base: url, - requestOptions: { - gzip: true, - headers: baseHeaders - } - }; - const packageJsonFilter = filter('package.json', { restore: true }); - return remote('', options) + return fetchUrls('', { + base: url, + nodeFetchOptions: { + headers: baseHeaders + }, + checksumSha256: sha256 + }) .pipe(vzip.src()) .pipe(filter('extension/**')) .pipe(rename(p => p.dirname = p.dirname!.replace(/^extension\/?/, ''))) @@ -238,39 +247,19 @@ export function fromMarketplace(serviceUrl: string, { name: extensionName, versi .pipe(packageJsonFilter.restore); } -const ghApiHeaders: Record = { - Accept: 'application/vnd.github.v3+json', - 'User-Agent': userAgent, -}; -if (process.env.GITHUB_TOKEN) { - ghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64'); -} -const ghDownloadHeaders = { - ...ghApiHeaders, - Accept: 'application/octet-stream', -}; -export function fromGithub({ name, version, repo, metadata }: IBuiltInExtension): Stream { - const remote = require('gulp-remote-retry-src'); +export function fromGithub({ name, version, repo, sha256, metadata }: IExtensionDefinition): Stream { const json = require('gulp-json-editor') as typeof import('gulp-json-editor'); fancyLog('Downloading extension from GH:', ansiColors.yellow(`${name}@${version}`), '...'); const packageJsonFilter = filter('package.json', { restore: true }); - return remote([`/repos${new URL(repo).pathname}/releases/tags/v${version}`], { - base: 'https://api.github.com', - requestOptions: { headers: ghApiHeaders } - }).pipe(through2.obj(function (file, _enc, callback) { - const asset = JSON.parse(file.contents.toString()).assets.find((a: any) => a.name.endsWith('.vsix')); - if (!asset) { - return callback(new Error(`Could not find vsix in release of ${repo} @ ${version}`)); - } - - const res = got.stream(asset.url, { headers: ghDownloadHeaders, followRedirect: true }); - file.contents = res.pipe(through2()); - callback(null, file); - })) + return fetchGithub(new URL(repo).pathname, { + version, + name: name => name.endsWith('.vsix'), + checksumSha256: sha256 + }) .pipe(buffer()) .pipe(vzip.src()) .pipe(filter('extension/**')) @@ -297,16 +286,9 @@ const marketplaceWebExtensionsExclude = new Set([ 'ms-vscode.vscode-js-profile-table' ]); -interface IBuiltInExtension { - name: string; - version: string; - repo: string; - metadata: any; -} - const productJson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); -const builtInExtensions: IBuiltInExtension[] = productJson.builtInExtensions || []; -const webBuiltInExtensions: IBuiltInExtension[] = productJson.webBuiltInExtensions || []; +const builtInExtensions: IExtensionDefinition[] = productJson.builtInExtensions || []; +const webBuiltInExtensions: IExtensionDefinition[] = productJson.webBuiltInExtensions || []; type ExtensionKind = 'ui' | 'workspace' | 'web'; interface IExtensionManifest { @@ -344,7 +326,7 @@ function isWebExtension(manifest: IExtensionManifest): boolean { return true; } -export function packageLocalExtensionsStream(forWeb: boolean): Stream { +export function packageLocalExtensionsStream(forWeb: boolean, disableMangle: boolean): Stream { const localExtensionsDescriptions = ( (glob.sync('extensions/*/package.json')) .map(manifestPath => { @@ -360,7 +342,7 @@ export function packageLocalExtensionsStream(forWeb: boolean): Stream { const localExtensionsStream = minifyExtensionResources( es.merge( ...localExtensionsDescriptions.map(extension => { - return fromLocal(extension.path, forWeb) + return fromLocal(extension.path, forWeb, disableMangle) .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`)); }) ) @@ -377,7 +359,8 @@ export function packageLocalExtensionsStream(forWeb: boolean): Stream { result = es.merge( localExtensionsStream, gulp.src(dependenciesSrc, { base: '.' }) - .pipe(util2.cleanNodeModules(path.join(root, 'build', '.moduleignore')))); + .pipe(util2.cleanNodeModules(path.join(root, 'build', '.moduleignore'))) + .pipe(util2.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`)))); } return ( @@ -416,7 +399,6 @@ export interface IScannedBuiltinExtension { extensionPath: string; packageJSON: any; packageNLS?: any; - browserNlsMetadataPath?: string; readmePath?: string; changelogPath?: string; } @@ -441,13 +423,6 @@ export function scanBuiltinExtensions(extensionsRoot: string, exclude: string[] const children = fs.readdirSync(path.join(extensionsRoot, extensionFolder)); const packageNLSPath = children.filter(child => child === 'package.nls.json')[0]; const packageNLS = packageNLSPath ? JSON.parse(fs.readFileSync(path.join(extensionsRoot, extensionFolder, packageNLSPath)).toString()) : undefined; - let browserNlsMetadataPath: string | undefined; - if (packageJSON.browser) { - const browserEntrypointFolderPath = path.join(extensionFolder, path.dirname(packageJSON.browser)); - if (fs.existsSync(path.join(extensionsRoot, browserEntrypointFolderPath, 'nls.metadata.json'))) { - browserNlsMetadataPath = path.join(browserEntrypointFolderPath, 'nls.metadata.json'); - } - } const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0]; const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0]; @@ -455,7 +430,6 @@ export function scanBuiltinExtensions(extensionsRoot: string, exclude: string[] extensionPath: extensionFolder, packageJSON, packageNLS, - browserNlsMetadataPath, readmePath: readme ? path.join(extensionFolder, readme) : undefined, changelogPath: changelog ? path.join(extensionFolder, changelog) : undefined, }); diff --git a/build/lib/fetch.js b/build/lib/fetch.js new file mode 100644 index 00000000000..e9a1362b50c --- /dev/null +++ b/build/lib/fetch.js @@ -0,0 +1,136 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fetchGithub = exports.fetchUrl = exports.fetchUrls = void 0; +const es = require("event-stream"); +const node_fetch_1 = require("node-fetch"); +const VinylFile = require("vinyl"); +const log = require("fancy-log"); +const ansiColors = require("ansi-colors"); +const crypto = require("crypto"); +const through2 = require("through2"); +function fetchUrls(urls, options) { + if (options === undefined) { + options = {}; + } + if (typeof options.base !== 'string' && options.base !== null) { + options.base = '/'; + } + if (!Array.isArray(urls)) { + urls = [urls]; + } + return es.readArray(urls).pipe(es.map((data, cb) => { + const url = [options.base, data].join(''); + fetchUrl(url, options).then(file => { + cb(undefined, file); + }, error => { + cb(error); + }); + })); +} +exports.fetchUrls = fetchUrls; +async function fetchUrl(url, options, retries = 10, retryDelay = 1000) { + const verbose = !!options.verbose ?? (!!process.env['CI'] || !!process.env['BUILD_ARTIFACTSTAGINGDIRECTORY']); + try { + let startTime = 0; + if (verbose) { + log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? `(${10 - retries} retry}` : ''}`); + startTime = new Date().getTime(); + } + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 30 * 1000); + try { + const response = await (0, node_fetch_1.default)(url, { + ...options.nodeFetchOptions, + signal: controller.signal /* Typings issue with lib.dom.d.ts */ + }); + if (verbose) { + log(`Fetch completed: Status ${response.status}. Took ${ansiColors.magenta(`${new Date().getTime() - startTime} ms`)}`); + } + if (response.ok && (response.status >= 200 && response.status < 300)) { + const contents = await response.buffer(); + if (options.checksumSha256) { + const actualSHA256Checksum = crypto.createHash('sha256').update(contents).digest('hex'); + if (actualSHA256Checksum !== options.checksumSha256) { + throw new Error(`Checksum mismatch for ${ansiColors.cyan(url)} (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`); + } + else if (verbose) { + log(`Verified SHA256 checksums match for ${ansiColors.cyan(url)}`); + } + } + else if (verbose) { + log(`Skipping checksum verification for ${ansiColors.cyan(url)} because no expected checksum was provided`); + } + if (verbose) { + log(`Fetched response body buffer: ${ansiColors.magenta(`${contents.byteLength} bytes`)}`); + } + return new VinylFile({ + cwd: '/', + base: options.base, + path: url, + contents + }); + } + throw new Error(`Request ${ansiColors.magenta(url)} failed with status code: ${response.status}`); + } + finally { + clearTimeout(timeout); + } + } + catch (e) { + if (verbose) { + log(`Fetching ${ansiColors.cyan(url)} failed: ${e}`); + } + if (retries > 0) { + await new Promise(resolve => setTimeout(resolve, retryDelay)); + return fetchUrl(url, options, retries - 1, retryDelay); + } + throw e; + } +} +exports.fetchUrl = fetchUrl; +const ghApiHeaders = { + Accept: 'application/vnd.github.v3+json', + 'User-Agent': 'VSCode Build', +}; +if (process.env.GITHUB_TOKEN) { + ghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64'); +} +const ghDownloadHeaders = { + ...ghApiHeaders, + Accept: 'application/octet-stream', +}; +/** + * @param repo for example `Microsoft/vscode` + * @param version for example `16.17.1` - must be a valid releases tag + * @param assetName for example (name) => name === `win-x64-node.exe` - must be an asset that exists + * @returns a stream with the asset as file + */ +function fetchGithub(repo, options) { + return fetchUrls(`/repos/${repo.replace(/^\/|\/$/g, '')}/releases/tags/v${options.version}`, { + base: 'https://api.github.com', + verbose: options.verbose, + nodeFetchOptions: { headers: ghApiHeaders } + }).pipe(through2.obj(async function (file, _enc, callback) { + const assetFilter = typeof options.name === 'string' ? (name) => name === options.name : options.name; + const asset = JSON.parse(file.contents.toString()).assets.find((a) => assetFilter(a.name)); + if (!asset) { + return callback(new Error(`Could not find asset in release of ${repo} @ ${options.version}`)); + } + try { + callback(null, await fetchUrl(asset.url, { + nodeFetchOptions: { headers: ghDownloadHeaders }, + verbose: options.verbose, + checksumSha256: options.checksumSha256 + })); + } + catch (error) { + callback(error); + } + })); +} +exports.fetchGithub = fetchGithub; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmZXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxtQ0FBbUM7QUFDbkMsMkNBQWdEO0FBQ2hELG1DQUFtQztBQUNuQyxpQ0FBaUM7QUFDakMsMENBQTBDO0FBQzFDLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFVckMsU0FBZ0IsU0FBUyxDQUFDLElBQXVCLEVBQUUsT0FBc0I7SUFDeEUsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUM7S0FDYjtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtRQUM5RCxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztLQUNuQjtJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2Q7SUFFRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQTJCLENBQUMsSUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDVixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUMs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 \ No newline at end of file diff --git a/build/lib/fetch.ts b/build/lib/fetch.ts new file mode 100644 index 00000000000..238f0ac4228 --- /dev/null +++ b/build/lib/fetch.ts @@ -0,0 +1,147 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as es from 'event-stream'; +import fetch, { RequestInit } from 'node-fetch'; +import * as VinylFile from 'vinyl'; +import * as log from 'fancy-log'; +import * as ansiColors from 'ansi-colors'; +import * as crypto from 'crypto'; +import * as through2 from 'through2'; +import { Stream } from 'stream'; + +export interface IFetchOptions { + base?: string; + nodeFetchOptions?: RequestInit; + verbose?: boolean; + checksumSha256?: string; +} + +export function fetchUrls(urls: string[] | string, options: IFetchOptions): es.ThroughStream { + if (options === undefined) { + options = {}; + } + + if (typeof options.base !== 'string' && options.base !== null) { + options.base = '/'; + } + + if (!Array.isArray(urls)) { + urls = [urls]; + } + + return es.readArray(urls).pipe(es.map((data: string, cb) => { + const url = [options.base, data].join(''); + fetchUrl(url, options).then(file => { + cb(undefined, file); + }, error => { + cb(error); + }); + })); +} + +export async function fetchUrl(url: string, options: IFetchOptions, retries = 10, retryDelay = 1000): Promise { + const verbose = !!options.verbose ?? (!!process.env['CI'] || !!process.env['BUILD_ARTIFACTSTAGINGDIRECTORY']); + try { + let startTime = 0; + if (verbose) { + log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? `(${10 - retries} retry}` : ''}`); + startTime = new Date().getTime(); + } + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 30 * 1000); + try { + const response = await fetch(url, { + ...options.nodeFetchOptions, + signal: controller.signal as any /* Typings issue with lib.dom.d.ts */ + }); + if (verbose) { + log(`Fetch completed: Status ${response.status}. Took ${ansiColors.magenta(`${new Date().getTime() - startTime} ms`)}`); + } + if (response.ok && (response.status >= 200 && response.status < 300)) { + const contents = await response.buffer(); + if (options.checksumSha256) { + const actualSHA256Checksum = crypto.createHash('sha256').update(contents).digest('hex'); + if (actualSHA256Checksum !== options.checksumSha256) { + throw new Error(`Checksum mismatch for ${ansiColors.cyan(url)} (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`); + } else if (verbose) { + log(`Verified SHA256 checksums match for ${ansiColors.cyan(url)}`); + } + } else if (verbose) { + log(`Skipping checksum verification for ${ansiColors.cyan(url)} because no expected checksum was provided`); + } + if (verbose) { + log(`Fetched response body buffer: ${ansiColors.magenta(`${(contents as Buffer).byteLength} bytes`)}`); + } + return new VinylFile({ + cwd: '/', + base: options.base, + path: url, + contents + }); + } + throw new Error(`Request ${ansiColors.magenta(url)} failed with status code: ${response.status}`); + } finally { + clearTimeout(timeout); + } + } catch (e) { + if (verbose) { + log(`Fetching ${ansiColors.cyan(url)} failed: ${e}`); + } + if (retries > 0) { + await new Promise(resolve => setTimeout(resolve, retryDelay)); + return fetchUrl(url, options, retries - 1, retryDelay); + } + throw e; + } +} + +const ghApiHeaders: Record = { + Accept: 'application/vnd.github.v3+json', + 'User-Agent': 'VSCode Build', +}; +if (process.env.GITHUB_TOKEN) { + ghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64'); +} +const ghDownloadHeaders = { + ...ghApiHeaders, + Accept: 'application/octet-stream', +}; + +export interface IGitHubAssetOptions { + version: string; + name: string | ((name: string) => boolean); + checksumSha256?: string; + verbose?: boolean; +} + +/** + * @param repo for example `Microsoft/vscode` + * @param version for example `16.17.1` - must be a valid releases tag + * @param assetName for example (name) => name === `win-x64-node.exe` - must be an asset that exists + * @returns a stream with the asset as file + */ +export function fetchGithub(repo: string, options: IGitHubAssetOptions): Stream { + return fetchUrls(`/repos/${repo.replace(/^\/|\/$/g, '')}/releases/tags/v${options.version}`, { + base: 'https://api.github.com', + verbose: options.verbose, + nodeFetchOptions: { headers: ghApiHeaders } + }).pipe(through2.obj(async function (file, _enc, callback) { + const assetFilter = typeof options.name === 'string' ? (name: string) => name === options.name : options.name; + const asset = JSON.parse(file.contents.toString()).assets.find((a: { name: string }) => assetFilter(a.name)); + if (!asset) { + return callback(new Error(`Could not find asset in release of ${repo} @ ${options.version}`)); + } + try { + callback(null, await fetchUrl(asset.url, { + nodeFetchOptions: { headers: ghDownloadHeaders }, + verbose: options.verbose, + checksumSha256: options.checksumSha256 + })); + } catch (error) { + callback(error); + } + })); +} diff --git a/build/lib/getVersion.js b/build/lib/getVersion.js index 0eda964d9a1..ee8beb8a466 100644 --- a/build/lib/getVersion.js +++ b/build/lib/getVersion.js @@ -7,11 +7,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.getVersion = void 0; const git = require("./git"); function getVersion(root) { - let version = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; + let version = process.env['BUILD_SOURCEVERSION']; if (!version || !/^[0-9a-f]{40}$/i.test(version.trim())) { version = git.getVersion(root); } return version; } exports.getVersion = getVersion; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0VmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdldFZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsNkJBQTZCO0FBRTdCLFNBQWdCLFVBQVUsQ0FBQyxJQUFZO0lBQ3RDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFeEYsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtRQUN4RCxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvQjtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2hCLENBQUM7QUFSRCxnQ0FRQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0VmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdldFZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsNkJBQTZCO0FBRTdCLFNBQWdCLFVBQVUsQ0FBQyxJQUFZO0lBQ3RDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUVqRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQ3hELE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQy9CO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDaEIsQ0FBQztBQVJELGdDQVFDIn0= \ No newline at end of file diff --git a/build/lib/getVersion.ts b/build/lib/getVersion.ts index 461302962d2..2fddb309f83 100644 --- a/build/lib/getVersion.ts +++ b/build/lib/getVersion.ts @@ -6,7 +6,7 @@ import * as git from './git'; export function getVersion(root: string): string | undefined { - let version = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION']; + let version = process.env['BUILD_SOURCEVERSION']; if (!version || !/^[0-9a-f]{40}$/i.test(version.trim())) { version = git.getVersion(root); diff --git a/build/lib/i18n.js b/build/lib/i18n.js index b424d3c04e1..2b5bac57aa8 100644 --- a/build/lib/i18n.js +++ b/build/lib/i18n.js @@ -4,7 +4,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); -exports.prepareIslFiles = exports.prepareI18nPackFiles = exports.createXlfFilesForIsl = exports.createXlfFilesForExtensions = exports.createXlfFilesForCoreBundle = exports.getResource = exports.processNlsFiles = exports.XLF = exports.Line = exports.extraLanguages = exports.defaultLanguages = void 0; +exports.prepareIslFiles = exports.prepareI18nPackFiles = exports.createXlfFilesForIsl = exports.createXlfFilesForExtensions = exports.EXTERNAL_EXTENSIONS = exports.createXlfFilesForCoreBundle = exports.getResource = exports.processNlsFiles = exports.XLF = exports.Line = exports.extraLanguages = exports.defaultLanguages = void 0; const path = require("path"); const fs = require("fs"); const event_stream_1 = require("event-stream"); @@ -567,7 +567,7 @@ function createL10nBundleForExtension(extensionFolderName, prefixWithBuildFolder concatArrays: true })); } -const EXTERNAL_EXTENSIONS = [ +exports.EXTERNAL_EXTENSIONS = [ 'ms-vscode.js-debug', 'ms-vscode.js-debug-companion', 'ms-vscode.vscode-js-profile-table', @@ -598,7 +598,7 @@ function createXlfFilesForExtensions() { } return _l10nMap; } - (0, event_stream_1.merge)(gulp.src([`.build/extensions/${extensionFolderName}/package.nls.json`, `.build/extensions/${extensionFolderName}/**/nls.metadata.json`], { allowEmpty: true }), createL10nBundleForExtension(extensionFolderName, EXTERNAL_EXTENSIONS.includes(extensionId))).pipe((0, event_stream_1.through)(function (file) { + (0, event_stream_1.merge)(gulp.src([`.build/extensions/${extensionFolderName}/package.nls.json`, `.build/extensions/${extensionFolderName}/**/nls.metadata.json`], { allowEmpty: true }), createL10nBundleForExtension(extensionFolderName, exports.EXTERNAL_EXTENSIONS.includes(extensionId))).pipe((0, event_stream_1.through)(function (file) { if (file.isBuffer()) { const buffer = file.contents; const basename = path.basename(file.path); @@ -742,8 +742,12 @@ function prepareI18nPackFiles(resultingTranslationPaths) { const extensionsPacks = {}; const errors = []; return (0, event_stream_1.through)(function (xlf) { - const project = path.basename(path.dirname(path.dirname(xlf.relative))); - const resource = path.basename(xlf.relative, '.xlf'); + let project = path.basename(path.dirname(path.dirname(xlf.relative))); + // strip `-new` since vscode-extensions-loc uses the `-new` suffix to indicate that it's from the new loc pipeline + const resource = path.basename(path.basename(xlf.relative, '.xlf'), '-new'); + if (exports.EXTERNAL_EXTENSIONS.find(e => e === resource)) { + project = extensionsProject; + } const contents = xlf.contents.toString(); log(`Found ${project}: ${resource}`); const parsePromise = (0, l10n_dev_1.getL10nFilesFromXlf)(contents); @@ -874,4 +878,4 @@ function encodeEntities(value) { function decodeEntities(value) { return value.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&'); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImkxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUV6QiwrQ0FBa0U7QUFDbEUsNkNBQTZDO0FBQzdDLDhCQUE4QjtBQUM5Qix5QkFBeUI7QUFDekIsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QixzQ0FBc0M7QUFDdEMsMENBQTBDO0FBQzFDLGdEQUFnRDtBQUNoRCwrQ0FBaUg7QUFFakgsU0FBUyxHQUFHLENBQUMsT0FBWSxFQUFFLEdBQUcsSUFBVztJQUN4QyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBWVksUUFBQSxnQkFBZ0IsR0FBZTtJQUMzQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFO0lBQzVELEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDNUQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImkxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUV6QiwrQ0FBa0U7QUFDbEUsNkNBQTZDO0FBQzdDLDhCQUE4QjtBQUM5Qix5QkFBeUI7QUFDekIsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QixzQ0FBc0M7QUFDdEMsMENBQTBDO0FBQzFDLGdEQUFnRDtBQUNoRCwrQ0FBaUg7QUFFakgsU0FBUyxHQUFHLENBQUMsT0FBWSxFQUFFLEdBQUcsSUFBVztJQUN4QyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBWVksUUFBQSxnQkFBZ0IsR0FBZTtJQUMzQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFO0lBQzVELEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDNUQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVB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 \ No newline at end of file diff --git a/build/lib/i18n.resources.json b/build/lib/i18n.resources.json index afe76cf78ad..50d9b271d95 100644 --- a/build/lib/i18n.resources.json +++ b/build/lib/i18n.resources.json @@ -54,6 +54,10 @@ "name": "vs/workbench/contrib/codeActions", "project": "vscode-workbench" }, + { + "name": "vs/workbench/contrib/commands", + "project": "vscode-workbench" + }, { "name": "vs/workbench/contrib/comments", "project": "vscode-workbench" @@ -71,7 +75,7 @@ "project": "vscode-workbench" }, { - "name": "vs/workbench/contrib/experiments", + "name": "vs/workbench/services/assignment", "project": "vscode-workbench" }, { @@ -154,6 +158,14 @@ "name": "vs/workbench/contrib/notebook", "project": "vscode-workbench" }, + { + "name": "vs/workbench/contrib/inlineChat", + "project": "vscode-workbench" + }, + { + "name": "vs/workbench/contrib/chat", + "project": "vscode-workbench" + }, { "name": "vs/workbench/contrib/quickaccess", "project": "vscode-workbench" @@ -214,6 +226,10 @@ "name": "vs/workbench/contrib/terminal", "project": "vscode-workbench" }, + { + "name": "vs/workbench/contrib/terminalContrib", + "project": "vscode-workbench" + }, { "name": "vs/workbench/contrib/themes", "project": "vscode-workbench" @@ -262,10 +278,6 @@ "name": "vs/workbench/contrib/welcomeGettingStarted", "project": "vscode-workbench" }, - { - "name": "vs/workbench/contrib/welcomeOverlay", - "project": "vscode-workbench" - }, { "name": "vs/workbench/contrib/welcomePage", "project": "vscode-workbench" @@ -278,6 +290,10 @@ "name": "vs/workbench/contrib/welcomeWalkthrough", "project": "vscode-workbench" }, + { + "name": "vs/workbench/contrib/welcomeDialog", + "project": "vscode-workbench" + }, { "name": "vs/workbench/contrib/outline", "project": "vscode-workbench" @@ -310,10 +326,6 @@ "name": "vs/workbench/contrib/bracketPairColorizer2Telemetry", "project": "vscode-workbench" }, - { - "name": "vs/workbench/contrib/offline", - "project": "vscode-workbench" - }, { "name": "vs/workbench/contrib/remoteTunnel", "project": "vscode-workbench" @@ -370,10 +382,18 @@ "name": "vs/workbench/services/files", "project": "vscode-workbench" }, + { + "name": "vs/workbench/services/filesConfiguration", + "project": "vscode-workbench" + }, { "name": "vs/workbench/services/history", "project": "vscode-workbench" }, + { + "name": "vs/workbench/services/hover", + "project": "vscode-workbench" + }, { "name": "vs/workbench/services/log", "project": "vscode-workbench" @@ -497,6 +517,22 @@ { "name": "vs/workbench/services/localization", "project": "vscode-workbench" + }, + { + "name": "vs/workbench/contrib/share", + "project": "vscode-workbench" + }, + { + "name": "vs/workbench/contrib/accessibility", + "project": "vscode-workbench" + }, + { + "name": "vs/workbench/services/issue", + "project": "vscode-workbench" + }, + { + "name": "vs/workbench/services/secrets", + "project": "vscode-workbench" } ] } diff --git a/build/lib/i18n.ts b/build/lib/i18n.ts index 9b24140fe66..9cadead419f 100644 --- a/build/lib/i18n.ts +++ b/build/lib/i18n.ts @@ -644,7 +644,7 @@ function createL10nBundleForExtension(extensionFolderName: string, prefixWithBui })); } -const EXTERNAL_EXTENSIONS = [ +export const EXTERNAL_EXTENSIONS = [ 'ms-vscode.js-debug', 'ms-vscode.js-debug-companion', 'ms-vscode.vscode-js-profile-table', @@ -843,8 +843,12 @@ export function prepareI18nPackFiles(resultingTranslationPaths: TranslationPath[ const extensionsPacks: Record = {}; const errors: any[] = []; return through(function (this: ThroughStream, xlf: File) { - const project = path.basename(path.dirname(path.dirname(xlf.relative))); - const resource = path.basename(xlf.relative, '.xlf'); + let project = path.basename(path.dirname(path.dirname(xlf.relative))); + // strip `-new` since vscode-extensions-loc uses the `-new` suffix to indicate that it's from the new loc pipeline + const resource = path.basename(path.basename(xlf.relative, '.xlf'), '-new'); + if (EXTERNAL_EXTENSIONS.find(e => e === resource)) { + project = extensionsProject; + } const contents = xlf.contents.toString(); log(`Found ${project}: ${resource}`); const parsePromise = getL10nFilesFromXlf(contents); diff --git a/build/lib/layersChecker.js b/build/lib/layersChecker.js index 4b03048d9e7..f52680fd9da 100644 --- a/build/lib/layersChecker.js +++ b/build/lib/layersChecker.js @@ -76,11 +76,6 @@ const RULES = [ target: '**/vs/**/test/**', skip: true // -> skip all test files }, - // TODO@bpasero remove me once electron utility process has landed - { - target: '**/vs/workbench/services/extensions/electron-sandbox/nativeLocalProcessExtensionHost.ts', - skip: true - }, // Common: vs/base/common/platform.ts { target: '**/vs/base/common/platform.ts', @@ -186,11 +181,6 @@ const RULES = [ '@types/node' // no node.js ] }, - // Electron (renderer): skip - { - target: '**/vs/**/electron-browser/**', - skip: true // -> supports all types - }, // Electron (main) { target: '**/vs/**/electron-main/**', @@ -293,4 +283,4 @@ for (const sourceFile of program.getSourceFiles()) { if (hasErrors) { process.exit(1); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJzQ2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxheWVyc0NoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxpQ0FBaUM7QUFDakMsMkJBQThDO0FBQzlDLCtCQUE4QztBQUM5Qyx5Q0FBa0M7QUFFbEMsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0YsK0ZBQStGO0FBQy9GLG1EQUFtRDtBQUNuRCw0RUFBNEU7QUFDNUUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRixnR0FBZ0c7QUFDaEcsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBRUYsbUZBQW1GO0FBQ25GLHdGQUF3RjtBQUN4RixNQUFNLFVBQVUsR0FBRztJQUNsQixTQUFTO0lBQ1QsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZUFBZTtJQUNmLFNBQVM7SUFDVCxTQUFTO0lBQ1QsT0FBTztJQUNQLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsYUFBYTtJQUNiLGFBQWE7SUFDYixNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLE9BQU87SUFDUCxZQUFZO0lBQ1osYUFBYTtJQUNiLGFBQWE7SUFDYixXQUFXO0lBQ1gsWUFBWTtJQUNaLFlBQVk7SUFDWixjQUFjO0lBQ2QsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLE1BQU07SUFDTixNQUFNO0lBQ04saUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLEtBQUs7SUFDTCxpQkFBaUI7SUFDakIsZUFBZTtDQUNmLENBQUM7QUFFRixvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLE1BQU0sWUFBWSxHQUFHO0lBQ3BCLGtCQUFrQjtJQUNsQiwyQkFBMkI7SUFDM0Isa0NBQWtDO0lBQ2xDLDRCQUE0QjtJQUM1QiwwQkFBMEI7SUFDMUIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtDQUNyQixDQUFDO0FBRUYs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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJzQ2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxheWVyc0NoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxpQ0FBaUM7QUFDakMsMkJBQThDO0FBQzlDLCtCQUE4QztBQUM5Qyx5Q0FBa0M7QUFFbEMsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0YsK0ZBQStGO0FBQy9GLG1EQUFtRDtBQUNuRCw0RUFBNEU7QUFDNUUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRixnR0FBZ0c7QUFDaEcsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBRUYsbUZBQW1GO0FBQ25GLHdGQUF3RjtBQUN4RixNQUFNLFVBQVUsR0FBRztJQUNsQixTQUFTO0lBQ1QsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZUFBZTtJQUNmLFNBQVM7SUFDVCxTQUFTO0lBQ1QsT0FBTztJQUNQLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsYUFBYTtJQUNiLGFBQWE7SUFDYixNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLE9BQU87SUFDUCxZQUFZO0lBQ1osYUFBYTtJQUNiLGFBQWE7SUFDYixXQUFXO0lBQ1gsWUFBWTtJQUNaLFlBQVk7SUFDWixjQUFjO0lBQ2QsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLE1BQU07SUFDTixNQUFNO0lBQ04saUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLEtBQUs7SUFDTCxpQkFBaUI7SUFDakIsZUFBZTtDQUNmLENBQUM7QUFFRixvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLE1BQU0sWUFBWSxHQUFHO0lBQ3BCLGtCQUFrQjtJQUNsQiwyQkFBMkI7SUFDM0Isa0NBQWtDO0lBQ2xDLDRCQUE0QjtJQUM1QiwwQkFBMEI7SUFDMUIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtDQUNyQixDQUFDO0FBRUYs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 \ No newline at end of file diff --git a/build/lib/layersChecker.ts b/build/lib/layersChecker.ts index f63e0c57ac3..95f88735bf8 100644 --- a/build/lib/layersChecker.ts +++ b/build/lib/layersChecker.ts @@ -81,12 +81,6 @@ const RULES: IRule[] = [ skip: true // -> skip all test files }, - // TODO@bpasero remove me once electron utility process has landed - { - target: '**/vs/workbench/services/extensions/electron-sandbox/nativeLocalProcessExtensionHost.ts', - skip: true - }, - // Common: vs/base/common/platform.ts { target: '**/vs/base/common/platform.ts', @@ -204,12 +198,6 @@ const RULES: IRule[] = [ ] }, - // Electron (renderer): skip - { - target: '**/vs/**/electron-browser/**', - skip: true // -> supports all types - }, - // Electron (main) { target: '**/vs/**/electron-main/**', diff --git a/build/lib/mangle/index.js b/build/lib/mangle/index.js new file mode 100644 index 00000000000..75981c79d06 --- /dev/null +++ b/build/lib/mangle/index.js @@ -0,0 +1,665 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Mangler = void 0; +const fs = require("fs"); +const path = require("path"); +const process_1 = require("process"); +const source_map_1 = require("source-map"); +const ts = require("typescript"); +const url_1 = require("url"); +const workerpool = require("workerpool"); +const staticLanguageServiceHost_1 = require("./staticLanguageServiceHost"); +const buildfile = require('../../../src/buildfile'); +class ShortIdent { + prefix; + static _keywords = new Set(['await', 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', + 'default', 'delete', 'do', 'else', 'export', 'extends', 'false', 'finally', 'for', 'function', 'if', + 'import', 'in', 'instanceof', 'let', 'new', 'null', 'return', 'static', 'super', 'switch', 'this', 'throw', + 'true', 'try', 'typeof', 'var', 'void', 'while', 'with', 'yield']); + static _alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890$_'.split(''); + _value = 0; + constructor(prefix) { + this.prefix = prefix; + } + next(isNameTaken) { + const candidate = this.prefix + ShortIdent.convert(this._value); + this._value++; + if (ShortIdent._keywords.has(candidate) || /^[_0-9]/.test(candidate) || isNameTaken?.(candidate)) { + // try again + return this.next(isNameTaken); + } + return candidate; + } + static convert(n) { + const base = this._alphabet.length; + let result = ''; + do { + const rest = n % base; + result += this._alphabet[rest]; + n = (n / base) | 0; + } while (n > 0); + return result; + } +} +var FieldType; +(function (FieldType) { + FieldType[FieldType["Public"] = 0] = "Public"; + FieldType[FieldType["Protected"] = 1] = "Protected"; + FieldType[FieldType["Private"] = 2] = "Private"; +})(FieldType || (FieldType = {})); +class ClassData { + fileName; + node; + fields = new Map(); + replacements; + parent; + children; + constructor(fileName, node) { + // analyse all fields (properties and methods). Find usages of all protected and + // private ones and keep track of all public ones (to prevent naming collisions) + this.fileName = fileName; + this.node = node; + const candidates = []; + for (const member of node.members) { + if (ts.isMethodDeclaration(member)) { + // method `foo() {}` + candidates.push(member); + } + else if (ts.isPropertyDeclaration(member)) { + // property `foo = 234` + candidates.push(member); + } + else if (ts.isGetAccessor(member)) { + // getter: `get foo() { ... }` + candidates.push(member); + } + else if (ts.isSetAccessor(member)) { + // setter: `set foo() { ... }` + candidates.push(member); + } + else if (ts.isConstructorDeclaration(member)) { + // constructor-prop:`constructor(private foo) {}` + for (const param of member.parameters) { + if (hasModifier(param, ts.SyntaxKind.PrivateKeyword) + || hasModifier(param, ts.SyntaxKind.ProtectedKeyword) + || hasModifier(param, ts.SyntaxKind.PublicKeyword) + || hasModifier(param, ts.SyntaxKind.ReadonlyKeyword)) { + candidates.push(param); + } + } + } + } + for (const member of candidates) { + const ident = ClassData._getMemberName(member); + if (!ident) { + continue; + } + const type = ClassData._getFieldType(member); + this.fields.set(ident, { type, pos: member.name.getStart() }); + } + } + static _getMemberName(node) { + if (!node.name) { + return undefined; + } + const { name } = node; + let ident = name.getText(); + if (name.kind === ts.SyntaxKind.ComputedPropertyName) { + if (name.expression.kind !== ts.SyntaxKind.StringLiteral) { + // unsupported: [Symbol.foo] or [abc + 'field'] + return; + } + // ['foo'] + ident = name.expression.getText().slice(1, -1); + } + return ident; + } + static _getFieldType(node) { + if (hasModifier(node, ts.SyntaxKind.PrivateKeyword)) { + return 2 /* FieldType.Private */; + } + else if (hasModifier(node, ts.SyntaxKind.ProtectedKeyword)) { + return 1 /* FieldType.Protected */; + } + else { + return 0 /* FieldType.Public */; + } + } + static _shouldMangle(type) { + return type === 2 /* FieldType.Private */ + || type === 1 /* FieldType.Protected */; + } + static makeImplicitPublicActuallyPublic(data, reportViolation) { + // TS-HACK + // A subtype can make an inherited protected field public. To prevent accidential + // mangling of public fields we mark the original (protected) fields as public... + for (const [name, info] of data.fields) { + if (info.type !== 0 /* FieldType.Public */) { + continue; + } + let parent = data.parent; + while (parent) { + if (parent.fields.get(name)?.type === 1 /* FieldType.Protected */) { + const parentPos = parent.node.getSourceFile().getLineAndCharacterOfPosition(parent.fields.get(name).pos); + const infoPos = data.node.getSourceFile().getLineAndCharacterOfPosition(info.pos); + reportViolation(name, `'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`); + parent.fields.get(name).type = 0 /* FieldType.Public */; + } + parent = parent.parent; + } + } + } + static fillInReplacement(data) { + if (data.replacements) { + // already done + return; + } + // fill in parents first + if (data.parent) { + ClassData.fillInReplacement(data.parent); + } + data.replacements = new Map(); + const isNameTaken = (name) => { + // locally taken + if (data._isNameTaken(name)) { + return true; + } + // parents + let parent = data.parent; + while (parent) { + if (parent._isNameTaken(name)) { + return true; + } + parent = parent.parent; + } + // children + if (data.children) { + const stack = [...data.children]; + while (stack.length) { + const node = stack.pop(); + if (node._isNameTaken(name)) { + return true; + } + if (node.children) { + stack.push(...node.children); + } + } + } + return false; + }; + const identPool = new ShortIdent(''); + for (const [name, info] of data.fields) { + if (ClassData._shouldMangle(info.type)) { + const shortName = identPool.next(isNameTaken); + data.replacements.set(name, shortName); + } + } + } + // a name is taken when a field that doesn't get mangled exists or + // when the name is already in use for replacement + _isNameTaken(name) { + if (this.fields.has(name) && !ClassData._shouldMangle(this.fields.get(name).type)) { + // public field + return true; + } + if (this.replacements) { + for (const shortName of this.replacements.values()) { + if (shortName === name) { + // replaced already (happens wih super types) + return true; + } + } + } + if (isNameTakenInFile(this.node, name)) { + return true; + } + return false; + } + lookupShortName(name) { + let value = this.replacements.get(name); + let parent = this.parent; + while (parent) { + if (parent.replacements.has(name) && parent.fields.get(name)?.type === 1 /* FieldType.Protected */) { + value = parent.replacements.get(name) ?? value; + } + parent = parent.parent; + } + return value; + } + // --- parent chaining + addChild(child) { + this.children ??= []; + this.children.push(child); + child.parent = this; + } +} +function isNameTakenInFile(node, name) { + const identifiers = node.getSourceFile().identifiers; + if (identifiers instanceof Map) { + if (identifiers.has(name)) { + return true; + } + } + return false; +} +const fileIdents = new class { + idents = new ShortIdent('$'); + next() { + return this.idents.next(); + } +}; +const skippedExportMangledFiles = [ + // Build + 'css.build', + 'nls.build', + // Monaco + 'editorCommon', + 'editorOptions', + 'editorZoom', + 'standaloneEditor', + 'standaloneEnums', + 'standaloneLanguages', + // Generated + 'extensionsApiProposals', + // Module passed around as type + 'pfs', + // entry points + ...[ + buildfile.entrypoint('vs/server/node/server.main', []), + buildfile.entrypoint('vs/workbench/workbench.desktop.main', []), + buildfile.base, + buildfile.workerExtensionHost, + buildfile.workerNotebook, + buildfile.workerLanguageDetection, + buildfile.workerLocalFileSearch, + buildfile.workerProfileAnalysis, + buildfile.workbenchDesktop, + buildfile.workbenchWeb, + buildfile.code + ].flat().map(x => x.name), +]; +const skippedExportMangledProjects = [ + // Test projects + 'vscode-api-tests', + // These projects use webpack to dynamically rewrite imports, which messes up our mangling + 'configuration-editing', + 'microsoft-authentication', + 'github-authentication', + 'html-language-features/server', +]; +const skippedExportMangledSymbols = [ + // Don't mangle extension entry points + 'activate', + 'deactivate', +]; +class DeclarationData { + fileName; + node; + service; + replacementName; + constructor(fileName, node, service) { + this.fileName = fileName; + this.node = node; + this.service = service; + // Todo: generate replacement names based on usage count, with more used names getting shorter identifiers + this.replacementName = fileIdents.next(); + } + get locations() { + if (ts.isVariableDeclaration(this.node)) { + // If the const aliases any types, we need to rename those too + const definitionResult = this.service.getDefinitionAndBoundSpan(this.fileName, this.node.name.getStart()); + if (definitionResult?.definitions && definitionResult.definitions.length > 1) { + return definitionResult.definitions.map(x => ({ fileName: x.fileName, offset: x.textSpan.start })); + } + } + return [{ + fileName: this.fileName, + offset: this.node.name.getStart() + }]; + } + shouldMangle(newName) { + const currentName = this.node.name.getText(); + if (currentName.startsWith('$') || skippedExportMangledSymbols.includes(currentName)) { + return false; + } + // New name is longer the existing one :'( + if (newName.length >= currentName.length) { + return false; + } + // Don't mangle functions we've explicitly opted out + if (this.node.getFullText().includes('@skipMangle')) { + return false; + } + return true; + } +} +/** + * TypeScript2TypeScript transformer that mangles all private and protected fields + * + * 1. Collect all class fields (properties, methods) + * 2. Collect all sub and super-type relations between classes + * 3. Compute replacement names for each field + * 4. Lookup rename locations for these fields + * 5. Prepare and apply edits + */ +class Mangler { + projectPath; + log; + config; + allClassDataByKey = new Map(); + allExportedSymbols = new Set(); + service; + renameWorkerPool; + constructor(projectPath, log = () => { }, config) { + this.projectPath = projectPath; + this.log = log; + this.config = config; + this.service = ts.createLanguageService(new staticLanguageServiceHost_1.StaticLanguageServiceHost(projectPath)); + this.renameWorkerPool = workerpool.pool(path.join(__dirname, 'renameWorker.js'), { + maxWorkers: 1, + minWorkers: 'max' + }); + } + async computeNewFileContents(strictImplicitPublicHandling) { + // STEP: + // - Find all classes and their field info. + // - Find exported symbols. + const visit = (node) => { + if (this.config.manglePrivateFields) { + if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) { + const anchor = node.name ?? node; + const key = `${node.getSourceFile().fileName}|${anchor.getStart()}`; + if (this.allClassDataByKey.has(key)) { + throw new Error('DUPE?'); + } + this.allClassDataByKey.set(key, new ClassData(node.getSourceFile().fileName, node)); + } + } + if (this.config.mangleExports) { + // Find exported classes, functions, and vars + if (( + // Exported class + ts.isClassDeclaration(node) + && hasModifier(node, ts.SyntaxKind.ExportKeyword) + && node.name) || ( + // Exported function + ts.isFunctionDeclaration(node) + && ts.isSourceFile(node.parent) + && hasModifier(node, ts.SyntaxKind.ExportKeyword) + && node.name && node.body // On named function and not on the overload + ) || ( + // Exported variable + ts.isVariableDeclaration(node) + && hasModifier(node.parent.parent, ts.SyntaxKind.ExportKeyword) // Variable statement is exported + && ts.isSourceFile(node.parent.parent.parent)) + // Disabled for now because we need to figure out how to handle + // enums that are used in monaco or extHost interfaces. + /* || ( + // Exported enum + ts.isEnumDeclaration(node) + && ts.isSourceFile(node.parent) + && hasModifier(node, ts.SyntaxKind.ExportKeyword) + && !hasModifier(node, ts.SyntaxKind.ConstKeyword) // Don't bother mangling const enums because these are inlined + && node.name + */ + ) { + if (isInAmbientContext(node)) { + return; + } + this.allExportedSymbols.add(new DeclarationData(node.getSourceFile().fileName, node, this.service)); + } + } + ts.forEachChild(node, visit); + }; + for (const file of this.service.getProgram().getSourceFiles()) { + if (!file.isDeclarationFile) { + ts.forEachChild(file, visit); + } + } + this.log(`Done collecting. Classes: ${this.allClassDataByKey.size}. Exported symbols: ${this.allExportedSymbols.size}`); + // STEP: connect sub and super-types + const setupParents = (data) => { + const extendsClause = data.node.heritageClauses?.find(h => h.token === ts.SyntaxKind.ExtendsKeyword); + if (!extendsClause) { + // no EXTENDS-clause + return; + } + const info = this.service.getDefinitionAtPosition(data.fileName, extendsClause.types[0].expression.getEnd()); + if (!info || info.length === 0) { + // throw new Error('SUPER type not found'); + return; + } + if (info.length !== 1) { + // inherits from declared/library type + return; + } + const [definition] = info; + const key = `${definition.fileName}|${definition.textSpan.start}`; + const parent = this.allClassDataByKey.get(key); + if (!parent) { + // throw new Error(`SUPER type not found: ${key}`); + return; + } + parent.addChild(data); + }; + for (const data of this.allClassDataByKey.values()) { + setupParents(data); + } + // STEP: make implicit public (actually protected) field really public + const violations = new Map(); + let violationsCauseFailure = false; + for (const data of this.allClassDataByKey.values()) { + ClassData.makeImplicitPublicActuallyPublic(data, (name, what, why) => { + const arr = violations.get(what); + if (arr) { + arr.push(why); + } + else { + violations.set(what, [why]); + } + if (strictImplicitPublicHandling && !strictImplicitPublicHandling.has(name)) { + violationsCauseFailure = true; + } + }); + } + for (const [why, whys] of violations) { + this.log(`WARN: ${why} became PUBLIC because of: ${whys.join(' , ')}`); + } + if (violationsCauseFailure) { + const message = 'Protected fields have been made PUBLIC. This hurts minification and is therefore not allowed. Review the WARN messages further above'; + this.log(`ERROR: ${message}`); + throw new Error(message); + } + // STEP: compute replacement names for each class + for (const data of this.allClassDataByKey.values()) { + ClassData.fillInReplacement(data); + } + this.log(`Done creating class replacements`); + // STEP: prepare rename edits + this.log(`Starting prepare rename edits`); + const editsByFile = new Map(); + const appendEdit = (fileName, edit) => { + const edits = editsByFile.get(fileName); + if (!edits) { + editsByFile.set(fileName, [edit]); + } + else { + edits.push(edit); + } + }; + const appendRename = (newText, loc) => { + appendEdit(loc.fileName, { + newText: (loc.prefixText || '') + newText + (loc.suffixText || ''), + offset: loc.textSpan.start, + length: loc.textSpan.length + }); + }; + const renameResults = []; + const queueRename = (fileName, pos, newName) => { + renameResults.push(Promise.resolve(this.renameWorkerPool.exec('findRenameLocations', [this.projectPath, fileName, pos])) + .then((locations) => ({ newName, locations }))); + }; + for (const data of this.allClassDataByKey.values()) { + if (hasModifier(data.node, ts.SyntaxKind.DeclareKeyword)) { + continue; + } + fields: for (const [name, info] of data.fields) { + if (!ClassData._shouldMangle(info.type)) { + continue fields; + } + // TS-HACK: protected became public via 'some' child + // and because of that we might need to ignore this now + let parent = data.parent; + while (parent) { + if (parent.fields.get(name)?.type === 0 /* FieldType.Public */) { + continue fields; + } + parent = parent.parent; + } + const newName = data.lookupShortName(name); + queueRename(data.fileName, info.pos, newName); + } + } + for (const data of this.allExportedSymbols.values()) { + if (data.fileName.endsWith('.d.ts') + || skippedExportMangledProjects.some(proj => data.fileName.includes(proj)) + || skippedExportMangledFiles.some(file => data.fileName.endsWith(file + '.ts'))) { + continue; + } + if (!data.shouldMangle(data.replacementName)) { + continue; + } + const newText = data.replacementName; + for (const { fileName, offset } of data.locations) { + queueRename(fileName, offset, newText); + } + } + await Promise.all(renameResults).then((result) => { + for (const { newName, locations } of result) { + for (const loc of locations) { + appendRename(newName, loc); + } + } + }); + await this.renameWorkerPool.terminate(); + this.log(`Done preparing edits: ${editsByFile.size} files`); + // STEP: apply all rename edits (per file) + const result = new Map(); + let savedBytes = 0; + for (const item of this.service.getProgram().getSourceFiles()) { + const { mapRoot, sourceRoot } = this.service.getProgram().getCompilerOptions(); + const projectDir = path.dirname(this.projectPath); + const sourceMapRoot = mapRoot ?? (0, url_1.pathToFileURL)(sourceRoot ?? projectDir).toString(); + // source maps + let generator; + let newFullText; + const edits = editsByFile.get(item.fileName); + if (!edits) { + // just copy + newFullText = item.getFullText(); + } + else { + // source map generator + const relativeFileName = normalize(path.relative(projectDir, item.fileName)); + const mappingsByLine = new Map(); + // apply renames + edits.sort((a, b) => b.offset - a.offset); + const characters = item.getFullText().split(''); + let lastEdit; + for (const edit of edits) { + if (lastEdit && lastEdit.offset === edit.offset) { + // + if (lastEdit.length !== edit.length || lastEdit.newText !== edit.newText) { + this.log('ERROR: Overlapping edit', item.fileName, edit.offset, edits); + throw new Error('OVERLAPPING edit'); + } + else { + continue; + } + } + lastEdit = edit; + const mangledName = characters.splice(edit.offset, edit.length, edit.newText).join(''); + savedBytes += mangledName.length - edit.newText.length; + // source maps + const pos = item.getLineAndCharacterOfPosition(edit.offset); + let mappings = mappingsByLine.get(pos.line); + if (!mappings) { + mappings = []; + mappingsByLine.set(pos.line, mappings); + } + mappings.unshift({ + source: relativeFileName, + original: { line: pos.line + 1, column: pos.character }, + generated: { line: pos.line + 1, column: pos.character }, + name: mangledName + }, { + source: relativeFileName, + original: { line: pos.line + 1, column: pos.character + edit.length }, + generated: { line: pos.line + 1, column: pos.character + edit.newText.length }, + }); + } + // source map generation, make sure to get mappings per line correct + generator = new source_map_1.SourceMapGenerator({ file: path.basename(item.fileName), sourceRoot: sourceMapRoot }); + generator.setSourceContent(relativeFileName, item.getFullText()); + for (const [, mappings] of mappingsByLine) { + let lineDelta = 0; + for (const mapping of mappings) { + generator.addMapping({ + ...mapping, + generated: { line: mapping.generated.line, column: mapping.generated.column - lineDelta } + }); + lineDelta += mapping.original.column - mapping.generated.column; + } + } + newFullText = characters.join(''); + } + result.set(item.fileName, { out: newFullText, sourceMap: generator?.toString() }); + } + this.log(`Done: ${savedBytes / 1000}kb saved`); + return result; + } +} +exports.Mangler = Mangler; +// --- ast utils +function hasModifier(node, kind) { + const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined; + return Boolean(modifiers?.find(mode => mode.kind === kind)); +} +function isInAmbientContext(node) { + for (let p = node.parent; p; p = p.parent) { + if (ts.isModuleDeclaration(p)) { + return true; + } + } + return false; +} +function normalize(path) { + return path.replace(/\\/g, '/'); +} +async function _run() { + const root = path.join(__dirname, '..', '..', '..'); + const projectBase = path.join(root, 'src'); + const projectPath = path.join(projectBase, 'tsconfig.json'); + const newProjectBase = path.join(path.dirname(projectBase), path.basename(projectBase) + '2'); + fs.cpSync(projectBase, newProjectBase, { recursive: true }); + const mangler = new Mangler(projectPath, console.log, { + mangleExports: true, + manglePrivateFields: true, + }); + for (const [fileName, contents] of await mangler.computeNewFileContents(new Set(['saveState']))) { + const newFilePath = path.join(newProjectBase, path.relative(projectBase, fileName)); + await fs.promises.mkdir(path.dirname(newFilePath), { recursive: true }); + await fs.promises.writeFile(newFilePath, contents.out); + if (contents.sourceMap) { + await fs.promises.writeFile(newFilePath + '.map', contents.sourceMap); + } + } +} +if (__filename === process_1.argv[1]) { + _run(); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLHFDQUErQjtBQUMvQiwyQ0FBeUQ7QUFDekQsaUNBQWlDO0FBQ2pDLDZCQUFvQztBQUNwQyx5Q0FBeUM7QUFDekMsMkVBQXdFO0FBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRXBELE1BQU0sVUFBVTtJQVlHO0lBVlYsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVO1FBQzlHLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJO1FBQ25HLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztRQUMxRyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RCxNQUFNLENBQUMsU0FBUyxHQUFHLGtFQUFrRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVoRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRW5CLFlBQ2tCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQzVCLENBQUM7SUFFTCxJQUFJLENBQUMsV0FBdUM7UUFDM0Ms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 \ No newline at end of file diff --git a/build/lib/mangleTypeScript.ts b/build/lib/mangle/index.ts similarity index 60% rename from build/lib/mangleTypeScript.ts rename to build/lib/mangle/index.ts index 7577e460efa..a87fe97f456 100644 --- a/build/lib/mangleTypeScript.ts +++ b/build/lib/mangle/index.ts @@ -3,12 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as ts from 'typescript'; -import * as path from 'path'; import * as fs from 'fs'; +import * as path from 'path'; import { argv } from 'process'; import { Mapping, SourceMapGenerator } from 'source-map'; +import * as ts from 'typescript'; import { pathToFileURL } from 'url'; +import * as workerpool from 'workerpool'; +import { StaticLanguageServiceHost } from './staticLanguageServiceHost'; +const buildfile = require('../../../src/buildfile'); class ShortIdent { @@ -17,21 +20,20 @@ class ShortIdent { 'import', 'in', 'instanceof', 'let', 'new', 'null', 'return', 'static', 'super', 'switch', 'this', 'throw', 'true', 'try', 'typeof', 'var', 'void', 'while', 'with', 'yield']); - private static _alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); + private static _alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890$_'.split(''); private _value = 0; - private readonly _isNameTaken: (name: string) => boolean; - constructor(isNameTaken: (name: string) => boolean) { - this._isNameTaken = name => ShortIdent._keywords.has(name) || isNameTaken(name); - } + constructor( + private readonly prefix: string + ) { } - next(): string { - const candidate = ShortIdent.convert(this._value); + next(isNameTaken?: (name: string) => boolean): string { + const candidate = this.prefix + ShortIdent.convert(this._value); this._value++; - if (this._isNameTaken(candidate)) { + if (ShortIdent._keywords.has(candidate) || /^[_0-9]/.test(candidate) || isNameTaken?.(candidate)) { // try again - return this.next(); + return this.next(isNameTaken); } return candidate; } @@ -145,7 +147,7 @@ class ClassData { ; } - static makeImplicitPublicActuallyPublic(data: ClassData, reportViolation: (what: string, why: string) => void): void { + static makeImplicitPublicActuallyPublic(data: ClassData, reportViolation: (name: string, what: string, why: string) => void): void { // TS-HACK // A subtype can make an inherited protected field public. To prevent accidential // mangling of public fields we mark the original (protected) fields as public... @@ -158,7 +160,7 @@ class ClassData { if (parent.fields.get(name)?.type === FieldType.Protected) { const parentPos = parent.node.getSourceFile().getLineAndCharacterOfPosition(parent.fields.get(name)!.pos); const infoPos = data.node.getSourceFile().getLineAndCharacterOfPosition(info.pos); - reportViolation(`'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`); + reportViolation(name, `'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`); parent.fields.get(name)!.type = FieldType.Public; } @@ -181,8 +183,7 @@ class ClassData { data.replacements = new Map(); - const identPool = new ShortIdent(name => { - + const isNameTaken = (name: string) => { // locally taken if (data._isNameTaken(name)) { return true; @@ -212,11 +213,12 @@ class ClassData { } return false; - }); + }; + const identPool = new ShortIdent(''); for (const [name, info] of data.fields) { if (ClassData._shouldMangle(info.type)) { - const shortName = identPool.next(); + const shortName = identPool.next(isNameTaken); data.replacements.set(name, shortName); } } @@ -237,12 +239,11 @@ class ClassData { } } } - if ((this.node.getSourceFile()).identifiers instanceof Map) { - // taken by any other usage - if ((this.node.getSourceFile()).identifiers.has(name)) { - return true; - } + + if (isNameTakenInFile(this.node, name)) { + return true; } + return false; } @@ -267,59 +268,122 @@ class ClassData { } } -class StaticLanguageServiceHost implements ts.LanguageServiceHost { - - private readonly _cmdLine: ts.ParsedCommandLine; - private readonly _scriptSnapshots: Map = new Map(); - - constructor(readonly projectPath: string) { - const existingOptions: Partial = {}; - const parsed = ts.readConfigFile(projectPath, ts.sys.readFile); - if (parsed.error) { - throw parsed.error; - } - this._cmdLine = ts.parseJsonConfigFileContent(parsed.config, ts.sys, path.dirname(projectPath), existingOptions); - if (this._cmdLine.errors.length > 0) { - throw parsed.error; +function isNameTakenInFile(node: ts.Node, name: string): boolean { + const identifiers = (node.getSourceFile()).identifiers; + if (identifiers instanceof Map) { + if (identifiers.has(name)) { + return true; } } - getCompilationSettings(): ts.CompilerOptions { - return this._cmdLine.options; + return false; +} + +const fileIdents = new class { + private readonly idents = new ShortIdent('$'); + + next() { + return this.idents.next(); } - getScriptFileNames(): string[] { - return this._cmdLine.fileNames; +}; + +const skippedExportMangledFiles = [ + // Build + 'css.build', + 'nls.build', + + // Monaco + 'editorCommon', + 'editorOptions', + 'editorZoom', + 'standaloneEditor', + 'standaloneEnums', + 'standaloneLanguages', + + // Generated + 'extensionsApiProposals', + + // Module passed around as type + 'pfs', + + // entry points + ...[ + buildfile.entrypoint('vs/server/node/server.main', []), + buildfile.entrypoint('vs/workbench/workbench.desktop.main', []), + buildfile.base, + buildfile.workerExtensionHost, + buildfile.workerNotebook, + buildfile.workerLanguageDetection, + buildfile.workerLocalFileSearch, + buildfile.workerProfileAnalysis, + buildfile.workbenchDesktop, + buildfile.workbenchWeb, + buildfile.code + ].flat().map(x => x.name), +]; + +const skippedExportMangledProjects = [ + // Test projects + 'vscode-api-tests', + + // These projects use webpack to dynamically rewrite imports, which messes up our mangling + 'configuration-editing', + 'microsoft-authentication', + 'github-authentication', + 'html-language-features/server', +]; + +const skippedExportMangledSymbols = [ + // Don't mangle extension entry points + 'activate', + 'deactivate', +]; + +class DeclarationData { + + readonly replacementName: string; + + constructor( + readonly fileName: string, + readonly node: ts.FunctionDeclaration | ts.ClassDeclaration | ts.EnumDeclaration | ts.VariableDeclaration, + private readonly service: ts.LanguageService, + ) { + // Todo: generate replacement names based on usage count, with more used names getting shorter identifiers + this.replacementName = fileIdents.next(); } - getScriptVersion(_fileName: string): string { - return '1'; - } - getProjectVersion(): string { - return '1'; - } - getScriptSnapshot(fileName: string): ts.IScriptSnapshot | undefined { - let result: ts.IScriptSnapshot | undefined = this._scriptSnapshots.get(fileName); - if (result === undefined) { - const content = ts.sys.readFile(fileName); - if (content === undefined) { - return undefined; + + get locations(): Iterable<{ fileName: string; offset: number }> { + if (ts.isVariableDeclaration(this.node)) { + // If the const aliases any types, we need to rename those too + const definitionResult = this.service.getDefinitionAndBoundSpan(this.fileName, this.node.name.getStart()); + if (definitionResult?.definitions && definitionResult.definitions.length > 1) { + return definitionResult.definitions.map(x => ({ fileName: x.fileName, offset: x.textSpan.start })); } - result = ts.ScriptSnapshot.fromString(content); - this._scriptSnapshots.set(fileName, result); } - return result; + + return [{ + fileName: this.fileName, + offset: this.node.name!.getStart() + }]; } - getCurrentDirectory(): string { - return path.dirname(this.projectPath); + + shouldMangle(newName: string): boolean { + const currentName = this.node.name!.getText(); + if (currentName.startsWith('$') || skippedExportMangledSymbols.includes(currentName)) { + return false; + } + + // New name is longer the existing one :'( + if (newName.length >= currentName.length) { + return false; + } + + // Don't mangle functions we've explicitly opted out + if (this.node.getFullText().includes('@skipMangle')) { + return false; + } + + return true; } - getDefaultLibFileName(options: ts.CompilerOptions): string { - return ts.getDefaultLibFilePath(options); - } - directoryExists = ts.sys.directoryExists; - getDirectories = ts.sys.getDirectories; - fileExists = ts.sys.fileExists; - readFile = ts.sys.readFile; - readDirectory = ts.sys.readDirectory; - // this is necessary to make source references work. - realpath = ts.sys.realpath; } export interface MangleOutput { @@ -339,26 +403,82 @@ export interface MangleOutput { export class Mangler { private readonly allClassDataByKey = new Map(); + private readonly allExportedSymbols = new Set(); private readonly service: ts.LanguageService; + private readonly renameWorkerPool: workerpool.WorkerPool; - constructor(readonly projectPath: string, readonly log: typeof console.log = () => { }) { + constructor( + private readonly projectPath: string, + private readonly log: typeof console.log = () => { }, + private readonly config: { readonly manglePrivateFields: boolean; readonly mangleExports: boolean }, + ) { this.service = ts.createLanguageService(new StaticLanguageServiceHost(projectPath)); + + this.renameWorkerPool = workerpool.pool(path.join(__dirname, 'renameWorker.js'), { + maxWorkers: 1, + minWorkers: 'max' + }); } - computeNewFileContents(): Map { + async computeNewFileContents(strictImplicitPublicHandling?: Set): Promise> { - // STEP: find all classes and their field info + // STEP: + // - Find all classes and their field info. + // - Find exported symbols. const visit = (node: ts.Node): void => { - if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) { - const anchor = node.name ?? node; - const key = `${node.getSourceFile().fileName}|${anchor.getStart()}`; - if (this.allClassDataByKey.has(key)) { - throw new Error('DUPE?'); + if (this.config.manglePrivateFields) { + if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) { + const anchor = node.name ?? node; + const key = `${node.getSourceFile().fileName}|${anchor.getStart()}`; + if (this.allClassDataByKey.has(key)) { + throw new Error('DUPE?'); + } + this.allClassDataByKey.set(key, new ClassData(node.getSourceFile().fileName, node)); } - this.allClassDataByKey.set(key, new ClassData(node.getSourceFile().fileName, node)); } + + if (this.config.mangleExports) { + // Find exported classes, functions, and vars + if ( + ( + // Exported class + ts.isClassDeclaration(node) + && hasModifier(node, ts.SyntaxKind.ExportKeyword) + && node.name + ) || ( + // Exported function + ts.isFunctionDeclaration(node) + && ts.isSourceFile(node.parent) + && hasModifier(node, ts.SyntaxKind.ExportKeyword) + && node.name && node.body // On named function and not on the overload + ) || ( + // Exported variable + ts.isVariableDeclaration(node) + && hasModifier(node.parent.parent, ts.SyntaxKind.ExportKeyword) // Variable statement is exported + && ts.isSourceFile(node.parent.parent.parent) + ) + + // Disabled for now because we need to figure out how to handle + // enums that are used in monaco or extHost interfaces. + /* || ( + // Exported enum + ts.isEnumDeclaration(node) + && ts.isSourceFile(node.parent) + && hasModifier(node, ts.SyntaxKind.ExportKeyword) + && !hasModifier(node, ts.SyntaxKind.ConstKeyword) // Don't bother mangling const enums because these are inlined + && node.name + */ + ) { + if (isInAmbientContext(node)) { + return; + } + + this.allExportedSymbols.add(new DeclarationData(node.getSourceFile().fileName, node, this.service)); + } + } + ts.forEachChild(node, visit); }; @@ -367,7 +487,7 @@ export class Mangler { ts.forEachChild(file, visit); } } - this.log(`Done collecting classes: ${this.allClassDataByKey.size}`); + this.log(`Done collecting. Classes: ${this.allClassDataByKey.size}. Exported symbols: ${this.allExportedSymbols.size}`); // STEP: connect sub and super-types @@ -405,27 +525,39 @@ export class Mangler { // STEP: make implicit public (actually protected) field really public const violations = new Map(); + let violationsCauseFailure = false; for (const data of this.allClassDataByKey.values()) { - ClassData.makeImplicitPublicActuallyPublic(data, (what, why) => { + ClassData.makeImplicitPublicActuallyPublic(data, (name: string, what, why) => { const arr = violations.get(what); if (arr) { arr.push(why); } else { violations.set(what, [why]); } + + if (strictImplicitPublicHandling && !strictImplicitPublicHandling.has(name)) { + violationsCauseFailure = true; + } }); } for (const [why, whys] of violations) { this.log(`WARN: ${why} became PUBLIC because of: ${whys.join(' , ')}`); } + if (violationsCauseFailure) { + const message = 'Protected fields have been made PUBLIC. This hurts minification and is therefore not allowed. Review the WARN messages further above'; + this.log(`ERROR: ${message}`); + throw new Error(message); + } // STEP: compute replacement names for each class for (const data of this.allClassDataByKey.values()) { ClassData.fillInReplacement(data); } - this.log(`Done creating replacements`); + this.log(`Done creating class replacements`); // STEP: prepare rename edits + this.log(`Starting prepare rename edits`); + type Edit = { newText: string; offset: number; length: number }; const editsByFile = new Map(); @@ -437,9 +569,24 @@ export class Mangler { edits.push(edit); } }; + const appendRename = (newText: string, loc: ts.RenameLocation) => { + appendEdit(loc.fileName, { + newText: (loc.prefixText || '') + newText + (loc.suffixText || ''), + offset: loc.textSpan.start, + length: loc.textSpan.length + }); + }; + + type RenameFn = (projectName: string, fileName: string, pos: number) => ts.RenameLocation[]; + + const renameResults: Array> = []; + + const queueRename = (fileName: string, pos: number, newName: string) => { + renameResults.push(Promise.resolve(this.renameWorkerPool.exec('findRenameLocations', [this.projectPath, fileName, pos])) + .then((locations) => ({ newName, locations }))); + }; for (const data of this.allClassDataByKey.values()) { - if (hasModifier(data.node, ts.SyntaxKind.DeclareKeyword)) { continue; } @@ -459,18 +606,39 @@ export class Mangler { parent = parent.parent; } - const newText = data.lookupShortName(name); - const locations = this.service.findRenameLocations(data.fileName, info.pos, false, false, true) ?? []; - for (const loc of locations) { - appendEdit(loc.fileName, { - newText: (loc.prefixText || '') + newText + (loc.suffixText || ''), - offset: loc.textSpan.start, - length: loc.textSpan.length - }); - } + const newName = data.lookupShortName(name); + queueRename(data.fileName, info.pos, newName); } } + for (const data of this.allExportedSymbols.values()) { + if (data.fileName.endsWith('.d.ts') + || skippedExportMangledProjects.some(proj => data.fileName.includes(proj)) + || skippedExportMangledFiles.some(file => data.fileName.endsWith(file + '.ts')) + ) { + continue; + } + + if (!data.shouldMangle(data.replacementName)) { + continue; + } + + const newText = data.replacementName; + for (const { fileName, offset } of data.locations) { + queueRename(fileName, offset, newText); + } + } + + await Promise.all(renameResults).then((result) => { + for (const { newName, locations } of result) { + for (const loc of locations) { + appendRename(newName, loc); + } + } + }); + + await this.renameWorkerPool.terminate(); + this.log(`Done preparing edits: ${editsByFile.size} files`); // STEP: apply all rename edits (per file) @@ -569,17 +737,32 @@ function hasModifier(node: ts.Node, kind: ts.SyntaxKind) { return Boolean(modifiers?.find(mode => mode.kind === kind)); } +function isInAmbientContext(node: ts.Node): boolean { + for (let p = node.parent; p; p = p.parent) { + if (ts.isModuleDeclaration(p)) { + return true; + } + } + return false; +} + function normalize(path: string): string { return path.replace(/\\/g, '/'); } async function _run() { - - const projectPath = path.join(__dirname, '../../src/tsconfig.json'); - const projectBase = path.dirname(projectPath); + const root = path.join(__dirname, '..', '..', '..'); + const projectBase = path.join(root, 'src'); + const projectPath = path.join(projectBase, 'tsconfig.json'); const newProjectBase = path.join(path.dirname(projectBase), path.basename(projectBase) + '2'); - for await (const [fileName, contents] of new Mangler(projectPath, console.log).computeNewFileContents()) { + fs.cpSync(projectBase, newProjectBase, { recursive: true }); + + const mangler = new Mangler(projectPath, console.log, { + mangleExports: true, + manglePrivateFields: true, + }); + for (const [fileName, contents] of await mangler.computeNewFileContents(new Set(['saveState']))) { const newFilePath = path.join(newProjectBase, path.relative(projectBase, fileName)); await fs.promises.mkdir(path.dirname(newFilePath), { recursive: true }); await fs.promises.writeFile(newFilePath, contents.out); diff --git a/build/lib/mangle/renameWorker.js b/build/lib/mangle/renameWorker.js new file mode 100644 index 00000000000..ce4b96275a3 --- /dev/null +++ b/build/lib/mangle/renameWorker.js @@ -0,0 +1,20 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = require("typescript"); +const workerpool = require("workerpool"); +const staticLanguageServiceHost_1 = require("./staticLanguageServiceHost"); +let service; // = ts.createLanguageService(new StaticLanguageServiceHost(projectPath)); +function findRenameLocations(projectPath, fileName, position) { + if (!service) { + service = ts.createLanguageService(new staticLanguageServiceHost_1.StaticLanguageServiceHost(projectPath)); + } + return service.findRenameLocations(fileName, position, false, false, true) ?? []; +} +workerpool.worker({ + findRenameLocations +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuYW1lV29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVuYW1lV29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcsaUNBQWlDO0FBQ2pDLHlDQUF5QztBQUN6QywyRUFBd0U7QUFFeEUsSUFBSSxPQUF1QyxDQUFDLENBQUEsMEVBQTBFO0FBRXRILFNBQVMsbUJBQW1CLENBQzNCLFdBQW1CLEVBQ25CLFFBQWdCLEVBQ2hCLFFBQWdCO0lBRWhCLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDYixPQUFPLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUkscURBQXlCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUMvRTtJQUVELE9BQU8sT0FBTyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEYsQ0FBQztBQUVELFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDakIsbUJBQW1CO0NBQ25CLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/build/lib/mangle/renameWorker.ts b/build/lib/mangle/renameWorker.ts new file mode 100644 index 00000000000..b5d6bcd5bc9 --- /dev/null +++ b/build/lib/mangle/renameWorker.ts @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as ts from 'typescript'; +import * as workerpool from 'workerpool'; +import { StaticLanguageServiceHost } from './staticLanguageServiceHost'; + +let service: ts.LanguageService | undefined;// = ts.createLanguageService(new StaticLanguageServiceHost(projectPath)); + +function findRenameLocations( + projectPath: string, + fileName: string, + position: number, +): readonly ts.RenameLocation[] { + if (!service) { + service = ts.createLanguageService(new StaticLanguageServiceHost(projectPath)); + } + + return service.findRenameLocations(fileName, position, false, false, true) ?? []; +} + +workerpool.worker({ + findRenameLocations +}); diff --git a/build/lib/mangle/staticLanguageServiceHost.js b/build/lib/mangle/staticLanguageServiceHost.js new file mode 100644 index 00000000000..acf48be8442 --- /dev/null +++ b/build/lib/mangle/staticLanguageServiceHost.js @@ -0,0 +1,65 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.StaticLanguageServiceHost = void 0; +const ts = require("typescript"); +const path = require("path"); +class StaticLanguageServiceHost { + projectPath; + _cmdLine; + _scriptSnapshots = new Map(); + constructor(projectPath) { + this.projectPath = projectPath; + const existingOptions = {}; + const parsed = ts.readConfigFile(projectPath, ts.sys.readFile); + if (parsed.error) { + throw parsed.error; + } + this._cmdLine = ts.parseJsonConfigFileContent(parsed.config, ts.sys, path.dirname(projectPath), existingOptions); + if (this._cmdLine.errors.length > 0) { + throw parsed.error; + } + } + getCompilationSettings() { + return this._cmdLine.options; + } + getScriptFileNames() { + return this._cmdLine.fileNames; + } + getScriptVersion(_fileName) { + return '1'; + } + getProjectVersion() { + return '1'; + } + getScriptSnapshot(fileName) { + let result = this._scriptSnapshots.get(fileName); + if (result === undefined) { + const content = ts.sys.readFile(fileName); + if (content === undefined) { + return undefined; + } + result = ts.ScriptSnapshot.fromString(content); + this._scriptSnapshots.set(fileName, result); + } + return result; + } + getCurrentDirectory() { + return path.dirname(this.projectPath); + } + getDefaultLibFileName(options) { + return ts.getDefaultLibFilePath(options); + } + directoryExists = ts.sys.directoryExists; + getDirectories = ts.sys.getDirectories; + fileExists = ts.sys.fileExists; + readFile = ts.sys.readFile; + readDirectory = ts.sys.readDirectory; + // this is necessary to make source references work. + realpath = ts.sys.realpath; +} +exports.StaticLanguageServiceHost = StaticLanguageServiceHost; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljTGFuZ3VhZ2VTZXJ2aWNlSG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YXRpY0xhbmd1YWdlU2VydmljZUhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUU3QixNQUFhLHlCQUF5QjtJQUtoQjtJQUhKLFFBQVEsQ0FBdUI7SUFDL0IsZ0JBQWdCLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7SUFFL0UsWUFBcUIsV0FBbUI7UUFBbkIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDdkMsTUFBTSxlQUFlLEdBQWdDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9ELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNqQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDbkI7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNqSCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ25CO0lBQ0YsQ0FBQztJQUNELHNCQUFzQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFDRCxrQkFBa0I7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsU0FBaUI7UUFDakMsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDO0lBQ0QsaUJBQWlCO1FBQ2hCLE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUNELGlCQUFpQixDQUFDLFFBQWdCO1FBQ2pDLElBQUksTUFBTSxHQUFtQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pGLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN6QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7Z0JBQzFCLE9BQU8sU0FBUyxDQUFDO2FBQ2pCO1lBQ0QsTUFBTSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBQ0QsbUJBQW1CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELHFCQUFxQixDQUFDLE9BQTJCO1FBQ2hELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxlQUFlLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDekMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO0lBQ3ZDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUMvQixRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDM0IsYUFBYSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3JDLG9EQUFvRDtJQUNwRCxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Q0FDM0I7QUFyREQsOERBcURDIn0= \ No newline at end of file diff --git a/build/lib/mangle/staticLanguageServiceHost.ts b/build/lib/mangle/staticLanguageServiceHost.ts new file mode 100644 index 00000000000..c2793342ce3 --- /dev/null +++ b/build/lib/mangle/staticLanguageServiceHost.ts @@ -0,0 +1,62 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as ts from 'typescript'; +import * as path from 'path'; + +export class StaticLanguageServiceHost implements ts.LanguageServiceHost { + + private readonly _cmdLine: ts.ParsedCommandLine; + private readonly _scriptSnapshots: Map = new Map(); + + constructor(readonly projectPath: string) { + const existingOptions: Partial = {}; + const parsed = ts.readConfigFile(projectPath, ts.sys.readFile); + if (parsed.error) { + throw parsed.error; + } + this._cmdLine = ts.parseJsonConfigFileContent(parsed.config, ts.sys, path.dirname(projectPath), existingOptions); + if (this._cmdLine.errors.length > 0) { + throw parsed.error; + } + } + getCompilationSettings(): ts.CompilerOptions { + return this._cmdLine.options; + } + getScriptFileNames(): string[] { + return this._cmdLine.fileNames; + } + getScriptVersion(_fileName: string): string { + return '1'; + } + getProjectVersion(): string { + return '1'; + } + getScriptSnapshot(fileName: string): ts.IScriptSnapshot | undefined { + let result: ts.IScriptSnapshot | undefined = this._scriptSnapshots.get(fileName); + if (result === undefined) { + const content = ts.sys.readFile(fileName); + if (content === undefined) { + return undefined; + } + result = ts.ScriptSnapshot.fromString(content); + this._scriptSnapshots.set(fileName, result); + } + return result; + } + getCurrentDirectory(): string { + return path.dirname(this.projectPath); + } + getDefaultLibFileName(options: ts.CompilerOptions): string { + return ts.getDefaultLibFilePath(options); + } + directoryExists = ts.sys.directoryExists; + getDirectories = ts.sys.getDirectories; + fileExists = ts.sys.fileExists; + readFile = ts.sys.readFile; + readDirectory = ts.sys.readDirectory; + // this is necessary to make source references work. + realpath = ts.sys.realpath; +} diff --git a/build/lib/mangleTypeScript.js b/build/lib/mangleTypeScript.js index 6b60e7c3774..45b50148d12 100644 --- a/build/lib/mangleTypeScript.js +++ b/build/lib/mangleTypeScript.js @@ -16,18 +16,20 @@ class ShortIdent { 'default', 'delete', 'do', 'else', 'export', 'extends', 'false', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'let', 'new', 'null', 'return', 'static', 'super', 'switch', 'this', 'throw', 'true', 'try', 'typeof', 'var', 'void', 'while', 'with', 'yield']); - static _alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); + static _alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890$_'.split(''); _value = 0; _isNameTaken; - constructor(isNameTaken) { - this._isNameTaken = name => ShortIdent._keywords.has(name) || isNameTaken(name); + prefix; + constructor(prefix, isNameTaken) { + this.prefix = prefix; + this._isNameTaken = name => ShortIdent._keywords.has(name) || /^[_0-9]/.test(name) || isNameTaken(name); } - next() { - const candidate = ShortIdent.convert(this._value); + next(localIsNameTaken) { + const candidate = this.prefix + ShortIdent.convert(this._value); this._value++; - if (this._isNameTaken(candidate)) { + if (this._isNameTaken(candidate) || localIsNameTaken?.(candidate)) { // try again - return this.next(); + return this.next(localIsNameTaken); } return candidate; } @@ -143,7 +145,7 @@ class ClassData { if (parent.fields.get(name)?.type === 1 /* FieldType.Protected */) { const parentPos = parent.node.getSourceFile().getLineAndCharacterOfPosition(parent.fields.get(name).pos); const infoPos = data.node.getSourceFile().getLineAndCharacterOfPosition(info.pos); - reportViolation(`'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`); + reportViolation(name, `'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`); parent.fields.get(name).type = 0 /* FieldType.Public */; } parent = parent.parent; @@ -160,7 +162,7 @@ class ClassData { ClassData.fillInReplacement(data.parent); } data.replacements = new Map(); - const identPool = new ShortIdent(name => { + const identPool = new ShortIdent('', name => { // locally taken if (data._isNameTaken(name)) { return true; @@ -210,11 +212,8 @@ class ClassData { } } } - if (this.node.getSourceFile().identifiers instanceof Map) { - // taken by any other usage - if (this.node.getSourceFile().identifiers.has(name)) { - return true; - } + if (isNameTakenInFile(this.node, name)) { + return true; } return false; } @@ -236,6 +235,104 @@ class ClassData { child.parent = this; } } +function isNameTakenInFile(node, name) { + const identifiers = node.getSourceFile().identifiers; + if (identifiers instanceof Map) { + if (identifiers.has(name)) { + return true; + } + } + return false; +} +const fileIdents = new class { + idents = new ShortIdent('$', () => false); + next(file) { + return this.idents.next(name => isNameTakenInFile(file, name)); + } +}; +const skippedFiles = [ + // Build + 'css.build.ts', + 'nls.build.ts', + // Monaco + 'editorCommon.ts', + 'editorOptions.ts', + 'editorZoom.ts', + 'standaloneEditor.ts', + 'standaloneLanguages.ts', + // Generated + 'extensionsApiProposals.ts', + // Module passed around as type + 'pfs.ts', +]; +class DeclarationData { + fileName; + node; + replacementName; + constructor(fileName, node) { + this.fileName = fileName; + this.node = node; + this.replacementName = fileIdents.next(node.getSourceFile()); + } + get locations() { + return [{ + fileName: this.fileName, + offset: this.node.name.getStart() + }]; + } + shouldMangle(newName) { + // New name is longer the existing one :'( + if (newName.length >= this.node.name.getText().length) { + return false; + } + // Don't mangle functions we've explicitly opted out + if (this.node.getFullText().includes('@skipMangle')) { + return false; + } + // Don't mangle functions in the monaco editor API. + if (skippedFiles.some(file => this.node.getSourceFile().fileName.endsWith(file))) { + return false; + } + return true; + } +} +class ConstData { + fileName; + statement; + decl; + service; + replacementName; + constructor(fileName, statement, decl, service) { + this.fileName = fileName; + this.statement = statement; + this.decl = decl; + this.service = service; + this.replacementName = fileIdents.next(statement.getSourceFile()); + } + get locations() { + // If the const aliases any types, we need to rename those too + const definitionResult = this.service.getDefinitionAndBoundSpan(this.decl.getSourceFile().fileName, this.decl.name.getStart()); + if (definitionResult?.definitions && definitionResult.definitions.length > 1) { + return definitionResult.definitions.map(x => ({ fileName: x.fileName, offset: x.textSpan.start })); + } + return [{ fileName: this.fileName, offset: this.decl.name.getStart() }]; + } + shouldMangle(newName) { + // New name is longer the existing one :'( + if (newName.length >= this.decl.name.getText().length) { + return false; + } + // Don't mangle functions we've explicitly opted out + if (this.statement.getFullText().includes('@skipMangle')) { + return false; + } + // Don't mangle functions in some files + if (skippedFiles.some(file => this.decl.getSourceFile().fileName.endsWith(file))) { + return false; + } + return true; + } +} class StaticLanguageServiceHost { projectPath; _cmdLine; @@ -303,14 +400,15 @@ class Mangler { projectPath; log; allClassDataByKey = new Map(); + allExportedDeclarationsByKey = new Map(); service; constructor(projectPath, log = () => { }) { this.projectPath = projectPath; this.log = log; this.service = ts.createLanguageService(new StaticLanguageServiceHost(projectPath)); } - computeNewFileContents() { - // STEP: find all classes and their field info + computeNewFileContents(strictImplicitPublicHandling) { + // STEP find all classes and their field info. Find all exported consts and functions. const visit = (node) => { if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) { const anchor = node.name ?? node; @@ -320,6 +418,39 @@ class Mangler { } this.allClassDataByKey.set(key, new ClassData(node.getSourceFile().fileName, node)); } + if (ts.isClassDeclaration(node) && hasModifier(node, ts.SyntaxKind.ExportKeyword)) { + if (node.name) { + const anchor = node.name; + const key = `${node.getSourceFile().fileName}|${anchor.getStart()}`; + if (this.allExportedDeclarationsByKey.has(key)) { + throw new Error('DUPE?'); + } + this.allExportedDeclarationsByKey.set(key, new DeclarationData(node.getSourceFile().fileName, node)); + } + } + if (ts.isFunctionDeclaration(node) + && ts.isSourceFile(node.parent) + && hasModifier(node, ts.SyntaxKind.ExportKeyword)) { + if (node.name && node.body) { // On named function and not on the overload + const anchor = node.name; + const key = `${node.getSourceFile().fileName}|${anchor.getStart()}`; + if (this.allExportedDeclarationsByKey.has(key)) { + throw new Error('DUPE?'); + } + this.allExportedDeclarationsByKey.set(key, new DeclarationData(node.getSourceFile().fileName, node)); + } + } + if (ts.isVariableStatement(node) + && ts.isSourceFile(node.parent) + && hasModifier(node, ts.SyntaxKind.ExportKeyword)) { + for (const decl of node.declarationList.declarations) { + const key = `${decl.getSourceFile().fileName}|${decl.name.getStart()}`; + if (this.allExportedDeclarationsByKey.has(key)) { + throw new Error('DUPE?'); + } + this.allExportedDeclarationsByKey.set(key, new ConstData(node.getSourceFile().fileName, node, decl, this.service)); + } + } ts.forEachChild(node, visit); }; for (const file of this.service.getProgram().getSourceFiles()) { @@ -327,7 +458,7 @@ class Mangler { ts.forEachChild(file, visit); } } - this.log(`Done collecting classes: ${this.allClassDataByKey.size}`); + this.log(`Done collecting. Classes: ${this.allClassDataByKey.size}. Exported const/fn: ${this.allExportedDeclarationsByKey.size}`); // STEP: connect sub and super-types const setupParents = (data) => { const extendsClause = data.node.heritageClauses?.find(h => h.token === ts.SyntaxKind.ExtendsKeyword); @@ -358,8 +489,9 @@ class Mangler { } // STEP: make implicit public (actually protected) field really public const violations = new Map(); + let violationsCauseFailure = false; for (const data of this.allClassDataByKey.values()) { - ClassData.makeImplicitPublicActuallyPublic(data, (what, why) => { + ClassData.makeImplicitPublicActuallyPublic(data, (name, what, why) => { const arr = violations.get(what); if (arr) { arr.push(why); @@ -367,16 +499,24 @@ class Mangler { else { violations.set(what, [why]); } + if (strictImplicitPublicHandling && !strictImplicitPublicHandling.has(name)) { + violationsCauseFailure = true; + } }); } for (const [why, whys] of violations) { this.log(`WARN: ${why} became PUBLIC because of: ${whys.join(' , ')}`); } + if (violationsCauseFailure) { + const message = 'Protected fields have been made PUBLIC. This hurts minification and is therefore not allowed. Review the WARN messages further above'; + this.log(`ERROR: ${message}`); + throw new Error(message); + } // STEP: compute replacement names for each class for (const data of this.allClassDataByKey.values()) { ClassData.fillInReplacement(data); } - this.log(`Done creating replacements`); + this.log(`Done creating class replacements`); const editsByFile = new Map(); const appendEdit = (fileName, edit) => { const edits = editsByFile.get(fileName); @@ -387,6 +527,13 @@ class Mangler { edits.push(edit); } }; + const appendRename = (newText, loc) => { + appendEdit(loc.fileName, { + newText: (loc.prefixText || '') + newText + (loc.suffixText || ''), + offset: loc.textSpan.start, + length: loc.textSpan.length + }); + }; for (const data of this.allClassDataByKey.values()) { if (hasModifier(data.node, ts.SyntaxKind.DeclareKeyword)) { continue; @@ -407,11 +554,19 @@ class Mangler { const newText = data.lookupShortName(name); const locations = this.service.findRenameLocations(data.fileName, info.pos, false, false, true) ?? []; for (const loc of locations) { - appendEdit(loc.fileName, { - newText: (loc.prefixText || '') + newText + (loc.suffixText || ''), - offset: loc.textSpan.start, - length: loc.textSpan.length - }); + appendRename(newText, loc); + } + } + } + for (const data of this.allExportedDeclarationsByKey.values()) { + if (!data.shouldMangle(data.replacementName)) { + continue; + } + const newText = data.replacementName; + for (const { fileName, offset } of data.locations) { + const locations = this.service.findRenameLocations(fileName, offset, false, false, true) ?? []; + for (const loc of locations) { + appendRename(newText, loc); } } } @@ -505,7 +660,8 @@ async function _run() { const projectPath = path.join(__dirname, '../../src/tsconfig.json'); const projectBase = path.dirname(projectPath); const newProjectBase = path.join(path.dirname(projectBase), path.basename(projectBase) + '2'); - for await (const [fileName, contents] of new Mangler(projectPath, console.log).computeNewFileContents()) { + fs.cpSync(projectBase, newProjectBase, { recursive: true }); + for await (const [fileName, contents] of new Mangler(projectPath, console.log).computeNewFileContents(new Set(['saveState']))) { const newFilePath = path.join(newProjectBase, path.relative(projectBase, fileName)); await fs.promises.mkdir(path.dirname(newFilePath), { recursive: true }); await fs.promises.writeFile(newFilePath, contents.out); @@ -517,4 +673,4 @@ async function _run() { if (__filename === process_1.argv[1]) { _run(); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuZ2xlVHlwZVNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hbmdsZVR5cGVTY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIscUNBQStCO0FBQy9CLDJDQUF5RDtBQUN6RCw2QkFBb0M7QUFFcEMsTUFBTSxVQUFVO0lBRVAsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVO1FBQzlHLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJO1FBQ25HLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztRQUMxRyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RCxNQUFNLENBQUMsU0FBUyxHQUFHLHNEQUFzRCxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVwRixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ0YsWUFBWSxDQUE0QjtJQUV6RCxZQUFZLFdBQXNDO1FBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsSUFB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuZ2xlVHlwZVNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hbmdsZVR5cGVTY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIscUNBQStCO0FBQy9CLDJDQUF5RDtBQUN6RCw2QkFBb0M7QUFFcEMsTUFBTSxVQUFVO0lBRVAsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVO1FBQzlHLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJO1FBQ25HLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztRQUMxRyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RCxNQUFNLENBQUMsU0FBUyxHQUFHLGtFQUFrRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVoRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ0YsWUFBWSxDQUE0QjtJQUN4QyxNQUFNLENBQVM7SUFFaEMsWUFBWSxNQUFjLEVBQUUsV0FBc0M7UUFDakUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxD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 \ No newline at end of file diff --git a/build/lib/optimize.js b/build/lib/optimize.js index c80285c3f2e..0a0066973b5 100644 --- a/build/lib/optimize.js +++ b/build/lib/optimize.js @@ -81,7 +81,7 @@ function loader(src, bundledFileHeader, bundleLoader, externalLoaderInfo) { files.push(new VinylFile({ path: 'fake2', base: '.', - contents: Buffer.from(`require.config(${JSON.stringify(externalLoaderInfo, undefined, 2)});`) + contents: Buffer.from(emitExternalLoaderInfo(externalLoaderInfo)) })); } for (const file of files) { @@ -91,6 +91,17 @@ function loader(src, bundledFileHeader, bundleLoader, externalLoaderInfo) { })) .pipe(concat('vs/loader.js'))); } +function emitExternalLoaderInfo(externalLoaderInfo) { + const externalBaseUrl = externalLoaderInfo.baseUrl; + externalLoaderInfo.baseUrl = '$BASE_URL'; + // If defined, use the runtime configured baseUrl. + const code = ` +(function() { + const baseUrl = require.getConfig().baseUrl || ${JSON.stringify(externalBaseUrl)}; + require.config(${JSON.stringify(externalLoaderInfo, undefined, 2)}); +})();`; + return code.replace('"$BASE_URL"', 'baseUrl'); +} function toConcatStream(src, bundledFileHeader, sources, dest, fileContentMapper) { const useSourcemaps = /\.js$/.test(dest) && !/\.nls\.js$/.test(dest); // If a bundle ends up including in any of the sources our copyright, then @@ -249,9 +260,16 @@ function minifyTask(src, sourceMapBaseUrl) { }).then(res => { const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path)); const sourceMapFile = res.outputFiles.find(f => /\.js\.map$/.test(f.path)); - f.contents = Buffer.from(jsFile.contents); - f.sourceMap = JSON.parse(sourceMapFile.text); - cb(undefined, f); + const contents = Buffer.from(jsFile.contents); + const unicodeMatch = contents.toString().match(/[^\x00-\xFF]+/g); + if (unicodeMatch) { + cb(new Error(`Found non-ascii character ${unicodeMatch[0]} in the minified output of ${f.path}. Non-ASCII characters in the output can cause performance problems when loading. Please review if you have introduced a regular expression that esbuild is not automatically converting and convert it to using unicode escape sequences.`)); + } + else { + f.contents = contents; + f.sourceMap = JSON.parse(sourceMapFile.text); + cb(undefined, f); + } }, cb); }), jsFilter.restore, cssFilter, postcss([cssnano({ preset: 'default' })]), cssFilter.restore, svgFilter, svgmin(), svgFilter.restore, sourcemaps.mapSources((sourcePath) => { if (sourcePath === 'bootstrap-fork.js') { @@ -267,4 +285,4 @@ function minifyTask(src, sourceMapBaseUrl) { }; } exports.minifyTask = minifyTask; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxtQ0FBbUM7QUFDbkMsNkJBQTZCO0FBQzdCLHNDQUFzQztBQUN0QyxzQ0FBc0M7QUFDdEMsc0NBQXNDO0FBQ3RDLDBDQUEwQztBQUMxQyw2QkFBNkI7QUFDN0IsNkJBQTZCO0FBQzdCLG1DQUFtQztBQUNuQyxtQ0FBbUM7QUFDbkMsaUNBQW1EO0FBQ25ELG1DQUE0QztBQUM1QywrQkFBK0I7QUFFL0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFckQsU0FBUyxHQUFHLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDM0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBZ0IsWUFBWTtJQUMzQixNQUFNLE1BQU0sR0FBUTtRQUNuQixLQUFLLEVBQUU7WUFDTixJQUFJLEVBQUUsY0FBYztZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNsQjtRQUNELGlCQUFpQixFQUFFLE9BQU87S0FDMUIsQ0FBQztJQUVGLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUU3QyxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFaRCxvQ0FZQztBQUVELE1BQU0sdUJBQXVCLEdBQUcsd0NBQXdDLENBQUM7QUFFekUsU0FBUyxZQUFZLENBQUMsR0FBVyxFQUFFLElBQVksRUFBRSxXQUErQjtJQUMvRSxPQUFPLENBQ04sSUFBSTtTQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxtQ0FBbUM7QUFDbkMsNkJBQTZCO0FBQzdCLHNDQUFzQztBQUN0QyxzQ0FBc0M7QUFDdEMsc0NBQXNDO0FBQ3RDLDBDQUEwQztBQUMxQyw2QkFBNkI7QUFDN0IsNkJBQTZCO0FBQzdCLG1DQUFtQztBQUNuQyxtQ0FBbUM7QUFDbkMsaUNBQW1EO0FBQ25ELG1DQUE0QztBQUM1QywrQkFBK0I7QUFFL0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFckQsU0FBUyxHQUFHLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDM0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBZ0IsWUFBWTtJQUMzQixNQUFNLE1BQU0sR0FBUTtRQUNuQixLQUFLLEVBQUU7WUFDTixJQUFJLEVBQUUsY0FBYztZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNsQjtRQUNELGlCQUFpQixFQUFFLE9BQU87S0FDMUIsQ0FBQztJQUVGLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUU3QyxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFaRCxvQ0FZQztBQUVELE1BQU0sdUJBQXVCLEdBQUcsd0NBQXdDLENBQUM7QUFFekUsU0FBUyxZQUFZLENBQUMsR0FBVyxFQUFFLElBQVksRUFBRSxXQUErQjtJQUMvRSxPQUFPLENBQ04sSUFBSTtTQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FB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 \ No newline at end of file diff --git a/build/lib/optimize.ts b/build/lib/optimize.ts index 2e3943d79f9..aebe22a7e0a 100644 --- a/build/lib/optimize.ts +++ b/build/lib/optimize.ts @@ -54,7 +54,7 @@ function loaderPlugin(src: string, base: string, amdModuleId: string | undefined ); } -function loader(src: string, bundledFileHeader: string, bundleLoader: boolean, externalLoaderInfo?: any): NodeJS.ReadWriteStream { +function loader(src: string, bundledFileHeader: string, bundleLoader: boolean, externalLoaderInfo?: util.IExternalLoaderInfo): NodeJS.ReadWriteStream { let loaderStream = gulp.src(`${src}/vs/loader.js`, { base: `${src}` }); if (bundleLoader) { loaderStream = es.merge( @@ -95,7 +95,7 @@ function loader(src: string, bundledFileHeader: string, bundleLoader: boolean, e files.push(new VinylFile({ path: 'fake2', base: '.', - contents: Buffer.from(`require.config(${JSON.stringify(externalLoaderInfo, undefined, 2)});`) + contents: Buffer.from(emitExternalLoaderInfo(externalLoaderInfo)) })); } for (const file of files) { @@ -107,6 +107,19 @@ function loader(src: string, bundledFileHeader: string, bundleLoader: boolean, e ); } +function emitExternalLoaderInfo(externalLoaderInfo: util.IExternalLoaderInfo): string { + const externalBaseUrl = externalLoaderInfo.baseUrl; + externalLoaderInfo.baseUrl = '$BASE_URL'; + + // If defined, use the runtime configured baseUrl. + const code = ` +(function() { + const baseUrl = require.getConfig().baseUrl || ${JSON.stringify(externalBaseUrl)}; + require.config(${JSON.stringify(externalLoaderInfo, undefined, 2)}); +})();`; + return code.replace('"$BASE_URL"', 'baseUrl'); +} + function toConcatStream(src: string, bundledFileHeader: string, sources: bundle.IFile[], dest: string, fileContentMapper: (contents: string, path: string) => string): NodeJS.ReadWriteStream { const useSourcemaps = /\.js$/.test(dest) && !/\.nls\.js$/.test(dest); @@ -170,7 +183,7 @@ export interface IOptimizeAMDTaskOpts { /** * Additional info we append to the end of the loader */ - externalLoaderInfo?: any; + externalLoaderInfo?: util.IExternalLoaderInfo; /** * (true by default - append css and nls to loader) */ @@ -189,7 +202,7 @@ export interface IOptimizeAMDTaskOpts { languages?: Language[]; /** * File contents interceptor - * @param contents The contens of the file + * @param contents The contents of the file * @param path The absolute file path, always using `/`, even on Windows */ fileContentMapper?: (contents: string, path: string) => string; @@ -324,7 +337,7 @@ function optimizeManualTask(options: IOptimizeManualTaskOpts[]): NodeJS.ReadWrit return es.merge(...concatenations); } -export function optimizeLoaderTask(src: string, out: string, bundleLoader: boolean, bundledFileHeader = '', externalLoaderInfo?: any): () => NodeJS.ReadWriteStream { +export function optimizeLoaderTask(src: string, out: string, bundleLoader: boolean, bundledFileHeader = '', externalLoaderInfo?: util.IExternalLoaderInfo): () => NodeJS.ReadWriteStream { return () => loader(src, bundledFileHeader, bundleLoader, externalLoaderInfo).pipe(gulp.dest(out)); } @@ -393,10 +406,16 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) => const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path))!; const sourceMapFile = res.outputFiles.find(f => /\.js\.map$/.test(f.path))!; - f.contents = Buffer.from(jsFile.contents); - f.sourceMap = JSON.parse(sourceMapFile.text); + const contents = Buffer.from(jsFile.contents); + const unicodeMatch = contents.toString().match(/[^\x00-\xFF]+/g); + if (unicodeMatch) { + cb(new Error(`Found non-ascii character ${unicodeMatch[0]} in the minified output of ${f.path}. Non-ASCII characters in the output can cause performance problems when loading. Please review if you have introduced a regular expression that esbuild is not automatically converting and convert it to using unicode escape sequences.`)); + } else { + f.contents = contents; + f.sourceMap = JSON.parse(sourceMapFile.text); - cb(undefined, f); + cb(undefined, f); + } }, cb); }), jsFilter.restore, diff --git a/build/lib/stylelint/validateVariableNames.js b/build/lib/stylelint/validateVariableNames.js new file mode 100644 index 00000000000..c34a339ccc9 --- /dev/null +++ b/build/lib/stylelint/validateVariableNames.js @@ -0,0 +1,34 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getVariableNameValidator = void 0; +const fs_1 = require("fs"); +const path = require("path"); +const RE_VAR_PROP = /var\(\s*(--([\w\-\.]+))/g; +let knownVariables; +function getKnownVariableNames() { + if (!knownVariables) { + const knownVariablesFileContent = (0, fs_1.readFileSync)(path.join(__dirname, './vscode-known-variables.json'), 'utf8').toString(); + const knownVariablesInfo = JSON.parse(knownVariablesFileContent); + knownVariables = new Set([...knownVariablesInfo.colors, ...knownVariablesInfo.others]); + } + return knownVariables; +} +function getVariableNameValidator() { + const allVariables = getKnownVariableNames(); + return (value, report) => { + RE_VAR_PROP.lastIndex = 0; // reset lastIndex just to be sure + let match; + while (match = RE_VAR_PROP.exec(value)) { + const variableName = match[1]; + if (variableName && !allVariables.has(variableName)) { + report(variableName); + } + } + }; +} +exports.getVariableNameValidator = getVariableNameValidator; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVWYXJpYWJsZU5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGVWYXJpYWJsZU5hbWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLDJCQUFrQztBQUNsQyw2QkFBOEI7QUFFOUIsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUM7QUFFL0MsSUFBSSxjQUF1QyxDQUFDO0FBQzVDLFNBQVMscUJBQXFCO0lBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDcEIsTUFBTSx5QkFBeUIsR0FBRyxJQUFBLGlCQUFZLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsK0JBQStCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6SCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNqRSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBYSxDQUFDLENBQUM7S0FDbkc7SUFDRCxPQUFPLGNBQWMsQ0FBQztBQUN2QixDQUFDO0FBTUQsU0FBZ0Isd0JBQXdCO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixFQUFFLENBQUM7SUFDN0MsT0FBTyxDQUFDLEtBQWEsRUFBRSxNQUF3QyxFQUFFLEVBQUU7UUFDbEUsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7UUFDN0QsSUFBSSxLQUFLLENBQUM7UUFDVixPQUFPLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNyQjtTQUNEO0lBQ0YsQ0FBQyxDQUFDO0FBQ0gsQ0FBQztBQVpELDREQVlDIn0= \ No newline at end of file diff --git a/build/lib/stylelint/validateVariableNames.ts b/build/lib/stylelint/validateVariableNames.ts new file mode 100644 index 00000000000..56e5f84a81f --- /dev/null +++ b/build/lib/stylelint/validateVariableNames.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 { readFileSync } from 'fs'; +import path = require('path'); + +const RE_VAR_PROP = /var\(\s*(--([\w\-\.]+))/g; + +let knownVariables: Set | undefined; +function getKnownVariableNames() { + if (!knownVariables) { + const knownVariablesFileContent = readFileSync(path.join(__dirname, './vscode-known-variables.json'), 'utf8').toString(); + const knownVariablesInfo = JSON.parse(knownVariablesFileContent); + knownVariables = new Set([...knownVariablesInfo.colors, ...knownVariablesInfo.others] as string[]); + } + return knownVariables; +} + +export interface IValidator { + (value: string, report: (message: string) => void): void; +} + +export function getVariableNameValidator(): IValidator { + const allVariables = getKnownVariableNames(); + return (value: string, report: (unknwnVariable: string) => void) => { + RE_VAR_PROP.lastIndex = 0; // reset lastIndex just to be sure + let match; + while (match = RE_VAR_PROP.exec(value)) { + const variableName = match[1]; + if (variableName && !allVariables.has(variableName)) { + report(variableName); + } + } + }; +} + diff --git a/build/lib/stylelint/vscode-known-variables.json b/build/lib/stylelint/vscode-known-variables.json new file mode 100644 index 00000000000..67ec595ed30 --- /dev/null +++ b/build/lib/stylelint/vscode-known-variables.json @@ -0,0 +1,761 @@ +{ + "colors": [ + "--vscode-activityBar-activeBackground", + "--vscode-activityBar-activeBorder", + "--vscode-activityBar-activeFocusBorder", + "--vscode-activityBar-background", + "--vscode-activityBar-border", + "--vscode-activityBar-dropBorder", + "--vscode-activityBar-foreground", + "--vscode-activityBar-inactiveForeground", + "--vscode-activityBarBadge-background", + "--vscode-activityBarBadge-foreground", + "--vscode-badge-background", + "--vscode-badge-foreground", + "--vscode-banner-background", + "--vscode-banner-foreground", + "--vscode-banner-iconForeground", + "--vscode-breadcrumb-activeSelectionForeground", + "--vscode-breadcrumb-background", + "--vscode-breadcrumb-focusForeground", + "--vscode-breadcrumb-foreground", + "--vscode-breadcrumbPicker-background", + "--vscode-button-background", + "--vscode-button-border", + "--vscode-button-foreground", + "--vscode-button-hoverBackground", + "--vscode-button-secondaryBackground", + "--vscode-button-secondaryForeground", + "--vscode-button-secondaryHoverBackground", + "--vscode-button-separator", + "--vscode-charts-blue", + "--vscode-charts-foreground", + "--vscode-charts-green", + "--vscode-charts-lines", + "--vscode-charts-orange", + "--vscode-charts-purple", + "--vscode-charts-red", + "--vscode-charts-yellow", + "--vscode-chat-requestBackground", + "--vscode-chat-requestBorder", + "--vscode-checkbox-background", + "--vscode-checkbox-border", + "--vscode-checkbox-foreground", + "--vscode-checkbox-selectBackground", + "--vscode-checkbox-selectBorder", + "--vscode-commandCenter-activeBackground", + "--vscode-commandCenter-activeBorder", + "--vscode-commandCenter-activeForeground", + "--vscode-commandCenter-background", + "--vscode-commandCenter-border", + "--vscode-commandCenter-foreground", + "--vscode-commandCenter-inactiveBorder", + "--vscode-commandCenter-inactiveForeground", + "--vscode-commentsView-resolvedIcon", + "--vscode-commentsView-unresolvedIcon", + "--vscode-contrastActiveBorder", + "--vscode-contrastBorder", + "--vscode-debugConsole-errorForeground", + "--vscode-debugConsole-infoForeground", + "--vscode-debugConsole-sourceForeground", + "--vscode-debugConsole-warningForeground", + "--vscode-debugConsoleInputIcon-foreground", + "--vscode-debugExceptionWidget-background", + "--vscode-debugExceptionWidget-border", + "--vscode-debugIcon-breakpointCurrentStackframeForeground", + "--vscode-debugIcon-breakpointDisabledForeground", + "--vscode-debugIcon-breakpointForeground", + "--vscode-debugIcon-breakpointStackframeForeground", + "--vscode-debugIcon-breakpointUnverifiedForeground", + "--vscode-debugIcon-continueForeground", + "--vscode-debugIcon-disconnectForeground", + "--vscode-debugIcon-pauseForeground", + "--vscode-debugIcon-restartForeground", + "--vscode-debugIcon-startForeground", + "--vscode-debugIcon-stepBackForeground", + "--vscode-debugIcon-stepIntoForeground", + "--vscode-debugIcon-stepOutForeground", + "--vscode-debugIcon-stepOverForeground", + "--vscode-debugIcon-stopForeground", + "--vscode-debugTokenExpression-boolean", + "--vscode-debugTokenExpression-error", + "--vscode-debugTokenExpression-name", + "--vscode-debugTokenExpression-number", + "--vscode-debugTokenExpression-string", + "--vscode-debugTokenExpression-value", + "--vscode-debugToolBar-background", + "--vscode-debugToolBar-border", + "--vscode-debugView-exceptionLabelBackground", + "--vscode-debugView-exceptionLabelForeground", + "--vscode-debugView-stateLabelBackground", + "--vscode-debugView-stateLabelForeground", + "--vscode-debugView-valueChangedHighlight", + "--vscode-descriptionForeground", + "--vscode-diffEditor-border", + "--vscode-diffEditor-diagonalFill", + "--vscode-diffEditor-insertedLineBackground", + "--vscode-diffEditor-insertedTextBackground", + "--vscode-diffEditor-insertedTextBorder", + "--vscode-diffEditor-move-border", + "--vscode-diffEditor-removedLineBackground", + "--vscode-diffEditor-removedTextBackground", + "--vscode-diffEditor-removedTextBorder", + "--vscode-diffEditor-unchangedCodeBackground", + "--vscode-diffEditor-unchangedRegionBackground", + "--vscode-diffEditor-unchangedRegionForeground", + "--vscode-diffEditorGutter-insertedLineBackground", + "--vscode-diffEditorGutter-removedLineBackground", + "--vscode-diffEditorOverview-insertedForeground", + "--vscode-diffEditorOverview-removedForeground", + "--vscode-disabledForeground", + "--vscode-dropdown-background", + "--vscode-dropdown-border", + "--vscode-dropdown-foreground", + "--vscode-dropdown-listBackground", + "--vscode-editor-background", + "--vscode-editor-findMatchBackground", + "--vscode-editor-findMatchBorder", + "--vscode-editor-findMatchHighlightBackground", + "--vscode-editor-findMatchHighlightBorder", + "--vscode-editor-findRangeHighlightBackground", + "--vscode-editor-findRangeHighlightBorder", + "--vscode-editor-focusedStackFrameHighlightBackground", + "--vscode-editor-foldBackground", + "--vscode-editor-foreground", + "--vscode-editor-hoverHighlightBackground", + "--vscode-editor-inactiveSelectionBackground", + "--vscode-editor-inlineValuesBackground", + "--vscode-editor-inlineValuesForeground", + "--vscode-editor-lineHighlightBackground", + "--vscode-editor-lineHighlightBorder", + "--vscode-editor-linkedEditingBackground", + "--vscode-editor-rangeHighlightBackground", + "--vscode-editor-rangeHighlightBorder", + "--vscode-editor-selectionBackground", + "--vscode-editor-selectionForeground", + "--vscode-editor-selectionHighlightBackground", + "--vscode-editor-selectionHighlightBorder", + "--vscode-editor-snippetFinalTabstopHighlightBackground", + "--vscode-editor-snippetFinalTabstopHighlightBorder", + "--vscode-editor-snippetTabstopHighlightBackground", + "--vscode-editor-snippetTabstopHighlightBorder", + "--vscode-editor-stackFrameHighlightBackground", + "--vscode-editor-symbolHighlightBackground", + "--vscode-editor-symbolHighlightBorder", + "--vscode-editor-wordHighlightBackground", + "--vscode-editor-wordHighlightBorder", + "--vscode-editor-wordHighlightStrongBackground", + "--vscode-editor-wordHighlightStrongBorder", + "--vscode-editor-wordHighlightTextBackground", + "--vscode-editor-wordHighlightTextBorder", + "--vscode-editorActiveLineNumber-foreground", + "--vscode-editorBracketHighlight-foreground1", + "--vscode-editorBracketHighlight-foreground2", + "--vscode-editorBracketHighlight-foreground3", + "--vscode-editorBracketHighlight-foreground4", + "--vscode-editorBracketHighlight-foreground5", + "--vscode-editorBracketHighlight-foreground6", + "--vscode-editorBracketHighlight-unexpectedBracket-foreground", + "--vscode-editorBracketMatch-background", + "--vscode-editorBracketMatch-border", + "--vscode-editorBracketPairGuide-activeBackground1", + "--vscode-editorBracketPairGuide-activeBackground2", + "--vscode-editorBracketPairGuide-activeBackground3", + "--vscode-editorBracketPairGuide-activeBackground4", + "--vscode-editorBracketPairGuide-activeBackground5", + "--vscode-editorBracketPairGuide-activeBackground6", + "--vscode-editorBracketPairGuide-background1", + "--vscode-editorBracketPairGuide-background2", + "--vscode-editorBracketPairGuide-background3", + "--vscode-editorBracketPairGuide-background4", + "--vscode-editorBracketPairGuide-background5", + "--vscode-editorBracketPairGuide-background6", + "--vscode-editorCodeLens-foreground", + "--vscode-editorCommentsWidget-rangeActiveBackground", + "--vscode-editorCommentsWidget-rangeActiveBorder", + "--vscode-editorCommentsWidget-rangeBackground", + "--vscode-editorCommentsWidget-rangeBorder", + "--vscode-editorCommentsWidget-resolvedBorder", + "--vscode-editorCommentsWidget-unresolvedBorder", + "--vscode-editorCursor-background", + "--vscode-editorCursor-foreground", + "--vscode-editorError-background", + "--vscode-editorError-border", + "--vscode-editorError-foreground", + "--vscode-editorGhostText-background", + "--vscode-editorGhostText-border", + "--vscode-editorGhostText-foreground", + "--vscode-editorGroup-border", + "--vscode-editorGroup-dropBackground", + "--vscode-editorGroup-dropIntoPromptBackground", + "--vscode-editorGroup-dropIntoPromptBorder", + "--vscode-editorGroup-dropIntoPromptForeground", + "--vscode-editorGroup-emptyBackground", + "--vscode-editorGroup-focusedEmptyBorder", + "--vscode-editorGroupHeader-border", + "--vscode-editorGroupHeader-noTabsBackground", + "--vscode-editorGroupHeader-tabsBackground", + "--vscode-editorGroupHeader-tabsBorder", + "--vscode-editorGutter-addedBackground", + "--vscode-editorGutter-background", + "--vscode-editorGutter-commentGlyphForeground", + "--vscode-editorGutter-commentRangeForeground", + "--vscode-editorGutter-commentUnresolvedGlyphForeground", + "--vscode-editorGutter-deletedBackground", + "--vscode-editorGutter-foldingControlForeground", + "--vscode-editorGutter-modifiedBackground", + "--vscode-editorHint-border", + "--vscode-editorHint-foreground", + "--vscode-editorHoverWidget-background", + "--vscode-editorHoverWidget-border", + "--vscode-editorHoverWidget-foreground", + "--vscode-editorHoverWidget-highlightForeground", + "--vscode-editorHoverWidget-statusBarBackground", + "--vscode-editorIndentGuide-activeBackground1", + "--vscode-editorIndentGuide-activeBackground2", + "--vscode-editorIndentGuide-activeBackground3", + "--vscode-editorIndentGuide-activeBackground4", + "--vscode-editorIndentGuide-activeBackground5", + "--vscode-editorIndentGuide-activeBackground6", + "--vscode-editorIndentGuide-background1", + "--vscode-editorIndentGuide-background2", + "--vscode-editorIndentGuide-background3", + "--vscode-editorIndentGuide-background4", + "--vscode-editorIndentGuide-background5", + "--vscode-editorIndentGuide-background6", + "--vscode-editorInfo-background", + "--vscode-editorInfo-border", + "--vscode-editorInfo-foreground", + "--vscode-editorInlayHint-background", + "--vscode-editorInlayHint-foreground", + "--vscode-editorInlayHint-parameterBackground", + "--vscode-editorInlayHint-parameterForeground", + "--vscode-editorInlayHint-typeBackground", + "--vscode-editorInlayHint-typeForeground", + "--vscode-editorLightBulb-foreground", + "--vscode-editorLightBulbAutoFix-foreground", + "--vscode-editorLineNumber-activeForeground", + "--vscode-editorLineNumber-dimmedForeground", + "--vscode-editorLineNumber-foreground", + "--vscode-editorLink-activeForeground", + "--vscode-editorMarkerNavigation-background", + "--vscode-editorMarkerNavigationError-background", + "--vscode-editorMarkerNavigationError-headerBackground", + "--vscode-editorMarkerNavigationInfo-background", + "--vscode-editorMarkerNavigationInfo-headerBackground", + "--vscode-editorMarkerNavigationWarning-background", + "--vscode-editorMarkerNavigationWarning-headerBackground", + "--vscode-editorOverviewRuler-addedForeground", + "--vscode-editorOverviewRuler-background", + "--vscode-editorOverviewRuler-border", + "--vscode-editorOverviewRuler-bracketMatchForeground", + "--vscode-editorOverviewRuler-commentForeground", + "--vscode-editorOverviewRuler-commentUnresolvedForeground", + "--vscode-editorOverviewRuler-commonContentForeground", + "--vscode-editorOverviewRuler-currentContentForeground", + "--vscode-editorOverviewRuler-deletedForeground", + "--vscode-editorOverviewRuler-errorForeground", + "--vscode-editorOverviewRuler-findMatchForeground", + "--vscode-editorOverviewRuler-incomingContentForeground", + "--vscode-editorOverviewRuler-infoForeground", + "--vscode-editorOverviewRuler-modifiedForeground", + "--vscode-editorOverviewRuler-rangeHighlightForeground", + "--vscode-editorOverviewRuler-selectionHighlightForeground", + "--vscode-editorOverviewRuler-warningForeground", + "--vscode-editorOverviewRuler-wordHighlightForeground", + "--vscode-editorOverviewRuler-wordHighlightStrongForeground", + "--vscode-editorOverviewRuler-wordHighlightTextForeground", + "--vscode-editorPane-background", + "--vscode-editorRuler-foreground", + "--vscode-editorStickyScroll-background", + "--vscode-editorStickyScrollHover-background", + "--vscode-editorSuggestWidget-background", + "--vscode-editorSuggestWidget-border", + "--vscode-editorSuggestWidget-focusHighlightForeground", + "--vscode-editorSuggestWidget-foreground", + "--vscode-editorSuggestWidget-highlightForeground", + "--vscode-editorSuggestWidget-selectedBackground", + "--vscode-editorSuggestWidget-selectedForeground", + "--vscode-editorSuggestWidget-selectedIconForeground", + "--vscode-editorSuggestWidgetStatus-foreground", + "--vscode-editorUnicodeHighlight-background", + "--vscode-editorUnicodeHighlight-border", + "--vscode-editorUnnecessaryCode-border", + "--vscode-editorUnnecessaryCode-opacity", + "--vscode-editorWarning-background", + "--vscode-editorWarning-border", + "--vscode-editorWarning-foreground", + "--vscode-editorWhitespace-foreground", + "--vscode-editorWidget-background", + "--vscode-editorWidget-border", + "--vscode-editorWidget-foreground", + "--vscode-editorWidget-resizeBorder", + "--vscode-errorForeground", + "--vscode-extensionBadge-remoteBackground", + "--vscode-extensionBadge-remoteForeground", + "--vscode-extensionButton-background", + "--vscode-extensionButton-foreground", + "--vscode-extensionButton-hoverBackground", + "--vscode-extensionButton-prominentBackground", + "--vscode-extensionButton-prominentForeground", + "--vscode-extensionButton-prominentHoverBackground", + "--vscode-extensionButton-separator", + "--vscode-extensionIcon-preReleaseForeground", + "--vscode-extensionIcon-sponsorForeground", + "--vscode-extensionIcon-starForeground", + "--vscode-extensionIcon-verifiedForeground", + "--vscode-focusBorder", + "--vscode-foreground", + "--vscode-icon-foreground", + "--vscode-inlineChat-background", + "--vscode-inlineChat-border", + "--vscode-inlineChat-regionHighlight", + "--vscode-inlineChat-shadow", + "--vscode-inlineChatDiff-inserted", + "--vscode-inlineChatInput-background", + "--vscode-inlineChatInput-border", + "--vscode-inlineChatInput-focusBorder", + "--vscode-inlineChatInput-placeholderForeground", + "--vscode-inlineChatrDiff-removed", + "--vscode-input-background", + "--vscode-input-border", + "--vscode-input-foreground", + "--vscode-input-placeholderForeground", + "--vscode-inputOption-activeBackground", + "--vscode-inputOption-activeBorder", + "--vscode-inputOption-activeForeground", + "--vscode-inputOption-hoverBackground", + "--vscode-inputValidation-errorBackground", + "--vscode-inputValidation-errorBorder", + "--vscode-inputValidation-errorForeground", + "--vscode-inputValidation-infoBackground", + "--vscode-inputValidation-infoBorder", + "--vscode-inputValidation-infoForeground", + "--vscode-inputValidation-warningBackground", + "--vscode-inputValidation-warningBorder", + "--vscode-inputValidation-warningForeground", + "--vscode-keybindingLabel-background", + "--vscode-keybindingLabel-border", + "--vscode-keybindingLabel-bottomBorder", + "--vscode-keybindingLabel-foreground", + "--vscode-keybindingTable-headerBackground", + "--vscode-keybindingTable-rowsBackground", + "--vscode-list-activeSelectionBackground", + "--vscode-list-activeSelectionForeground", + "--vscode-list-activeSelectionIconForeground", + "--vscode-list-deemphasizedForeground", + "--vscode-list-dropBackground", + "--vscode-list-errorForeground", + "--vscode-list-filterMatchBackground", + "--vscode-list-filterMatchBorder", + "--vscode-list-focusAndSelectionOutline", + "--vscode-list-focusBackground", + "--vscode-list-focusForeground", + "--vscode-list-focusHighlightForeground", + "--vscode-list-focusOutline", + "--vscode-list-highlightForeground", + "--vscode-list-hoverBackground", + "--vscode-list-hoverForeground", + "--vscode-list-inactiveFocusBackground", + "--vscode-list-inactiveFocusOutline", + "--vscode-list-inactiveSelectionBackground", + "--vscode-list-inactiveSelectionForeground", + "--vscode-list-inactiveSelectionIconForeground", + "--vscode-list-invalidItemForeground", + "--vscode-list-warningForeground", + "--vscode-listFilterWidget-background", + "--vscode-listFilterWidget-noMatchesOutline", + "--vscode-listFilterWidget-outline", + "--vscode-listFilterWidget-shadow", + "--vscode-menu-background", + "--vscode-menu-border", + "--vscode-menu-foreground", + "--vscode-menu-selectionBackground", + "--vscode-menu-selectionBorder", + "--vscode-menu-selectionForeground", + "--vscode-menu-separatorBackground", + "--vscode-menubar-selectionBackground", + "--vscode-menubar-selectionBorder", + "--vscode-menubar-selectionForeground", + "--vscode-merge-border", + "--vscode-merge-commonContentBackground", + "--vscode-merge-commonHeaderBackground", + "--vscode-merge-currentContentBackground", + "--vscode-merge-currentHeaderBackground", + "--vscode-merge-incomingContentBackground", + "--vscode-merge-incomingHeaderBackground", + "--vscode-mergeEditor-change-background", + "--vscode-mergeEditor-change-word-background", + "--vscode-mergeEditor-changeBase-background", + "--vscode-mergeEditor-changeBase-word-background", + "--vscode-mergeEditor-conflict-handled-minimapOverViewRuler", + "--vscode-mergeEditor-conflict-handledFocused-border", + "--vscode-mergeEditor-conflict-handledUnfocused-border", + "--vscode-mergeEditor-conflict-input1-background", + "--vscode-mergeEditor-conflict-input2-background", + "--vscode-mergeEditor-conflict-unhandled-minimapOverViewRuler", + "--vscode-mergeEditor-conflict-unhandledFocused-border", + "--vscode-mergeEditor-conflict-unhandledUnfocused-border", + "--vscode-mergeEditor-conflictingLines-background", + "--vscode-minimap-background", + "--vscode-minimap-errorHighlight", + "--vscode-minimap-findMatchHighlight", + "--vscode-minimap-foregroundOpacity", + "--vscode-minimap-selectionHighlight", + "--vscode-minimap-selectionOccurrenceHighlight", + "--vscode-minimap-warningHighlight", + "--vscode-minimapGutter-addedBackground", + "--vscode-minimapGutter-deletedBackground", + "--vscode-minimapGutter-modifiedBackground", + "--vscode-minimapSlider-activeBackground", + "--vscode-minimapSlider-background", + "--vscode-minimapSlider-hoverBackground", + "--vscode-notebook-cellBorderColor", + "--vscode-notebook-cellEditorBackground", + "--vscode-notebook-cellHoverBackground", + "--vscode-notebook-cellInsertionIndicator", + "--vscode-notebook-cellStatusBarItemHoverBackground", + "--vscode-notebook-cellToolbarSeparator", + "--vscode-notebook-editorBackground", + "--vscode-notebook-focusedCellBackground", + "--vscode-notebook-focusedCellBorder", + "--vscode-notebook-focusedEditorBorder", + "--vscode-notebook-inactiveFocusedCellBorder", + "--vscode-notebook-inactiveSelectedCellBorder", + "--vscode-notebook-outputContainerBackgroundColor", + "--vscode-notebook-outputContainerBorderColor", + "--vscode-notebook-selectedCellBackground", + "--vscode-notebook-selectedCellBorder", + "--vscode-notebook-symbolHighlightBackground", + "--vscode-notebookEditorOverviewRuler-runningCellForeground", + "--vscode-notebookScrollbarSlider-activeBackground", + "--vscode-notebookScrollbarSlider-background", + "--vscode-notebookScrollbarSlider-hoverBackground", + "--vscode-notebookStatusErrorIcon-foreground", + "--vscode-notebookStatusRunningIcon-foreground", + "--vscode-notebookStatusSuccessIcon-foreground", + "--vscode-notificationCenter-border", + "--vscode-notificationCenterHeader-background", + "--vscode-notificationCenterHeader-foreground", + "--vscode-notificationLink-foreground", + "--vscode-notificationToast-border", + "--vscode-notifications-background", + "--vscode-notifications-border", + "--vscode-notifications-foreground", + "--vscode-notificationsErrorIcon-foreground", + "--vscode-notificationsInfoIcon-foreground", + "--vscode-notificationsWarningIcon-foreground", + "--vscode-panel-background", + "--vscode-panel-border", + "--vscode-panel-dropBorder", + "--vscode-panelInput-border", + "--vscode-panelSection-border", + "--vscode-panelSection-dropBackground", + "--vscode-panelSectionHeader-background", + "--vscode-panelSectionHeader-border", + "--vscode-panelSectionHeader-foreground", + "--vscode-panelTitle-activeBorder", + "--vscode-panelTitle-activeForeground", + "--vscode-panelTitle-inactiveForeground", + "--vscode-peekView-border", + "--vscode-peekViewEditor-background", + "--vscode-peekViewEditor-matchHighlightBackground", + "--vscode-peekViewEditor-matchHighlightBorder", + "--vscode-peekViewEditorGutter-background", + "--vscode-peekViewEditorStickyScroll-background", + "--vscode-peekViewResult-background", + "--vscode-peekViewResult-fileForeground", + "--vscode-peekViewResult-lineForeground", + "--vscode-peekViewResult-matchHighlightBackground", + "--vscode-peekViewResult-selectionBackground", + "--vscode-peekViewResult-selectionForeground", + "--vscode-peekViewTitle-background", + "--vscode-peekViewTitleDescription-foreground", + "--vscode-peekViewTitleLabel-foreground", + "--vscode-pickerGroup-border", + "--vscode-pickerGroup-foreground", + "--vscode-ports-iconRunningProcessForeground", + "--vscode-problemsErrorIcon-foreground", + "--vscode-problemsInfoIcon-foreground", + "--vscode-problemsWarningIcon-foreground", + "--vscode-profileBadge-background", + "--vscode-profileBadge-foreground", + "--vscode-progressBar-background", + "--vscode-quickInput-background", + "--vscode-quickInput-foreground", + "--vscode-quickInput-list-focusBackground", + "--vscode-quickInputList-focusBackground", + "--vscode-quickInputList-focusForeground", + "--vscode-quickInputList-focusIconForeground", + "--vscode-quickInputTitle-background", + "--vscode-sash-hoverBorder", + "--vscode-scm-providerBorder", + "--vscode-scrollbar-shadow", + "--vscode-scrollbarSlider-activeBackground", + "--vscode-scrollbarSlider-background", + "--vscode-scrollbarSlider-hoverBackground", + "--vscode-search-resultsInfoForeground", + "--vscode-searchEditor-findMatchBackground", + "--vscode-searchEditor-findMatchBorder", + "--vscode-searchEditor-textInputBorder", + "--vscode-selection-background", + "--vscode-settings-checkboxBackground", + "--vscode-settings-checkboxBorder", + "--vscode-settings-checkboxForeground", + "--vscode-settings-dropdownBackground", + "--vscode-settings-dropdownBorder", + "--vscode-settings-dropdownForeground", + "--vscode-settings-dropdownListBorder", + "--vscode-settings-focusedRowBackground", + "--vscode-settings-focusedRowBorder", + "--vscode-settings-headerBorder", + "--vscode-settings-headerForeground", + "--vscode-settings-modifiedItemIndicator", + "--vscode-settings-numberInputBackground", + "--vscode-settings-numberInputBorder", + "--vscode-settings-numberInputForeground", + "--vscode-settings-rowHoverBackground", + "--vscode-settings-sashBorder", + "--vscode-settings-settingsHeaderHoverForeground", + "--vscode-settings-textInputBackground", + "--vscode-settings-textInputBorder", + "--vscode-settings-textInputForeground", + "--vscode-sideBar-background", + "--vscode-sideBar-border", + "--vscode-sideBar-dropBackground", + "--vscode-sideBar-foreground", + "--vscode-sideBarSectionHeader-background", + "--vscode-sideBarSectionHeader-border", + "--vscode-sideBarSectionHeader-foreground", + "--vscode-sideBarTitle-foreground", + "--vscode-sideBySideEditor-horizontalBorder", + "--vscode-sideBySideEditor-verticalBorder", + "--vscode-statusBar-background", + "--vscode-statusBar-border", + "--vscode-statusBar-debuggingBackground", + "--vscode-statusBar-debuggingBorder", + "--vscode-statusBar-debuggingForeground", + "--vscode-statusBar-focusBorder", + "--vscode-statusBar-foreground", + "--vscode-statusBar-noFolderBackground", + "--vscode-statusBar-noFolderBorder", + "--vscode-statusBar-noFolderForeground", + "--vscode-statusBar-offlineBackground", + "--vscode-statusBar-offlineForeground", + "--vscode-statusBarItem-activeBackground", + "--vscode-statusBarItem-compactHoverBackground", + "--vscode-statusBarItem-errorBackground", + "--vscode-statusBarItem-errorForeground", + "--vscode-statusBarItem-focusBorder", + "--vscode-statusBarItem-hoverBackground", + "--vscode-statusBarItem-prominentBackground", + "--vscode-statusBarItem-prominentForeground", + "--vscode-statusBarItem-prominentHoverBackground", + "--vscode-statusBarItem-remoteBackground", + "--vscode-statusBarItem-remoteForeground", + "--vscode-statusBarItem-warningBackground", + "--vscode-statusBarItem-warningForeground", + "--vscode-symbolIcon-arrayForeground", + "--vscode-symbolIcon-booleanForeground", + "--vscode-symbolIcon-classForeground", + "--vscode-symbolIcon-colorForeground", + "--vscode-symbolIcon-constantForeground", + "--vscode-symbolIcon-constructorForeground", + "--vscode-symbolIcon-enumeratorForeground", + "--vscode-symbolIcon-enumeratorMemberForeground", + "--vscode-symbolIcon-eventForeground", + "--vscode-symbolIcon-fieldForeground", + "--vscode-symbolIcon-fileForeground", + "--vscode-symbolIcon-folderForeground", + "--vscode-symbolIcon-functionForeground", + "--vscode-symbolIcon-interfaceForeground", + "--vscode-symbolIcon-keyForeground", + "--vscode-symbolIcon-keywordForeground", + "--vscode-symbolIcon-methodForeground", + "--vscode-symbolIcon-moduleForeground", + "--vscode-symbolIcon-namespaceForeground", + "--vscode-symbolIcon-nullForeground", + "--vscode-symbolIcon-numberForeground", + "--vscode-symbolIcon-objectForeground", + "--vscode-symbolIcon-operatorForeground", + "--vscode-symbolIcon-packageForeground", + "--vscode-symbolIcon-propertyForeground", + "--vscode-symbolIcon-referenceForeground", + "--vscode-symbolIcon-snippetForeground", + "--vscode-symbolIcon-stringForeground", + "--vscode-symbolIcon-structForeground", + "--vscode-symbolIcon-textForeground", + "--vscode-symbolIcon-typeParameterForeground", + "--vscode-symbolIcon-unitForeground", + "--vscode-symbolIcon-variableForeground", + "--vscode-tab-activeBackground", + "--vscode-tab-activeBorder", + "--vscode-tab-activeBorderTop", + "--vscode-tab-activeForeground", + "--vscode-tab-activeModifiedBorder", + "--vscode-tab-border", + "--vscode-tab-hoverBackground", + "--vscode-tab-hoverBorder", + "--vscode-tab-hoverForeground", + "--vscode-tab-inactiveBackground", + "--vscode-tab-inactiveForeground", + "--vscode-tab-inactiveModifiedBorder", + "--vscode-tab-lastPinnedBorder", + "--vscode-tab-unfocusedActiveBackground", + "--vscode-tab-unfocusedActiveBorder", + "--vscode-tab-unfocusedActiveBorderTop", + "--vscode-tab-unfocusedActiveForeground", + "--vscode-tab-unfocusedActiveModifiedBorder", + "--vscode-tab-unfocusedHoverBackground", + "--vscode-tab-unfocusedHoverBorder", + "--vscode-tab-unfocusedHoverForeground", + "--vscode-tab-unfocusedInactiveBackground", + "--vscode-tab-unfocusedInactiveForeground", + "--vscode-tab-unfocusedInactiveModifiedBorder", + "--vscode-terminal-ansiBlack", + "--vscode-terminal-ansiBlue", + "--vscode-terminal-ansiBrightBlack", + "--vscode-terminal-ansiBrightBlue", + "--vscode-terminal-ansiBrightCyan", + "--vscode-terminal-ansiBrightGreen", + "--vscode-terminal-ansiBrightMagenta", + "--vscode-terminal-ansiBrightRed", + "--vscode-terminal-ansiBrightWhite", + "--vscode-terminal-ansiBrightYellow", + "--vscode-terminal-ansiCyan", + "--vscode-terminal-ansiGreen", + "--vscode-terminal-ansiMagenta", + "--vscode-terminal-ansiRed", + "--vscode-terminal-ansiWhite", + "--vscode-terminal-ansiYellow", + "--vscode-terminal-background", + "--vscode-terminal-border", + "--vscode-terminal-dropBackground", + "--vscode-terminal-findMatchBackground", + "--vscode-terminal-findMatchBorder", + "--vscode-terminal-findMatchHighlightBackground", + "--vscode-terminal-findMatchHighlightBorder", + "--vscode-terminal-foreground", + "--vscode-terminal-hoverHighlightBackground", + "--vscode-terminal-inactiveSelectionBackground", + "--vscode-terminal-selectionBackground", + "--vscode-terminal-selectionForeground", + "--vscode-terminal-tab-activeBorder", + "--vscode-terminalCommandDecoration-defaultBackground", + "--vscode-terminalCommandDecoration-errorBackground", + "--vscode-terminalCommandDecoration-successBackground", + "--vscode-terminalCursor-background", + "--vscode-terminalCursor-foreground", + "--vscode-terminalOverviewRuler-cursorForeground", + "--vscode-terminalOverviewRuler-findMatchForeground", + "--vscode-testing-iconErrored", + "--vscode-testing-iconFailed", + "--vscode-testing-iconPassed", + "--vscode-testing-iconQueued", + "--vscode-testing-iconSkipped", + "--vscode-testing-iconUnset", + "--vscode-testing-message-error-decorationForeground", + "--vscode-testing-message-error-lineBackground", + "--vscode-testing-message-info-decorationForeground", + "--vscode-testing-message-info-lineBackground", + "--vscode-testing-peekBorder", + "--vscode-testing-peekHeaderBackground", + "--vscode-testing-runAction", + "--vscode-textBlockQuote-background", + "--vscode-textBlockQuote-border", + "--vscode-textCodeBlock-background", + "--vscode-textLink-activeForeground", + "--vscode-textLink-foreground", + "--vscode-textPreformat-foreground", + "--vscode-textSeparator-foreground", + "--vscode-titleBar-activeBackground", + "--vscode-titleBar-activeForeground", + "--vscode-titleBar-border", + "--vscode-titleBar-inactiveBackground", + "--vscode-titleBar-inactiveForeground", + "--vscode-toolbar-activeBackground", + "--vscode-toolbar-hoverBackground", + "--vscode-toolbar-hoverOutline", + "--vscode-tree-inactiveIndentGuidesStroke", + "--vscode-tree-indentGuidesStroke", + "--vscode-tree-tableColumnsBorder", + "--vscode-tree-tableOddRowsBackground", + "--vscode-walkThrough-embeddedEditorBackground", + "--vscode-walkthrough-stepTitle-foreground", + "--vscode-welcomePage-background", + "--vscode-welcomePage-progress-background", + "--vscode-welcomePage-progress-foreground", + "--vscode-welcomePage-tileBackground", + "--vscode-welcomePage-tileBorder", + "--vscode-welcomePage-tileHoverBackground", + "--vscode-widget-border", + "--vscode-widget-shadow", + "--vscode-window-activeBorder", + "--vscode-window-inactiveBorder" + ], + "others": [ + "--background-dark", + "--background-light", + "--dropdown-padding-bottom", + "--dropdown-padding-top", + "--insert-border-color", + "--last-tab-margin-right", + "--monaco-monospace-font", + "--monaco-monospace-font", + "--notebook-cell-input-preview-font-family", + "--notebook-cell-input-preview-font-size", + "--notebook-cell-output-font-size", + "--notebook-diff-view-viewport-slider", + "--notebook-find-horizontal-padding", + "--notebook-find-width", + "--outline-element-color", + "--separator-border", + "--status-border-top-color", + "--tab-border-bottom-color", + "--tab-border-top-color", + "--tab-dirty-border-top-color", + "--tabs-border-bottom-color", + "--tab-sizing-current-width", + "--tab-sizing-fixed-min-width", + "--tab-sizing-fixed-max-width", + "--testMessageDecorationFontFamily", + "--testMessageDecorationFontSize", + "--title-border-bottom-color", + "--vscode-editorCodeLens-fontFamily", + "--vscode-editorCodeLens-fontFamilyDefault", + "--vscode-editorCodeLens-fontFeatureSettings", + "--vscode-editorCodeLens-fontSize", + "--vscode-editorCodeLens-lineHeight", + "--vscode-explorer-align-offset-margin-left", + "--vscode-inline-chat-cropped", + "--vscode-inline-chat-expanded", + "--vscode-interactive-session-foreground", + "--vscode-interactive-result-editor-background-color", + "--vscode-repl-font-family", + "--vscode-repl-font-size-for-twistie", + "--vscode-repl-font-size", + "--vscode-repl-line-height", + "--vscode-sash-hover-size", + "--vscode-sash-size", + "--window-border-color", + "--workspace-trust-check-color", + "--workspace-trust-selected-color", + "--workspace-trust-unselected-color", + "--workspace-trust-x-color", + "--z-index-notebook-cell-bottom-toolbar-container", + "--z-index-notebook-cell-editor-outline", + "--z-index-notebook-cell-expand-part-button", + "--z-index-notebook-cell-output-toolbar", + "--z-index-notebook-cell-status", + "--z-index-notebook-cell-toolbar-dropdown-active", + "--z-index-notebook-cell-toolbar", + "--z-index-notebook-folding-indicator", + "--z-index-notebook-input-collapse-condicon", + "--z-index-notebook-list-insertion-indicator", + "--z-index-notebook-output", + "--z-index-notebook-progress-bar", + "--z-index-notebook-scrollbar", + "--z-index-run-button-container", + "--zoom-factor" + ] +} diff --git a/build/lib/treeshaking.js b/build/lib/treeshaking.js index 0b4cb2f6222..96e58dd23ac 100644 --- a/build/lib/treeshaking.js +++ b/build/lib/treeshaking.js @@ -13,7 +13,7 @@ var ShakeLevel; ShakeLevel[ShakeLevel["Files"] = 0] = "Files"; ShakeLevel[ShakeLevel["InnerFile"] = 1] = "InnerFile"; ShakeLevel[ShakeLevel["ClassMembers"] = 2] = "ClassMembers"; -})(ShakeLevel = exports.ShakeLevel || (exports.ShakeLevel = {})); +})(ShakeLevel || (exports.ShakeLevel = ShakeLevel = {})); function toStringShakeLevel(shakeLevel) { switch (shakeLevel) { case 0 /* ShakeLevel.Files */: @@ -901,4 +901,4 @@ function getTokenAtPosition(ts, sourceFile, position, allowPositionInLeadingTriv } } //#endregion -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXNoYWtpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0cmVlc2hha2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBRzdCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUV2RixJQUFrQixVQUlqQjtBQUpELFdBQWtCLFVBQVU7SUFDM0IsNkNBQVMsQ0FBQTtJQUNULHFEQUFhLENBQUE7SUFDYiwyREFBZ0IsQ0FBQTtBQUNqQixDQUFDLEVBSmlCLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBSTNCO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsVUFBc0I7SUFDeEQsUUFBUSxVQUFVLEVBQUU7UUFDbkI7WUFDQyxPQUFPLFdBQVcsQ0FBQztRQUNwQjtZQUNDLE9BQU8sZUFBZSxDQUFDO1FBQ3hCO1lBQ0MsT0FBTyxrQkFBa0IsQ0FBQztLQUMzQjtBQUNGLENBQUM7QUFURCxnREFTQztBQXdDRCxTQUFTLGdCQUFnQixDQUFDLE9BQTRCLEVBQUUsV0FBeUM7SUFDaEcsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLEVBQUU7UUFDL0IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNkLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7U0FDbEU7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNy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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXNoYWtpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0cmVlc2hha2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBRzdCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUV2RixJQUFrQixVQUlqQjtBQUpELFdBQWtCLFVBQVU7SUFDM0IsNkNBQVMsQ0FBQTtJQUNULHFEQUFhLENBQUE7SUFDYiwyREFBZ0IsQ0FBQTtBQUNqQixDQUFDLEVBSmlCLFVBQVUsMEJBQVYsVUFBVSxRQUkzQjtBQUVELFNBQWdCLGtCQUFrQixDQUFDLFVBQXNCO0lBQ3hELFFBQVEsVUFBVSxFQUFFO1FBQ25CO1lBQ0MsT0FBTyxXQUFXLENBQUM7UUFDcEI7WUFDQyxPQUFPLGVBQWUsQ0FBQztRQUN4QjtZQUNDLE9BQU8sa0JBQWtCLENBQUM7S0FDM0I7QUFDRixDQUFDO0FBVEQsZ0RBU0M7QUF3Q0QsU0FBUyxnQkFBZ0IsQ0FBQyxPQUE0QixFQUFFLFdBQXlDO0lBQ2hHLEtBQUssTUFBTSxJQUFJLElBQUksV0FBVyxFQUFFO1FBQy9CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckUsTUFBTSxJQUFJ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 \ No newline at end of file diff --git a/build/lib/tsb/builder.js b/build/lib/tsb/builder.js index e785ed24ec9..31267d21fd0 100644 --- a/build/lib/tsb/builder.js +++ b/build/lib/tsb/builder.js @@ -18,7 +18,7 @@ var CancellationToken; CancellationToken.None = { isCancellationRequested() { return false; } }; -})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {})); +})(CancellationToken || (exports.CancellationToken = CancellationToken = {})); function normalize(path) { return path.replace(/\\/g, '/'); } @@ -571,4 +571,4 @@ class LanguageServiceHost { }); } } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBaUM7QUFDakMsaUNBQWlDO0FBQ2pDLHNDQUFzQztBQUN0QyxpQ0FBaUM7QUFDakMsK0JBQStCO0FBQy9CLDJDQUFpRjtBQVdqRixJQUFpQixpQkFBaUIsQ0FJakM7QUFKRCxXQUFpQixpQkFBaUI7SUFDcEIsc0JBQUksR0FBc0I7UUFDdEMsdUJBQXVCLEtBQUssT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzNDLENBQUM7QUFDSCxDQUFDLEVBSmdCLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBSWpDO0FBUUQsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM5QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxNQUFzQixFQUFFLFdBQW1CLEVBQUUsR0FBeUI7SUFFN0csTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUUxQixNQUFNLElBQUksR0FBRyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQStCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsTUFBTSxXQUFXLEdBQStCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJ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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBaUM7QUFDakMsaUNBQWlDO0FBQ2pDLHNDQUFzQztBQUN0QyxpQ0FBaUM7QUFDakMsK0JBQStCO0FBQy9CLDJDQUFpRjtBQVdqRixJQUFpQixpQkFBaUIsQ0FJakM7QUFKRCxXQUFpQixpQkFBaUI7SUFDcEIsc0JBQUksR0FBc0I7UUFDdEMsdUJBQXVCLEtBQUssT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzNDLENBQUM7QUFDSCxDQUFDLEVBSmdCLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSWpDO0FBUUQsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM5QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxNQUFzQixFQUFFLFdBQW1CLEVBQUUsR0FBeUI7SUFFN0csTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUUxQixNQUFNLElBQUksR0FBRyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQStCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsTUFBTSxXQUFXLEdBQStCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUN0RCxJQUFJLFNB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 \ No newline at end of file diff --git a/build/lib/tsb/transpiler.js b/build/lib/tsb/transpiler.js index 71fb5e18a02..0c704b66341 100644 --- a/build/lib/tsb/transpiler.js +++ b/build/lib/tsb/transpiler.js @@ -293,12 +293,15 @@ class SwcTranspiler { tsx: false, decorators: true }, - target: 'es2020', + target: 'es2022', loose: false, minify: { compress: false, mangle: false - } + }, + transform: { + useDefineForClassFields: false, + }, }, module: { type: 'amd', @@ -321,4 +324,4 @@ class SwcTranspiler { }; } exports.SwcTranspiler = SwcTranspiler; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwaWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRyYW5zcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQywrQ0FBK0M7QUFDL0MsK0JBQStCO0FBQy9CLHFDQUErQjtBQVkvQixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsT0FBNEI7SUFFN0QsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDcEUsK0NBQStDO1FBQy9DLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0tBQzdHO0lBQ0QsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsT0FBTztRQUNOLEtBQUssRUFBRSxHQUFHLENBQUMsVUFBVTtRQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFO0tBQzNCLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7SUFDMUIsU0FBUztJQUNULE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtRQUNoRSxNQUFNLEdBQUcsR0FBaUI7WUFDekIsTUFBTSxFQUFFLEVBQUU7WUFDVixXQUFXLEVBQUUsRUFBRTtTQUNmLENBQUM7UUFDRixLQUFLLE1BQU0sS0FBSyxJ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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwaWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRyYW5zcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQywrQ0FBK0M7QUFDL0MsK0JBQStCO0FBQy9CLHFDQUErQjtBQVkvQixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsT0FBNEI7SUFFN0QsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDcEUsK0NBQStDO1FBQy9DLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0tBQzdHO0lBQ0QsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsT0FBTztRQUNOLEtBQUssRUFBRSxHQUFHLENBQUMsVUFBVTtRQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFO0tBQzNCLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7SUFDMUIsU0FBUztJQUNULE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtRQUNoRSxNQUFNLEdBQUcsR0FBaUI7WUFDekIsTUFBTSxFQUFFLEVBQUU7WUFDVixXQUFXLEVBQUUsRUFBRTtTQUNmLENBQUM7UUFDRixLQUFLLE1BQU0sS0FBSyxJ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 \ No newline at end of file diff --git a/build/lib/tsb/transpiler.ts b/build/lib/tsb/transpiler.ts index a82cbaef890..a546ea63316 100644 --- a/build/lib/tsb/transpiler.ts +++ b/build/lib/tsb/transpiler.ts @@ -376,12 +376,15 @@ export class SwcTranspiler implements ITranspiler { tsx: false, decorators: true }, - target: 'es2020', + target: 'es2022', loose: false, minify: { compress: false, mangle: false - } + }, + transform: { + useDefineForClassFields: false, + }, }, module: { type: 'amd', diff --git a/build/lib/tsb/utils.js b/build/lib/tsb/utils.js index 040104ea550..fe4b3dd260b 100644 --- a/build/lib/tsb/utils.js +++ b/build/lib/tsb/utils.js @@ -44,7 +44,7 @@ var collections; return hasOwnProperty.call(collection, key); } collections.contains = contains; -})(collections = exports.collections || (exports.collections = {})); +})(collections || (exports.collections = collections = {})); var strings; (function (strings) { /** @@ -59,7 +59,7 @@ var strings; }); } strings.format = format; -})(strings = exports.strings || (exports.strings = {})); +})(strings || (exports.strings = strings = {})); var graph; (function (graph) { function newNode(data) { @@ -122,5 +122,5 @@ var graph; } } graph.Graph = Graph; -})(graph = exports.graph || (exports.graph = {})); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxJQUFjLFdBQVcsQ0FzQ3hCO0FBdENELFdBQWMsV0FBVztJQUVyQixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztJQUV2RCxTQUFnQixNQUFNLENBQUksVUFBaUMsRUFBRSxHQUFXO1FBQ3BFLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBTGUsa0JBQU0sU0FLckIsQ0FBQTtJQUVELFNBQWdCLE1BQU0sQ0FBSSxVQUFpQyxFQUFFLEdBQVcsRUFBRSxLQUFRO1FBQzlFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUZlLGtCQUFNLFNBRXJCLENBQUE7SUFFRCxTQUFnQixjQUFjLENBQUksVUFBaUMsRUFBRSxHQUFXLEVBQUUsS0FBUTtRQUN0RixJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO2FBQU07WUFDSCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQVBlLDBCQUFjLGlCQU83QixDQUFBO0lBRUQsU0FBZ0IsT0FBTyxDQUFJLFVBQWlDLEVBQUUsUUFBb0Q7UUFDOUcsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7WUFDMUIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDdEMsUUFB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 \ No newline at end of file +})(graph || (exports.graph = graph = {})); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxJQUFjLFdBQVcsQ0FzQ3hCO0FBdENELFdBQWMsV0FBVztJQUVyQixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztJQUV2RCxTQUFnQixNQUFNLENBQUksVUFBaUMsRUFBRSxHQUFXO1FBQ3BFLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBTGUsa0JBQU0sU0FLckIsQ0FBQTtJQUVELFNBQWdCLE1BQU0sQ0FBSSxVQUFpQyxFQUFFLEdBQVcsRUFBRSxLQUFRO1FBQzlFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUZlLGtCQUFNLFNBRXJCLENBQUE7SUFFRCxTQUFnQixjQUFjLENBQUksVUFBaUMsRUFBRSxHQUFXLEVBQUUsS0FBUTtRQUN0RixJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO2FBQU07WUFDSCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQVBlLDBCQUFjLGlCQU83QixDQUFBO0lBRUQsU0FBZ0IsT0FBTyxDQUFJLFVBQWlDLEVBQUUsUUFBb0Q7UUFDOUcsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7WUFDMUIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDdEMsUUFBUSxDQUFDO29CQUNMLEdBQUcsRUFBRSxHQUFHO29CQUNSLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDO2lCQUN6QixDQUFDLENBQUM7YUFDTjtTQUNKO0lBQ0wsQ0FBQztJQVRlLG1CQUFPLFVBU3RCLENBQUE7SUFFRCxTQUFnQixRQUFRLENBQUMsVUFBbUMsRUFBRSxHQUFXO1FBQ3JFLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUZlLG9CQUFRLFdBRXZCLENBQUE7QUFDTCxDQUFDLEVBdENhLFdBQVcsMkJBQVgsV0FBVyxRQXNDeEI7QUFFRCxJQUFjLE9BQU8sQ0FlcEI7QUFmRCxXQUFjLE9BQU87SUFFakI7O09BRUc7SUFDVSxhQUFLLEdBQUcsRUFBRSxDQUFDO0lBRVgsZUFBTyxHQUFHLE1BQU0sQ0FBQztJQUU5QixTQUFnQixNQUFNLENBQUMsS0FBYSxFQUFFLEdBQUcsSUFBVztRQUNoRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSztZQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFMZSxjQUFNLFNBS3JCLENBQUE7QUFDTCxDQUFDLEVBZmEsT0FBTyx1QkFBUCxPQUFPLFFBZXBCO0FBRUQsSUFBYyxLQUFLLENBNkVsQjtBQTdFRCxXQUFjLEtBQUs7SUFRZixTQUFnQixPQUFPLENBQUksSUFBTztRQUM5QixPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsRUFBRTtZQUNaLFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQztJQUNOLENBQUM7SUFOZSxhQUFPLFVBTXRCLENBQUE7SUFFRCxNQUFhLEtBQUs7UUFJTTtRQUZaLE1BQU0sR0FBK0IsRUFBRSxDQUFDO1FBRWhELFlBQW9CLE9BQStCO1lBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1lBQy9DLFFBQVE7UUFDWixDQUFDO1FBRUQsUUFBUSxDQUFDLEtBQVEsRUFBRSxPQUFnQixFQUFFLFFBQTJCO1lBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDWixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFTyxTQUFTLENBQUMsSUFBYSxFQUFFLE9BQWdCLEVBQUUsSUFBZ0MsRUFBRSxRQUEyQjtZQUM1RyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3RELFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFFRCxTQUFTLENBQUMsSUFBTyxFQUFFLEVBQUs7WUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUzQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDN0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ25ELENBQUM7UUFFRCxVQUFVLENBQUMsSUFBTztZQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN2QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELGtCQUFrQixDQUFDLElBQU87WUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFaEQsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDUCxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUMzQjtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBTztZQUNWLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0tBQ0o7SUEzRFksV0FBSyxRQTJEakIsQ0FBQTtBQUVMLENBQUMsRUE3RWEsS0FBSyxxQkFBTCxLQUFLLFFBNkVsQiJ9 \ No newline at end of file diff --git a/build/lib/typings/gulp-buffer.d.ts b/build/lib/typings/gulp-buffer.d.ts new file mode 100644 index 00000000000..cc4afcfd9a2 --- /dev/null +++ b/build/lib/typings/gulp-buffer.d.ts @@ -0,0 +1,12 @@ + +declare module "gulp-buffer" { + function f(): NodeJS.ReadWriteStream; + + /** + * This is required as per: + * https://github.com/microsoft/TypeScript/issues/5073 + */ + namespace f {} + + export = f; +} diff --git a/build/lib/typings/gulp-remote-src.d.ts b/build/lib/typings/gulp-remote-src.d.ts deleted file mode 100644 index ff9026b79bb..00000000000 --- a/build/lib/typings/gulp-remote-src.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module 'gulp-remote-retry-src' { - - import stream = require("stream"); - - function remote(url: string, options: remote.IOptions): stream.Stream; - - module remote { - export interface IRequestOptions { - body?: any; - json?: boolean; - method?: string; - headers?: any; - } - - export interface IOptions { - base?: string; - buffer?: boolean; - requestOptions?: IRequestOptions; - } - } - - export = remote; -} diff --git a/build/lib/util.js b/build/lib/util.js index dd1ef2685d6..b06cd43dc29 100644 --- a/build/lib/util.js +++ b/build/lib/util.js @@ -55,7 +55,7 @@ function incremental(streamProvider, initial, supportsCancellation) { return es.duplex(input, output); } exports.incremental = incremental; -function debounce(task) { +function debounce(task, duration = 500) { const input = es.through(); const output = es.through(); let state = 'idle'; @@ -72,7 +72,7 @@ function debounce(task) { .pipe(output); }; run(); - const eventuallyRun = _debounce(() => run(), 500); + const eventuallyRun = _debounce(() => run(), duration); input.on('data', () => { if (state === 'idle') { eventuallyRun(); @@ -168,7 +168,7 @@ function loadSourcemaps() { version: '3', names: [], mappings: '', - sources: [f.relative], + sources: [f.relative.replace(/\\/g, '/')], sourcesContent: [contents] }; cb(undefined, f); @@ -314,14 +314,20 @@ function streamToPromise(stream) { exports.streamToPromise = streamToPromise; function getElectronVersion() { const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); - const target = /^target "(.*)"$/m.exec(yarnrc)[1]; - return target; + const electronVersion = /^target "(.*)"$/m.exec(yarnrc)[1]; + const msBuildId = /^ms_build_id "(.*)"$/m.exec(yarnrc)[1]; + return { electronVersion, msBuildId }; } exports.getElectronVersion = getElectronVersion; function acquireWebNodePaths() { const root = path.join(__dirname, '..', '..'); const webPackageJSON = path.join(root, '/remote/web', 'package.json'); const webPackages = JSON.parse(fs.readFileSync(webPackageJSON, 'utf8')).dependencies; + const distroWebPackageJson = path.join(root, '.build/distro/npm/remote/web/package.json'); + if (fs.existsSync(distroWebPackageJson)) { + const distroWebPackages = JSON.parse(fs.readFileSync(distroWebPackageJson, 'utf8')).dependencies; + Object.assign(webPackages, distroWebPackages); + } const nodePaths = {}; for (const key of Object.keys(webPackages)) { const packageJSON = path.join(root, 'node_modules', key, 'package.json'); @@ -369,7 +375,7 @@ function createExternalLoaderConfig(webEndpoint, commit, quality) { webEndpoint = webEndpoint + `/${quality}/${commit}`; const nodePaths = acquireWebNodePaths(); Object.keys(nodePaths).map(function (key, _) { - nodePaths[key] = `${webEndpoint}/node_modules/${key}/${nodePaths[key]}`; + nodePaths[key] = `../node_modules/${key}/${nodePaths[key]}`; }); const externalLoaderConfig = { baseUrl: `${webEndpoint}/out`, @@ -400,4 +406,4 @@ function buildWebNodePaths(outDir) { return result; } exports.buildWebNodePaths = buildWebNodePaths; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsbUNBQW1DO0FBQ25DLHNDQUF1QztBQUN2Qyx1Q0FBdUM7QUFDdkMsc0NBQXNDO0FBQ3RDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsa0NBQWtDO0FBQ2xDLG1DQUFtQztBQUduQyw2QkFBb0M7QUFDcEMsZ0RBQWdEO0FBRWhELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBTW5ELE1BQU0sbUJBQW1CLEdBQXVCLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFNekYsU0FBZ0IsV0FBVyxDQUFDLGNBQStCLEVBQUUsT0FBK0IsRUFBRSxvQkFBOEI7SUFDM0gsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDbkIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQyxNQUFNLEtBQUssR0FBbUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBRXBKLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBNkIsRUFBRSxhQUFzQixFQUFFLEVBQUU7UUFDckUsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUVsQixNQUFNLE1BQU0sR0FBRyxDQUFDLG9CQUFvQixDQUFDLENB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsbUNBQW1DO0FBQ25DLHNDQUF1QztBQUN2Qyx1Q0FBdUM7QUFDdkMsc0NBQXNDO0FBQ3RDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsa0NBQWtDO0FBQ2xDLG1DQUFtQztBQUduQyw2QkFBb0M7QUFDcEMsZ0RBQWdEO0FBRWhELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBTW5ELE1BQU0sbUJBQW1CLEdBQXVCLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFNekYsU0FBZ0IsV0FBVyxDQUFDLGNBQStCLEVBQUUsT0FBK0IsRUFBRSxvQkFBOEI7SUFDM0gsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDbkIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQyxNQUFNLEtBQUssR0FBbUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBRXBKLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBNkIsRUFBRSxhQUFzQixFQUFFLEVBQUU7UUFDckUsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUVsQixNQUFNLE1BQU0sR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRXRILEtBQUs7YUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNoQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ2YsYUFBYSxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7YUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRUYsSUFBSSxPQUFPLEVBQUU7UUFDWixHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3BCO0lBRUQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTztTQUNQO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVSLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1lBQ3JCLGFBQWEsRUFBRSxDQUFDO1NBQ2hCO0lBQ0YsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUEvQ0Qsa0NBK0NDO0FBRUQsU0FBZ0IsUUFBUSxDQUFDLElBQWtDLEVBQUUsUUFBUSxHQUFHLEdBQUc7SUFDMUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7SUFFbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLEtBQUssR0FBRyxTQUFTLENBQUM7UUFFbEIsSUFBSSxFQUFFO2FBQ0osSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNoQyxNQUFNLGNBQWMsR0FBRyxLQUFLLEtBQUssT0FBTyxDQUFDO1lBQ3pDLEtBQUssR0FBRyxNQUFNLENBQUM7WUFFZixJQUFJLGNBQWMsRUFBRTtnQkFDbkIsYUFBYSxFQUFFLENBQUM7YUFDaEI7UUFDRixDQUFDLENBQUMsQ0FBQzthQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQixDQUFDLENBQUM7SUFFRixHQUFHLEVBQUUsQ0FBQztJQUVOLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV2RCxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDckIsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1lBQ3JCLGFBQWEsRUFBRSxDQUFDO1NBQ2hCO2FBQU07WUFDTixLQUFLLEdBQUcsT0FBTyxDQUFDO1NBQ2hCO0lBQ0YsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFqQ0QsNEJBaUNDO0FBRUQsU0FBZ0IsNEJBQTRCO0lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNwQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNwQjtJQUVELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBdUIsQ0FBQyxDQUFDLEVBQUU7UUFDM0MsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDekQsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFaRCxvRUFZQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLE9BQTJCO0lBQzNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQXVCLENBQUMsQ0FBQyxFQUFFO1FBQ25ELElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ1osQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBUyxDQUFDO1NBQzlDO1FBQ0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNqQyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNiLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFFRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUs7U0FDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDWixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXZCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQXJCRCw0Q0FxQkM7QUFFRCxTQUFnQixTQUFTLENBQUMsUUFBZ0I7SUFDekMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRWpELElBQUksS0FBSyxFQUFFO1FBQ1YsUUFBUSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RDtJQUVELE9BQU8sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFSRCw4QkFRQztBQUVELFNBQWdCLGVBQWU7SUFDOUIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFtQyxDQUFDLENBQUMsRUFBRTtRQUN2RCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxDQUFDO1NBQ1Q7SUFDRixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFORCwwQ0FNQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFFBQWdCO0lBQ2hELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztTQUM3QyxLQUFLLENBQUMsUUFBUSxDQUFDO1NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUUzQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEcsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFeEcsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUM3QixDQUFDO0lBRUYsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBaEJELDRDQWdCQztBQU1ELFNBQWdCLGNBQWM7SUFDN0IsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNCLE1BQU0sTUFBTSxHQUFHLEtBQUs7U0FDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQTJDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBNkIsRUFBRTtRQUMzRixJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU7WUFDaEIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQixPQUFPO1NBQ1A7UUFFRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNoQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE9BQU87U0FDUDtRQUVELE1BQU0sUUFBUSxHQUFZLENBQUMsQ0FBQyxRQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXZELE1BQU0sR0FBRyxHQUFHLCtCQUErQixDQUFDO1FBQzVDLElBQUksU0FBUyxHQUEyQixJQUFJLENBQUM7UUFDN0MsSUFBSSxLQUFLLEdBQTJCLElBQUksQ0FBQztRQUV6QyxPQUFPLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDbEI7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2YsQ0FBQyxDQUFDLFNBQVMsR0FBRztnQkFDYixPQUFPLEVBQUUsR0FBRztnQkFDWixLQUFLLEVBQUUsRUFBRTtnQkFDVCxRQUFRLEVBQUUsRUFBRTtnQkFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUMxQixDQUFDO1lBRUYsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQixPQUFPO1NBQ1A7UUFFRCxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4RixFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3BGLElBQUksR0FBRyxFQUFFO2dCQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQUU7WUFFNUIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBakRELHdDQWlEQztBQUVELFNBQWdCLHFCQUFxQjtJQUNwQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFM0IsTUFBTSxNQUFNLEdBQUcsS0FBSztTQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBdUIsQ0FBQyxDQUFDLEVBQUU7UUFDMUMsTUFBTSxRQUFRLEdBQVksQ0FBQyxDQUFDLFFBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0YsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBWEQsc0RBV0M7QUFFRCw4R0FBOEc7QUFDOUcsU0FBZ0IsR0FBRyxDQUFDLElBQTJDLEVBQUUsTUFBOEIsRUFBRSxVQUFrQyxFQUFFLENBQUMsT0FBTyxFQUFFO0lBQzlJLElBQUksT0FBTyxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQzlCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztLQUMvQjtJQUVELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQU5ELGtCQU1DO0FBRUQsNEZBQTRGO0FBQzVGLFNBQWdCLHNCQUFzQjtJQUNyQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFM0IsTUFBTSxNQUFNLEdBQUcsS0FBSztTQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBdUIsQ0FBQyxDQUFDLEVBQUU7UUFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsWUFBWSxNQUFNLENBQUMsRUFBRTtZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQztTQUMxRDtRQUVELENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBQSxtQkFBYSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQWRELHdEQWNDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsb0JBQTRCO0lBQ25FLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUUzQixNQUFNLE1BQU0sR0FBRyxLQUFLO1NBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUF1QixDQUFDLENBQUMsRUFBRTtRQUMxQyxNQUFNLFFBQVEsR0FBWSxDQUFDLENBQUMsUUFBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLEdBQUcsR0FBRyx3QkFBd0Isb0JBQW9CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzlHLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEYsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBWkQsMERBWUM7QUFFRCxTQUFnQixNQUFNLENBQUMsR0FBVztJQUNqQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFFaEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDVCxPQUFPLENBQUMsRUFBRSxDQUFDO2lCQUNYO2dCQUVELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFO29CQUM5QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDckM7Z0JBRUQsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLEtBQUssRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsUUFBUSxHQUFHLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQzlELE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQXZCRCx3QkF1QkM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxPQUFlLEVBQUUsT0FBZSxFQUFFLE1BQWdCO0lBQ3BFLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakUsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUU7UUFDNUIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDOUU7YUFBTTtZQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDeEM7S0FDRDtBQUNGLENBQUM7QUFFRCxTQUFnQixPQUFPLENBQUMsT0FBZTtJQUN0QyxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0IsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBSkQsMEJBSUM7QUFFRCxTQUFnQixTQUFTLENBQUMsT0FBZTtJQUN4QyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsT0FBTztLQUNQO0lBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqQyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFORCw4QkFNQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxLQUFhO0lBQ25DLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekQsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBTEQsd0JBS0M7QUFNRCxTQUFnQixNQUFNLENBQUMsRUFBMEI7SUFDaEQsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1FBQzFELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEI7YUFBTTtZQUNOLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO0lBQ0YsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFYRCx3QkFXQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLFVBQWtCO0lBQ3ZELE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLEdBQUcsVUFBVSxDQUFDLENBQUM7S0FDM0U7SUFFRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQVJELHNEQVFDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLE1BQThCO0lBQzdELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUxELDBDQUtDO0FBRUQsU0FBZ0Isa0JBQWtCO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ3ZDLENBQUM7QUFMRCxnREFLQztBQUVELFNBQWdCLG1CQUFtQjtJQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFFckYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO0lBQzFGLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2pHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7S0FDOUM7SUFFRCxNQUFNLFNBQVMsR0FBOEIsRUFBRSxDQUFDO0lBQ2hELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRSx1REFBdUQ7UUFDdkQsSUFBSSxVQUFVLEdBQVcsT0FBTyxXQUFXLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUUxRyxxR0FBcUc7UUFDckcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNoQiwrR0FBK0c7WUFDL0csSUFBSSxHQUFHLEtBQUssV0FBVyxFQUFFO2dCQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxDQUFDO2FBQ3RFO1lBRUQsVUFBVSxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUM7U0FDbEM7UUFFRCxpRUFBaUU7UUFDakUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hDLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO2FBQU0sSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTlELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZFLFVBQVUsR0FBRyxhQUFhLENBQUM7YUFDM0I7U0FDRDtRQUVELFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7S0FDNUI7SUFFRCwwRUFBMEU7SUFDMUUsb0RBQW9EO0lBQ3BELG9FQUFvRTtJQUNwRSxpRkFBaUY7SUFDakYsU0FBUyxDQUFDLDRCQUE0QixDQUFDLEdBQUcscUNBQXFDLENBQUM7SUFDaEYsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLEdBQUcsMkNBQTJDLENBQUM7SUFDaEcsU0FBUyxDQUFDLHdDQUF3QyxDQUFDLEdBQUcsNENBQTRDLENBQUM7SUFDbkcsT0FBTyxTQUFTLENBQUM7QUFDbEIsQ0FBQztBQXZERCxrREF1REM7QUFRRCxTQUFnQiwwQkFBMEIsQ0FBQyxXQUFvQixFQUFFLE1BQWUsRUFBRSxPQUFnQjtJQUNqRyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ3hDLE9BQU8sU0FBUyxDQUFDO0tBQ2pCO0lBQ0QsV0FBVyxHQUFHLFdBQVcsR0FBRyxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUNwRCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDMUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQixHQUF3QjtRQUNqRCxPQUFPLEVBQUUsR0FBRyxXQUFXLE1BQU07UUFDN0IsV0FBVyxFQUFFLElBQUk7UUFDakIsS0FBSyxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUNGLE9BQU8sb0JBQW9CLENBQUM7QUFDN0IsQ0FBQztBQWZELGdFQWVDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsTUFBYztJQUMvQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUN4Qyx3Q0FBd0M7UUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEQsTUFBTSw4QkFBOEIsR0FBRzs7Ozs7cUVBSzRCLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsR0FBRyw4QkFBOEIsNEJBQTRCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hILEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEYsT0FBTyxFQUFFLENBQUM7SUFDWCxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLENBQUM7SUFDekMsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBbkJELDhDQW1CQyJ9 \ No newline at end of file diff --git a/build/lib/util.ts b/build/lib/util.ts index bdc2ce388de..6648ce42364 100644 --- a/build/lib/util.ts +++ b/build/lib/util.ts @@ -77,7 +77,7 @@ export function incremental(streamProvider: IStreamProvider, initial: NodeJS.Rea return es.duplex(input, output); } -export function debounce(task: () => NodeJS.ReadWriteStream): NodeJS.ReadWriteStream { +export function debounce(task: () => NodeJS.ReadWriteStream, duration = 500): NodeJS.ReadWriteStream { const input = es.through(); const output = es.through(); let state = 'idle'; @@ -99,7 +99,7 @@ export function debounce(task: () => NodeJS.ReadWriteStream): NodeJS.ReadWriteSt run(); - const eventuallyRun = _debounce(() => run(), 500); + const eventuallyRun = _debounce(() => run(), duration); input.on('data', () => { if (state === 'idle') { @@ -219,7 +219,7 @@ export function loadSourcemaps(): NodeJS.ReadWriteStream { version: '3', names: [], mappings: '', - sources: [f.relative], + sources: [f.relative.replace(/\\/g, '/')], sourcesContent: [contents] }; @@ -384,16 +384,24 @@ export function streamToPromise(stream: NodeJS.ReadWriteStream): Promise { }); } -export function getElectronVersion(): string { +export function getElectronVersion(): Record { const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); - const target = /^target "(.*)"$/m.exec(yarnrc)![1]; - return target; + const electronVersion = /^target "(.*)"$/m.exec(yarnrc)![1]; + const msBuildId = /^ms_build_id "(.*)"$/m.exec(yarnrc)![1]; + return { electronVersion, msBuildId }; } export function acquireWebNodePaths() { const root = path.join(__dirname, '..', '..'); const webPackageJSON = path.join(root, '/remote/web', 'package.json'); const webPackages = JSON.parse(fs.readFileSync(webPackageJSON, 'utf8')).dependencies; + + const distroWebPackageJson = path.join(root, '.build/distro/npm/remote/web/package.json'); + if (fs.existsSync(distroWebPackageJson)) { + const distroWebPackages = JSON.parse(fs.readFileSync(distroWebPackageJson, 'utf8')).dependencies; + Object.assign(webPackages, distroWebPackages); + } + const nodePaths: { [key: string]: string } = {}; for (const key of Object.keys(webPackages)) { const packageJSON = path.join(root, 'node_modules', key, 'package.json'); @@ -440,16 +448,22 @@ export function acquireWebNodePaths() { return nodePaths; } -export function createExternalLoaderConfig(webEndpoint?: string, commit?: string, quality?: string) { +export interface IExternalLoaderInfo { + baseUrl: string; + paths: { [moduleId: string]: string }; + [key: string]: any; +} + +export function createExternalLoaderConfig(webEndpoint?: string, commit?: string, quality?: string): IExternalLoaderInfo | undefined { if (!webEndpoint || !commit || !quality) { return undefined; } webEndpoint = webEndpoint + `/${quality}/${commit}`; const nodePaths = acquireWebNodePaths(); Object.keys(nodePaths).map(function (key, _) { - nodePaths[key] = `${webEndpoint}/node_modules/${key}/${nodePaths[key]}`; + nodePaths[key] = `../node_modules/${key}/${nodePaths[key]}`; }); - const externalLoaderConfig = { + const externalLoaderConfig: IExternalLoaderInfo = { baseUrl: `${webEndpoint}/out`, recordStats: true, paths: nodePaths diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js index 27167bfa151..2444e401703 100644 --- a/build/linux/debian/dep-lists.js +++ b/build/linux/debian/dep-lists.js @@ -23,20 +23,19 @@ exports.recommendedDeps = [ exports.referenceGeneratedDepsByArch = { 'amd64': [ 'ca-certificates', - 'libasound2 (>= 1.0.16)', + 'libasound2 (>= 1.0.17)', 'libatk-bridge2.0-0 (>= 2.5.3)', 'libatk1.0-0 (>= 2.2.0)', 'libatspi2.0-0 (>= 2.9.90)', 'libc6 (>= 2.14)', - 'libc6 (>= 2.15)', 'libc6 (>= 2.17)', 'libc6 (>= 2.2.5)', 'libcairo2 (>= 1.6.0)', 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', 'libdbus-1-3 (>= 1.5.12)', - 'libdrm2 (>= 2.4.38)', + 'libdrm2 (>= 2.4.60)', 'libexpat1 (>= 2.0.1)', - 'libgbm1 (>= 8.1~0)', + 'libgbm1 (>= 17.1.0~rc2)', 'libglib2.0-0 (>= 2.16.0)', 'libglib2.0-0 (>= 2.39.4)', 'libgtk-3-0 (>= 3.9.10)', @@ -60,21 +59,22 @@ exports.referenceGeneratedDepsByArch = { ], 'armhf': [ 'ca-certificates', - 'libasound2 (>= 1.0.16)', + 'libasound2 (>= 1.0.17)', 'libatk-bridge2.0-0 (>= 2.5.3)', 'libatk1.0-0 (>= 2.2.0)', 'libatspi2.0-0 (>= 2.9.90)', 'libc6 (>= 2.15)', 'libc6 (>= 2.17)', 'libc6 (>= 2.4)', + 'libc6 (>= 2.8)', 'libc6 (>= 2.9)', 'libcairo2 (>= 1.6.0)', 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', 'libdbus-1-3 (>= 1.5.12)', - 'libdrm2 (>= 2.4.38)', + 'libdrm2 (>= 2.4.60)', 'libexpat1 (>= 2.0.1)', - 'libgbm1 (>= 8.1~0)', - 'libglib2.0-0 (>= 2.16.0)', + 'libgbm1 (>= 17.1.0~rc2)', + 'libglib2.0-0 (>= 2.12.0)', 'libglib2.0-0 (>= 2.39.4)', 'libgtk-3-0 (>= 3.9.10)', 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', @@ -83,7 +83,7 @@ exports.referenceGeneratedDepsByArch = { 'libnss3 (>= 3.26)', 'libpango-1.0-0 (>= 1.14.0)', 'libsecret-1-0 (>= 0.18)', - 'libstdc++6 (>= 4.1.1)', + 'libstdc++6 (>= 5)', 'libstdc++6 (>= 5.2)', 'libstdc++6 (>= 6)', 'libx11-6', @@ -100,7 +100,7 @@ exports.referenceGeneratedDepsByArch = { ], 'arm64': [ 'ca-certificates', - 'libasound2 (>= 1.0.16)', + 'libasound2 (>= 1.0.17)', 'libatk-bridge2.0-0 (>= 2.5.3)', 'libatk1.0-0 (>= 2.2.0)', 'libatspi2.0-0 (>= 2.9.90)', @@ -108,13 +108,10 @@ exports.referenceGeneratedDepsByArch = { 'libcairo2 (>= 1.6.0)', 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', 'libdbus-1-3 (>= 1.0.2)', - 'libdrm2 (>= 2.4.38)', + 'libdrm2 (>= 2.4.60)', 'libexpat1 (>= 2.0.1)', - 'libgbm1 (>= 8.1~0)', - 'libgcc1 (>= 1:3.0)', - 'libgcc1 (>= 1:4.2)', - 'libgcc1 (>= 1:4.5)', - 'libglib2.0-0 (>= 2.16.0)', + 'libgbm1 (>= 17.1.0~rc2)', + 'libglib2.0-0 (>= 2.12.0)', 'libglib2.0-0 (>= 2.39.4)', 'libgtk-3-0 (>= 3.9.10)', 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', @@ -123,7 +120,7 @@ exports.referenceGeneratedDepsByArch = { 'libnss3 (>= 3.26)', 'libpango-1.0-0 (>= 1.14.0)', 'libsecret-1-0 (>= 0.18)', - 'libstdc++6 (>= 4.1.1)', + 'libstdc++6 (>= 5)', 'libstdc++6 (>= 5.2)', 'libstdc++6 (>= 6)', 'libx11-6', @@ -139,4 +136,4 @@ exports.referenceGeneratedDepsByArch = { 'xdg-utils (>= 1.0.2)' ] }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLGtIQUFrSDtBQUNsSCw0REFBNEQ7QUFDL0MsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCO0lBQ2pCLHFDQUFxQztJQUNyQyxtQkFBbUI7SUFDbkIsc0RBQXNEO0lBQ3RELHNCQUFzQixDQUFDLGlCQUFpQjtDQUN4QyxDQUFDO0FBRUYsb0hBQW9IO0FBQ3BILDBDQUEwQztBQUMxQyw4REFBOEQ7QUFDakQsUUFBQSxlQUFlLEdBQUc7SUFDOUIsWUFBWSxDQUFDLHlFQUF5RTtDQUN0RixDQUFDO0FBRVcsUUFBQSw0QkFBNEIsR0FBRztJQUMzQyxPQUFPLEVBQUU7UUFDUixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixzQkFBc0I7UUFDdEIsc0RBQXNEO1FBQ3RELHlCQUF5QjtRQUN6QixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLG9CQUFvQjtRQUNwQiwwQkFBMEI7UUFDMUIsMEJBQTBCO1FBQzFCLHdCQUF3QjtRQUN4QixxQ0FBcUM7UUFDckMsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsNEJBQTRCO1FBQzVCLHlCQUF5QjtRQUN6QixVQUFVO1FBQ1YsMEJBQTBCO1FBQzFCLG9CQUFvQjtRQUNwQiwrQkFBK0I7UUFDL0Isd0JBQXdCO1FBQ3hCLFVBQVU7UUFDVixZQUFZO1FBQ1osMEJBQTBCO1FBQzFCLGFBQWE7UUFDYixZQUFZO1FBQ1osc0JBQXNCO0tBQ3RCO0lBQ0QsT0FBTyxFQUFFO1FBQ1IsaUJBQWlCO1FBQ2pCLHdCQUF3QjtRQUN4QiwrQkFBK0I7UUFDL0Isd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsc0JBQXNCO1FBQ3RCLHNEQUFzRDtRQUN0RCx5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QixvQkFBb0I7UUFDcEIsMEJBQTBCO1FBQzFCLDBCQUEwQjtRQUMxQix3QkFBd0I7UUFDeEIscUNBQXFDO1FBQ3JDLHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLDRCQUE0QjtRQUM1Qix5QkFBeUI7UUFDekIsdUJBQXVCO1FBQ3ZCLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLDBCQUEwQjtRQUMxQixvQkFBb0I7UUFDcEIsK0JBQStCO1FBQy9CLHdCQUF3QjtRQUN4QixVQUFVO1FBQ1YsWUFBWTtRQUNaLDBCQUEwQjtRQUMxQixhQUFhO1FBQ2IsWUFBWTtRQUNaLHNCQUFzQjtLQUN0QjtJQUNELE9BQU8sRUFBRTtRQUNSLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QixzREFBc0Q7UUFDdEQsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLDBCQUEwQjtRQUMxQiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLHFDQUFxQztRQUNyQyx3QkFBd0I7UUFDeEIscUJBQXFCO1FBQ3JCLG1CQUFtQjtRQUNuQiw0QkFBNEI7UUFDNUIseUJBQXlCO1FBQ3pCLHVCQUF1QjtRQUN2QixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLFVBQVU7UUFDViwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsVUFBVTtRQUNWLFlBQVk7UUFDWiwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLFlBQVk7UUFDWixzQkFBc0I7S0FDdEI7Q0FDRCxDQUFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLGtIQUFrSDtBQUNsSCw0REFBNEQ7QUFDL0MsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCO0lBQ2pCLHFDQUFxQztJQUNyQyxtQkFBbUI7SUFDbkIsc0RBQXNEO0lBQ3RELHNCQUFzQixDQUFDLGlCQUFpQjtDQUN4QyxDQUFDO0FBRUYsb0hBQW9IO0FBQ3BILDBDQUEwQztBQUMxQyw4REFBOEQ7QUFDakQsUUFBQSxlQUFlLEdBQUc7SUFDOUIsWUFBWSxDQUFDLHlFQUF5RTtDQUN0RixDQUFDO0FBRVcsUUFBQSw0QkFBNEIsR0FBRztJQUMzQyxPQUFPLEVBQUU7UUFDUixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLHNCQUFzQjtRQUN0QixzREFBc0Q7UUFDdEQseUJBQXlCO1FBQ3pCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLHFDQUFxQztRQUNyQyx3QkFBd0I7UUFDeEIscUJBQXFCO1FBQ3JCLG1CQUFtQjtRQUNuQiw0QkFBNEI7UUFDNUIseUJBQXlCO1FBQ3pCLFVBQVU7UUFDViwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsVUFBVTtRQUNWLFlBQVk7UUFDWiwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLFlBQVk7UUFDWixzQkFBc0I7S0FDdEI7SUFDRCxPQUFPLEVBQUU7UUFDUixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsc0JBQXNCO1FBQ3RCLHNEQUFzRDtRQUN0RCx5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0Qix5QkFBeUI7UUFDekIsMEJBQTBCO1FBQzFCLDBCQUEwQjtRQUMxQix3QkFBd0I7UUFDeEIscUNBQXFDO1FBQ3JDLHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLDRCQUE0QjtRQUM1Qix5QkFBeUI7UUFDekIsbUJBQW1CO1FBQ25CLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLDBCQUEwQjtRQUMxQixvQkFBb0I7UUFDcEIsK0JBQStCO1FBQy9CLHdCQUF3QjtRQUN4QixVQUFVO1FBQ1YsWUFBWTtRQUNaLDBCQUEwQjtRQUMxQixhQUFhO1FBQ2IsWUFBWTtRQUNaLHNCQUFzQjtLQUN0QjtJQUNELE9BQU8sRUFBRTtRQUNSLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QixzREFBc0Q7UUFDdEQsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLHFDQUFxQztRQUNyQyx3QkFBd0I7UUFDeEIscUJBQXFCO1FBQ3JCLG1CQUFtQjtRQUNuQiw0QkFBNEI7UUFDNUIseUJBQXlCO1FBQ3pCLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLFVBQVU7UUFDViwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsVUFBVTtRQUNWLFlBQVk7UUFDWiwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLFlBQVk7UUFDWixzQkFBc0I7S0FDdEI7Q0FDRCxDQUFDIn0= \ No newline at end of file diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts index ee69d73afce..7f6cd6ca8cc 100644 --- a/build/linux/debian/dep-lists.ts +++ b/build/linux/debian/dep-lists.ts @@ -23,20 +23,19 @@ export const recommendedDeps = [ export const referenceGeneratedDepsByArch = { 'amd64': [ 'ca-certificates', - 'libasound2 (>= 1.0.16)', + 'libasound2 (>= 1.0.17)', 'libatk-bridge2.0-0 (>= 2.5.3)', 'libatk1.0-0 (>= 2.2.0)', 'libatspi2.0-0 (>= 2.9.90)', 'libc6 (>= 2.14)', - 'libc6 (>= 2.15)', 'libc6 (>= 2.17)', 'libc6 (>= 2.2.5)', 'libcairo2 (>= 1.6.0)', 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', 'libdbus-1-3 (>= 1.5.12)', - 'libdrm2 (>= 2.4.38)', + 'libdrm2 (>= 2.4.60)', 'libexpat1 (>= 2.0.1)', - 'libgbm1 (>= 8.1~0)', + 'libgbm1 (>= 17.1.0~rc2)', 'libglib2.0-0 (>= 2.16.0)', 'libglib2.0-0 (>= 2.39.4)', 'libgtk-3-0 (>= 3.9.10)', @@ -60,21 +59,22 @@ export const referenceGeneratedDepsByArch = { ], 'armhf': [ 'ca-certificates', - 'libasound2 (>= 1.0.16)', + 'libasound2 (>= 1.0.17)', 'libatk-bridge2.0-0 (>= 2.5.3)', 'libatk1.0-0 (>= 2.2.0)', 'libatspi2.0-0 (>= 2.9.90)', 'libc6 (>= 2.15)', 'libc6 (>= 2.17)', 'libc6 (>= 2.4)', + 'libc6 (>= 2.8)', 'libc6 (>= 2.9)', 'libcairo2 (>= 1.6.0)', 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', 'libdbus-1-3 (>= 1.5.12)', - 'libdrm2 (>= 2.4.38)', + 'libdrm2 (>= 2.4.60)', 'libexpat1 (>= 2.0.1)', - 'libgbm1 (>= 8.1~0)', - 'libglib2.0-0 (>= 2.16.0)', + 'libgbm1 (>= 17.1.0~rc2)', + 'libglib2.0-0 (>= 2.12.0)', 'libglib2.0-0 (>= 2.39.4)', 'libgtk-3-0 (>= 3.9.10)', 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', @@ -83,7 +83,7 @@ export const referenceGeneratedDepsByArch = { 'libnss3 (>= 3.26)', 'libpango-1.0-0 (>= 1.14.0)', 'libsecret-1-0 (>= 0.18)', - 'libstdc++6 (>= 4.1.1)', + 'libstdc++6 (>= 5)', 'libstdc++6 (>= 5.2)', 'libstdc++6 (>= 6)', 'libx11-6', @@ -100,7 +100,7 @@ export const referenceGeneratedDepsByArch = { ], 'arm64': [ 'ca-certificates', - 'libasound2 (>= 1.0.16)', + 'libasound2 (>= 1.0.17)', 'libatk-bridge2.0-0 (>= 2.5.3)', 'libatk1.0-0 (>= 2.2.0)', 'libatspi2.0-0 (>= 2.9.90)', @@ -108,13 +108,10 @@ export const referenceGeneratedDepsByArch = { 'libcairo2 (>= 1.6.0)', 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', 'libdbus-1-3 (>= 1.0.2)', - 'libdrm2 (>= 2.4.38)', + 'libdrm2 (>= 2.4.60)', 'libexpat1 (>= 2.0.1)', - 'libgbm1 (>= 8.1~0)', - 'libgcc1 (>= 1:3.0)', - 'libgcc1 (>= 1:4.2)', - 'libgcc1 (>= 1:4.5)', - 'libglib2.0-0 (>= 2.16.0)', + 'libgbm1 (>= 17.1.0~rc2)', + 'libglib2.0-0 (>= 2.12.0)', 'libglib2.0-0 (>= 2.39.4)', 'libgtk-3-0 (>= 3.9.10)', 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', @@ -123,7 +120,7 @@ export const referenceGeneratedDepsByArch = { 'libnss3 (>= 3.26)', 'libpango-1.0-0 (>= 1.14.0)', 'libsecret-1-0 (>= 0.18)', - 'libstdc++6 (>= 4.1.1)', + 'libstdc++6 (>= 5)', 'libstdc++6 (>= 5.2)', 'libstdc++6 (>= 6)', 'libx11-6', diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js index f249ad032cb..0197f5f2571 100644 --- a/build/linux/debian/install-sysroot.js +++ b/build/linux/debian/install-sysroot.js @@ -30,7 +30,7 @@ function getSha(filename) { return hash.digest('hex'); } async function getSysroot(arch) { - const sysrootJSONUrl = `https://raw.githubusercontent.com/electron/electron/v${util.getElectronVersion()}/script/sysroots.json`; + const sysrootJSONUrl = `https://raw.githubusercontent.com/electron/electron/v${util.getElectronVersion().electronVersion}/script/sysroots.json`; const sysrootDictLocation = `${(0, os_1.tmpdir)()}/sysroots.json`; const result = (0, child_process_1.spawnSync)('curl', [sysrootJSONUrl, '-o', sysrootDictLocation]); if (result.status !== 0) { @@ -87,4 +87,4 @@ async function getSysroot(arch) { return sysroot; } exports.getSysroot = getSysroot; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1zeXNyb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5zdGFsbC1zeXNyb290LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLGlEQUEwQztBQUMxQyxtQ0FBb0M7QUFDcEMsMkJBQTRCO0FBQzVCLHlCQUF5QjtBQUN6QiwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBRTdCLHVDQUF1QztBQUV2QyxvSEFBb0g7QUFDcEgsTUFBTSxVQUFVLEdBQUcsNENBQTRDLENBQUM7QUFDaEUsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUM7QUFFdEMsU0FBUyxNQUFNLENBQUMsUUFBcUI7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLDJCQUEyQjtJQUMzQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN6QyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLFFBQVEsSUFBSSxTQUFTLENBQUM7S0FDdEI7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFRTSxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQXNCO0lBQ3RELE1BQU0sY0FBYyxHQUFHLHdEQUF3RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUM7SUFDaEksTUFBTSxtQkFBbUIsR0FBRyxHQUFHLElBQUEsV0FBTSxHQUFFLGdCQUFnQixDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQVMsRUFBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzVFO0lBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzNFLE1BQU0sV0FBVyxHQUFxQixXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUEsV0FBTSxHQUFFLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFO1FBQ3RFLE9BQU8sT0FBTyxDQUFDO0tBQ2Y7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLGdCQUFnQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztJQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9DLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM3QixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN0QixHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN4QixFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO29CQUNsQixlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN2QixDQUFDLEVBQUUsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvREFBb0QsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xGLENBQUMsRUFBRSxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztLQUNIO0lBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNyQixFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDN0M7SUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLFVBQVUsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ25GO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3RFO0lBQ0QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QixPQUFPLE9BQU8sQ0FBQztBQUNoQixDQUFDO0FBMURELGdDQTBEQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1zeXNyb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5zdGFsbC1zeXNyb290LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLGlEQUEwQztBQUMxQyxtQ0FBb0M7QUFDcEMsMkJBQTRCO0FBQzVCLHlCQUF5QjtBQUN6QiwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBRTdCLHVDQUF1QztBQUV2QyxvSEFBb0g7QUFDcEgsTUFBTSxVQUFVLEdBQUcsNENBQTRDLENBQUM7QUFDaEUsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUM7QUFFdEMsU0FBUyxNQUFNLENBQUMsUUFBcUI7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLDJCQUEyQjtJQUMzQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN6QyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLFFBQVEsSUFBSSxTQUFTLENBQUM7S0FDdEI7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFD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 \ No newline at end of file diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts index ac9de5b8578..49eb4a67127 100644 --- a/build/linux/debian/install-sysroot.ts +++ b/build/linux/debian/install-sysroot.ts @@ -38,7 +38,7 @@ type SysrootDictEntry = { }; export async function getSysroot(arch: DebianArchString): Promise { - const sysrootJSONUrl = `https://raw.githubusercontent.com/electron/electron/v${util.getElectronVersion()}/script/sysroots.json`; + const sysrootJSONUrl = `https://raw.githubusercontent.com/electron/electron/v${util.getElectronVersion().electronVersion}/script/sysroots.json`; const sysrootDictLocation = `${tmpdir()}/sysroots.json`; const result = spawnSync('curl', [sysrootJSONUrl, '-o', sysrootDictLocation]); if (result.status !== 0) { diff --git a/build/linux/dependencies-generator.js b/build/linux/dependencies-generator.js index b09d9e74cf1..0ea66992dd3 100644 --- a/build/linux/dependencies-generator.js +++ b/build/linux/dependencies-generator.js @@ -21,15 +21,13 @@ const types_2 = require("./rpm/types"); // The reference dependencies, which one has to update when the new dependencies // are valid, are in dep-lists.ts const FAIL_BUILD_FOR_NEW_DEPENDENCIES = true; -// Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:chrome/installer/linux/BUILD.gn;l=64-80 +// Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:chrome/installer/linux/BUILD.gn;l=64-80 // and the Linux Archive build // Shared library dependencies that we already bundle. const bundledDeps = [ 'libEGL.so', 'libGLESv2.so', 'libvulkan.so.1', - 'swiftshader_libEGL.so', - 'swiftshader_libGLESv2.so', 'libvk_swiftshader.so', 'libffmpeg.so' ]; @@ -99,4 +97,4 @@ function mergePackageDeps(inputDeps) { } return requires; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jaWVzLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlcGVuZGVuY2llcy1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztnR0FHZ0c7QUFFaEcsWUFBWSxDQUFDOzs7QUFFYixpREFBMEM7QUFDMUMsNkJBQThCO0FBQzlCLDREQUEyRjtBQUMzRix5REFBcUY7QUFDckYsa0RBQXlGO0FBQ3pGLCtDQUFtRjtBQUNuRiwwQ0FBc0U7QUFDdEUsdUNBQTZEO0FBRTdELHFDQUFxQztBQUNyQyxxRUFBcUU7QUFDckUsMkRBQTJEO0FBQzNELHlEQUF5RDtBQUN6RCxtRkFBbUY7QUFDbkYsZ0ZBQWdGO0FBQ2hGLGlDQUFpQztBQUNqQyxNQUFNLCtCQUErQixHQUFZLElBQUksQ0FBQztBQUV0RCwrSEFBK0g7QUFDL0gsOEJBQThCO0FBQzlCLHNEQUFzRDtBQUN0RCxNQUFNLFdBQVcsR0FBRztJQUNuQixXQUFXO0lBQ1gsY0FBYztJQUNkLGdCQUFnQjtJQUNoQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLHNCQUFzQjtJQUN0QixjQUFjO0NBQ2QsQ0FBQztBQUVGLFNBQWdCLGVBQWUsQ0FBQyxXQUEwQixFQUFFLFFBQWdCLEVBQUUsZUFBdUIsRUFBRSxJQUFZLEVBQUUsT0FBZ0I7SUFDcEksSUFBSSxXQUFXLEtBQUssS0FBSyxFQUFFO1FBQzFCLElBQUksQ0FBQyxJQUFBLDBCQUFrQixFQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzdDO0tBQ0Q7SUFDRCxJQUFJLFdBQVcsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDLEVBQUU7UUFDcEQsTUFB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jaWVzLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlcGVuZGVuY2llcy1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztnR0FHZ0c7QUFFaEcsWUFBWSxDQUFDOzs7QUFFYixpREFBMEM7QUFDMUMsNkJBQThCO0FBQzlCLDREQUEyRjtBQUMzRix5REFBcUY7QUFDckYsa0RBQXlGO0FBQ3pGLCtDQUFtRjtBQUNuRiwwQ0FBc0U7QUFDdEUsdUNBQTZEO0FBRTdELHFDQUFxQztBQUNyQyxxRUFBcUU7QUFDckUsMkRBQTJEO0FBQzNELHlEQUF5RDtBQUN6RCxtRkFBbUY7QUFDbkYsZ0ZBQWdGO0FBQ2hGLGlDQUFpQztBQUNqQyxNQUFNLCtCQUErQixHQUFZLElBQUksQ0FBQztBQUV0RCxnSUFBZ0k7QUFDaEksOEJBQThCO0FBQzlCLHNEQUFzRDtBQUN0RCxNQUFNLFdBQVcsR0FBRztJQUNuQixXQUFXO0lBQ1gsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsY0FBYztDQUNkLENBQUM7QUFFRixTQUFnQixlQUFlLENBQUMsV0FBMEIsRUFBRSxRQUFnQixFQUFFLGVBQXVCLEVBQUUsSUFBWSxFQUFFLE9BQWdCO0lBQ3BJLElBQUksV0FBVyxLQUFLLEtBQUssRUFBRTtRQUMxQixJQUFJLENBQUMsSUFBQSwwQkFBa0IsRUFBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM3QztLQUNEO0lBQ0QsSUFBSSxXQUFXLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBQSx1QkFBZSxFQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLEdB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 \ No newline at end of file diff --git a/build/linux/dependencies-generator.ts b/build/linux/dependencies-generator.ts index 34573c4ac12..c0d811253d2 100644 --- a/build/linux/dependencies-generator.ts +++ b/build/linux/dependencies-generator.ts @@ -23,15 +23,13 @@ import { isRpmArchString, RpmArchString } from './rpm/types'; // are valid, are in dep-lists.ts const FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = true; -// Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:chrome/installer/linux/BUILD.gn;l=64-80 +// Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:chrome/installer/linux/BUILD.gn;l=64-80 // and the Linux Archive build // Shared library dependencies that we already bundle. const bundledDeps = [ 'libEGL.so', 'libGLESv2.so', 'libvulkan.so.1', - 'swiftshader_libEGL.so', - 'swiftshader_libGLESv2.so', 'libvk_swiftshader.so', 'libffmpeg.so' ]; diff --git a/build/linux/libcxx-fetcher.js b/build/linux/libcxx-fetcher.js index 5b944eb4459..880e2851f20 100644 --- a/build/linux/libcxx-fetcher.js +++ b/build/linux/libcxx-fetcher.js @@ -6,19 +6,19 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.downloadLibcxxObjects = exports.downloadLibcxxHeaders = void 0; // Can be removed once https://github.com/electron/electron-rebuild/pull/703 is available. +const fs = require("fs"); +const path = require("path"); const debug = require("debug"); const extract = require("extract-zip"); -const fs = require("fs-extra"); -const path = require("path"); -const packageJSON = require("../../package.json"); const get_1 = require("@electron/get"); +const root = path.dirname(path.dirname(__dirname)); const d = debug('libcxx-fetcher'); async function downloadLibcxxHeaders(outDir, electronVersion, lib_name) { - if (await fs.pathExists(path.resolve(outDir, 'include'))) { + if (await fs.existsSync(path.resolve(outDir, 'include'))) { return; } - if (!await fs.pathExists(outDir)) { - await fs.mkdirp(outDir); + if (!await fs.existsSync(outDir)) { + await fs.mkdirSync(outDir, { recursive: true }); } d(`downloading ${lib_name}_headers`); const headers = await (0, get_1.downloadArtifact)({ @@ -31,11 +31,11 @@ async function downloadLibcxxHeaders(outDir, electronVersion, lib_name) { } exports.downloadLibcxxHeaders = downloadLibcxxHeaders; async function downloadLibcxxObjects(outDir, electronVersion, targetArch = 'x64') { - if (await fs.pathExists(path.resolve(outDir, 'libc++.a'))) { + if (await fs.existsSync(path.resolve(outDir, 'libc++.a'))) { return; } - if (!await fs.pathExists(outDir)) { - await fs.mkdirp(outDir); + if (!await fs.existsSync(outDir)) { + await fs.mkdirSync(outDir, { recursive: true }); } d(`downloading libcxx-objects-linux-${targetArch}`); const objects = await (0, get_1.downloadArtifact)({ @@ -53,6 +53,7 @@ async function main() { const libcxxHeadersDownloadDir = process.env['VSCODE_LIBCXX_HEADERS_DIR']; const libcxxabiHeadersDownloadDir = process.env['VSCODE_LIBCXXABI_HEADERS_DIR']; const arch = process.env['VSCODE_ARCH']; + const packageJSON = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')); const electronVersion = packageJSON.devDependencies.electron; if (!libcxxObjectsDirPath || !libcxxHeadersDownloadDir || !libcxxabiHeadersDownloadDir) { throw new Error('Required build env not set'); @@ -67,4 +68,4 @@ if (require.main === module) { process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliY3h4LWZldGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaWJjeHgtZmV0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRywwRkFBMEY7QUFFMUYsK0JBQStCO0FBQy9CLHVDQUF1QztBQUN2QywrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLGtEQUFrRDtBQUNsRCx1Q0FBaUQ7QUFFakQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFM0IsS0FBSyxVQUFVLHFCQUFxQixDQUFDLE1BQWMsRUFBRSxlQUF1QixFQUFFLFFBQWdCO0lBQ3BHLElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDekQsT0FBTztLQUNQO0lBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNqQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEI7SUFFRCxDQUFDLENBQUMsZUFBZSxRQUFRLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxzQkFBZ0IsRUFBQztRQUN0QyxPQUFPLEVBQUUsZUFBZTtRQUN4QixTQUFTLEVBQUUsSUFBSTtRQUNmLFlBQVksRUFBRSxHQUFHLFFBQVEsY0FBYztLQUN2QyxDQUFDLENBQUM7SUFFSCxDQUFDLENBQUMsYUFBYSxRQUFRLGlCQUFpQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFqQkQsc0RBaUJDO0FBRU0sS0FBSyxVQUFVLHFCQUFxQixDQUFDLE1BQWMsRUFBRSxlQUF1QixFQUFFLGFBQXFCLEtBQUs7SUFDOUcsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRTtRQUMxRCxPQUFPO0tBQ1A7SUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QjtJQUVELENBQUMsQ0FBQyxvQ0FBb0MsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsc0JBQWdCLEVBQUM7UUFDdEMsT0FBTyxFQUFFLGVBQWU7UUFDeEIsUUFBUSxFQUFFLE9BQU87UUFDakIsWUFBWSxFQUFFLGdCQUFnQjtRQUM5QixJQUFJLEVBQUUsVUFBVTtLQUNoQixDQUFDLENBQUM7SUFFSCxDQUFDLENBQUMsaUNBQWlDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQWxCRCxzREFrQkM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNsQixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUN0RSxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMxRSxNQUFNLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNoRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO0lBRTdELElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLHdCQUF3QixJQUFJLENBQUMsMkJBQTJCLEVBQUU7UUFDdkYsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0tBQzlDO0lBRUQsTUFBTSxxQkFBcUIsQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsTUFBTSxxQkFBcUIsQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakYsTUFBTSxxQkFBcUIsQ0FBQywyQkFBMkIsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7SUFDNUIsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztDQUNIIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliY3h4LWZldGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaWJjeHgtZmV0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRywwRkFBMEY7QUFFMUYseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsdUNBQXVDO0FBQ3ZDLHVDQUFpRDtBQUVqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVuRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUUzQixLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFBYyxFQUFFLGVBQXVCLEVBQUUsUUFBZ0I7SUFDcEcsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtRQUN6RCxPQUFPO0tBQ1A7SUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUNoRDtJQUVELENBQUMsQ0FBQyxlQUFlLFFBQVEsVUFBVSxDQUFDLENBQUM7SUFDckMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHNCQUFnQixFQUFDO1FBQ3RDLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLFNBQVMsRUFBRSxJQUFJO1FBQ2YsWUFBWSxFQUFFLEdBQUcsUUFBUSxjQUFjO0tBQ3ZDLENBQUMsQ0FBQztJQUVILENBQUMsQ0FBQyxhQUFhLFFBQVEsaUJBQWlCLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1B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 \ No newline at end of file diff --git a/build/linux/libcxx-fetcher.ts b/build/linux/libcxx-fetcher.ts index a9b97a0d9a6..6abb67faa76 100644 --- a/build/linux/libcxx-fetcher.ts +++ b/build/linux/libcxx-fetcher.ts @@ -5,21 +5,22 @@ // Can be removed once https://github.com/electron/electron-rebuild/pull/703 is available. +import * as fs from 'fs'; +import * as path from 'path'; import * as debug from 'debug'; import * as extract from 'extract-zip'; -import * as fs from 'fs-extra'; -import * as path from 'path'; -import * as packageJSON from '../../package.json'; import { downloadArtifact } from '@electron/get'; +const root = path.dirname(path.dirname(__dirname)); + const d = debug('libcxx-fetcher'); export async function downloadLibcxxHeaders(outDir: string, electronVersion: string, lib_name: string): Promise { - if (await fs.pathExists(path.resolve(outDir, 'include'))) { + if (await fs.existsSync(path.resolve(outDir, 'include'))) { return; } - if (!await fs.pathExists(outDir)) { - await fs.mkdirp(outDir); + if (!await fs.existsSync(outDir)) { + await fs.mkdirSync(outDir, { recursive: true }); } d(`downloading ${lib_name}_headers`); @@ -34,11 +35,11 @@ export async function downloadLibcxxHeaders(outDir: string, electronVersion: str } export async function downloadLibcxxObjects(outDir: string, electronVersion: string, targetArch: string = 'x64'): Promise { - if (await fs.pathExists(path.resolve(outDir, 'libc++.a'))) { + if (await fs.existsSync(path.resolve(outDir, 'libc++.a'))) { return; } - if (!await fs.pathExists(outDir)) { - await fs.mkdirp(outDir); + if (!await fs.existsSync(outDir)) { + await fs.mkdirSync(outDir, { recursive: true }); } d(`downloading libcxx-objects-linux-${targetArch}`); @@ -58,6 +59,7 @@ async function main(): Promise { const libcxxHeadersDownloadDir = process.env['VSCODE_LIBCXX_HEADERS_DIR']; const libcxxabiHeadersDownloadDir = process.env['VSCODE_LIBCXXABI_HEADERS_DIR']; const arch = process.env['VSCODE_ARCH']; + const packageJSON = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')); const electronVersion = packageJSON.devDependencies.electron; if (!libcxxObjectsDirPath || !libcxxHeadersDownloadDir || !libcxxabiHeadersDownloadDir) { diff --git a/build/linux/rpm/dep-lists.js b/build/linux/rpm/dep-lists.js index b772f23eeb3..c836348ef51 100644 --- a/build/linux/rpm/dep-lists.js +++ b/build/linux/rpm/dep-lists.js @@ -123,10 +123,10 @@ exports.referenceGeneratedDepsByArch = { 'libc.so.6', 'libc.so.6(GLIBC_2.10)', 'libc.so.6(GLIBC_2.11)', - 'libc.so.6(GLIBC_2.14)', 'libc.so.6(GLIBC_2.15)', 'libc.so.6(GLIBC_2.16)', 'libc.so.6(GLIBC_2.17)', + 'libc.so.6(GLIBC_2.25)', 'libc.so.6(GLIBC_2.4)', 'libc.so.6(GLIBC_2.6)', 'libc.so.6(GLIBC_2.7)', @@ -142,7 +142,6 @@ exports.referenceGeneratedDepsByArch = { 'libgbm.so.1', 'libgcc_s.so.1', 'libgcc_s.so.1(GCC_3.0)', - 'libgcc_s.so.1(GCC_3.4)', 'libgcc_s.so.1(GCC_3.5)', 'libgio-2.0.so.0', 'libglib-2.0.so.0', @@ -220,6 +219,7 @@ exports.referenceGeneratedDepsByArch = { 'libatspi.so.0()(64bit)', 'libc.so.6()(64bit)', 'libc.so.6(GLIBC_2.17)(64bit)', + 'libc.so.6(GLIBC_2.25)(64bit)', 'libcairo.so.2()(64bit)', 'libcurl.so.4()(64bit)', 'libdbus-1.so.3()(64bit)', @@ -289,4 +289,4 @@ exports.referenceGeneratedDepsByArch = { 'xdg-utils' ] }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLCtHQUErRztBQUMvRywrREFBK0Q7QUFDbEQsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4Qiw2QkFBNkI7SUFDN0IsNkJBQTZCO0lBQzdCLGdDQUFnQztJQUNoQyx5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLFdBQVcsQ0FBQyxpQkFBaUI7Q0FDN0IsQ0FBQztBQUVXLFFBQUEsNEJBQTRCLEdBQUc7SUFDM0MsUUFBUSxFQUFFO1FBQ1QsaUJBQWlCO1FBQ2pCLCtCQUErQjtRQUMvQiwwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBQ3hDLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6QixpQ0FBaUM7UUFDakMsc0NBQXNDO1FBQ3RDLDBCQUEwQjtRQUMxQixpQ0FBaUM7UUFDakMsd0JBQXdCO1FBQ3hCLG9CQUFvQjtRQUNwQiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5QiwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBQzdCLCtCQUErQjtRQUMvQiwrQkFBK0I7UUFDL0IsK0JBQStCO1FBQy9CLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0IsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyxzQkFBc0I7UUFDdEIsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0Qix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLDBCQUEwQjtR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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLCtHQUErRztBQUMvRywrREFBK0Q7QUFDbEQsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4Qiw2QkFBNkI7SUFDN0IsNkJBQTZCO0lBQzdCLGdDQUFnQztJQUNoQyx5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLFdBQVcsQ0FBQyxpQkFBaUI7Q0FDN0IsQ0FBQztBQUVXLFFBQUEsNEJBQTRCLEdBQUc7SUFDM0MsUUFBUSxFQUFFO1FBQ1QsaUJBQWlCO1FBQ2pCLCtCQUErQjtRQUMvQiwwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBQ3hDLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6QixpQ0FBaUM7UUFDakMsc0NBQXNDO1FBQ3RDLDBCQUEwQjtRQUMxQixpQ0FBaUM7UUFDakMsd0JBQXdCO1FBQ3hCLG9CQUFvQjtRQUNwQiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5QiwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBQzdCLCtCQUErQjtRQUMvQiwrQkFBK0I7UUFDL0IsK0JBQStCO1FBQy9CLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0IsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyxzQkFBc0I7UUFDdEIsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0Qix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLDBCQUEwQjtR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 \ No newline at end of file diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts index d80c86416a6..c262448c318 100644 --- a/build/linux/rpm/dep-lists.ts +++ b/build/linux/rpm/dep-lists.ts @@ -122,10 +122,10 @@ export const referenceGeneratedDepsByArch = { 'libc.so.6', 'libc.so.6(GLIBC_2.10)', 'libc.so.6(GLIBC_2.11)', - 'libc.so.6(GLIBC_2.14)', 'libc.so.6(GLIBC_2.15)', 'libc.so.6(GLIBC_2.16)', 'libc.so.6(GLIBC_2.17)', + 'libc.so.6(GLIBC_2.25)', 'libc.so.6(GLIBC_2.4)', 'libc.so.6(GLIBC_2.6)', 'libc.so.6(GLIBC_2.7)', @@ -141,7 +141,6 @@ export const referenceGeneratedDepsByArch = { 'libgbm.so.1', 'libgcc_s.so.1', 'libgcc_s.so.1(GCC_3.0)', - 'libgcc_s.so.1(GCC_3.4)', 'libgcc_s.so.1(GCC_3.5)', 'libgio-2.0.so.0', 'libglib-2.0.so.0', @@ -219,6 +218,7 @@ export const referenceGeneratedDepsByArch = { 'libatspi.so.0()(64bit)', 'libc.so.6()(64bit)', 'libc.so.6(GLIBC_2.17)(64bit)', + 'libc.so.6(GLIBC_2.25)(64bit)', 'libcairo.so.2()(64bit)', 'libcurl.so.4()(64bit)', 'libdbus-1.so.3()(64bit)', diff --git a/build/monaco/monaco.d.ts.recipe b/build/monaco/monaco.d.ts.recipe index 2e36edaec68..ff4febe8ce6 100644 --- a/build/monaco/monaco.d.ts.recipe +++ b/build/monaco/monaco.d.ts.recipe @@ -14,10 +14,45 @@ declare namespace monaco { export type Thenable = PromiseLike; export interface Environment { + /** + * Define a global `monaco` symbol. + * This is true by default in AMD and false by default in ESM. + */ globalAPI?: boolean; + /** + * The base url where the editor sources are found (which contains the vs folder) + */ baseUrl?: string; + /** + * A web worker factory. + * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked. + */ getWorker?(workerId: string, label: string): Promise | Worker; + /** + * Return the location for web worker scripts. + * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked. + */ getWorkerUrl?(workerId: string, label: string): string; + /** + * Create a trusted types policy (same API as window.trustedTypes.createPolicy) + */ + createTrustedTypesPolicy?( + policyName: string, + policyOptions?: ITrustedTypePolicyOptions, + ): undefined | ITrustedTypePolicy; + } + + export interface ITrustedTypePolicyOptions { + createHTML?: (input: string, ...arguments: any[]) => string; + createScript?: (input: string, ...arguments: any[]) => string; + createScriptURL?: (input: string, ...arguments: any[]) => string; + } + + export interface ITrustedTypePolicy { + readonly name: string; + createHTML?(input: string): any; + createScript?(input: string): any; + createScriptURL?(input: string): any; } export interface IDisposable { @@ -74,7 +109,8 @@ export interface ICommandHandler { #includeAll(vs/editor/common/model): IScrollEvent #include(vs/editor/common/diff/smartLinesDiffComputer): IChange, ICharChange, ILineChange #include(vs/editor/common/diff/documentDiffProvider): IDocumentDiffProvider, IDocumentDiffProviderOptions, IDocumentDiff -#include(vs/editor/common/diff/linesDiffComputer): LineRangeMapping, LineRange, RangeMapping +#include(vs/editor/common/core/lineRange): LineRange +#include(vs/editor/common/diff/linesDiffComputer): LineRangeMapping, RangeMapping, MovedText, SimpleLineRangeMapping #include(vs/editor/common/core/dimension): IDimension #includeAll(vs/editor/common/editorCommon): IScrollEvent #includeAll(vs/editor/common/textModelEvents): @@ -84,6 +120,7 @@ export interface ICommandHandler { #include(vs/editor/browser/config/editorConfiguration): IEditorConstructionOptions #includeAll(vs/editor/browser/editorBrowser;editorCommon.=>): #include(vs/editor/common/config/fontInfo): FontInfo, BareFontInfo +#include(vs/editor/common/config/editorZoom): EditorZoom, IEditorZoom //compatibility: export type IReadOnlyModel = ITextModel; diff --git a/build/monaco/monaco.usage.recipe b/build/monaco/monaco.usage.recipe index 3fab91065aa..e3c8cdd0916 100644 --- a/build/monaco/monaco.usage.recipe +++ b/build/monaco/monaco.usage.recipe @@ -1,6 +1,8 @@ // This file is adding references to various symbols which should not be removed via tree shaking +import { IObservable } from './vs/base/common/observable'; + import { ServiceIdentifier } from './vs/platform/instantiation/common/instantiation'; import { create as create1 } from './vs/base/common/worker/simpleWorker'; import { create as create2 } from './vs/editor/common/services/editorSimpleWorker'; @@ -32,4 +34,7 @@ import * as editorAPI from './vs/editor/editor.api'; a = editorAPI.Token; a = editorAPI.editor; a = editorAPI.languages; + + const o: IObservable = null!; + o.TChange; })(); diff --git a/build/npm/dirs.js b/build/npm/dirs.js index f820f39e222..875390550da 100644 --- a/build/npm/dirs.js +++ b/build/npm/dirs.js @@ -3,8 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +const fs = require('fs'); + // Complete list of directories where yarn should be executed to install node modules -exports.dirs = [ +const dirs = [ '', 'build', 'extensions', @@ -50,3 +52,11 @@ exports.dirs = [ 'test/monaco', 'test/smoke', ]; + +if (fs.existsSync(`${__dirname}/../../.build/distro/npm`)) { + dirs.push('.build/distro/npm'); + dirs.push('.build/distro/npm/remote'); + dirs.push('.build/distro/npm/remote/web'); +} + +exports.dirs = dirs; diff --git a/build/npm/gyp/yarn.lock b/build/npm/gyp/yarn.lock index d5d6bced114..1fe78aba8f3 100644 --- a/build/npm/gyp/yarn.lock +++ b/build/npm/gyp/yarn.lock @@ -520,9 +520,9 @@ safe-buffer@~5.2.0: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== semver@^7.3.5: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" diff --git a/build/npm/postinstall.js b/build/npm/postinstall.js index 187f123cd18..d9280ffb1eb 100644 --- a/build/npm/postinstall.js +++ b/build/npm/postinstall.js @@ -3,35 +3,61 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +const fs = require('fs'); +const path = require('path'); +const os = require('os'); const cp = require('child_process'); const { dirs } = require('./dirs'); const { setupBuildYarnrc } = require('./setupBuildYarnrc'); const yarn = process.platform === 'win32' ? 'yarn.cmd' : 'yarn'; +const root = path.dirname(path.dirname(__dirname)); + +function run(command, args, opts) { + console.log('$ ' + command + ' ' + args.join(' ')); + + const result = cp.spawnSync(command, args, opts); + + if (result.error) { + console.error(`ERR Failed to spawn process: ${result.error}`); + process.exit(1); + } else if (result.status !== 0) { + console.error(`ERR Process exited with code: ${result.status}`); + process.exit(result.status); + } +} /** - * @param {string} location + * @param {string} dir * @param {*} [opts] */ -function yarnInstall(location, opts) { - opts = opts || { env: process.env }; - opts.cwd = location; - opts.stdio = 'inherit'; +function yarnInstall(dir, opts) { + opts = { + env: { ...process.env }, + ...(opts ?? {}), + cwd: dir, + stdio: 'inherit', + }; const raw = process.env['npm_config_argv'] || '{}'; const argv = JSON.parse(raw); const original = argv.original || []; const args = original.filter(arg => arg === '--ignore-optional' || arg === '--frozen-lockfile' || arg === '--check-files'); + if (opts.ignoreEngines) { args.push('--ignore-engines'); delete opts.ignoreEngines; } - console.log(`Installing dependencies in ${location}...`); - console.log(`$ yarn ${args.join(' ')}`); - const result = cp.spawnSync(yarn, args, opts); + if (process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'] && /^(.build\/distro\/npm\/)?remote$/.test(dir)) { + const userinfo = os.userInfo(); + console.log(`Installing dependencies in ${dir} inside container ${process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME']}...`); - if (result.error || result.status !== 0) { - process.exit(1); + opts.cwd = root; + run('docker', ['run', '-e', 'GITHUB_TOKEN', '-e', 'npm_config_arch', '-v', `/mnt/vss/_work/1/s:/root/vscode`, '-v', `/mnt/vss/_work/1/s/.build/.netrc:/root/.netrc`, process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'], 'yarn', '--cwd', dir, ...args], opts); + run('sudo', ['chown', '-R', `${userinfo.uid}:${userinfo.gid}`, `${dir}/node_modules`], opts); + } else { + console.log(`Installing dependencies in ${dir}...`); + run(yarn, args, opts); } } @@ -42,7 +68,16 @@ for (let dir of dirs) { continue; } - if (/^remote/.test(dir) && process.platform === 'win32' && (process.arch === 'arm64' || process.env['npm_config_arch'] === 'arm64')) { + if (/^.build\/distro\/npm(\/?)/.test(dir)) { + const ossPath = path.relative('.build/distro/npm', dir); + const ossYarnRc = path.join(ossPath, '.yarnrc'); + + if (fs.existsSync(ossYarnRc)) { + fs.cpSync(ossYarnRc, path.join(dir, '.yarnrc')); + } + } + + if (/^(.build\/distro\/npm\/)?remote/.test(dir) && process.platform === 'win32' && (process.arch === 'arm64' || process.env['npm_config_arch'] === 'arm64')) { // windows arm: do not execute `yarn` on remote folder continue; } @@ -55,7 +90,7 @@ for (let dir of dirs) { let opts; - if (dir === 'remote') { + if (/^(.build\/distro\/npm\/)?remote$/.test(dir)) { // node modules used by vscode server const env = { ...process.env }; if (process.env['VSCODE_REMOTE_CC']) { env['CC'] = process.env['VSCODE_REMOTE_CC']; } diff --git a/build/npm/preinstall.js b/build/npm/preinstall.js index afefc404267..79f2b629c5d 100644 --- a/build/npm/preinstall.js +++ b/build/npm/preinstall.js @@ -9,8 +9,8 @@ const majorNodeVersion = parseInt(nodeVersion[1]); const minorNodeVersion = parseInt(nodeVersion[2]); const patchNodeVersion = parseInt(nodeVersion[3]); -if (majorNodeVersion < 16 || (majorNodeVersion === 16 && minorNodeVersion < 14)) { - console.error('\033[1;31m*** Please use node.js versions >=16.14.x and <17.\033[0;0m'); +if (majorNodeVersion < 16 || (majorNodeVersion === 16 && minorNodeVersion < 17)) { + console.error('\033[1;31m*** Please use node.js versions >=16.17.x and <17.\033[0;0m'); err = true; } if (majorNodeVersion >= 17) { diff --git a/build/npm/update-localization-extension.js b/build/npm/update-localization-extension.js index b78674a7099..6274323f747 100644 --- a/build/npm/update-localization-extension.js +++ b/build/npm/update-localization-extension.js @@ -23,6 +23,10 @@ function update(options) { if (location !== undefined && !fs.existsSync(location)) { throw new Error(`${location} doesn't exist.`); } + let externalExtensionsLocation = options.externalExtensionsLocation; + if (externalExtensionsLocation !== undefined && !fs.existsSync(externalExtensionsLocation)) { + throw new Error(`${externalExtensionsLocation} doesn't exist.`); + } let locExtFolder = idOrPath; if (/^\w{2,3}(-\w+)?$/.test(idOrPath)) { locExtFolder = path.join('..', 'vscode-loc', 'i18n', `vscode-language-pack-${idOrPath}`); @@ -67,7 +71,10 @@ function update(options) { console.log(`Importing translations for ${languageId} form '${location}' to '${translationDataFolder}' ...`); let translationPaths = []; - gulp.src(path.join(location, '**', languageId, '*.xlf'), { silent: false }) + gulp.src([ + path.join(location, '**', languageId, '*.xlf'), + ...i18n.EXTERNAL_EXTENSIONS.map(extensionId => path.join(externalExtensionsLocation, extensionId, languageId, '*-new.xlf')) + ], { silent: false }) .pipe(i18n.prepareI18nPackFiles(translationPaths)) .on('error', (error) => { console.log(`Error occurred while importing translations:`); @@ -94,7 +101,7 @@ function update(options) { } if (path.basename(process.argv[1]) === 'update-localization-extension.js') { var options = minimist(process.argv.slice(2), { - string: 'location' + string: ['location', 'externalExtensionsLocation'] }); update(options); } diff --git a/build/package.json b/build/package.json index 9aec4333189..df7b7799a24 100644 --- a/build/package.json +++ b/build/package.json @@ -3,16 +3,16 @@ "version": "1.0.0", "license": "MIT", "devDependencies": { - "@azure/cosmos": "^3.14.1", - "@azure/identity": "^2.0.4", - "@azure/storage-blob": "^12.8.0", + "@azure/cosmos": "^3.17.3", + "@azure/identity": "^3.1.3", + "@azure/storage-blob": "^12.13.0", "@electron/get": "^1.12.4", + "@iarna/toml": "^2.2.5", "@types/ansi-colors": "^3.2.0", "@types/byline": "^4.2.32", "@types/cssnano": "^4.0.0", "@types/debounce": "^1.0.0", "@types/debug": "4.1.5", - "@types/eslint": "4.16.1", "@types/fancy-log": "^1.3.0", "@types/fs-extra": "^9.0.12", "@types/glob": "^7.1.1", @@ -24,6 +24,7 @@ "@types/gulp-postcss": "^8.0.0", "@types/gulp-rename": "^0.0.33", "@types/gulp-sourcemaps": "^0.0.32", + "@types/iarna__toml": "^2.0.2", "@types/mime": "0.0.29", "@types/minimatch": "^3.0.3", "@types/minimist": "^1.2.1", @@ -32,13 +33,12 @@ "@types/node": "16.x", "@types/p-limit": "^2.2.0", "@types/pump": "^1.0.1", - "@types/request": "^2.47.0", "@types/rimraf": "^2.0.4", "@types/through": "^0.0.29", "@types/through2": "^2.0.36", "@types/tmp": "^0.2.1", "@types/underscore": "^1.8.9", - "@types/webpack": "^4.41.25", + "@types/workerpool": "^6.4.0", "@types/xml2js": "0.0.33", "@vscode/iconv-lite-umd": "0.7.0", "@vscode/vsce": "^2.16.0", @@ -47,10 +47,8 @@ "commander": "^7.0.0", "debug": "^4.3.2", "electron-osx-sign": "^0.4.16", - "esbuild": "0.15.5", + "esbuild": "0.17.14", "extract-zip": "^2.0.1", - "fs-extra": "^9.1.0", - "got": "11.8.5", "gulp-merge-json": "^2.1.1", "gulp-shell": "^0.8.0", "jsonc-parser": "^2.3.0", @@ -73,5 +71,8 @@ "tree-sitter": "https://github.com/joaomoreno/node-tree-sitter/releases/download/v0.20.0/tree-sitter-0.20.0.tgz", "tree-sitter-typescript": "^0.20.1", "vscode-gulp-watch": "^5.0.3" + }, + "dependencies": { + "workerpool": "^6.4.0" } } diff --git a/build/setup-npm-registry.js b/build/setup-npm-registry.js index 75a5fdc8131..98bc836b072 100644 --- a/build/setup-npm-registry.js +++ b/build/setup-npm-registry.js @@ -29,8 +29,8 @@ async function setup(url, file) { await fs.writeFile(file, contents); } -async function main(url) { - const root = process.cwd(); +async function main(url, dir) { + const root = dir ?? process.cwd(); for await (const file of getYarnLockFiles(root)) { console.log(`Enabling custom NPM registry: ${path.relative(root, file)}`); @@ -38,4 +38,4 @@ async function main(url) { } } -main(process.argv[2]); +main(process.argv[2], process.argv[3]); diff --git a/build/stylelint.js b/build/stylelint.js new file mode 100644 index 00000000000..5b1668ea2e4 --- /dev/null +++ b/build/stylelint.js @@ -0,0 +1,57 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +const es = require('event-stream'); +const vfs = require('vinyl-fs'); +const { stylelintFilter } = require('./filters'); +const { getVariableNameValidator } = require('./lib/stylelint/validateVariableNames'); + +module.exports = gulpstylelint; + +/** use regex on lines */ +function gulpstylelint(reporter) { + const variableValidator = getVariableNameValidator(); + let errorCount = 0; + return es.through(function (file) { + const lines = file.__lines || file.contents.toString('utf8').split(/\r\n|\r|\n/); + file.__lines = lines; + + lines.forEach((line, i) => { + variableValidator(line, unknownVariable => { + reporter(file.relative + '(' + (i + 1) + ',1): Unknown variable: ' + unknownVariable, true); + errorCount++; + }); + }); + + this.emit('data', file); + }, function () { + if (errorCount > 0) { + reporter('All valid variable names are in `build/lib/stylelint/vscode-known-variables.json`\nTo update that file, run `./scripts/test-documentation.sh|bat.`', false); + } + this.emit('end'); + } + ); +} + +function stylelint() { + return vfs + .src(stylelintFilter, { base: '.', follow: true, allowEmpty: true }) + .pipe(gulpstylelint((message, isError) => { + if (isError) { + console.error(message); + } else { + console.info(message); + } + })) + .pipe(es.through(function () { /* noop, important for the stream to end */ })); +} + +if (require.main === module) { + stylelint().on('error', (err) => { + console.error(); + console.error(err); + process.exit(1); + }); +} diff --git a/build/win32/Cargo.lock b/build/win32/Cargo.lock index 0601c70fb9e..f83ae22dfc2 100644 --- a/build/win32/Cargo.lock +++ b/build/win32/Cargo.lock @@ -19,12 +19,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "build_const" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" - [[package]] name = "byteorder" version = "1.4.3" @@ -39,13 +33,19 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "crc" -version = "1.8.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" dependencies = [ - "build_const", + "crc-catalog", ] +[[package]] +name = "crc-catalog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" + [[package]] name = "crossbeam-channel" version = "0.5.5" @@ -109,14 +109,14 @@ dependencies = [ [[package]] name = "inno_updater" -version = "0.9.0" +version = "0.10.0" dependencies = [ "byteorder", "crc", "slog", "slog-async", "slog-term", - "winapi", + "windows-sys", ] [[package]] @@ -329,3 +329,60 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" diff --git a/build/win32/Cargo.toml b/build/win32/Cargo.toml index decae65f9e6..faf7e7fe6d1 100644 --- a/build/win32/Cargo.toml +++ b/build/win32/Cargo.toml @@ -1,18 +1,30 @@ [package] name = "inno_updater" -version = "0.9.0" +version = "0.10.0" authors = ["Microsoft "] build = "build.rs" [dependencies] -byteorder = "1" -crc = "^1.0.0" -slog = "2.1.1" -slog-async = "2.2.0" -slog-term = "2.3.0" +byteorder = "1.4.3" +crc = "3.0.1" +slog = "2.7.0" +slog-async = "2.7.0" +slog-term = "2.9.0" -[target.'cfg(windows)'.dependencies] -winapi = { version = "^0.3.9", features = ["winuser", "libloaderapi", "commctrl", "processthreadsapi", "tlhelp32", "handleapi", "psapi", "errhandlingapi", "winbase", "shellapi"] } +[target.'cfg(windows)'.dependencies.windows-sys] +version = "0.42" +features = [ + "Win32_Foundation", + "Win32_System_Shutdown", + "Win32_UI_WindowsAndMessaging", + "Win32_System_Threading", + "Win32_System_LibraryLoader", + "Win32_System_Diagnostics_Debug", + "Win32_Storage_FileSystem", + "Win32_Security", + "Win32_System_ProcessStatus", + "Win32_System_Diagnostics_ToolHelp" +] [profile.release] lto = true diff --git a/build/win32/code.iss b/build/win32/code.iss index d365ab1cbda..44c9f2f1f0b 100644 --- a/build/win32/code.iss +++ b/build/win32/code.iss @@ -26,7 +26,7 @@ SetupIconFile={#RepoDir}\resources\win32\code.ico UninstallDisplayIcon={app}\{#ExeBasename}.exe ChangesEnvironment=true ChangesAssociations=true -MinVersion=6.2 +MinVersion=10.0 SourceDir={#SourceDir} AppVersion={#Version} VersionInfoVersion={#RawVersion} @@ -62,13 +62,13 @@ Name: "hungarian"; MessagesFile: "{#RepoDir}\build\win32\i18n\Default.hu.isl,{#R Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl,{#RepoDir}\build\win32\i18n\messages.tr.isl" {#LocalizedLanguageFile("trk")} [InstallDelete] -Type: filesandordirs; Name: "{app}\resources\app\out"; Check: IsNotUpdate -Type: filesandordirs; Name: "{app}\resources\app\plugins"; Check: IsNotUpdate -Type: filesandordirs; Name: "{app}\resources\app\extensions"; Check: IsNotUpdate -Type: filesandordirs; Name: "{app}\resources\app\node_modules"; Check: IsNotUpdate -Type: filesandordirs; Name: "{app}\resources\app\node_modules.asar.unpacked"; Check: IsNotUpdate -Type: files; Name: "{app}\resources\app\node_modules.asar"; Check: IsNotUpdate -Type: files; Name: "{app}\resources\app\Credits_45.0.2454.85.html"; Check: IsNotUpdate +Type: filesandordirs; Name: "{app}\resources\app\out"; Check: IsNotBackgroundUpdate +Type: filesandordirs; Name: "{app}\resources\app\plugins"; Check: IsNotBackgroundUpdate +Type: filesandordirs; Name: "{app}\resources\app\extensions"; Check: IsNotBackgroundUpdate +Type: filesandordirs; Name: "{app}\resources\app\node_modules"; Check: IsNotBackgroundUpdate +Type: filesandordirs; Name: "{app}\resources\app\node_modules.asar.unpacked"; Check: IsNotBackgroundUpdate +Type: files; Name: "{app}\resources\app\node_modules.asar"; Check: IsNotBackgroundUpdate +Type: files; Name: "{app}\resources\app\Credits_45.0.2454.85.html"; Check: IsNotBackgroundUpdate [UninstallDelete] Type: filesandordirs; Name: "{app}\_" @@ -1299,6 +1299,16 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Drive\shell\{#RegValu Root: {#EnvironmentRootKey}; Subkey: "{#EnvironmentKey}"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\bin"; Tasks: addtopath; Check: NeedsAddPath(ExpandConstant('{app}\bin')) [Code] +function IsBackgroundUpdate(): Boolean; +begin + Result := ExpandConstant('{param:update|false}') <> 'false'; +end; + +function IsNotBackgroundUpdate(): Boolean; +begin + Result := not IsBackgroundUpdate(); +end; + // Don't allow installing conflicting architectures function InitializeSetup(): Boolean; var @@ -1351,6 +1361,13 @@ begin MsgBox('Please uninstall the ' + AltArch + '-bit version of {#NameShort} before installing this ' + ThisArch + '-bit version.', mbInformation, MB_OK); end; end; + + if IsNotBackgroundUpdate() and CheckForMutexes('{#TunnelMutex}') then + begin + MsgBox('{#NameShort} is still running a tunnel. Please stop the tunnel before installing.', mbInformation, MB_OK); + Result := false + end; + end; function WizardNotSilent(): Boolean; @@ -1359,14 +1376,44 @@ begin end; // Updates -function IsBackgroundUpdate(): Boolean; + +var + ShouldRestartTunnelService: Boolean; + +procedure StopTunnelServiceIfNeeded(); +var + StopServiceResultCode: Integer; + WaitCounter: Integer; begin - Result := ExpandConstant('{param:update|false}') <> 'false'; + ShouldRestartTunnelService := False; + if CheckForMutexes('{#TunnelServiceMutex}') then begin + // stop the tunnel service + Log('Stopping the tunnel service using ' + ExpandConstant('"{app}\bin\{#ApplicationName}.cmd"')); + ShellExec('', ExpandConstant('"{app}\bin\{#ApplicationName}.cmd"'), 'tunnel service uninstall', '', SW_HIDE, ewWaitUntilTerminated, StopServiceResultCode); + + Log('Stopping the tunnel service completed with result code ' + IntToStr(StopServiceResultCode)); + + WaitCounter := 10; + while (WaitCounter > 0) and CheckForMutexes('{#TunnelServiceMutex}') do + begin + Log('Tunnel service is still running, waiting'); + Sleep(500); + WaitCounter := WaitCounter - 1 + end; + if CheckForMutexes('{#TunnelServiceMutex}') then + Log('Unable to stop tunnel service') + else + ShouldRestartTunnelService := True; + end end; -function IsNotUpdate(): Boolean; + +// called before the wizard checks for running application +function PrepareToInstall(var NeedsRestart: Boolean): String; begin - Result := not IsBackgroundUpdate(); + if IsNotBackgroundUpdate() then + StopTunnelServiceIfNeeded(); + Result := '' end; // VS Code will create a flag file before the update starts (/update=C:\foo\bar) @@ -1450,18 +1497,33 @@ end; procedure CurStepChanged(CurStep: TSetupStep); var UpdateResultCode: Integer; + StartServiceResultCode: Integer; begin - if IsBackgroundUpdate() and (CurStep = ssPostInstall) then + if CurStep = ssPostInstall then begin - CreateMutex('{#AppMutex}-ready'); - - while (CheckForMutexes('{#AppMutex}')) do + if IsBackgroundUpdate() then begin - Log('Application is still running, waiting'); - Sleep(1000); + CreateMutex('{#AppMutex}-ready'); + + while (CheckForMutexes('{#AppMutex}')) do + begin + Log('Application is still running, waiting'); + Sleep(1000) + end; + + StopTunnelServiceIfNeeded(); + + Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"{app}\{#ExeBasename}.exe" ' + BoolToStr(LockFileExists())), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); end; - Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"{app}\{#ExeBasename}.exe" ' + BoolToStr(LockFileExists())), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); + if ShouldRestartTunnelService then + begin + // start the tunnel service + Log('Restarting the tunnel service...'); + ShellExec('', ExpandConstant('"{app}\bin\{#ApplicationName}.cmd"'), 'tunnel service install', '', SW_HIDE, ewWaitUntilTerminated, StartServiceResultCode); + Log('Starting the tunnel service completed with result code ' + IntToStr(StartServiceResultCode)); + ShouldRestartTunnelService := False + end; end; end; @@ -1545,4 +1607,4 @@ begin #endif Exec(ExpandConstant('{sys}\icacls.exe'), ExpandConstant('"{app}" /inheritancelevel:r ') + Permissions, '', SW_HIDE, ewWaitUntilTerminated, ResultCode); -end; +end; \ No newline at end of file diff --git a/build/win32/explorer-appx-fetcher.js b/build/win32/explorer-appx-fetcher.js index 53b52af0305..79df094c182 100644 --- a/build/win32/explorer-appx-fetcher.js +++ b/build/win32/explorer-appx-fetcher.js @@ -5,21 +5,21 @@ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.downloadExplorerAppx = void 0; +const fs = require("fs"); const debug = require("debug"); const extract = require("extract-zip"); -const fs = require("fs-extra"); const path = require("path"); -const product = require("../../product.json"); const get_1 = require("@electron/get"); +const root = path.dirname(path.dirname(__dirname)); const d = debug('explorer-appx-fetcher'); async function downloadExplorerAppx(outDir, quality = 'stable', targetArch = 'x64') { const fileNamePrefix = quality === 'insider' ? 'code_insiders' : 'code'; const fileName = `${fileNamePrefix}_explorer_${targetArch}.zip`; - if (await fs.pathExists(path.resolve(outDir, 'resources.pri'))) { + if (await fs.existsSync(path.resolve(outDir, 'resources.pri'))) { return; } - if (!await fs.pathExists(outDir)) { - await fs.mkdirp(outDir); + if (!await fs.existsSync(outDir)) { + await fs.mkdirSync(outDir, { recursive: true }); } d(`downloading ${fileName}`); const artifact = await (0, get_1.downloadArtifact)({ @@ -34,11 +34,10 @@ async function downloadExplorerAppx(outDir, quality = 'stable', targetArch = 'x6 } }); d(`unpacking from ${fileName}`); - await extract(artifact, { dir: outDir }); + await extract(artifact, { dir: fs.realpathSync(outDir) }); } exports.downloadExplorerAppx = downloadExplorerAppx; -async function main() { - const outputDir = process.env['VSCODE_EXPLORER_APPX_DIR']; +async function main(outputDir) { let arch = process.env['VSCODE_ARCH']; if (!outputDir) { throw new Error('Required build env not set'); @@ -46,12 +45,13 @@ async function main() { if (arch === 'ia32') { arch = 'x86'; } + const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); await downloadExplorerAppx(outputDir, product.quality, arch); } if (require.main === module) { - main().catch(err => { + main(process.argv[2]).catch(err => { console.error(err); process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbG9yZXItYXBweC1mZXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwbG9yZXItYXBweC1mZXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Z0dBR2dHO0FBRWhHLFlBQVksQ0FBQzs7O0FBRWIsK0JBQStCO0FBQy9CLHVDQUF1QztBQUN2QywrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLDhDQUE4QztBQUM5Qyx1Q0FBaUQ7QUFFakQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFbEMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxVQUFrQixRQUFRLEVBQUUsYUFBcUIsS0FBSztJQUNoSCxNQUFNLGNBQWMsR0FBRyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4RSxNQUFNLFFBQVEsR0FBRyxHQUFHLGNBQWMsYUFBYSxVQUFVLE1BQU0sQ0FBQztJQUVoRSxJQUFJLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxFQUFFO1FBQy9ELE9BQU87S0FDUDtJQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDakMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsQ0FBQyxDQUFDLGVBQWUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsc0JBQWdCLEVBQUM7UUFDdkMsU0FBUyxFQUFFLElBQUk7UUFDZixPQUFPLEVBQUUsT0FBTztRQUNoQixZQUFZLEVBQUUsUUFBUTtRQUN0Qix3QkFBd0IsRUFBRSxJQUFJO1FBQzlCLGFBQWEsRUFBRTtZQUNkLE1BQU0sRUFBRSx5RUFBeUU7WUFDakYsU0FBUyxFQUFFLE9BQU87WUFDbEIsY0FBYyxFQUFFLFFBQVE7U0FDeEI7S0FDRCxDQUFDLENBQUM7SUFFSCxDQUFDLENBQUMsa0JBQWtCLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEMsTUFBTSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQTNCRCxvREEyQkM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNsQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDMUQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUV0QyxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0tBQzlDO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQ3BCLElBQUksR0FBRyxLQUFLLENBQUM7S0FDYjtJQUVELE1BQU0sb0JBQW9CLENBQUMsU0FBUyxFQUFHLE9BQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7SUFDNUIsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztDQUNIIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbG9yZXItYXBweC1mZXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwbG9yZXItYXBweC1mZXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Z0dBR2dHO0FBRWhHLFlBQVksQ0FBQzs7O0FBRWIseUJBQXlCO0FBQ3pCLCtCQUErQjtBQUMvQix1Q0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLHVDQUFpRDtBQUVqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVuRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUVsQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBYyxFQUFFLFVBQWtCLFFBQVEsRUFBRSxhQUFxQixLQUFLO0lBQ2hILE1BQU0sY0FBYyxHQUFHLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hFLE1BQU0sUUFBUSxHQUFHLEdBQUcsY0FBYyxhQUFhLFVBQVUsTUFBTSxDQUFDO0lBRWhFLElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEVBQUU7UUFDL0QsT0FBTztLQUNQO0lBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNqQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7S0FDaEQ7SUFFRCxDQUFDLENBQUMsZUFBZSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxzQkFBZ0IsRUFBQztRQUN2QyxTQUFTLEVBQUUsSUFBSTtRQUNmLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFlBQVksRUFBRSxRQUFRO1FBQ3RCLHdCQUF3QixFQUFFLElBQUk7UUFDOUIsYUFBYSxFQUFFO1lBQ2QsTUFBTSxFQUFFLHlFQUF5RTtZQUNqRixTQUFTLEVBQUUsT0FBTztZQUNsQixjQUFjLEVBQUUsUUFBUTtTQUN4QjtLQUNELENBQUMsQ0FBQztJQUVILENBQUMsQ0FBQyxrQkFBa0IsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQTNCRCxvREEyQkM7QUFFRCxLQUFLLFVBQVUsSUFBSSxDQUFDLFNBQWtCO0lBQ3JDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFdEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztLQUM5QztJQUVELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUNwQixJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ2I7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRixNQUFNLG9CQUFvQixDQUFDLFNBQVMsRUFBRyxPQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO0lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztDQUNIIn0= \ No newline at end of file diff --git a/build/win32/explorer-appx-fetcher.ts b/build/win32/explorer-appx-fetcher.ts index 9f49d954474..5d9acb6fb13 100644 --- a/build/win32/explorer-appx-fetcher.ts +++ b/build/win32/explorer-appx-fetcher.ts @@ -5,25 +5,26 @@ 'use strict'; +import * as fs from 'fs'; import * as debug from 'debug'; import * as extract from 'extract-zip'; -import * as fs from 'fs-extra'; import * as path from 'path'; -import * as product from '../../product.json'; import { downloadArtifact } from '@electron/get'; +const root = path.dirname(path.dirname(__dirname)); + const d = debug('explorer-appx-fetcher'); export async function downloadExplorerAppx(outDir: string, quality: string = 'stable', targetArch: string = 'x64'): Promise { const fileNamePrefix = quality === 'insider' ? 'code_insiders' : 'code'; const fileName = `${fileNamePrefix}_explorer_${targetArch}.zip`; - if (await fs.pathExists(path.resolve(outDir, 'resources.pri'))) { + if (await fs.existsSync(path.resolve(outDir, 'resources.pri'))) { return; } - if (!await fs.pathExists(outDir)) { - await fs.mkdirp(outDir); + if (!await fs.existsSync(outDir)) { + await fs.mkdirSync(outDir, { recursive: true }); } d(`downloading ${fileName}`); @@ -40,11 +41,10 @@ export async function downloadExplorerAppx(outDir: string, quality: string = 'st }); d(`unpacking from ${fileName}`); - await extract(artifact, { dir: outDir }); + await extract(artifact, { dir: fs.realpathSync(outDir) }); } -async function main(): Promise { - const outputDir = process.env['VSCODE_EXPLORER_APPX_DIR']; +async function main(outputDir?: string): Promise { let arch = process.env['VSCODE_ARCH']; if (!outputDir) { @@ -55,11 +55,12 @@ async function main(): Promise { arch = 'x86'; } + const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); await downloadExplorerAppx(outputDir, (product as any).quality, arch); } if (require.main === module) { - main().catch(err => { + main(process.argv[2]).catch(err => { console.error(err); process.exit(1); }); diff --git a/build/win32/inno_updater.exe b/build/win32/inno_updater.exe index fea47a59c9d..941ebfe4081 100644 Binary files a/build/win32/inno_updater.exe and b/build/win32/inno_updater.exe differ diff --git a/build/yarn.lock b/build/yarn.lock index 510330a3a75..3c3bce1fbc5 100644 --- a/build/yarn.lock +++ b/build/yarn.lock @@ -35,22 +35,21 @@ "@azure/logger" "^1.0.0" tslib "^2.2.0" -"@azure/core-http@^2.0.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-2.2.2.tgz#573798f087d808d39aa71fd7c52b8d7b89f440da" - integrity sha512-V1DdoO9V/sFimKpdWoNBgsE+QUjQgpXYnxrTdUp5RyhsTJjvEVn/HKmTQXIHuLUUo6IyIWj+B+Dg4VaXse9dIA== +"@azure/core-http@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-3.0.0.tgz#345845f9ba479a5ee41efc3fd7a13e82d2a0ec47" + integrity sha512-BxI2SlGFPPz6J1XyZNIVUf0QZLBKFX+ViFjKOkzqD18J1zOINIQ8JSBKKr+i+v8+MB6LacL6Nn/sP/TE13+s2Q== dependencies: "@azure/abort-controller" "^1.0.0" - "@azure/core-asynciterator-polyfill" "^1.0.0" "@azure/core-auth" "^1.3.0" "@azure/core-tracing" "1.0.0-preview.13" + "@azure/core-util" "^1.1.1" "@azure/logger" "^1.0.0" "@types/node-fetch" "^2.5.0" "@types/tunnel" "^0.0.3" form-data "^4.0.0" - node-fetch "^2.6.0" + node-fetch "^2.6.7" process "^0.11.10" - tough-cookie "^4.0.0" tslib "^2.2.0" tunnel "^0.0.6" uuid "^8.3.0" @@ -111,45 +110,55 @@ "@opentelemetry/api" "^1.0.1" tslib "^2.2.0" -"@azure/core-util@^1.0.0-beta.1": - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.0.0-beta.1.tgz#2efd2c74b4b0a38180369f50fe274a3c4cd36e98" - integrity sha512-pS6cup979/qyuyNP9chIybK2qVkJ3MarbY/bx3JcGKE6An6dRweLnsfJfU2ydqUI/B51Rjnn59ajHIhCUTwWZw== +"@azure/core-tracing@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.1.tgz#352a38cbea438c4a83c86b314f48017d70ba9503" + integrity sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw== dependencies: - tslib "^2.0.0" + tslib "^2.2.0" -"@azure/cosmos@^3.14.1": - version "3.14.1" - resolved "https://registry.yarnpkg.com/@azure/cosmos/-/cosmos-3.14.1.tgz#974087eca9a76f9826d14898414219f19474f314" - integrity sha512-i8HJOlmVfr1P5qMNgKbEpszddtT8Ooskj2pJm0ZD7jeMuwN2tYlQ68eLyCmynv1j5PQimLGjlobBVuFuM8uNAA== +"@azure/core-util@^1.0.0", "@azure/core-util@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.2.0.tgz#3499deba1fc36dda6f1912b791809b6f15d4a392" + integrity sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng== dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/cosmos@^3.17.3": + version "3.17.3" + resolved "https://registry.yarnpkg.com/@azure/cosmos/-/cosmos-3.17.3.tgz#380398496af8ef3473ae0a9ad8cdbab32d91eb08" + integrity sha512-wBglkQ6Irjv5Vo2iw8fd6eYj60WYRSSg4/0DBkeOP6BwQ4RA91znsOHd6s3qG6UAbNgYuzC9Nnq07vlFFZkHEw== + dependencies: + "@azure/abort-controller" "^1.0.0" "@azure/core-auth" "^1.3.0" "@azure/core-rest-pipeline" "^1.2.0" + "@azure/core-tracing" "^1.0.0" debug "^4.1.1" fast-json-stable-stringify "^2.1.0" jsbi "^3.1.3" - node-abort-controller "^1.2.0" + node-abort-controller "^3.0.0" priorityqueuejs "^1.0.0" semaphore "^1.0.5" tslib "^2.2.0" universal-user-agent "^6.0.0" uuid "^8.3.0" -"@azure/identity@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-2.0.4.tgz#f5cfde0daf1b9ebaaff3ed6c504f50d7d7c939a5" - integrity sha512-ZgFubAsmo7dji63NLPaot6O7pmDfceAUPY57uphSCr0hmRj+Cakqb4SUz5SohCHFtscrhcmejRU903Fowz6iXg== +"@azure/identity@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-3.1.3.tgz#667a635b305d9d519e5c91cea5ba3390d0d2c198" + integrity sha512-y0jFjSfHsVPwXSwi3KaSPtOZtJZqhiqAhWUXfFYBUd/+twUBovZRXspBwLrF5rJe0r5NyvmScpQjL+TYDTQVvw== dependencies: "@azure/abort-controller" "^1.0.0" "@azure/core-auth" "^1.3.0" "@azure/core-client" "^1.4.0" "@azure/core-rest-pipeline" "^1.1.0" - "@azure/core-tracing" "1.0.0-preview.13" - "@azure/core-util" "^1.0.0-beta.1" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.0.0" "@azure/logger" "^1.0.0" - "@azure/msal-browser" "^2.16.0" - "@azure/msal-common" "^4.5.1" - "@azure/msal-node" "^1.3.0" + "@azure/msal-browser" "^2.32.2" + "@azure/msal-common" "^9.0.2" + "@azure/msal-node" "^1.14.6" events "^3.0.0" jws "^4.0.0" open "^8.0.0" @@ -164,44 +173,39 @@ dependencies: tslib "^2.0.0" -"@azure/msal-browser@^2.16.0": - version "2.19.0" - resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-2.19.0.tgz#6915d200e0679eb8b26368bf0e0fc02ee4a8617a" - integrity sha512-nVMMSbFeocGv3SUYGBD+3pkE/pbAciGhER3KCjsBu6Sy9EDaBCiQ418KZfHBcCcrNQgFxf3nleWdeYoYX7281g== +"@azure/msal-browser@^2.32.2": + version "2.35.0" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-2.35.0.tgz#39b553f5da140d5d16bf90e0d92f1bcc6f0d61d3" + integrity sha512-L+gSBbJfU3H81Bnj+VIVjO7jRpt2Ex+4i2YVOPE50ykfQ5W9mtBFMRCHb1K+8FzTeyQH/KkQv6bC+MdaU+3LEw== dependencies: - "@azure/msal-common" "^5.1.0" + "@azure/msal-common" "^12.0.0" -"@azure/msal-common@^4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-4.5.1.tgz#f35af8b634ae24aebd0906deb237c0db1afa5826" - integrity sha512-/i5dXM+QAtO+6atYd5oHGBAx48EGSISkXNXViheliOQe+SIFMDo3gSq3lL54W0suOSAsVPws3XnTaIHlla0PIQ== - dependencies: - debug "^4.1.1" +"@azure/msal-common@^12.0.0": + version "12.0.0" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-12.0.0.tgz#bcb41fd31657a34c4218ec38332de76ec6bf03e6" + integrity sha512-SvQl4JWy1yZnxyq0xng/urf103wz68UJG0K9Dq2NM2to7ePA+R1hMisKnXELJvZrEGYANGbh/Hc0T9piGqOteQ== -"@azure/msal-common@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-5.1.0.tgz#e3a75a8ba1602da040698046161961d6dc59bbc4" - integrity sha512-4zHZ5Ec7jAgTIWZO3ap1ozgIPGAirF1wL8UhsmPF9QDoZz0cMHdaNmtov5i2+6Xq37YMzhN5s50EFHBuXd7sDQ== - dependencies: - debug "^4.1.1" +"@azure/msal-common@^9.0.2": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-9.1.1.tgz#906d27905c956fe91bd8f31855fc624359098d83" + integrity sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw== -"@azure/msal-node@^1.3.0": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-1.3.3.tgz#3b977fa371d0c5fcd63df2e458353044a1eb64a1" - integrity sha512-ZtVCVzr7V4xEeqICa7E9g6BY3noZv96XG11ENuqEiz/PA1OzPD1/x0QF6BPHVldST8wwoevXxPw+t/h3AFII7w== +"@azure/msal-node@^1.14.6": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-1.17.0.tgz#fa7bba155719a7e26ac6e8d4941dd56e807e458a" + integrity sha512-aOKykKxDc+Kf5vcdOUPdKlJ96YAIyrHyl4W8RyfMqw0iApDckOuhejNwlZr6/M7U40wo1Wj4PwxRVx7d8OFBFg== dependencies: - "@azure/msal-common" "^5.1.0" - axios "^0.21.4" - jsonwebtoken "^8.5.1" + "@azure/msal-common" "^12.0.0" + jsonwebtoken "^9.0.0" uuid "^8.3.0" -"@azure/storage-blob@^12.8.0": - version "12.8.0" - resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.8.0.tgz#97b7ecc6c7b17bcbaf0281c79c16af6f512d6130" - integrity sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A== +"@azure/storage-blob@^12.13.0": + version "12.13.0" + resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.13.0.tgz#9209cbb5c2cd463fb967a0f2ae144ace20879160" + integrity sha512-t3Q2lvBMJucgTjQcP5+hvEJMAsJSk0qmAnjDLie2td017IiduZbbC9BOcFfmwzR6y6cJdZOuewLCNFmEx9IrXA== dependencies: "@azure/abort-controller" "^1.0.0" - "@azure/core-http" "^2.0.0" + "@azure/core-http" "^3.0.0" "@azure/core-lro" "^2.2.0" "@azure/core-paging" "^1.1.1" "@azure/core-tracing" "1.0.0-preview.13" @@ -225,10 +229,120 @@ global-agent "^2.0.2" global-tunnel-ng "^2.7.1" -"@esbuild/linux-loong64@0.15.5": - version "0.15.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz#91aef76d332cdc7c8942b600fa2307f3387e6f82" - integrity sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A== +"@esbuild/android-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.14.tgz#4624cea3c8941c91f9e9c1228f550d23f1cef037" + integrity sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg== + +"@esbuild/android-arm@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.14.tgz#74fae60fcab34c3f0e15cb56473a6091ba2b53a6" + integrity sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g== + +"@esbuild/android-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.14.tgz#f002fbc08d5e939d8314bd23bcfb1e95d029491f" + integrity sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng== + +"@esbuild/darwin-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.14.tgz#b8dcd79a1dd19564950b4ca51d62999011e2e168" + integrity sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw== + +"@esbuild/darwin-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.14.tgz#4b49f195d9473625efc3c773fc757018f2c0d979" + integrity sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g== + +"@esbuild/freebsd-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.14.tgz#480923fd38f644c6342c55e916cc7c231a85eeb7" + integrity sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A== + +"@esbuild/freebsd-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.14.tgz#a6b6b01954ad8562461cb8a5e40e8a860af69cbe" + integrity sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw== + +"@esbuild/linux-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.14.tgz#1fe2f39f78183b59f75a4ad9c48d079916d92418" + integrity sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g== + +"@esbuild/linux-arm@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.14.tgz#18d594a49b64e4a3a05022c005cb384a58056a2a" + integrity sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg== + +"@esbuild/linux-ia32@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.14.tgz#f7f0182a9cfc0159e0922ed66c805c9c6ef1b654" + integrity sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ== + +"@esbuild/linux-loong64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.14.tgz#5f5305fdffe2d71dd9a97aa77d0c99c99409066f" + integrity sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ== + +"@esbuild/linux-mips64el@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.14.tgz#a602e85c51b2f71d2aedfe7f4143b2f92f97f3f5" + integrity sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg== + +"@esbuild/linux-ppc64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.14.tgz#32d918d782105cbd9345dbfba14ee018b9c7afdf" + integrity sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ== + +"@esbuild/linux-riscv64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.14.tgz#38612e7b6c037dff7022c33f49ca17f85c5dec58" + integrity sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw== + +"@esbuild/linux-s390x@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.14.tgz#4397dff354f899e72fd035d72af59a700c465ccb" + integrity sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww== + +"@esbuild/linux-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.14.tgz#6c5cb99891b6c3e0c08369da3ef465e8038ad9c2" + integrity sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw== + +"@esbuild/netbsd-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.14.tgz#5fa5255a64e9bf3947c1b3bef5e458b50b211994" + integrity sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ== + +"@esbuild/openbsd-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.14.tgz#74d14c79dcb6faf446878cc64284aa4e02f5ca6f" + integrity sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g== + +"@esbuild/sunos-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.14.tgz#5c7d1c7203781d86c2a9b2ff77bd2f8036d24cfa" + integrity sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA== + +"@esbuild/win32-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.14.tgz#dc36ed84f1390e73b6019ccf0566c80045e5ca3d" + integrity sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ== + +"@esbuild/win32-ia32@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.14.tgz#0802a107afa9193c13e35de15a94fe347c588767" + integrity sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w== + +"@esbuild/win32-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.14.tgz#e81fb49de05fed91bf74251c9ca0343f4fc77d31" + integrity sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA== + +"@iarna/toml@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== "@malept/cross-spawn-promise@^1.1.0": version "1.1.1" @@ -247,11 +361,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sindresorhus/is@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" - integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== - "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -259,13 +368,6 @@ dependencies: defer-to-connect "^1.0.1" -"@szmarczak/http-timer@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" - integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== - dependencies: - defer-to-connect "^2.0.0" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -283,21 +385,6 @@ dependencies: "@types/node" "*" -"@types/cacheable-request@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" - integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - -"@types/caseless@*": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.1.tgz#9794c69c8385d0192acc471a540d1f8e0d16218a" - integrity sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A== - "@types/chokidar@*": version "1.7.5" resolved "https://registry.yarnpkg.com/@types/chokidar/-/chokidar-1.7.5.tgz#1fa78c8803e035bed6d98e6949e514b133b0c9b6" @@ -323,19 +410,6 @@ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== -"@types/eslint@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-4.16.1.tgz#19730c9fcb66b6e44742d12b27a603fabfeb2f49" - integrity sha512-lRUXQAULl5geixTiP2K0iYvMUbCkEnuOwvLGjwff12I4ECxoW5QaWML5UUOZ1CvpQLILkddBdMPMZz4ByQizsg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "0.0.41" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.41.tgz#fd90754150b57432b72bf560530500597ff04421" - integrity sha512-rIAmXyJlqw4KEBO7+u9gxZZSQHaCNnIzYrnNmYVpgfJhxTqO0brCX0SYpqUTkVI5mwwUwzmtspLBGBKroMeynA== - "@types/events@*": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" @@ -346,13 +420,6 @@ resolved "https://registry.yarnpkg.com/@types/fancy-log/-/fancy-log-1.3.0.tgz#a61ab476e5e628cd07a846330df53b85e05c8ce0" integrity sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw== -"@types/form-data@*": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-2.2.1.tgz#ee2b3b8eaa11c0938289953606b745b738c54b1e" - integrity sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ== - dependencies: - "@types/node" "*" - "@types/fs-extra@^9.0.12": version "9.0.12" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.12.tgz#9b8f27973df8a7a3920e8461517ebf8a7d4fdfaf" @@ -439,28 +506,18 @@ "@types/undertaker" "*" "@types/vinyl-fs" "*" -"@types/http-cache-semantics@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" - integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== +"@types/iarna__toml@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/iarna__toml/-/iarna__toml-2.0.2.tgz#2e61b079e50760b477bc70e4df1fe5b633ef6c63" + integrity sha512-Q3obxKhBLVVbEQ8zsAmsQVobAAZhi8dFFFjF0q5xKXiaHvH8IkSxcbM27e46M9feUMieR03SPpmp5CtaNzpdBg== + dependencies: + "@types/node" "*" "@types/js-beautify@*": version "1.8.0" resolved "https://registry.yarnpkg.com/@types/js-beautify/-/js-beautify-1.8.0.tgz#0369d3d0e1f35a6aec07cb4da2ee2bcda111367c" integrity sha512-/siF86XrwDKLuHe8l7h6NhrAWgLdgqbxmjZv9NvGWmgYRZoTipkjKiWb0SQHy/jcR+ee0GvbG6uGd+LEBMGNvA== -"@types/json-schema@*": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" - integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== - -"@types/keyv@*": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" - integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== - dependencies: - "@types/node" "*" - "@types/mime@0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b" @@ -520,23 +577,6 @@ dependencies: "@types/node" "*" -"@types/request@^2.47.0": - version "2.47.0" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.47.0.tgz#76a666cee4cb85dcffea6cd4645227926d9e114e" - integrity sha512-/KXM5oev+nNCLIgBjkwbk8VqxmzI56woD4VUxn95O+YeQ8hJzcSmIZ1IN3WexiqBb6srzDo2bdMbsXxgXNkz5Q== - dependencies: - "@types/caseless" "*" - "@types/form-data" "*" - "@types/node" "*" - "@types/tough-cookie" "*" - -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - "@types/rimraf@^2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46" @@ -545,16 +585,6 @@ "@types/glob" "*" "@types/node" "*" -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - -"@types/tapable@^1": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" - integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== - "@types/through2@^2.0.36": version "2.0.36" resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.36.tgz#35fda0db635827d44c0e08e2c94653e647574a00" @@ -574,11 +604,6 @@ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.1.tgz#83ecf4ec22a8c218c71db25f316619fe5b986011" integrity sha512-7cTXwKP/HLOPVgjg+YhBdQ7bMiobGMuoBmrGmqwIWJv8elC6t1DfVc/mn4fD9UE1IjhwmhaQ5pGVXkmXbH0rhg== -"@types/tough-cookie@*": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.2.tgz#e0d481d8bb282ad8a8c9e100ceb72c995fb5e709" - integrity sha512-vOVmaruQG5EatOU/jM6yU2uCp3Lz6mK1P5Ztu4iJjfM4SVHU9XYktPUQtKlIXuahqXHdEyUarMrBEwg5Cwu+bA== - "@types/tunnel@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.3.tgz#f109e730b072b3136347561fc558c9358bb8c6e9" @@ -586,13 +611,6 @@ dependencies: "@types/node" "*" -"@types/uglify-js@*": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" - integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== - dependencies: - source-map "^0.6.1" - "@types/underscore@^1.8.9": version "1.8.9" resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.8.9.tgz#fef41f800cd23db1b4f262ddefe49cd952d82323" @@ -628,26 +646,12 @@ dependencies: "@types/node" "*" -"@types/webpack-sources@*": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.1.tgz#6af17e3a3ded71eec2b98008d7c12f498a0a4506" - integrity sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ== +"@types/workerpool@^6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@types/workerpool/-/workerpool-6.4.0.tgz#c79292915dd08350d10e78e74687b6f401f270b8" + integrity sha512-SIF2/169pDsLKeM8GQGHkOFifGalDbZgiBSaLUnnlVSRsAOenkAvQ6h4uhV2W+PZZczS+8LQxACwNkSykdT91A== dependencies: "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4.41.25": - version "4.41.30" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" - integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== - dependencies: - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - anymatch "^3.0.0" - source-map "^0.6.0" "@types/xml2js@0.0.33": version "0.0.33" @@ -748,7 +752,7 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= -anymatch@^3.0.0, anymatch@^3.1.1, anymatch@~3.1.1: +anymatch@^3.1.1, anymatch@~3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -811,13 +815,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -axios@^0.21.4: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - azure-devops-node-api@^11.0.1: version "11.2.0" resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz#bf04edbef60313117a0507415eed4790a420ad6b" @@ -926,11 +923,6 @@ byline@^5.0.0: resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -944,19 +936,6 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -1246,11 +1225,6 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -defer-to-connect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" - integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== - define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -1399,132 +1373,33 @@ es6-error@^4.1.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -esbuild-android-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz#3c7b2f2a59017dab3f2c0356188a8dd9cbdc91c8" - integrity sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg== - -esbuild-android-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz#e301db818c5a67b786bf3bb7320e414ac0fcf193" - integrity sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg== - -esbuild-darwin-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz#11726de5d0bf5960b92421ef433e35871c091f8d" - integrity sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ== - -esbuild-darwin-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz#ad89dafebb3613fd374f5a245bb0ce4132413997" - integrity sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg== - -esbuild-freebsd-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz#6bfb52b4a0d29c965aa833e04126e95173289c8a" - integrity sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA== - -esbuild-freebsd-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz#38a3fed8c6398072f9914856c7c3e3444f9ef4dd" - integrity sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w== - -esbuild-linux-32@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz#942dc70127f0c0a7ea91111baf2806e61fc81b32" - integrity sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ== - -esbuild-linux-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz#6d748564492d5daaa7e62420862c31ac3a44aed9" - integrity sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg== - -esbuild-linux-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz#28cd899beb2d2b0a3870fd44f4526835089a318d" - integrity sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA== - -esbuild-linux-arm@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz#6441c256225564d8794fdef5b0a69bc1a43051b5" - integrity sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q== - -esbuild-linux-mips64le@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz#d4927f817290eaffc062446896b2a553f0e11981" - integrity sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ== - -esbuild-linux-ppc64le@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz#b6d660dc6d5295f89ac51c675f1a2f639e2fb474" - integrity sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw== - -esbuild-linux-riscv64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz#2801bf18414dc3d3ad58d1ea83084f00d9d84896" - integrity sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA== - -esbuild-linux-s390x@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz#12a634ae6d3384cacc2b8f4201047deafe596eae" - integrity sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ== - -esbuild-netbsd-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz#951bbf87600512dfcfbe3b8d9d117d684d26c1b8" - integrity sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w== - -esbuild-openbsd-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz#26705b61961d525d79a772232e8b8f211fdbb035" - integrity sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA== - -esbuild-sunos-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz#d794da1ae60e6e2f6194c44d7b3c66bf66c7a141" - integrity sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA== - -esbuild-windows-32@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz#0670326903f421424be86bc03b7f7b3ff86a9db7" - integrity sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg== - -esbuild-windows-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz#64f32acb7341f3f0a4d10e8ff1998c2d1ebfc0a9" - integrity sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw== - -esbuild-windows-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz#4fe7f333ce22a922906b10233c62171673a3854b" - integrity sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA== - -esbuild@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.5.tgz#5effd05666f621d4ff2fe2c76a67c198292193ff" - integrity sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg== +esbuild@0.17.14: + version "0.17.14" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.14.tgz#d61a22de751a3133f3c6c7f9c1c3e231e91a3245" + integrity sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw== optionalDependencies: - "@esbuild/linux-loong64" "0.15.5" - esbuild-android-64 "0.15.5" - esbuild-android-arm64 "0.15.5" - esbuild-darwin-64 "0.15.5" - esbuild-darwin-arm64 "0.15.5" - esbuild-freebsd-64 "0.15.5" - esbuild-freebsd-arm64 "0.15.5" - esbuild-linux-32 "0.15.5" - esbuild-linux-64 "0.15.5" - esbuild-linux-arm "0.15.5" - esbuild-linux-arm64 "0.15.5" - esbuild-linux-mips64le "0.15.5" - esbuild-linux-ppc64le "0.15.5" - esbuild-linux-riscv64 "0.15.5" - esbuild-linux-s390x "0.15.5" - esbuild-netbsd-64 "0.15.5" - esbuild-openbsd-64 "0.15.5" - esbuild-sunos-64 "0.15.5" - esbuild-windows-32 "0.15.5" - esbuild-windows-64 "0.15.5" - esbuild-windows-arm64 "0.15.5" + "@esbuild/android-arm" "0.17.14" + "@esbuild/android-arm64" "0.17.14" + "@esbuild/android-x64" "0.17.14" + "@esbuild/darwin-arm64" "0.17.14" + "@esbuild/darwin-x64" "0.17.14" + "@esbuild/freebsd-arm64" "0.17.14" + "@esbuild/freebsd-x64" "0.17.14" + "@esbuild/linux-arm" "0.17.14" + "@esbuild/linux-arm64" "0.17.14" + "@esbuild/linux-ia32" "0.17.14" + "@esbuild/linux-loong64" "0.17.14" + "@esbuild/linux-mips64el" "0.17.14" + "@esbuild/linux-ppc64" "0.17.14" + "@esbuild/linux-riscv64" "0.17.14" + "@esbuild/linux-s390x" "0.17.14" + "@esbuild/linux-x64" "0.17.14" + "@esbuild/netbsd-x64" "0.17.14" + "@esbuild/openbsd-x64" "0.17.14" + "@esbuild/sunos-x64" "0.17.14" + "@esbuild/win32-arm64" "0.17.14" + "@esbuild/win32-ia32" "0.17.14" + "@esbuild/win32-x64" "0.17.14" escape-string-regexp@^1.0.5: version "1.0.5" @@ -1601,11 +1476,6 @@ first-chunk-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -follow-redirects@^1.14.0: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== - fork-stream@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz#db849fce77f6708a5f8f386ae533a0907b54ae70" @@ -1643,7 +1513,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -1771,23 +1641,6 @@ globalthis@^1.0.1: dependencies: define-properties "^1.1.3" -got@11.8.5: - version "11.8.5" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -1901,14 +1754,6 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.0-beta.5.2" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz#8b923deb90144aea65cf834b016a340fc98556f3" - integrity sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -2046,11 +1891,6 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -2082,21 +1922,15 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== +jsonwebtoken@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" + integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== dependencies: jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" + lodash "^4.17.21" ms "^2.1.1" - semver "^5.6.0" + semver "^7.3.8" jwa@^1.4.1: version "1.4.1" @@ -2147,13 +1981,6 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -keyv@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" - integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== - dependencies: - json-buffer "3.0.1" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -2171,46 +1998,11 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - lodash.mergewith@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -2226,7 +2018,7 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash@^4.17.10: +lodash@^4.17.10, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2381,23 +2173,30 @@ node-abi@^3.3.0: dependencies: semver "^7.3.5" -node-abort-controller@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-1.2.1.tgz#1eddb57eb8fea734198b11b28857596dc6165708" - integrity sha512-79PYeJuj6S9+yOHirR0JBLFOgjB6sQCir10uN6xRx25iD+ZD4ULqgRn3MwWBRaQGB0vEgReJzWwJo42T1R6YbQ== +node-abort-controller@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== node-addon-api@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== -node-fetch@2, node-fetch@^2.6.0: +node-fetch@2: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.6.9" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + dependencies: + whatwg-url "^5.0.0" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -2408,11 +2207,6 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - npm-conf@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" @@ -2479,11 +2273,6 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-cancelable@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" - integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== - p-limit@*, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -2647,11 +2436,6 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -2660,11 +2444,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - qs@^6.9.1: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -2672,11 +2451,6 @@ qs@^6.9.1: dependencies: side-channel "^1.0.4" -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -2733,11 +2507,6 @@ replace-ext@^1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== -resolve-alpn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" - integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== - responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -2745,13 +2514,6 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" -responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== - dependencies: - lowercase-keys "^2.0.0" - rimraf@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -2796,7 +2558,7 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver@^5.1.0, semver@^5.4.1, semver@^5.6.0: +semver@^5.1.0, semver@^5.4.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -2806,17 +2568,10 @@ semver@^6.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@^7.3.2, semver@^7.3.5, semver@^7.3.8: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -2881,16 +2636,11 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1: +source-map@0.6.1, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" @@ -3082,15 +2832,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -3166,7 +2907,7 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -3276,6 +3017,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +workerpool@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.4.0.tgz#f8d5cfb45fde32fa3b7af72ad617c3369567a462" + integrity sha512-i3KR1mQMNwY2wx20ozq2EjISGtQWDIfV56We+yGJ5yDs8jTwQiLLaqHlkBHITlCuJnYlVRmXegxFxZg7gqI++A== + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" diff --git a/cglicenses.json b/cglicenses.json index 754489e3306..585a819df1e 100644 --- a/cglicenses.json +++ b/cglicenses.json @@ -342,5 +342,193 @@ { // License is MIT/Apache and tool doesn't look in subfolders "name": "dirs-sys-next", "fullLicenseTextUri": "https://raw.githubusercontent.com/xdg-rs/dirs/master/dirs-sys/LICENSE-MIT" + }, + { + "name": "https-proxy-agent", + "fullLicenseText": [ + "(The MIT License)", + "Copyright (c) 2013 Nathan Rajlich ", + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:", + "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", + "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "data-uri-to-buffer", + "fullLicenseText": [ + "(The MIT License)", + "Copyright (c) 2014 Nathan Rajlich ", + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:", + "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", + "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "socks-proxy-agent", + "fullLicenseText": [ + "(The MIT License)", + "Copyright (c) 2013 Nathan Rajlich ", + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:", + "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", + "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "http-proxy-agent", + "fullLicenseText": [ + "(The MIT License)", + "Copyright (c) 2013 Nathan Rajlich ", + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:", + "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", + "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "agent-base", + "fullLicenseText": [ + "(The MIT License)", + "Copyright (c) 2013 Nathan Rajlich ", + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:", + "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", + "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "anstyle", + "fullLicenseText": [ + "This software is released under the MIT license:", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy of", + "this software and associated documentation files (the \"Software\"), to deal in", + "the Software without restriction, including without limitation the rights to", + "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of", + "the Software, and to permit persons to whom the Software is furnished to do so,", + "subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS", + "FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR", + "COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER", + "IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN", + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "anstyle-query", + "fullLicenseText": [ + "This software is released under the MIT license:", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy of", + "this software and associated documentation files (the \"Software\"), to deal in", + "the Software without restriction, including without limitation the rights to", + "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of", + "the Software, and to permit persons to whom the Software is furnished to do so,", + "subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS", + "FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR", + "COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER", + "IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN", + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "anstyle-parse", + "fullLicenseText": [ + "This software is released under the MIT license:", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy of", + "this software and associated documentation files (the \"Software\"), to deal in", + "the Software without restriction, including without limitation the rights to", + "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of", + "the Software, and to permit persons to whom the Software is furnished to do so,", + "subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS", + "FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR", + "COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER", + "IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN", + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "anstyle-wincon", + "fullLicenseText": [ + "This software is released under the MIT license:", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy of", + "this software and associated documentation files (the \"Software\"), to deal in", + "the Software without restriction, including without limitation the rights to", + "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of", + "the Software, and to permit persons to whom the Software is furnished to do so,", + "subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS", + "FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR", + "COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER", + "IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN", + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "anstream", + "fullLicenseText": [ + "This software is released under the MIT license:", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy of", + "this software and associated documentation files (the \"Software\"), to deal in", + "the Software without restriction, including without limitation the rights to", + "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of", + "the Software, and to permit persons to whom the Software is furnished to do so,", + "subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS", + "FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR", + "COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER", + "IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN", + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] + }, + { + "name": "colorchoice", + "fullLicenseText": [ + "This software is released under the MIT license:", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy of", + "this software and associated documentation files (the \"Software\"), to deal in", + "the Software without restriction, including without limitation the rights to", + "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of", + "the Software, and to permit persons to whom the Software is furnished to do so,", + "subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS", + "FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR", + "COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER", + "IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN", + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + ] } ] diff --git a/cgmanifest.json b/cgmanifest.json index 232f7131b00..d5669cdf185 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "chromium", "repositoryUrl": "https://chromium.googlesource.com/chromium/src", - "commitHash": "61305fe71c4357662f161ba689fd9a1828d5e4f7" + "commitHash": "513ac8b2c47c7e1ac6b9f4fb5ea98e965cf29b66" } }, "licenseDetail": [ @@ -40,7 +40,7 @@ "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ], "isOnlyProductionDependency": true, - "version": "102.0.5005.196" + "version": "108.0.5359.215" }, { "component": { @@ -48,12 +48,12 @@ "git": { "name": "ffmpeg", "repositoryUrl": "https://chromium.googlesource.com/chromium/third_party/ffmpeg", - "commitHash": "5cd95cdf972ad92c38a4ea2d059ac9d6167302ca" + "commitHash": "b9f01c3c54576330b2cf8918c54d5ee5be8faefe" } }, "isOnlyProductionDependency": true, "license": "LGPL-2.1+", - "version": "4.4.git", + "version": "5.1.git", "licenseDetail": [ " GNU LESSER GENERAL PUBLIC LICENSE", " Version 2.1, February 1999", @@ -490,7 +490,7 @@ "other": { "name": "H.264/AVC Video Standard", "downloadUrl": "https://chromium.googlesource.com/chromium/third_party/ffmpeg", - "version": "4.4.git" + "version": "5.1.git" } }, "licenseDetail": [ @@ -516,11 +516,11 @@ "git": { "name": "nodejs", "repositoryUrl": "https://github.com/nodejs/node", - "commitHash": "442e84a358d75152556b5d087e4dd6a51615330d" + "commitHash": "6b06e89c7dfccec6792008302af1cee57649445c" } }, "isOnlyProductionDependency": true, - "version": "16.14.2" + "version": "16.17.1" }, { "component": { @@ -528,12 +528,12 @@ "git": { "name": "electron", "repositoryUrl": "https://github.com/electron/electron", - "commitHash": "f887fa45dfaeeddfe20c9835ae7ca3a0823b661b" + "commitHash": "4ade2a6fb65e4b723feb7c09a5df765e5006b378" } }, "isOnlyProductionDependency": true, "license": "MIT", - "version": "19.1.9" + "version": "22.3.14" }, { "component": { @@ -611,389 +611,22 @@ "type": "npm", "npm": { "name": "mdn-data", - "version": "1.1.12" + "version": "2.0.31" } }, - "repositoryUrl": "https://github.com/mdn/data", - "licenseDetail": [ - "Mozilla Public License Version 2.0", - "", - "Copyright (c) 2018 Mozilla Corporation", - "", - "==================================", - "", - "1. Definitions", - "--------------", - "", - "1.1. \"Contributor\"", - " means each individual or legal entity that creates, contributes to", - " the creation of, or owns Covered Software.", - "", - "1.2. \"Contributor Version\"", - " means the combination of the Contributions of others (if any) used", - " by a Contributor and that particular Contributor's Contribution.", - "", - "1.3. \"Contribution\"", - " means Covered Software of a particular Contributor.", - "", - "1.4. \"Covered Software\"", - " means Source Code Form to which the initial Contributor has attached", - " the notice in Exhibit A, the Executable Form of such Source Code", - " Form, and Modifications of such Source Code Form, in each case", - " including portions thereof.", - "", - "1.5. \"Incompatible With Secondary Licenses\"", - " means", - "", - " (a) that the initial Contributor has attached the notice described", - " in Exhibit B to the Covered Software; or", - "", - " (b) that the Covered Software was made available under the terms of", - " version 1.1 or earlier of the License, but not also under the", - " terms of a Secondary License.", - "", - "1.6. \"Executable Form\"", - " means any form of the work other than Source Code Form.", - "", - "1.7. \"Larger Work\"", - " means a work that combines Covered Software with other material, in", - " a separate file or files, that is not Covered Software.", - "", - "1.8. \"License\"", - " means this document.", - "", - "1.9. \"Licensable\"", - " means having the right to grant, to the maximum extent possible,", - " whether at the time of the initial grant or subsequently, any and", - " all of the rights conveyed by this License.", - "", - "1.10. \"Modifications\"", - " means any of the following:", - "", - " (a) any file in Source Code Form that results from an addition to,", - " deletion from, or modification of the contents of Covered", - " Software; or", - "", - " (b) any new file in Source Code Form that contains any Covered", - " Software.", - "", - "1.11. \"Patent Claims\" of a Contributor", - " means any patent claim(s), including without limitation, method,", - " process, and apparatus claims, in any patent Licensable by such", - " Contributor that would be infringed, but for the grant of the", - " License, by the making, using, selling, offering for sale, having", - " made, import, or transfer of either its Contributions or its", - " Contributor Version.", - "", - "1.12. \"Secondary License\"", - " means either the GNU General Public License, Version 2.0, the GNU", - " Lesser General Public License, Version 2.1, the GNU Affero General", - " Public License, Version 3.0, or any later versions of those", - " licenses.", - "", - "1.13. \"Source Code Form\"", - " means the form of the work preferred for making modifications.", - "", - "1.14. \"You\" (or \"Your\")", - " means an individual or a legal entity exercising rights under this", - " License. For legal entities, \"You\" includes any entity that", - " controls, is controlled by, or is under common control with You. For", - " purposes of this definition, \"control\" means (a) the power, direct", - " or indirect, to cause the direction or management of such entity,", - " whether by contract or otherwise, or (b) ownership of more than", - " fifty percent (50%) of the outstanding shares or beneficial", - " ownership of such entity.", - "", - "2. License Grants and Conditions", - "--------------------------------", - "", - "2.1. Grants", - "", - "Each Contributor hereby grants You a world-wide, royalty-free,", - "non-exclusive license:", - "", - "(a) under intellectual property rights (other than patent or trademark)", - " Licensable by such Contributor to use, reproduce, make available,", - " modify, display, perform, distribute, and otherwise exploit its", - " Contributions, either on an unmodified basis, with Modifications, or", - " as part of a Larger Work; and", - "", - "(b) under Patent Claims of such Contributor to make, use, sell, offer", - " for sale, have made, import, and otherwise transfer either its", - " Contributions or its Contributor Version.", - "", - "2.2. Effective Date", - "", - "The licenses granted in Section 2.1 with respect to any Contribution", - "become effective for each Contribution on the date the Contributor first", - "distributes such Contribution.", - "", - "2.3. Limitations on Grant Scope", - "", - "The licenses granted in this Section 2 are the only rights granted under", - "this License. No additional rights or licenses will be implied from the", - "distribution or licensing of Covered Software under this License.", - "Notwithstanding Section 2.1(b) above, no patent license is granted by a", - "Contributor:", - "", - "(a) for any code that a Contributor has removed from Covered Software;", - " or", - "", - "(b) for infringements caused by: (i) Your and any other third party's", - " modifications of Covered Software, or (ii) the combination of its", - " Contributions with other software (except as part of its Contributor", - " Version); or", - "", - "(c) under Patent Claims infringed by Covered Software in the absence of", - " its Contributions.", - "", - "This License does not grant any rights in the trademarks, service marks,", - "or logos of any Contributor (except as may be necessary to comply with", - "the notice requirements in Section 3.4).", - "", - "2.4. Subsequent Licenses", - "", - "No Contributor makes additional grants as a result of Your choice to", - "distribute the Covered Software under a subsequent version of this", - "License (see Section 10.2) or under the terms of a Secondary License (if", - "permitted under the terms of Section 3.3).", - "", - "2.5. Representation", - "", - "Each Contributor represents that the Contributor believes its", - "Contributions are its original creation(s) or it has sufficient rights", - "to grant the rights to its Contributions conveyed by this License.", - "", - "2.6. Fair Use", - "", - "This License is not intended to limit any rights You have under", - "applicable copyright doctrines of fair use, fair dealing, or other", - "equivalents.", - "", - "2.7. Conditions", - "", - "Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted", - "in Section 2.1.", - "", - "3. Responsibilities", - "-------------------", - "", - "3.1. Distribution of Source Form", - "", - "All distribution of Covered Software in Source Code Form, including any", - "Modifications that You create or to which You contribute, must be under", - "the terms of this License. You must inform recipients that the Source", - "Code Form of the Covered Software is governed by the terms of this", - "License, and how they can obtain a copy of this License. You may not", - "attempt to alter or restrict the recipients' rights in the Source Code", - "Form.", - "", - "3.2. Distribution of Executable Form", - "", - "If You distribute Covered Software in Executable Form then:", - "", - "(a) such Covered Software must also be made available in Source Code", - " Form, as described in Section 3.1, and You must inform recipients of", - " the Executable Form how they can obtain a copy of such Source Code", - " Form by reasonable means in a timely manner, at a charge no more", - " than the cost of distribution to the recipient; and", - "", - "(b) You may distribute such Executable Form under the terms of this", - " License, or sublicense it under different terms, provided that the", - " license for the Executable Form does not attempt to limit or alter", - " the recipients' rights in the Source Code Form under this License.", - "", - "3.3. Distribution of a Larger Work", - "", - "You may create and distribute a Larger Work under terms of Your choice,", - "provided that You also comply with the requirements of this License for", - "the Covered Software. If the Larger Work is a combination of Covered", - "Software with a work governed by one or more Secondary Licenses, and the", - "Covered Software is not Incompatible With Secondary Licenses, this", - "License permits You to additionally distribute such Covered Software", - "under the terms of such Secondary License(s), so that the recipient of", - "the Larger Work may, at their option, further distribute the Covered", - "Software under the terms of either this License or such Secondary", - "License(s).", - "", - "3.4. Notices", - "", - "You may not remove or alter the substance of any license notices", - "(including copyright notices, patent notices, disclaimers of warranty,", - "or limitations of liability) contained within the Source Code Form of", - "the Covered Software, except that You may alter any license notices to", - "the extent required to remedy known factual inaccuracies.", - "", - "3.5. Application of Additional Terms", - "", - "You may choose to offer, and to charge a fee for, warranty, support,", - "indemnity or liability obligations to one or more recipients of Covered", - "Software. However, You may do so only on Your own behalf, and not on", - "behalf of any Contributor. You must make it absolutely clear that any", - "such warranty, support, indemnity, or liability obligation is offered by", - "You alone, and You hereby agree to indemnify every Contributor for any", - "liability incurred by such Contributor as a result of warranty, support,", - "indemnity or liability terms You offer. You may include additional", - "disclaimers of warranty and limitations of liability specific to any", - "jurisdiction.", - "", - "4. Inability to Comply Due to Statute or Regulation", - "---------------------------------------------------", - "", - "If it is impossible for You to comply with any of the terms of this", - "License with respect to some or all of the Covered Software due to", - "statute, judicial order, or regulation then You must: (a) comply with", - "the terms of this License to the maximum extent possible; and (b)", - "describe the limitations and the code they affect. Such description must", - "be placed in a text file included with all distributions of the Covered", - "Software under this License. Except to the extent prohibited by statute", - "or regulation, such description must be sufficiently detailed for a", - "recipient of ordinary skill to be able to understand it.", - "", - "5. Termination", - "--------------", - "", - "5.1. The rights granted under this License will terminate automatically", - "if You fail to comply with any of its terms. However, if You become", - "compliant, then the rights granted under this License from a particular", - "Contributor are reinstated (a) provisionally, unless and until such", - "Contributor explicitly and finally terminates Your grants, and (b) on an", - "ongoing basis, if such Contributor fails to notify You of the", - "non-compliance by some reasonable means prior to 60 days after You have", - "come back into compliance. Moreover, Your grants from a particular", - "Contributor are reinstated on an ongoing basis if such Contributor", - "notifies You of the non-compliance by some reasonable means, this is the", - "first time You have received notice of non-compliance with this License", - "from such Contributor, and You become compliant prior to 30 days after", - "Your receipt of the notice.", - "", - "5.2. If You initiate litigation against any entity by asserting a patent", - "infringement claim (excluding declaratory judgment actions,", - "counter-claims, and cross-claims) alleging that a Contributor Version", - "directly or indirectly infringes any patent, then the rights granted to", - "You by any and all Contributors for the Covered Software under Section", - "2.1 of this License shall terminate.", - "", - "5.3. In the event of termination under Sections 5.1 or 5.2 above, all", - "end user license agreements (excluding distributors and resellers) which", - "have been validly granted by You or Your distributors under this License", - "prior to termination shall survive termination.", - "", - "************************************************************************", - "* *", - "* 6. Disclaimer of Warranty *", - "* ------------------------- *", - "* *", - "* Covered Software is provided under this License on an \"as is\" *", - "* basis, without warranty of any kind, either expressed, implied, or *", - "* statutory, including, without limitation, warranties that the *", - "* Covered Software is free of defects, merchantable, fit for a *", - "* particular purpose or non-infringing. The entire risk as to the *", - "* quality and performance of the Covered Software is with You. *", - "* Should any Covered Software prove defective in any respect, You *", - "* (not any Contributor) assume the cost of any necessary servicing, *", - "* repair, or correction. This disclaimer of warranty constitutes an *", - "* essential part of this License. No use of any Covered Software is *", - "* authorized under this License except under this disclaimer. *", - "* *", - "************************************************************************", - "", - "************************************************************************", - "* *", - "* 7. Limitation of Liability *", - "* -------------------------- *", - "* *", - "* Under no circumstances and under no legal theory, whether tort *", - "* (including negligence), contract, or otherwise, shall any *", - "* Contributor, or anyone who distributes Covered Software as *", - "* permitted above, be liable to You for any direct, indirect, *", - "* special, incidental, or consequential damages of any character *", - "* including, without limitation, damages for lost profits, loss of *", - "* goodwill, work stoppage, computer failure or malfunction, or any *", - "* and all other commercial damages or losses, even if such party *", - "* shall have been informed of the possibility of such damages. This *", - "* limitation of liability shall not apply to liability for death or *", - "* personal injury resulting from such party's negligence to the *", - "* extent applicable law prohibits such limitation. Some *", - "* jurisdictions do not allow the exclusion or limitation of *", - "* incidental or consequential damages, so this exclusion and *", - "* limitation may not apply to You. *", - "* *", - "************************************************************************", - "", - "8. Litigation", - "-------------", - "", - "Any litigation relating to this License may be brought only in the", - "courts of a jurisdiction where the defendant maintains its principal", - "place of business and such litigation shall be governed by laws of that", - "jurisdiction, without reference to its conflict-of-law provisions.", - "Nothing in this Section shall prevent a party's ability to bring", - "cross-claims or counter-claims.", - "", - "9. Miscellaneous", - "----------------", - "", - "This License represents the complete agreement concerning the subject", - "matter hereof. If any provision of this License is held to be", - "unenforceable, such provision shall be reformed only to the extent", - "necessary to make it enforceable. Any law or regulation which provides", - "that the language of a contract shall be construed against the drafter", - "shall not be used to construe this License against a Contributor.", - "", - "10. Versions of the License", - "---------------------------", - "", - "10.1. New Versions", - "", - "Mozilla Foundation is the license steward. Except as provided in Section", - "10.3, no one other than the license steward has the right to modify or", - "publish new versions of this License. Each version will be given a", - "distinguishing version number.", - "", - "10.2. Effect of New Versions", - "", - "You may distribute the Covered Software under the terms of the version", - "of the License under which You originally received the Covered Software,", - "or under the terms of any subsequent version published by the license", - "steward.", - "", - "10.3. Modified Versions", - "", - "If you create software not governed by this License, and you want to", - "create a new license for such software, you may create and use a", - "modified version of this License if you rename the license and remove", - "any references to the name of the license steward (except to note that", - "such modified license differs from this License).", - "", - "10.4. Distributing Source Code Form that is Incompatible With Secondary", - "Licenses", - "", - "If You choose to distribute Source Code Form that is Incompatible With", - "Secondary Licenses under the terms of this version of the License, the", - "notice described in Exhibit B of this License must be attached.", - "", - "Exhibit A - Source Code Form License Notice", - "-------------------------------------------", - "", - " This Source Code Form is subject to the terms of the Mozilla Public", - " License, v. 2.0. If a copy of the MPL was not distributed with this", - " file, You can obtain one at http://mozilla.org/MPL/2.0/.", - "", - "If it is not possible or desirable to put the notice in a particular", - "file, then You may include the notice in a location (such as a LICENSE", - "file in a relevant directory) where a recipient would be likely to look", - "for such a notice.", - "", - "You may add additional accurate notices of copyright ownership.", - "", - "Exhibit B - \"Incompatible With Secondary Licenses\" Notice", - "---------------------------------------------------------", - "", - " This Source Code Form is \"Incompatible With Secondary Licenses\", as", - " defined by the Mozilla Public License, v. 2.0." - ], - "license": "MPL" + "isOnlyProductionDependency": true, + "repositoryUrl": "https://github.com/mdn/data" + }, + { + "component": { + "type": "npm", + "npm": { + "name": "@mdn/browser-compat-data", + "version": "5.2.45" + } + }, + "isOnlyProductionDependency": true, + "repositoryUrl": "https://github.com/mdn/browser-compat-data" }, { "component": { diff --git a/cli/.cargo/config.toml b/cli/.cargo/config.toml deleted file mode 100644 index 35c67ad3d28..00000000000 --- a/cli/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[target.'cfg(all(windows, target_env = "msvc"))'] -rustflags = ["-C", "target-feature=+crt-static"] diff --git a/cli/Cargo.lock b/cli/Cargo.lock index c17ffe06926..bed1af5cdd7 100644 --- a/cli/Cargo.lock +++ b/cli/Cargo.lock @@ -10,13 +10,19 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "0.7.19" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -27,14 +33,73 @@ dependencies = [ ] [[package]] -name = "async-broadcast" -version = "0.4.1" +name = "anstream" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" + +[[package]] +name = "anstyle-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" dependencies = [ "event-listener", "futures-core", - "parking_lot", +] + +[[package]] +name = "async-channel" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +dependencies = [ + "concurrent-queue 2.2.0", + "event-listener", + "futures-core", ] [[package]] @@ -44,7 +109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" dependencies = [ "autocfg", - "concurrent-queue", + "concurrent-queue 1.2.4", "futures-lite", "libc", "log", @@ -57,6 +122,33 @@ dependencies = [ "winapi", ] +[[package]] +name = "async-lock" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-process" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +dependencies = [ + "async-io", + "async-lock", + "autocfg", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", + "signal-hook", + "windows-sys 0.48.0", +] + [[package]] name = "async-recursion" version = "1.0.0" @@ -65,27 +157,39 @@ checksum = "2cda8f4bcc10624c4e85bc66b3f452cca98cfa5ca002dc83a16aad2367641bea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", ] [[package]] -name = "async-trait" -version = "0.1.58" +name = "async-task" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" + +[[package]] +name = "async-trait" +version = "0.1.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] +[[package]] +name = "atomic-waker" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" + [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -102,6 +206,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" + [[package]] name = "bit-vec" version = "0.6.3" @@ -132,6 +242,21 @@ dependencies = [ "generic-array", ] +[[package]] +name = "blocking" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "log", +] + [[package]] name = "bumpalo" version = "3.12.0" @@ -146,9 +271,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cache-padded" @@ -170,58 +295,61 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.22" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "serde", - "time", + "time 0.1.44", "wasm-bindgen", "winapi", ] [[package]] name = "clap" -version = "3.2.22" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" +checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc" dependencies = [ - "atty", - "bitflags", + "clap_builder", "clap_derive", - "clap_lex", - "indexmap", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex", "strsim", - "termcolor", - "textwrap", ] [[package]] name = "clap_derive" -version = "3.2.18" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "code-cli" @@ -229,14 +357,17 @@ version = "0.1.0" dependencies = [ "async-trait", "atty", - "base64", + "base64 0.21.2", + "bytes", + "cfg-if", "chrono", "clap", "clap_lex", + "console", "const_format", "core-foundation", "dialoguer", - "dirs 4.0.0", + "dirs 5.0.1", "flate2", "futures", "gethostname", @@ -248,7 +379,7 @@ dependencies = [ "log", "open", "opentelemetry", - "opentelemetry-application-insights", + "pin-project", "rand 0.8.5", "regex", "reqwest", @@ -261,14 +392,15 @@ dependencies = [ "sysinfo", "tar", "tempfile", + "thiserror", "tokio", "tokio-util", "tunnels", "url", - "uuid", + "uuid 1.3.3", "winapi", - "winreg", - "zbus 3.4.0", + "winreg 0.50.0", + "zbus", "zip", ] @@ -282,6 +414,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "concurrent-queue" version = "1.2.4" @@ -292,33 +430,41 @@ dependencies = [ ] [[package]] -name = "console" -version = "0.15.2" +name = "concurrent-queue" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", "libc", - "terminal_size", "unicode-width", - "winapi", + "windows-sys 0.45.0", ] [[package]] name = "const_format" -version = "0.2.30" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7309d9b4d3d2c0641e018d449232f2e28f1b22933c137f157d3dbc14228b8c0e" +checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.29" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f47bf7270cf70d370f8f98c1abb6d2d4cf60a6845d30e05bfb90c6568650" +checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" dependencies = [ "proc-macro2", "quote", @@ -369,30 +515,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - [[package]] name = "crossbeam-utils" version = "0.8.12" @@ -436,7 +558,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 1.0.103", ] [[package]] @@ -453,7 +575,7 @@ checksum = "747b608fecf06b0d72d440f27acc99288207324b793be2c17991839f3d4995ea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", ] [[package]] @@ -470,16 +592,17 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", ] [[package]] name = "dialoguer" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92e7e37ecef6857fdc0c0c5d42fd5b0938e46590c2183cc92dd310a6d078eb1" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" dependencies = [ "console", + "shell-words", "tempfile", "zeroize", ] @@ -495,22 +618,22 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" -dependencies = [ - "dirs-sys", -] - [[package]] name = "dirs" version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ - "dirs-sys", + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", ] [[package]] @@ -525,10 +648,16 @@ dependencies = [ ] [[package]] -name = "either" -version = "1.8.0" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] [[package]] name = "encode_unicode" @@ -547,44 +676,44 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.6.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ - "enumflags2_derive 0.6.4", - "serde", -] - -[[package]] -name = "enumflags2" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" -dependencies = [ - "enumflags2_derive 0.7.4", + "enumflags2_derive", "serde", ] [[package]] name = "enumflags2_derive" -version = "0.6.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] -name = "enumflags2_derive" -version = "0.7.4" +name = "errno" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ - "proc-macro2", - "quote", - "syn", + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", ] [[package]] @@ -610,15 +739,15 @@ checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "windows-sys 0.36.1", ] [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", "miniz_oxide", @@ -656,9 +785,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -671,9 +800,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -681,15 +810,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -698,9 +827,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" @@ -719,32 +848,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "futures-sink" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -770,12 +899,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.2.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ "libc", - "winapi", + "windows-targets 0.48.0", ] [[package]] @@ -802,9 +931,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" +checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f" dependencies = [ "bytes", "fnv", @@ -840,6 +969,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -897,9 +1032,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.20" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", @@ -978,14 +1113,15 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.16.2" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" +checksum = "db45317f37ef454e6519b6c3ed7d377e5f23346f0823f86e65ca36912d1d0ef8" dependencies = [ "console", - "lazy_static", + "instant", "number_prefix", - "regex", + "portable-atomic", + "unicode-width", ] [[package]] @@ -1007,12 +1143,54 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "ipnet" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-terminal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "itoa" version = "1.0.4" @@ -1030,11 +1208,13 @@ dependencies = [ [[package]] name = "keyring" -version = "1.2.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38fb8399ddcabfccb274577a8d90f0653e0b5b5977797c1c8834ad09839a10e5" +checksum = "e319fe0cb5b29a55cdb228df3f651b6c8cdc5b19520f3e62c8f111dc2582026c" dependencies = [ "byteorder", + "lazy_static", + "linux-keyutils", "secret-service", "security-framework", "winapi", @@ -1048,9 +1228,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.135" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "link-cplusplus" @@ -1061,6 +1241,22 @@ dependencies = [ "cc", ] +[[package]] +name = "linux-keyutils" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f27bb67f6dd1d0bb5ab582868e4f65052e58da6401188a08f0da09cf512b84b" +dependencies = [ + "bitflags", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "lock_api" version = "0.4.9" @@ -1073,12 +1269,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" [[package]] name = "md5" @@ -1094,9 +1287,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ "autocfg", ] @@ -1109,9 +1302,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", ] @@ -1146,41 +1339,17 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nb-connect" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1bb540dc6ef51cfe1916ec038ce7a620daf3a111e2502d745197cd53d6bca15" -dependencies = [ - "libc", - "socket2", -] - [[package]] name = "nix" -version = "0.22.3" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", - "memoffset", -] - -[[package]] -name = "nix" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" -dependencies = [ - "autocfg", "bitflags", "cfg-if", "libc", "memoffset", - "pin-utils", + "static_assertions", ] [[package]] @@ -1275,7 +1444,7 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", ] @@ -1287,25 +1456,25 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "once_cell" -version = "1.15.0" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" [[package]] name = "open" -version = "2.1.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2423ffbf445b82e58c3b1543655968923dd06f85432f10be2bb4f1b7122f98c" +checksum = "d16814a067484415fda653868c9be0ac5f2abd2ef5d951082a5f2fe1b3662944" dependencies = [ + "is-wsl", "pathdiff", - "windows-sys 0.36.1", ] [[package]] name = "openssl" -version = "0.10.42" +version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ "bitflags", "cfg-if", @@ -1324,7 +1493,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", ] [[package]] @@ -1333,101 +1502,48 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "openssl-src" -version = "111.22.0+1.1.1q" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853" -dependencies = [ - "cc", -] - [[package]] name = "openssl-sys" -version = "0.9.76" +version = "0.9.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" dependencies = [ - "autocfg", "cc", "libc", - "openssl-src", "pkg-config", "vcpkg", ] [[package]] name = "opentelemetry" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" dependencies = [ "opentelemetry_api", "opentelemetry_sdk", ] -[[package]] -name = "opentelemetry-application-insights" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e592c598da4cbf1b4c4c8c07df4d3fb3a0202326cccf90621dbf23286cb79ea6" -dependencies = [ - "bytes", - "chrono", - "flate2", - "http", - "once_cell", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-semantic-conventions", - "reqwest", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "opentelemetry-http" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc79add46364183ece1a4542592ca593e6421c60807232f5b8f7a31703825d" -dependencies = [ - "async-trait", - "bytes", - "http", - "opentelemetry_api", - "reqwest", -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b02e0230abb0ab6636d18e2ba8fa02903ea63772281340ccac18e0af3ec9eeb" -dependencies = [ - "opentelemetry", -] - [[package]] name = "opentelemetry_api" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" dependencies = [ "futures-channel", "futures-util", "indexmap", - "js-sys", "once_cell", "pin-project-lite", "thiserror", + "urlencoding", ] [[package]] name = "opentelemetry_sdk" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" dependencies = [ "async-trait", "crossbeam-channel", @@ -1444,21 +1560,21 @@ dependencies = [ ] [[package]] -name = "ordered-stream" -version = "0.1.1" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034ce384018b245e8d8424bbe90577fbd91a533be74107e465e3474eb2285eef" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" dependencies = [ "futures-core", "pin-project-lite", ] -[[package]] -name = "os_str_bytes" -version = "6.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" - [[package]] name = "parking" version = "2.0.0" @@ -1483,7 +1599,7 @@ checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "windows-sys 0.36.1", ] @@ -1506,6 +1622,26 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +[[package]] +name = "pin-project" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -1538,21 +1674,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "portable-atomic" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "767eb9f07d4a5ebcb39bbf2d452058a93c011373abf6832e24194a1c3f004794" + [[package]] name = "ppv-lite86" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - [[package]] name = "proc-macro-crate" version = "1.2.1" @@ -1564,44 +1697,20 @@ dependencies = [ "toml", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" -version = "1.0.46" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.21" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -1677,30 +1786,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rayon" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" -dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -1710,6 +1795,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.3" @@ -1717,15 +1811,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom 0.2.7", - "redox_syscall", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.6.0" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" dependencies = [ "aho-corasick", "memchr", @@ -1734,26 +1828,17 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" [[package]] name = "reqwest" -version = "0.11.12" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ - "base64", + "base64 0.21.2", "bytes", "encoding_rs", "futures-core", @@ -1781,8 +1866,9 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", - "winreg", + "winreg 0.10.1", ] [[package]] @@ -1809,9 +1895,10 @@ dependencies = [ [[package]] name = "russh" -version = "0.34.0-beta.16" -source = "git+https://github.com/microsoft/vscode-russh?branch=main#d22cf71d9ea36751322eeb9aa1e8c438a3aa1aef" +version = "0.37.1" +source = "git+https://github.com/microsoft/vscode-russh?branch=main#6a15199c784c0b6d171a6fec09ed730a5cd1350d" dependencies = [ + "async-trait", "bitflags", "byteorder", "digest", @@ -1832,12 +1919,13 @@ dependencies = [ "subtle", "thiserror", "tokio", + "tokio-util", ] [[package]] name = "russh-cryptovec" -version = "0.7.0-beta.1" -source = "git+https://github.com/microsoft/vscode-russh?branch=main#d22cf71d9ea36751322eeb9aa1e8c438a3aa1aef" +version = "0.7.0" +source = "git+https://github.com/microsoft/vscode-russh?branch=main#6a15199c784c0b6d171a6fec09ed730a5cd1350d" dependencies = [ "libc", "winapi", @@ -1845,13 +1933,13 @@ dependencies = [ [[package]] name = "russh-keys" -version = "0.22.0-beta.7" -source = "git+https://github.com/microsoft/vscode-russh?branch=main#d22cf71d9ea36751322eeb9aa1e8c438a3aa1aef" +version = "0.37.1" +source = "git+https://github.com/microsoft/vscode-russh?branch=main#6a15199c784c0b6d171a6fec09ed730a5cd1350d" dependencies = [ "bit-vec", "byteorder", "data-encoding", - "dirs 3.0.2", + "dirs 4.0.0", "futures", "inout", "log", @@ -1863,7 +1951,6 @@ dependencies = [ "rand_core 0.5.1", "russh-cryptovec", "serde", - "serde_derive", "sha2", "thiserror", "tokio", @@ -1871,6 +1958,20 @@ dependencies = [ "yasna", ] +[[package]] +name = "rustix" +version = "0.37.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + [[package]] name = "ryu" version = "1.0.11" @@ -1887,12 +1988,6 @@ dependencies = [ "windows-sys 0.36.1", ] -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - [[package]] name = "scopeguard" version = "1.1.0" @@ -1907,18 +2002,18 @@ checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" [[package]] name = "secret-service" -version = "2.0.2" -source = "git+https://github.com/microsoft/vscode-secret-service-rs?rev=30f0414108a122d6f2bfc28a5425d0dac9738518#30f0414108a122d6f2bfc28a5425d0dac9738518" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da1a5ad4d28c03536f82f77d9f36603f5e37d8869ac98f0a750d5b5686d8d95" dependencies = [ - "lazy_static", + "futures-util", + "generic-array", "num", + "once_cell", "openssl", "rand 0.8.5", "serde", - "zbus 1.9.3", - "zbus_macros 1.9.3", - "zvariant 2.10.0", - "zvariant_derive 2.10.0", + "zbus", ] [[package]] @@ -1946,38 +2041,38 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.145" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.7" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc50e8183eeeb6178dcb167ae34a8051d63535023ae38b5d8d12beae193d37b" +checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.145" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "serde_json" -version = "1.0.86" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", @@ -1992,7 +2087,7 @@ checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", ] [[package]] @@ -2046,6 +2141,22 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -2072,9 +2183,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -2110,17 +2221,27 @@ dependencies = [ ] [[package]] -name = "sysinfo" -version = "0.27.7" +name = "syn" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975fe381e0ecba475d4acff52466906d95b153a40324956552e027b2a9eaa89e" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysinfo" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f1dc6930a439cc5d154221b5387d153f8183529b07c19aca24ea31e0a167e1" dependencies = [ "cfg-if", "core-foundation-sys", "libc", "ntapi", "once_cell", - "rayon", "winapi", ] @@ -2137,16 +2258,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.45.0", ] [[package]] @@ -2158,40 +2278,24 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "terminal_size" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "textwrap" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" - [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -2205,6 +2309,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "time" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +dependencies = [ + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + [[package]] name = "tinyvec" version = "1.6.0" @@ -2222,14 +2342,13 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.25.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot", @@ -2237,18 +2356,19 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.42.0", + "tracing", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -2288,9 +2408,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -2336,7 +2456,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", ] [[package]] @@ -2360,7 +2480,7 @@ version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" dependencies = [ - "base64", + "base64 0.13.0", "byteorder", "bytes", "http", @@ -2377,11 +2497,12 @@ dependencies = [ [[package]] name = "tunnels" version = "0.1.0" -source = "git+https://github.com/microsoft/dev-tunnels?rev=3870e9133dfb9557774521bb447827f19b26e55d#3870e9133dfb9557774521bb447827f19b26e55d" +source = "git+https://github.com/microsoft/dev-tunnels?rev=2621784a9ad72aa39500372391332a14bad581a3#2621784a9ad72aa39500372391332a14bad581a3" dependencies = [ "async-trait", "chrono", "futures", + "hyper", "log", "reqwest", "russh", @@ -2394,7 +2515,7 @@ dependencies = [ "tokio-util", "tungstenite", "url", - "uuid", + "uuid 0.8.2", ] [[package]] @@ -2457,17 +2578,38 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "urlencoding" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" + [[package]] name = "utf-8" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.7", +] + +[[package]] +name = "uuid" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" dependencies = [ "getrandom 0.2.7", "serde", @@ -2540,7 +2682,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.103", "wasm-bindgen-shared", ] @@ -2574,7 +2716,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.103", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2585,6 +2727,19 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +[[package]] +name = "wasm-streams" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.60" @@ -2650,24 +2805,63 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" @@ -2677,9 +2871,15 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" @@ -2689,9 +2889,15 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" @@ -2701,9 +2907,15 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" @@ -2713,15 +2925,27 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" @@ -2731,9 +2955,24 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winnow" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +dependencies = [ + "memchr", +] [[package]] name = "winreg" @@ -2744,6 +2983,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "xattr" version = "0.2.3" @@ -2754,10 +3003,20 @@ dependencies = [ ] [[package]] -name = "yasna" -version = "0.4.0" +name = "xdg-home" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e262a29d0e61ccf2b6190d7050d4b237535fc76ce4c1210d9caa316f71dffa75" +checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +dependencies = [ + "nix", + "winapi", +] + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ "bit-vec", "num-bigint", @@ -2765,47 +3024,23 @@ dependencies = [ [[package]] name = "zbus" -version = "1.9.3" +version = "3.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cbeb2291cd7267a94489b71376eda33496c1b9881adf6b36f26cc2779f3fc49" -dependencies = [ - "async-io", - "byteorder", - "derivative", - "enumflags2 0.6.4", - "fastrand", - "futures", - "nb-connect", - "nix 0.22.3", - "once_cell", - "polling", - "scoped-tls", - "serde", - "serde_repr", - "zbus_macros 1.9.3", - "zvariant 2.10.0", -] - -[[package]] -name = "zbus" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a0b85c5608c27d2306d67e955b9c6e23a42d824205c85038a7afbe19c0ae22" +checksum = "6c3d77c9966c28321f1907f0b6c5a5561189d1f7311eea6d94180c6be9daab29" dependencies = [ "async-broadcast", + "async-process", "async-recursion", "async-trait", "byteorder", "derivative", - "dirs 4.0.0", - "enumflags2 0.7.5", + "enumflags2", "event-listener", "futures-core", "futures-sink", "futures-util", "hex", - "lazy_static", - "nix 0.25.0", + "nix", "once_cell", "ordered-stream", "rand 0.8.5", @@ -2817,45 +3052,36 @@ dependencies = [ "tracing", "uds_windows", "winapi", - "zbus_macros 3.4.0", + "xdg-home", + "zbus_macros", "zbus_names", - "zvariant 3.7.1", + "zvariant", ] [[package]] name = "zbus_macros" -version = "1.9.3" +version = "3.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa3959a7847cf95e3d51e312856617c5b1b77191176c65a79a5f14d778bbe0a6" +checksum = "f6e341d12edaff644e539ccbbf7f161601294c9a84ed3d7e015da33155b435af" dependencies = [ - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zbus_macros" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b18018648e7e10ed856809befe7309002b87b2b12d5b282cb5040d7974b58677" -dependencies = [ - "proc-macro-crate 1.2.1", + "proc-macro-crate", "proc-macro2", "quote", "regex", - "syn", + "syn 1.0.103", + "winnow", + "zvariant_utils", ] [[package]] name = "zbus_names" -version = "2.2.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a408fd8a352695690f53906dc7fd036be924ec51ea5e05666ff42685ed0af5" +checksum = "82441e6033be0a741157a72951a3e4957d519698f3a824439cc131c5ba77ac2a" dependencies = [ "serde", "static_assertions", - "zvariant 3.7.1", + "zvariant", ] [[package]] @@ -2866,65 +3092,51 @@ checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" [[package]] name = "zip" -version = "0.5.13" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" dependencies = [ "byteorder", "crc32fast", + "crossbeam-utils", "flate2", - "thiserror", - "time", + "time 0.3.21", ] [[package]] name = "zvariant" -version = "2.10.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68c7b55f2074489b7e8e07d2d0a6ee6b4f233867a653c664d8020ba53692525" +checksum = "622cc473f10cef1b0d73b7b34a266be30ebdcfaea40ec297dd8cbda088f9f93c" dependencies = [ "byteorder", - "enumflags2 0.6.4", + "enumflags2", "libc", "serde", "static_assertions", - "zvariant_derive 2.10.0", -] - -[[package]] -name = "zvariant" -version = "3.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794fb7f59af4105697b0449ba31731ee5dbb3e773a17dbdf3d36206ea1b1644" -dependencies = [ - "byteorder", - "enumflags2 0.7.5", - "libc", - "serde", - "static_assertions", - "zvariant_derive 3.7.1", + "zvariant_derive", ] [[package]] name = "zvariant_derive" -version = "2.10.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9" +checksum = "5d9c1b57352c25b778257c661f3c4744b7cefb7fc09dd46909a153cce7773da2" dependencies = [ - "proc-macro-crate 1.2.1", + "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.103", + "zvariant_utils", ] [[package]] -name = "zvariant_derive" -version = "3.7.1" +name = "zvariant_utils" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd58d4b6c8e26d3dd2149c8c40c6613ef6451b9885ff1296d1ac86c388351a54" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" dependencies = [ - "proc-macro-crate 1.2.1", "proc-macro2", "quote", - "syn", + "syn 1.0.103", ] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index a1fc80b596a..d685d9efcbb 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -12,65 +12,68 @@ path = "src/lib.rs" name = "code" [dependencies] -futures = "0.3" -clap = { version = "3.0", features = ["derive", "env"] } -open = { version = "2.1.0" } -reqwest = { version = "0.11.9", default-features = false, features = ["json", "stream", "native-tls-vendored"] } -tokio = { version = "1.24.2", features = ["full"] } -tokio-util = { version = "0.7", features = ["compat"] } -flate2 = { version = "1.0.22" } -zip = { version = "0.5.13", default-features = false, features = ["time", "deflate"] } -regex = { version = "1.5.5" } -lazy_static = { version = "1.4.0" } -sysinfo = { version = "0.27.7" } -serde = { version = "1.0", features = ["derive"] } -serde_json = { version = "1.0" } -rmp-serde = "1.0" -uuid = { version = "0.8.2", features = ["serde", "v4"] } -dirs = "4.0.0" +futures = "0.3.28" +clap = { version = "4.3.0", features = ["derive", "env"] } +open = "4.1.0" +reqwest = { version = "0.11.18", default-features = false, features = ["json", "stream", "native-tls"] } +tokio = { version = "1.28.2", features = ["full"] } +tokio-util = { version = "0.7.8", features = ["compat", "codec"] } +flate2 = "1.0.26" +zip = { version = "0.6.6", default-features = false, features = ["time", "deflate"] } +regex = "1.8.3" +lazy_static = "1.4.0" +sysinfo = { version = "0.29.0", default-features = false } +serde = { version = "1.0.163", features = ["derive"] } +serde_json = "1.0.96" +rmp-serde = "1.1.1" +uuid = { version = "1.3.3", features = ["serde", "v4"] } +dirs = "5.0.1" rand = "0.8.5" atty = "0.2.14" -opentelemetry = { version = "0.18.0", features = ["rt-tokio"] } -opentelemetry-application-insights = { version = "0.22.0", features = ["reqwest-client-vendored-tls"] } -serde_bytes = "0.11.5" -chrono = { version = "0.4", features = ["serde"] } -gethostname = "0.2.3" -libc = "0.2" -tunnels = { git = "https://github.com/microsoft/dev-tunnels", rev = "3870e9133dfb9557774521bb447827f19b26e55d", default-features = false, features = ["connections", "vendored-openssl"] } -keyring = "1.1" -dialoguer = "0.10" -hyper = "0.14" -indicatif = "0.16" -tempfile = "3.3" -clap_lex = "0.2" -url = "2.3" -async-trait = "0.1" -log = "0.4" -const_format = "0.2" -sha2 = "0.10" -base64 = "0.13" +opentelemetry = { version = "0.19.0", features = ["rt-tokio"] } +serde_bytes = "0.11.9" +chrono = { version = "0.4.26", features = ["serde"] } +gethostname = "0.4.3" +libc = "0.2.144" +tunnels = { git = "https://github.com/microsoft/dev-tunnels", rev = "2621784a9ad72aa39500372391332a14bad581a3", default-features = false, features = ["connections"] } +keyring = { version = "2.0.3", default-features = false, features = ["linux-secret-service-rt-tokio-crypto-openssl"] } +dialoguer = "0.10.4" +hyper = "0.14.26" +indicatif = "0.17.4" +tempfile = "3.5.0" +clap_lex = "0.5.0" +url = "2.3.1" +async-trait = "0.1.68" +log = "0.4.18" +const_format = "0.2.31" +sha2 = "0.10.6" +base64 = "0.21.2" shell-escape = "0.1.5" +thiserror = "1.0.40" +cfg-if = "1.0.0" +pin-project = "1.1.0" +console = "0.15.7" +bytes = "1.4.0" +tar = "0.4.38" [build-dependencies] -serde = { version = "1.0" } -serde_json = { version = "1.0" } +serde = "1.0.163" +serde_json = "1.0.96" [target.'cfg(windows)'.dependencies] -winreg = "0.10" +winreg = "0.50.0" winapi = "0.3.9" [target.'cfg(target_os = "macos")'.dependencies] core-foundation = "0.9.3" [target.'cfg(target_os = "linux")'.dependencies] -tar = { version = "0.4" } -zbus = { version = "3.4", default-features = false, features = ["tokio"] } +zbus = { version = "3.13.1", default-features = false, features = ["tokio"] } [patch.crates-io] russh = { git = "https://github.com/microsoft/vscode-russh", branch = "main" } russh-cryptovec = { git = "https://github.com/microsoft/vscode-russh", branch = "main" } russh-keys = { git = "https://github.com/microsoft/vscode-russh", branch = "main" } -secret-service = { git = "https://github.com/microsoft/vscode-secret-service-rs", rev = "30f0414108a122d6f2bfc28a5425d0dac9738518" } [profile.release] strip = true diff --git a/cli/build.rs b/cli/build.rs index 03247a94470..bcf1bf27e0a 100644 --- a/cli/build.rs +++ b/cli/build.rs @@ -20,7 +20,7 @@ fn main() { fn apply_build_environment_variables() { // only do this for local, debug builds - if env::var("PROFILE").unwrap() != "debug" { + if env::var("PROFILE").unwrap() != "debug" || env::var("VSCODE_CLI_ALREADY_PREPARED").is_ok() { return; } diff --git a/cli/src/async_pipe.rs b/cli/src/async_pipe.rs new file mode 100644 index 00000000000..dcbe0d16017 --- /dev/null +++ b/cli/src/async_pipe.rs @@ -0,0 +1,183 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +use crate::{constants::APPLICATION_NAME, util::errors::CodeError}; +use std::path::{Path, PathBuf}; +use uuid::Uuid; + +// todo: we could probably abstract this into some crate, if one doesn't already exist + +cfg_if::cfg_if! { + if #[cfg(unix)] { + pub type AsyncPipe = tokio::net::UnixStream; + pub type AsyncPipeWriteHalf = tokio::net::unix::OwnedWriteHalf; + pub type AsyncPipeReadHalf = tokio::net::unix::OwnedReadHalf; + + pub async fn get_socket_rw_stream(path: &Path) -> Result { + tokio::net::UnixStream::connect(path) + .await + .map_err(CodeError::AsyncPipeFailed) + } + + pub async fn listen_socket_rw_stream(path: &Path) -> Result { + tokio::net::UnixListener::bind(path) + .map(AsyncPipeListener) + .map_err(CodeError::AsyncPipeListenerFailed) + } + + pub struct AsyncPipeListener(tokio::net::UnixListener); + + impl AsyncPipeListener { + pub async fn accept(&mut self) -> Result { + self.0.accept().await.map_err(CodeError::AsyncPipeListenerFailed).map(|(s, _)| s) + } + } + + pub fn socket_stream_split(pipe: AsyncPipe) -> (AsyncPipeReadHalf, AsyncPipeWriteHalf) { + pipe.into_split() + } + } else { + use tokio::{time::sleep, io::{AsyncRead, AsyncWrite, ReadBuf}}; + use tokio::net::windows::named_pipe::{ClientOptions, ServerOptions, NamedPipeClient, NamedPipeServer}; + use std::{time::Duration, pin::Pin, task::{Context, Poll}, io}; + use pin_project::pin_project; + + #[pin_project(project = AsyncPipeProj)] + pub enum AsyncPipe { + PipeClient(#[pin] NamedPipeClient), + PipeServer(#[pin] NamedPipeServer), + } + + impl AsyncRead for AsyncPipe { + fn poll_read( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + match self.project() { + AsyncPipeProj::PipeClient(c) => c.poll_read(cx, buf), + AsyncPipeProj::PipeServer(c) => c.poll_read(cx, buf), + } + } + } + + impl AsyncWrite for AsyncPipe { + fn poll_write( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + match self.project() { + AsyncPipeProj::PipeClient(c) => c.poll_write(cx, buf), + AsyncPipeProj::PipeServer(c) => c.poll_write(cx, buf), + } + } + + fn poll_write_vectored( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + bufs: &[io::IoSlice<'_>], + ) -> Poll> { + match self.project() { + AsyncPipeProj::PipeClient(c) => c.poll_write_vectored(cx, bufs), + AsyncPipeProj::PipeServer(c) => c.poll_write_vectored(cx, bufs), + } + } + + fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match self.project() { + AsyncPipeProj::PipeClient(c) => c.poll_flush(cx), + AsyncPipeProj::PipeServer(c) => c.poll_flush(cx), + } + } + + fn is_write_vectored(&self) -> bool { + match self { + AsyncPipe::PipeClient(c) => c.is_write_vectored(), + AsyncPipe::PipeServer(c) => c.is_write_vectored(), + } + } + + fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match self.project() { + AsyncPipeProj::PipeClient(c) => c.poll_shutdown(cx), + AsyncPipeProj::PipeServer(c) => c.poll_shutdown(cx), + } + } + } + + pub type AsyncPipeWriteHalf = tokio::io::WriteHalf; + pub type AsyncPipeReadHalf = tokio::io::ReadHalf; + + pub async fn get_socket_rw_stream(path: &Path) -> Result { + // Tokio says we can need to try in a loop. Do so. + // https://docs.rs/tokio/latest/tokio/net/windows/named_pipe/struct.NamedPipeClient.html + let client = loop { + match ClientOptions::new().open(path) { + Ok(client) => break client, + // ERROR_PIPE_BUSY https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499- + Err(e) if e.raw_os_error() == Some(231) => sleep(Duration::from_millis(100)).await, + Err(e) => return Err(CodeError::AsyncPipeFailed(e)), + } + }; + + Ok(AsyncPipe::PipeClient(client)) + } + + pub struct AsyncPipeListener { + path: PathBuf, + server: NamedPipeServer + } + + impl AsyncPipeListener { + pub async fn accept(&mut self) -> Result { + // see https://docs.rs/tokio/latest/tokio/net/windows/named_pipe/struct.NamedPipeServer.html + // this is a bit weird in that the server becomes the client once + // they get a connection, and we create a new client. + + self.server + .connect() + .await + .map_err(CodeError::AsyncPipeListenerFailed)?; + + // Construct the next server to be connected before sending the one + // we already have of onto a task. This ensures that the server + // isn't closed (after it's done in the task) before a new one is + // available. Otherwise the client might error with + // `io::ErrorKind::NotFound`. + let next_server = ServerOptions::new() + .create(&self.path) + .map_err(CodeError::AsyncPipeListenerFailed)?; + + + Ok(AsyncPipe::PipeServer(std::mem::replace(&mut self.server, next_server))) + } + } + + pub async fn listen_socket_rw_stream(path: &Path) -> Result { + let server = ServerOptions::new() + .first_pipe_instance(true) + .create(path) + .map_err(CodeError::AsyncPipeListenerFailed)?; + + Ok(AsyncPipeListener { path: path.to_owned(), server }) + } + + pub fn socket_stream_split(pipe: AsyncPipe) -> (AsyncPipeReadHalf, AsyncPipeWriteHalf) { + tokio::io::split(pipe) + } + } +} + +/// Gets a random name for a pipe/socket on the paltform +pub fn get_socket_name() -> PathBuf { + cfg_if::cfg_if! { + if #[cfg(unix)] { + std::env::temp_dir().join(format!("{}-{}", APPLICATION_NAME, Uuid::new_v4())) + } else { + PathBuf::from(format!(r"\\.\pipe\{}-{}", APPLICATION_NAME, Uuid::new_v4())) + } + } +} diff --git a/cli/src/auth.rs b/cli/src/auth.rs index b7008ca13bd..bc2737afc00 100644 --- a/cli/src/auth.rs +++ b/cli/src/auth.rs @@ -10,7 +10,8 @@ use crate::{ trace, util::{ errors::{ - wrap, AnyError, OAuthError, RefreshTokenNotAvailableError, StatusError, WrappedError, + wrap, AnyError, CodeError, OAuthError, RefreshTokenNotAvailableError, StatusError, + WrappedError, }, input::prompt_options, }, @@ -20,7 +21,7 @@ use async_trait::async_trait; use chrono::{DateTime, Duration, Utc}; use gethostname::gethostname; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use std::{cell::Cell, fmt::Display, path::PathBuf, sync::Arc}; +use std::{cell::Cell, fmt::Display, path::PathBuf, sync::Arc, thread}; use tokio::time::sleep; use tunnels::{ contracts::PROD_FIRST_PARTY_APP_ID, @@ -49,7 +50,7 @@ struct AuthenticationError { error_description: Option, } -#[derive(clap::ArgEnum, Serialize, Deserialize, Debug, Clone, Copy)] +#[derive(clap::ValueEnum, Serialize, Deserialize, Debug, Clone, Copy)] pub enum AuthProvider { Microsoft, Github, @@ -172,9 +173,9 @@ pub struct Auth { } trait StorageImplementation: Send + Sync { - fn read(&mut self) -> Result, WrappedError>; - fn store(&mut self, value: StoredCredential) -> Result<(), WrappedError>; - fn clear(&mut self) -> Result<(), WrappedError>; + fn read(&mut self) -> Result, AnyError>; + fn store(&mut self, value: StoredCredential) -> Result<(), AnyError>; + fn clear(&mut self) -> Result<(), AnyError>; } // unseal decrypts and deserializes the value @@ -183,6 +184,9 @@ where T: Serialize + ?Sized, { let dec = serde_json::to_string(value).expect("expected to serialize"); + if std::env::var("VSCODE_CLI_DISABLE_KEYCHAIN_ENCRYPT").is_ok() { + return dec; + } encrypt(&dec) } @@ -191,7 +195,7 @@ fn unseal(value: &str) -> Option where T: DeserializeOwned, { - // small back-compat for old unencrypted values + // small back-compat for old unencrypted values, or if VSCODE_CLI_DISABLE_KEYCHAIN_ENCRYPT set if let Ok(v) = serde_json::from_str::(value) { return Some(v); } @@ -207,6 +211,66 @@ const KEYCHAIN_ENTRY_LIMIT: usize = 128 * 1024; const CONTINUE_MARKER: &str = ""; +/// Implementation that wraps the KeyringStorage on Linux to avoid +/// https://github.com/hwchen/keyring-rs/issues/132 +struct ThreadKeyringStorage { + s: Option, +} + +impl ThreadKeyringStorage { + fn thread_op(&mut self, f: Fn) -> Result + where + Fn: 'static + Send + FnOnce(&mut KeyringStorage) -> Result, + R: 'static + Send, + { + let mut s = match self.s.take() { + Some(s) => s, + None => return Err(CodeError::KeyringTimeout.into()), + }; + + // It seems like on Linux communication to the keyring can block indefinitely. + // Fall back after a 5 second timeout. + let (sender, receiver) = std::sync::mpsc::channel(); + let tsender = sender.clone(); + + thread::spawn(move || sender.send(Some((f(&mut s), s)))); + thread::spawn(move || { + thread::sleep(std::time::Duration::from_secs(5)); + let _ = tsender.send(None); + }); + + match receiver.recv().unwrap() { + Some((r, s)) => { + self.s = Some(s); + r + } + None => Err(CodeError::KeyringTimeout.into()), + } + } +} + +impl Default for ThreadKeyringStorage { + fn default() -> Self { + Self { + s: Some(KeyringStorage::default()), + } + } +} + +impl StorageImplementation for ThreadKeyringStorage { + fn read(&mut self) -> Result, AnyError> { + self.thread_op(|s| s.read()) + } + + fn store(&mut self, value: StoredCredential) -> Result<(), AnyError> { + self.thread_op(move |s| s.store(value)) + } + + fn clear(&mut self) -> Result<(), AnyError> { + self.thread_op(|s| s.clear()) + } +} + #[derive(Default)] struct KeyringStorage { // keywring storage can be split into multiple entries due to entry length limits @@ -219,7 +283,7 @@ macro_rules! get_next_entry { match $self.entries.get($i) { Some(e) => e, None => { - let e = keyring::Entry::new("vscode-cli", &format!("vscode-cli-{}", $i)); + let e = keyring::Entry::new("vscode-cli", &format!("vscode-cli-{}", $i)).unwrap(); $self.entries.push(e); $self.entries.last().unwrap() } @@ -228,7 +292,7 @@ macro_rules! get_next_entry { } impl StorageImplementation for KeyringStorage { - fn read(&mut self) -> Result, WrappedError> { + fn read(&mut self) -> Result, AnyError> { let mut str = String::new(); for i in 0.. { @@ -236,7 +300,7 @@ impl StorageImplementation for KeyringStorage { let next_chunk = match entry.get_password() { Ok(value) => value, Err(keyring::Error::NoEntry) => return Ok(None), // missing entries? - Err(e) => return Err(wrap(e, "error reading keyring")), + Err(e) => return Err(wrap(e, "error reading keyring").into()), }; if next_chunk.ends_with(CONTINUE_MARKER) { @@ -250,7 +314,7 @@ impl StorageImplementation for KeyringStorage { Ok(unseal(&str)) } - fn store(&mut self, value: StoredCredential) -> Result<(), WrappedError> { + fn store(&mut self, value: StoredCredential) -> Result<(), AnyError> { let sealed = seal(&value); let step_size = KEYCHAIN_ENTRY_LIMIT - CONTINUE_MARKER.len(); @@ -267,14 +331,14 @@ impl StorageImplementation for KeyringStorage { }; if let Err(e) = stored { - return Err(wrap(e, "error updating keyring")); + return Err(wrap(e, "error updating keyring").into()); } } Ok(()) } - fn clear(&mut self) -> Result<(), WrappedError> { + fn clear(&mut self) -> Result<(), AnyError> { self.read().ok(); // make sure component parts are available for entry in self.entries.iter() { entry @@ -290,16 +354,16 @@ impl StorageImplementation for KeyringStorage { struct FileStorage(PersistedState>); impl StorageImplementation for FileStorage { - fn read(&mut self) -> Result, WrappedError> { + fn read(&mut self) -> Result, AnyError> { Ok(self.0.load().and_then(|s| unseal(&s))) } - fn store(&mut self, value: StoredCredential) -> Result<(), WrappedError> { - self.0.save(Some(seal(&value))) + fn store(&mut self, value: StoredCredential) -> Result<(), AnyError> { + self.0.save(Some(seal(&value))).map_err(|e| e.into()) } - fn clear(&mut self) -> Result<(), WrappedError> { - self.0.save(None) + fn clear(&mut self) -> Result<(), AnyError> { + self.0.save(None).map_err(|e| e.into()) } } @@ -322,11 +386,14 @@ impl Auth { return op(s); } + #[cfg(not(target_os = "linux"))] let mut keyring_storage = KeyringStorage::default(); + #[cfg(target_os = "linux")] + let mut keyring_storage = ThreadKeyringStorage::default(); let mut file_storage = FileStorage(PersistedState::new(self.file_storage_path.clone())); let keyring_storage_result = match std::env::var("VSCODE_CLI_USE_FILE_KEYCHAIN") { - Ok(_) => Err(wrap("", "user prefers file storage")), + Ok(_) => Err(wrap("", "user prefers file storage").into()), _ => keyring_storage.read(), }; @@ -335,10 +402,17 @@ impl Auth { last_read: Cell::new(Ok(v)), storage: Box::new(keyring_storage), }, - Err(_) => StorageWithLastRead { - last_read: Cell::new(file_storage.read()), - storage: Box::new(file_storage), - }, + Err(e) => { + debug!(self.log, "Using file keychain storage due to: {}", e); + StorageWithLastRead { + last_read: Cell::new( + file_storage + .read() + .map_err(|e| wrap(e, "could not read from file storage")), + ), + storage: Box::new(file_storage), + } + } }; let out = op(&mut storage); @@ -371,7 +445,7 @@ impl Auth { } /// Clears login info from the keyring. - pub fn clear_credentials(&self) -> Result<(), WrappedError> { + pub fn clear_credentials(&self) -> Result<(), AnyError> { self.with_storage(|storage| { storage.storage.clear()?; storage.last_read.set(Ok(None)); diff --git a/cli/src/bin/code/legacy_args.rs b/cli/src/bin/code/legacy_args.rs index 361348d8373..808b4aa30a8 100644 --- a/cli/src/bin/code/legacy_args.rs +++ b/cli/src/bin/code/legacy_args.rs @@ -29,12 +29,12 @@ pub fn try_parse_legacy( match args.get_mut(long) { Some(prev) => { if let Some(v) = value { - prev.push(v.to_str_lossy().to_string()); + prev.push(v.to_string_lossy().to_string()); } } None => { if let Some(v) = value { - args.insert(long.to_string(), vec![v.to_str_lossy().to_string()]); + args.insert(long.to_string(), vec![v.to_string_lossy().to_string()]); } else { args.insert(long.to_string(), vec![]); } diff --git a/cli/src/bin/code/main.rs b/cli/src/bin/code/main.rs index 6bc991b4f5a..d000998c7dc 100644 --- a/cli/src/bin/code/main.rs +++ b/cli/src/bin/code/main.rs @@ -8,9 +8,9 @@ use std::process::Command; use clap::Parser; use cli::{ - commands::{args, internal_wsl, tunnels, update, version, CommandContext}, + commands::{args, tunnels, update, version, CommandContext}, constants::get_default_user_agent, - desktop, log as own_log, + desktop, log, state::LauncherPaths, util::{ errors::{wrap, AnyError}, @@ -22,8 +22,6 @@ use legacy_args::try_parse_legacy; use opentelemetry::sdk::trace::TracerProvider as SdkTracerProvider; use opentelemetry::trace::TracerProvider; -use log::{Level, Metadata, Record}; - #[tokio::main] async fn main() -> Result<(), std::convert::Infallible> { let raw_args = std::env::args_os().collect::>(); @@ -38,44 +36,53 @@ async fn main() -> Result<(), std::convert::Infallible> { }); let core = parsed.core(); - let context = CommandContext { + let context_paths = LauncherPaths::migrate(core.global_options.cli_data_dir.clone()).unwrap(); + let context_args = core.clone(); + + // gets a command context without installing the global logger + let context_no_logger = || CommandContext { http: reqwest::ClientBuilder::new() .user_agent(get_default_user_agent()) .build() .unwrap(), - paths: LauncherPaths::new(&core.global_options.cli_data_dir).unwrap(), - log: make_logger(core), - args: core.clone(), + paths: context_paths, + log: make_logger(&context_args), + args: context_args, }; - log::set_logger(Box::leak(Box::new(RustyLogger(context.log.clone())))) - .map(|()| log::set_max_level(log::LevelFilter::Debug)) - .expect("expected to make logger"); + // gets a command context with the global logger installer. Usually what most commands want. + macro_rules! context { + () => {{ + let context = context_no_logger(); + log::install_global_logger(context.log.clone()); + context + }}; + } let result = match parsed { args::AnyCli::Standalone(args::StandaloneCli { subcommand: Some(cmd), .. }) => match cmd { - args::StandaloneCommands::Update(args) => update::update(context, args).await, - args::StandaloneCommands::Wsl(args) => match args.command { - args::WslCommands::Serve => internal_wsl::serve(context).await, - }, + args::StandaloneCommands::Update(args) => update::update(context!(), args).await, }, args::AnyCli::Standalone(args::StandaloneCli { core: c, .. }) | args::AnyCli::Integrated(args::IntegratedCli { core: c, .. }) => match c.subcommand { None => { + let context = context!(); let ca = context.args.get_base_code_args(); start_code(context, ca).await } Some(args::Commands::Extension(extension_args)) => { + let context = context!(); let mut ca = context.args.get_base_code_args(); extension_args.add_code_args(&mut ca); start_code(context, ca).await } Some(args::Commands::Status) => { + let context = context!(); let mut ca = context.args.get_base_code_args(); ca.push("--status".to_string()); start_code(context, ca).await @@ -83,24 +90,29 @@ async fn main() -> Result<(), std::convert::Infallible> { Some(args::Commands::Version(version_args)) => match version_args.subcommand { args::VersionSubcommand::Use(use_version_args) => { - version::switch_to(context, use_version_args).await + version::switch_to(context!(), use_version_args).await } - args::VersionSubcommand::Show => version::show(context).await, + args::VersionSubcommand::Show => version::show(context!()).await, }, + Some(args::Commands::CommandShell) => tunnels::command_shell(context!()).await, + Some(args::Commands::Tunnel(tunnel_args)) => match tunnel_args.subcommand { - Some(args::TunnelSubcommand::Prune) => tunnels::prune(context).await, - Some(args::TunnelSubcommand::Unregister) => tunnels::unregister(context).await, + Some(args::TunnelSubcommand::Prune) => tunnels::prune(context!()).await, + Some(args::TunnelSubcommand::Unregister) => tunnels::unregister(context!()).await, + Some(args::TunnelSubcommand::Kill) => tunnels::kill(context!()).await, + Some(args::TunnelSubcommand::Restart) => tunnels::restart(context!()).await, + Some(args::TunnelSubcommand::Status) => tunnels::status(context!()).await, Some(args::TunnelSubcommand::Rename(rename_args)) => { - tunnels::rename(context, rename_args).await + tunnels::rename(context!(), rename_args).await } Some(args::TunnelSubcommand::User(user_command)) => { - tunnels::user(context, user_command).await + tunnels::user(context!(), user_command).await } Some(args::TunnelSubcommand::Service(service_args)) => { - tunnels::service(context, service_args).await + tunnels::service(context_no_logger(), service_args).await } - None => tunnels::serve(context, tunnel_args.serve_args).await, + None => tunnels::serve(context_no_logger(), tunnel_args.serve_args).await, }, }, }; @@ -111,18 +123,18 @@ async fn main() -> Result<(), std::convert::Infallible> { } } -fn make_logger(core: &args::CliCore) -> own_log::Logger { +fn make_logger(core: &args::CliCore) -> log::Logger { let log_level = if core.global_options.verbose { - own_log::Level::Trace + log::Level::Trace } else { - core.global_options.log.unwrap_or(own_log::Level::Info) + core.global_options.log.unwrap_or(log::Level::Info) }; let tracer = SdkTracerProvider::builder().build().tracer("codecli"); - let mut log = own_log::Logger::new(tracer, log_level); + let mut log = log::Logger::new(tracer, log_level); if let Some(f) = &core.global_options.log_to_file { - log = - log.tee(own_log::FileLogSink::new(log_level, f).expect("expected to make file logger")) + log = log + .with_sink(log::FileLogSink::new(log_level, f).expect("expected to make file logger")) } log @@ -132,7 +144,7 @@ fn print_and_exit(err: E) -> ! where E: std::fmt::Display, { - own_log::emit(own_log::Level::Error, "", &format!("{}", err)); + log::emit(log::Level::Error, "", &format!("{}", err)); std::process::exit(1); } @@ -164,40 +176,3 @@ async fn start_code(context: CommandContext, args: Vec) -> Result bool { - metadata.level() <= Level::Debug - } - - fn log(&self, record: &Record) { - if !self.enabled(record.metadata()) { - return; - } - - // exclude noisy log modules: - let src = match record.module_path() { - Some("russh::cipher") => return, - Some("russh::negotiation") => return, - Some(s) => s, - None => "", - }; - - self.0.emit( - match record.level() { - log::Level::Debug => own_log::Level::Debug, - log::Level::Error => own_log::Level::Error, - log::Level::Info => own_log::Level::Info, - log::Level::Trace => own_log::Level::Trace, - log::Level::Warn => own_log::Level::Warn, - }, - &format!("[{}] {}", src, record.args()), - ); - } - - fn flush(&self) {} -} diff --git a/cli/src/commands.rs b/cli/src/commands.rs index 32b1ac3592b..754729f2c04 100644 --- a/cli/src/commands.rs +++ b/cli/src/commands.rs @@ -9,5 +9,4 @@ pub mod args; pub mod tunnels; pub mod update; pub mod version; -pub mod internal_wsl; pub use context::CommandContext; diff --git a/cli/src/commands/args.rs b/cli/src/commands/args.rs index 4c4b4f532f3..ad961496bcc 100644 --- a/cli/src/commands/args.rs +++ b/cli/src/commands/args.rs @@ -6,7 +6,7 @@ use std::{fmt, path::PathBuf}; use crate::{constants, log, options, tunnels::code_server::CodeServerArgs}; -use clap::{ArgEnum, Args, Parser, Subcommand}; +use clap::{Args, Parser, Subcommand, ValueEnum}; use const_format::concatcp; const CLI_NAME: &str = concatcp!(constants::PRODUCT_NAME_LONG, " CLI"); @@ -146,22 +146,6 @@ impl<'a> From<&'a CliCore> for CodeServerArgs { pub enum StandaloneCommands { /// Updates the CLI. Update(StandaloneUpdateArgs), - - /// Internal commands for WSL serving. - #[clap(hide = true)] - Wsl(WslArgs), -} - -#[derive(Args, Debug, Clone)] -pub struct WslArgs { - #[clap(subcommand)] - pub command: WslCommands, -} - -#[derive(Subcommand, Debug, Clone)] -pub enum WslCommands { - /// Runs the WSL server on stdin/out - Serve, } #[derive(Args, Debug, Clone)] @@ -187,6 +171,10 @@ pub enum Commands { /// Changes the version of the editor you're using. Version(VersionArgs), + + /// Runs the control server on process stdin/stdout + #[clap(hide = true)] + CommandShell, } #[derive(Args, Debug, Clone)] @@ -200,10 +188,7 @@ pub struct ExtensionArgs { impl ExtensionArgs { pub fn add_code_args(&self, target: &mut Vec) { - if let Some(ed) = &self.desktop_code_options.extensions_dir { - target.push(ed.to_string()); - } - + self.desktop_code_options.add_code_args(target); self.subcommand.add_code_args(target); } } @@ -414,7 +399,7 @@ pub struct DesktopCodeOptions { #[derive(Args, Debug, Clone)] pub struct OutputFormatOptions { /// Set the data output formats. - #[clap(arg_enum, long, value_name = "format", default_value_t = OutputFormat::Text)] + #[clap(value_enum, long, value_name = "format", default_value_t = OutputFormat::Text)] pub format: OutputFormat, } @@ -444,7 +429,7 @@ pub struct GlobalOptions { pub log_to_file: Option, /// Log level to use. - #[clap(long, arg_enum, value_name = "level", global = true)] + #[clap(long, value_enum, value_name = "level", global = true)] pub log: Option, /// Disable telemetry for the current command, even if it was previously @@ -453,7 +438,7 @@ pub struct GlobalOptions { pub disable_telemetry: bool, /// Sets the initial telemetry level - #[clap(arg_enum, long, global = true, hide = true)] + #[clap(value_enum, long, global = true, hide = true)] pub telemetry_level: Option, } @@ -489,7 +474,7 @@ pub struct EditorTroubleshooting { pub disable_extension: Vec, /// Turn sync on or off. - #[clap(arg_enum, long, value_name = "on | off")] + #[clap(value_enum, long, value_name = "on | off")] pub sync: Option, /// Allow debugging and profiling of extensions. Check the developer tools for the connection URI. @@ -505,10 +490,6 @@ pub struct EditorTroubleshooting { #[clap(long)] pub disable_gpu: bool, - /// Max memory size for a window (in Mbytes). - #[clap(long, value_name = "memory")] - pub max_memory: Option, - /// Shows all telemetry events which the editor collects. #[clap(long)] pub telemetry: bool, @@ -537,16 +518,13 @@ impl EditorTroubleshooting { if self.disable_gpu { target.push("--disable-gpu".to_string()); } - if let Some(memory) = &self.max_memory { - target.push(format!("--max-memory={}", memory)); - } if self.telemetry { target.push("--telemetry".to_string()); } } } -#[derive(ArgEnum, Clone, Copy, Debug)] +#[derive(ValueEnum, Clone, Copy, Debug)] pub enum SyncState { On, Off, @@ -561,7 +539,7 @@ impl fmt::Display for SyncState { } } -#[derive(ArgEnum, Clone, Copy, Debug)] +#[derive(ValueEnum, Clone, Copy, Debug)] pub enum OutputFormat { Json, Text, @@ -627,6 +605,15 @@ pub enum TunnelSubcommand { /// Delete all servers which are currently not running. Prune, + /// Stops any running tunnel on the system. + Kill, + + /// Restarts any running tunnel on the system. + Restart, + + /// Gets whether there is a tunnel running on the current machine. + Status, + /// Rename the name of this machine associated with port forwarding service. Rename(TunnelRenameArgs), @@ -644,7 +631,7 @@ pub enum TunnelSubcommand { #[derive(Subcommand, Debug, Clone)] pub enum TunnelServiceSubCommands { /// Installs or re-installs the tunnel service on the machine. - Install, + Install(TunnelServiceInstallArgs), /// Uninstalls and stops the tunnel service. Uninstall, @@ -657,6 +644,13 @@ pub enum TunnelServiceSubCommands { InternalRun, } +#[derive(Args, Debug, Clone)] +pub struct TunnelServiceInstallArgs { + /// If set, the user accepts the server license terms and the server will be started without a user prompt. + #[clap(long)] + pub accept_server_license_terms: bool, +} + #[derive(Args, Debug, Clone)] pub struct TunnelRenameArgs { /// The name you'd like to rename your machine to. @@ -683,11 +677,11 @@ pub struct LoginArgs { pub access_token: Option, /// The auth provider to use. If not provided, a prompt will be shown. - #[clap(arg_enum, long)] + #[clap(value_enum, long)] pub provider: Option, } -#[derive(clap::ArgEnum, Debug, Clone, Copy)] +#[derive(clap::ValueEnum, Debug, Clone, Copy)] pub enum AuthProvider { Microsoft, Github, diff --git a/cli/src/commands/internal_wsl.rs b/cli/src/commands/internal_wsl.rs deleted file mode 100644 index 9912b59428b..00000000000 --- a/cli/src/commands/internal_wsl.rs +++ /dev/null @@ -1,32 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -use crate::{ - tunnels::{serve_wsl, shutdown_signal::ShutdownSignal}, - util::{errors::AnyError, prereqs::PreReqChecker}, -}; - -use super::CommandContext; - -pub async fn serve(ctx: CommandContext) -> Result { - let signal = ShutdownSignal::create_rx(&[ShutdownSignal::CtrlC]); - let platform = spanf!( - ctx.log, - ctx.log.span("prereq"), - PreReqChecker::new().verify() - )?; - - serve_wsl( - ctx.log, - ctx.paths, - (&ctx.args).into(), - platform, - ctx.http, - signal, - ) - .await?; - - Ok(0) -} diff --git a/cli/src/commands/tunnels.rs b/cli/src/commands/tunnels.rs index 01e5aa280d9..d11c15ef1e3 100644 --- a/cli/src/commands/tunnels.rs +++ b/cli/src/commands/tunnels.rs @@ -4,10 +4,11 @@ *--------------------------------------------------------------------------------------------*/ use async_trait::async_trait; +use base64::{engine::general_purpose as b64, Engine as _}; +use serde::Serialize; use sha2::{Digest, Sha256}; -use std::str::FromStr; +use std::{str::FromStr, time::Duration}; use sysinfo::Pid; -use tokio::sync::mpsc; use super::{ args::{ @@ -17,21 +18,37 @@ use super::{ CommandContext, }; -use crate::tunnels::shutdown_signal::ShutdownSignal; -use crate::tunnels::{dev_tunnels::ActiveTunnel, SleepInhibitor}; use crate::{ auth::Auth, - log::{self, Logger}, + constants::{APPLICATION_NAME, TUNNEL_CLI_LOCK_NAME, TUNNEL_SERVICE_LOCK_NAME}, + log, state::LauncherPaths, tunnels::{ - code_server::CodeServerArgs, create_service_manager, dev_tunnels, legal, - paths::get_all_servers, ServiceContainer, ServiceManager, + code_server::CodeServerArgs, + create_service_manager, dev_tunnels, legal, + paths::get_all_servers, + protocol, serve_stream, + shutdown_signal::ShutdownRequest, + singleton_client::do_single_rpc_call, + singleton_server::{ + make_singleton_server, start_singleton_server, BroadcastLogSink, SingletonServerArgs, + }, + Next, ServeStreamParams, ServiceContainer, ServiceManager, }, util::{ - errors::{wrap, AnyError}, + app_lock::AppMutex, + errors::{wrap, AnyError, CodeError}, prereqs::PreReqChecker, }, }; +use crate::{ + singleton::{acquire_singleton, SingletonConnection}, + tunnels::{ + dev_tunnels::ActiveTunnel, + singleton_client::{start_singleton_client, SingletonClientArgs}, + SleepInhibitor, + }, +}; impl From for crate::auth::AuthProvider { fn from(auth_provider: AuthProvider) -> Self { @@ -75,7 +92,6 @@ impl ServiceContainer for TunnelServiceContainer { &mut self, log: log::Logger, launcher_paths: LauncherPaths, - shutdown_rx: mpsc::UnboundedReceiver, ) -> Result<(), AnyError> { let csa = (&self.args).into(); serve_with_csa( @@ -86,27 +102,46 @@ impl ServiceContainer for TunnelServiceContainer { ..Default::default() }, csa, - Some(shutdown_rx), + TUNNEL_SERVICE_LOCK_NAME, ) .await?; Ok(()) } } +pub async fn command_shell(ctx: CommandContext) -> Result { + let platform = PreReqChecker::new().verify().await?; + serve_stream( + tokio::io::stdin(), + tokio::io::stderr(), + ServeStreamParams { + log: ctx.log, + launcher_paths: ctx.paths, + platform, + requires_auth: true, + exit_barrier: ShutdownRequest::create_rx([ShutdownRequest::CtrlC]), + code_server_args: (&ctx.args).into(), + }, + ) + .await; + + Ok(0) +} + pub async fn service( ctx: CommandContext, service_args: TunnelServiceSubCommands, ) -> Result { let manager = create_service_manager(ctx.log.clone(), &ctx.paths); match service_args { - TunnelServiceSubCommands::Install => { + TunnelServiceSubCommands::Install(args) => { // ensure logged in, otherwise subsequent serving will fail Auth::new(&ctx.paths, ctx.log.clone()) .get_credential() .await?; // likewise for license consent - legal::require_consent(&ctx.paths, false)?; + legal::require_consent(&ctx.paths, args.accept_server_license_terms)?; let current_exe = std::env::current_exe().map_err(|e| wrap(e, "could not get current exe"))?; @@ -124,7 +159,7 @@ pub async fn service( ], ) .await?; - ctx.log.result("Service successfully installed! You can use `code tunnel service log` to monitor it, and `code tunnel service uninstall` to remove it."); + ctx.log.result(format!("Service successfully installed! You can use `{} tunnel service log` to monitor it, and `{} tunnel service uninstall` to remove it.", APPLICATION_NAME, APPLICATION_NAME)); } TunnelServiceSubCommands::Uninstall => { manager.unregister().await?; @@ -173,7 +208,7 @@ pub async fn rename(ctx: CommandContext, rename_args: TunnelRenameArgs) -> Resul let auth = Auth::new(&ctx.paths, ctx.log.clone()); let mut dt = dev_tunnels::DevTunnels::new(&ctx.log, auth, &ctx.paths); dt.rename_tunnel(&rename_args.name).await?; - ctx.log.result(&format!( + ctx.log.result(format!( "Successfully renamed this gateway to {}", &rename_args.name )); @@ -189,6 +224,65 @@ pub async fn unregister(ctx: CommandContext) -> Result { Ok(0) } +pub async fn restart(ctx: CommandContext) -> Result { + do_single_rpc_call::<_, ()>( + &ctx.paths.tunnel_lockfile(), + ctx.log, + protocol::singleton::METHOD_RESTART, + protocol::EmptyObject {}, + ) + .await + .map(|_| 0) + .map_err(|e| e.into()) +} + +pub async fn kill(ctx: CommandContext) -> Result { + do_single_rpc_call::<_, ()>( + &ctx.paths.tunnel_lockfile(), + ctx.log, + protocol::singleton::METHOD_SHUTDOWN, + protocol::EmptyObject {}, + ) + .await + .map(|_| 0) + .map_err(|e| e.into()) +} + +#[derive(Serialize)] +pub struct StatusOutput { + pub tunnel: Option, + pub service_installed: bool, +} + +pub async fn status(ctx: CommandContext) -> Result { + let tunnel_status = do_single_rpc_call::<_, protocol::singleton::Status>( + &ctx.paths.tunnel_lockfile(), + ctx.log.clone(), + protocol::singleton::METHOD_STATUS, + protocol::EmptyObject {}, + ) + .await; + + let service_installed = create_service_manager(ctx.log.clone(), &ctx.paths) + .is_installed() + .await + .unwrap_or(false); + + ctx.log.result( + serde_json::to_string(&StatusOutput { + service_installed, + tunnel: match tunnel_status { + Ok(s) => Some(s.tunnel), + Err(CodeError::NoRunningTunnel) => None, + Err(e) => return Err(e.into()), + }, + }) + .unwrap(), + ); + + Ok(0) +} + /// Removes unused servers. pub async fn prune(ctx: CommandContext) -> Result { get_all_servers(&ctx.paths) @@ -197,7 +291,7 @@ pub async fn prune(ctx: CommandContext) -> Result { .filter(|s| s.get_running_pid().is_none()) .try_for_each(|s| { ctx.log - .result(&format!("Deleted {}", s.server_dir.display())); + .result(format!("Deleted {}", s.server_dir.display())); s.delete() }) .map_err(AnyError::from)?; @@ -227,7 +321,7 @@ pub async fn serve(ctx: CommandContext, gateway_args: TunnelServeArgs) -> Result legal::require_consent(&paths, gateway_args.accept_server_license_terms)?; let csa = (&args).into(); - let result = serve_with_csa(paths, log, gateway_args, csa, None).await; + let result = serve_with_csa(paths, log, gateway_args, csa, TUNNEL_CLI_LOCK_NAME).await; drop(no_sleep); result @@ -237,64 +331,122 @@ fn get_connection_token(tunnel: &ActiveTunnel) -> String { let mut hash = Sha256::new(); hash.update(tunnel.id.as_bytes()); let result = hash.finalize(); - base64::encode_config(result, base64::URL_SAFE_NO_PAD) + b64::URL_SAFE_NO_PAD.encode(result) } async fn serve_with_csa( paths: LauncherPaths, - log: Logger, + mut log: log::Logger, gateway_args: TunnelServeArgs, mut csa: CodeServerArgs, - shutdown_rx: Option>, + app_mutex_name: Option<&'static str>, ) -> Result { + let log_broadcast = BroadcastLogSink::new(); + log = log.tee(log_broadcast.clone()); + log::install_global_logger(log.clone()); // re-install so that library logs are captured + + debug!( + log, + "Starting tunnel with `{} {}`", + APPLICATION_NAME, + std::env::args().collect::>().join(" ") + ); + // Intentionally read before starting the server. If the server updated and // respawn is requested, the old binary will get renamed, and then // current_exe will point to the wrong path. let current_exe = std::env::current_exe().unwrap(); - let platform = spanf!(log, log.span("prereq"), PreReqChecker::new().verify())?; - let auth = Auth::new(&paths, log.clone()); - let mut dt = dev_tunnels::DevTunnels::new(&log, auth, &paths); - let tunnel = if let Some(d) = gateway_args.tunnel.clone().into() { - dt.start_existing_tunnel(d).await - } else { - dt.start_new_launcher_tunnel(gateway_args.name, gateway_args.random_name) - .await - }?; - - csa.connection_token = Some(get_connection_token(&tunnel)); - - let shutdown_tx = if let Some(tx) = shutdown_rx { - tx - } else if let Some(pid) = gateway_args + let mut vec = vec![ + ShutdownRequest::CtrlC, + ShutdownRequest::ExeUninstalled(current_exe.to_owned()), + ]; + if let Some(p) = gateway_args .parent_process_id .and_then(|p| Pid::from_str(&p).ok()) { - ShutdownSignal::create_rx(&[ - ShutdownSignal::CtrlC, - ShutdownSignal::ParentProcessKilled(pid), - ]) - } else { - ShutdownSignal::create_rx(&[ShutdownSignal::CtrlC]) + vec.push(ShutdownRequest::ParentProcessKilled(p)); + } + let shutdown = ShutdownRequest::create_rx(vec); + + let server = loop { + if shutdown.is_open() { + return Ok(0); + } + + match acquire_singleton(paths.tunnel_lockfile()).await { + Ok(SingletonConnection::Client(stream)) => { + debug!(log, "starting as client to singleton"); + let should_exit = start_singleton_client(SingletonClientArgs { + log: log.clone(), + shutdown: shutdown.clone(), + stream, + }) + .await; + if should_exit { + return Ok(0); + } + } + Ok(SingletonConnection::Singleton(server)) => break server, + Err(e) => { + warning!(log, "error access singleton, retrying: {}", e); + tokio::time::sleep(Duration::from_secs(2)).await + } + } }; - let mut r = crate::tunnels::serve(&log, tunnel, &paths, &csa, platform, shutdown_tx).await?; - r.tunnel.close().await.ok(); + debug!(log, "starting as new singleton"); - if r.respawn { - warning!(log, "respawn requested, starting new server"); - // reuse current args, but specify no-forward since tunnels will - // already be running in this process, and we cannot do a login - let args = std::env::args().skip(1).collect::>(); - let exit = std::process::Command::new(current_exe) - .args(args) - .spawn() - .map_err(|e| wrap(e, "error respawning after update"))? - .wait() - .map_err(|e| wrap(e, "error waiting for child"))?; + let mut server = + make_singleton_server(log_broadcast.clone(), log.clone(), server, shutdown.clone()); + let platform = spanf!(log, log.span("prereq"), PreReqChecker::new().verify())?; + let _lock = app_mutex_name.map(AppMutex::new); - return Ok(exit.code().unwrap_or(1)); + let auth = Auth::new(&paths, log.clone()); + let mut dt = dev_tunnels::DevTunnels::new(&log, auth, &paths); + loop { + let tunnel = if let Some(d) = gateway_args.tunnel.clone().into() { + dt.start_existing_tunnel(d).await + } else { + dt.start_new_launcher_tunnel(gateway_args.name.as_deref(), gateway_args.random_name) + .await + }?; + + csa.connection_token = Some(get_connection_token(&tunnel)); + + let mut r = start_singleton_server(SingletonServerArgs { + log: log.clone(), + tunnel, + paths: &paths, + code_server_args: &csa, + platform, + log_broadcast: &log_broadcast, + shutdown: shutdown.clone(), + server: &mut server, + }) + .await?; + r.tunnel.close().await.ok(); + + match r.next { + Next::Respawn => { + warning!(log, "respawn requested, starting new server"); + // reuse current args, but specify no-forward since tunnels will + // already be running in this process, and we cannot do a login + let args = std::env::args().skip(1).collect::>(); + let exit = std::process::Command::new(current_exe) + .args(args) + .spawn() + .map_err(|e| wrap(e, "error respawning after update"))? + .wait() + .map_err(|e| wrap(e, "error waiting for child"))?; + + return Ok(exit.code().unwrap_or(1)); + } + Next::Exit => { + debug!(log, "Tunnel shut down"); + return Ok(0); + } + Next::Restart => continue, + } } - - Ok(0) } diff --git a/cli/src/commands/update.rs b/cli/src/commands/update.rs index 80a57b12bb1..0d7321a814f 100644 --- a/cli/src/commands/update.rs +++ b/cli/src/commands/update.rs @@ -3,6 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +use std::sync::Arc; + use indicatif::ProgressBar; use crate::{ @@ -17,7 +19,7 @@ use super::{args::StandaloneUpdateArgs, CommandContext}; pub async fn update(ctx: CommandContext, args: StandaloneUpdateArgs) -> Result { let update_service = UpdateService::new( ctx.log.clone(), - ReqwestSimpleHttp::with_client(ctx.http.clone()), + Arc::new(ReqwestSimpleHttp::with_client(ctx.http.clone())), ); let update_service = SelfUpdate::new(&update_service)?; diff --git a/cli/src/commands/version.rs b/cli/src/commands/version.rs index c0d44fa1438..e80fa481c7b 100644 --- a/cli/src/commands/version.rs +++ b/cli/src/commands/version.rs @@ -58,5 +58,5 @@ pub async fn show(ctx: CommandContext) -> Result { } fn print_now_using(log: &log::Logger, version: &RequestedVersion, path: &Path) { - log.result(&format!("Now using {} from {}", version, path.display())); + log.result(format!("Now using {} from {}", version, path.display())); } diff --git a/cli/src/constants.rs b/cli/src/constants.rs index b3adb020260..2dac5d43563 100644 --- a/cli/src/constants.rs +++ b/cli/src/constants.rs @@ -18,7 +18,8 @@ pub const CONTROL_PORT: u16 = 31545; /// 2 - Addition of `serve.compressed` property to control whether servermsg's /// are compressed bidirectionally. /// 3 - The server's connection token is set to a SHA256 hash of the tunnel ID -pub const PROTOCOL_VERSION: u32 = 3; +/// 4 - The server's msgpack messages are no longer length-prefixed +pub const PROTOCOL_VERSION: u32 = 4; /// Prefix for the tunnel tag that includes the version. pub const PROTOCOL_VERSION_TAG_PREFIX: &str = "protocolv"; @@ -34,6 +35,15 @@ pub const VSCODE_CLI_COMMIT: Option<&'static str> = option_env!("VSCODE_CLI_COMM pub const VSCODE_CLI_UPDATE_ENDPOINT: Option<&'static str> = option_env!("VSCODE_CLI_UPDATE_ENDPOINT"); +/// Windows lock name for the running tunnel service. Used by the setup script +/// to detect a tunnel process. See #179265. +pub const TUNNEL_SERVICE_LOCK_NAME: Option<&'static str> = + option_env!("VSCODE_CLI_TUNNEL_SERVICE_MUTEX"); + +/// Windows lock name for the running tunnel without a service. Used by the setup +/// script to detect a tunnel process. See #179265. +pub const TUNNEL_CLI_LOCK_NAME: Option<&'static str> = option_env!("VSCODE_CLI_TUNNEL_CLI_MUTEX"); + pub const TUNNEL_SERVICE_USER_AGENT_ENV_VAR: &str = "TUNNEL_SERVICE_USER_AGENT"; /// Application name as it appears on the CLI. @@ -66,6 +76,12 @@ pub const TUNNEL_ACTIVITY_NAME: &str = concatcp!(PRODUCT_NAME_LONG, " Tunnel"); const NONINTERACTIVE_VAR: &str = "VSCODE_CLI_NONINTERACTIVE"; +/// Default data CLI data directory. +pub const DEFAULT_DATA_PARENT_DIR: &str = match option_env!("VSCODE_CLI_DEFAULT_PARENT_DATA_DIR") { + Some(n) => n, + None => ".vscode-oss", +}; + pub fn get_default_user_agent() -> String { format!( "vscode-server-launcher/{}", @@ -73,6 +89,8 @@ pub fn get_default_user_agent() -> String { ) } +const NO_COLOR_ENV: &str = "NO_COLOR"; + lazy_static! { pub static ref TUNNEL_SERVICE_USER_AGENT: String = match std::env::var(TUNNEL_SERVICE_USER_AGENT_ENV_VAR) { @@ -101,5 +119,11 @@ lazy_static! { option_env!("VSCODE_CLI_SERVER_NAME_MAP").and_then(|s| serde_json::from_str(s).unwrap()); /// Whether i/o interactions are allowed in the current CLI. - pub static ref IS_INTERACTIVE_CLI: bool = atty::is(atty::Stream::Stdin) && std::env::var(NONINTERACTIVE_VAR).is_err(); + pub static ref IS_A_TTY: bool = atty::is(atty::Stream::Stdin); + + /// Whether i/o interactions are allowed in the current CLI. + pub static ref COLORS_ENABLED: bool = *IS_A_TTY && std::env::var(NO_COLOR_ENV).is_err(); + + /// Whether i/o interactions are allowed in the current CLI. + pub static ref IS_INTERACTIVE_CLI: bool = *IS_A_TTY && std::env::var(NONINTERACTIVE_VAR).is_err(); } diff --git a/cli/src/download_cache.rs b/cli/src/download_cache.rs new file mode 100644 index 00000000000..869fcf62357 --- /dev/null +++ b/cli/src/download_cache.rs @@ -0,0 +1,119 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +use std::{ + fs::create_dir_all, + path::{Path, PathBuf}, +}; + +use futures::Future; +use tokio::fs::remove_dir_all; + +use crate::{ + state::PersistedState, + util::errors::{wrap, AnyError, WrappedError}, +}; + +const KEEP_LRU: usize = 5; +const STAGING_SUFFIX: &str = ".staging"; + +#[derive(Clone)] +pub struct DownloadCache { + path: PathBuf, + state: PersistedState>, +} + +impl DownloadCache { + pub fn new(path: PathBuf) -> DownloadCache { + DownloadCache { + state: PersistedState::new(path.join("lru.json")), + path, + } + } + + /// Gets the download cache path. Names of cache entries can be formed by + /// joining them to the path. + pub fn path(&self) -> &Path { + &self.path + } + + /// Gets whether a cache exists with the name already. Marks it as recently + /// used if it does exist. + pub fn exists(&self, name: &str) -> Option { + let p = self.path.join(name); + if !p.exists() { + return None; + } + + let _ = self.touch(name.to_string()); + Some(p) + } + + /// Removes the item from the cache, if it exists + pub fn delete(&self, name: &str) -> Result<(), WrappedError> { + let f = self.path.join(name); + if f.exists() { + std::fs::remove_dir_all(f).map_err(|e| wrap(e, "error removing cached folder"))?; + } + + self.state.update(|l| { + l.retain(|n| n != name); + }) + } + + /// Calls the function to create the cached folder if it doesn't exist, + /// returning the path where the folder is. Note that the path passed to + /// the `do_create` method is a staging path and will not be the same as the + /// final returned path. + pub async fn create( + &self, + name: impl AsRef, + do_create: F, + ) -> Result + where + F: FnOnce(PathBuf) -> T, + T: Future> + Send, + { + let name = name.as_ref(); + let target_dir = self.path.join(name); + if target_dir.exists() { + return Ok(target_dir); + } + + let temp_dir = self.path.join(format!("{}{}", name, STAGING_SUFFIX)); + let _ = remove_dir_all(&temp_dir).await; // cleanup any existing + + create_dir_all(&temp_dir).map_err(|e| wrap(e, "error creating server directory"))?; + do_create(temp_dir.clone()).await?; + + let _ = self.touch(name.to_string()); + std::fs::rename(&temp_dir, &target_dir) + .map_err(|e| wrap(e, "error renaming downloaded server"))?; + + Ok(target_dir) + } + + fn touch(&self, name: String) -> Result<(), AnyError> { + self.state.update(|l| { + if let Some(index) = l.iter().position(|s| s == &name) { + l.remove(index); + } + l.insert(0, name); + + if l.len() <= KEEP_LRU { + return; + } + + if let Some(f) = l.last() { + let f = self.path.join(f); + if !f.exists() || std::fs::remove_dir_all(f).is_ok() { + l.pop(); + } + } + })?; + + Ok(()) + } +} diff --git a/cli/src/json_rpc.rs b/cli/src/json_rpc.rs index 9cc5ad1ade1..57baac01c5e 100644 --- a/cli/src/json_rpc.rs +++ b/cli/src/json_rpc.rs @@ -5,12 +5,16 @@ use tokio::{ io::{AsyncBufReadExt, AsyncRead, AsyncWrite, AsyncWriteExt, BufReader}, + pin, sync::mpsc, }; use crate::{ rpc::{self, MaybeSync, Serialization}, - util::errors::InvalidRpcDataError, + util::{ + errors::InvalidRpcDataError, + sync::{Barrier, Receivable}, + }, }; use std::io; @@ -39,44 +43,59 @@ pub fn new_json_rpc() -> rpc::RpcBuilder { } #[allow(dead_code)] -pub async fn start_json_rpc( +pub async fn start_json_rpc( dispatcher: rpc::RpcDispatcher, read: impl AsyncRead + Unpin, mut write: impl AsyncWrite + Unpin, - mut msg_rx: mpsc::UnboundedReceiver>, - mut shutdown_rx: mpsc::UnboundedReceiver, + mut msg_rx: impl Receivable>, + mut shutdown_rx: Barrier, ) -> io::Result> { - let (write_tx, mut write_rx) = mpsc::unbounded_channel::>(); + let (write_tx, mut write_rx) = mpsc::channel::>(8); let mut read = BufReader::new(read); let mut read_buf = String::new(); + let shutdown_fut = shutdown_rx.wait(); + pin!(shutdown_fut); loop { tokio::select! { - r = shutdown_rx.recv() => return Ok(r), + r = &mut shutdown_fut => return Ok(r.ok()), Some(w) = write_rx.recv() => { write.write_all(&w).await?; }, - Some(w) = msg_rx.recv() => { + Some(w) = msg_rx.recv_msg() => { write.write_all(&w).await?; }, n = read.read_line(&mut read_buf) => { let r = match n { Ok(0) => return Ok(None), - Ok(n) => dispatcher.dispatch(read_buf[..n].as_bytes()), + Ok(n) => dispatcher.dispatch(read_buf[..n].as_bytes()), Err(e) => return Err(e) }; + read_buf.truncate(0); + match r { MaybeSync::Sync(Some(v)) => { - write_tx.send(v).ok(); + write.write_all(&v).await?; }, MaybeSync::Sync(None) => continue, MaybeSync::Future(fut) => { let write_tx = write_tx.clone(); tokio::spawn(async move { if let Some(v) = fut.await { - write_tx.send(v).ok(); + let _ = write_tx.send(v).await; + } + }); + }, + MaybeSync::Stream((dto, fut)) => { + if let Some(dto) = dto { + dispatcher.register_stream(write_tx.clone(), dto).await; + } + let write_tx = write_tx.clone(); + tokio::spawn(async move { + if let Some(v) = fut.await { + let _ = write_tx.send(v).await; } }); } diff --git a/cli/src/lib.rs b/cli/src/lib.rs index fd0917843ba..b2e23cb4d69 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -18,6 +18,9 @@ pub mod tunnels; pub mod update_service; pub mod util; -mod rpc; +mod async_pipe; +mod download_cache; mod json_rpc; mod msgpack_rpc; +mod rpc; +mod singleton; diff --git a/cli/src/log.rs b/cli/src/log.rs index a008a1ba06d..a7561a37f6c 100644 --- a/cli/src/log.rs +++ b/cli/src/log.rs @@ -8,14 +8,15 @@ use opentelemetry::{ sdk::trace::{Tracer, TracerProvider}, trace::{SpanBuilder, Tracer as TraitTracer, TracerProvider as TracerProviderTrait}, }; +use serde::{Deserialize, Serialize}; use std::fmt; -use std::{env, path::Path, sync::Arc}; use std::{ io::Write, sync::atomic::{AtomicU32, Ordering}, }; +use std::{path::Path, sync::Arc}; -const NO_COLOR_ENV: &str = "NO_COLOR"; +use crate::constants::COLORS_ENABLED; static INSTANCE_COUNTER: AtomicU32 = AtomicU32::new(0); @@ -25,10 +26,13 @@ pub fn next_counter() -> u32 { } // Log level -#[derive(clap::ArgEnum, PartialEq, Eq, PartialOrd, Clone, Copy, Debug)] +#[derive( + clap::ValueEnum, PartialEq, Eq, PartialOrd, Clone, Copy, Debug, Serialize, Deserialize, Default, +)] pub enum Level { Trace = 0, Debug, + #[default] Info, Warn, Error, @@ -36,12 +40,6 @@ pub enum Level { Off, } -impl Default for Level { - fn default() -> Self { - Level::Info - } -} - impl fmt::Display for Level { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { @@ -70,7 +68,7 @@ impl Level { } pub fn color_code(&self) -> Option<&str> { - if env::var(NO_COLOR_ENV).is_ok() || !atty::is(atty::Stream::Stdout) { + if !*COLORS_ENABLED { return None; } @@ -161,9 +159,21 @@ pub struct FileLogSink { file: Arc>, } +const FILE_LOG_SIZE_LIMIT: u64 = 1024 * 1024 * 10; // 10MB + impl FileLogSink { pub fn new(level: Level, path: &Path) -> std::io::Result { - let file = std::fs::File::create(path)?; + // Truncate the service log occasionally to avoid growing infinitely + if matches!(path.metadata(), Ok(m) if m.len() > FILE_LOG_SIZE_LIMIT) { + // ignore errors, can happen if another process is writing right now + let _ = std::fs::remove_file(path); + } + + let file = std::fs::OpenOptions::new() + .append(true) + .create(true) + .open(path)?; + Ok(Self { level, file: Arc::new(std::sync::Mutex::new(file)), @@ -177,7 +187,7 @@ impl LogSink for FileLogSink { return; } - let line = format(level, prefix, message); + let line = format(level, prefix, message, false); // ignore any errors, not much we can do if logging fails... self.file.lock().unwrap().write_all(line.as_bytes()).ok(); @@ -294,24 +304,26 @@ impl<'a> crate::util::io::ReportCopyProgress for DownloadLogger<'a> { } } -pub fn format(level: Level, prefix: &str, message: &str) -> String { +fn format(level: Level, prefix: &str, message: &str, use_colors: bool) -> String { let current = Local::now(); let timestamp = current.format("%Y-%m-%d %H:%M:%S").to_string(); let name = level.name().unwrap(); - if let Some(c) = level.color_code() { - format!( - "\x1b[2m[{}]\x1b[0m {}{}\x1b[0m {}{}\n", - timestamp, c, name, prefix, message - ) - } else { - format!("[{}] {} {}{}\n", timestamp, name, prefix, message) + if use_colors { + if let Some(c) = level.color_code() { + return format!( + "\x1b[2m[{}]\x1b[0m {}{}\x1b[0m {}{}\n", + timestamp, c, name, prefix, message + ); + } } + + format!("[{}] {} {}{}\n", timestamp, name, prefix, message) } pub fn emit(level: Level, prefix: &str, message: &str) { - let line = format(level, prefix, message); + let line = format(level, prefix, message, true); if level == Level::Trace { print!("\x1b[2m{}\x1b[0m", line); } else { @@ -319,6 +331,50 @@ pub fn emit(level: Level, prefix: &str, message: &str) { } } +/// Installs the logger instance as the global logger for the 'log' service. +/// Replaces any existing registered logger. Note that the logger will be leaked/ +pub fn install_global_logger(log: Logger) { + log::set_logger(Box::leak(Box::new(RustyLogger(log)))) + .map(|()| log::set_max_level(log::LevelFilter::Debug)) + .expect("expected to make logger"); +} + +/// Logger that uses the common rust "log" crate and directs back to one of +/// our managed loggers. +struct RustyLogger(Logger); + +impl log::Log for RustyLogger { + fn enabled(&self, metadata: &log::Metadata) -> bool { + metadata.level() <= log::Level::Debug + } + + fn log(&self, record: &log::Record) { + if !self.enabled(record.metadata()) { + return; + } + + // exclude noisy log modules: + let src = match record.module_path() { + Some("russh::cipher" | "russh::negotiation" | "russh::kex::dh") => return, + Some(s) => s, + None => "", + }; + + self.0.emit( + match record.level() { + log::Level::Debug => Level::Debug, + log::Level::Error => Level::Error, + log::Level::Info => Level::Info, + log::Level::Trace => Level::Trace, + log::Level::Warn => Level::Warn, + }, + &format!("[{}] {}", src, record.args()), + ); + } + + fn flush(&self) {} +} + #[macro_export] macro_rules! error { ($logger:expr, $str:expr) => { diff --git a/cli/src/msgpack_rpc.rs b/cli/src/msgpack_rpc.rs index b00b4c11ed8..219c923cdf2 100644 --- a/cli/src/msgpack_rpc.rs +++ b/cli/src/msgpack_rpc.rs @@ -3,16 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +use bytes::Buf; +use serde::de::DeserializeOwned; use tokio::{ - io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, BufReader}, + io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt}, + pin, sync::mpsc, }; +use tokio_util::codec::Decoder; use crate::{ rpc::{self, MaybeSync, Serialization}, - util::errors::{AnyError, InvalidRpcDataError}, + util::{ + errors::{AnyError, InvalidRpcDataError}, + sync::{Barrier, Receivable}, + }, }; -use std::io; +use std::io::{self, Cursor, ErrorKind}; #[derive(Copy, Clone)] pub struct MsgPackSerializer {} @@ -29,55 +36,160 @@ impl Serialization for MsgPackSerializer { pub type MsgPackCaller = rpc::RpcCaller; -/// Creates a new RPC Builder that serializes to JSON. +/// Creates a new RPC Builder that serializes to msgpack. pub fn new_msgpack_rpc() -> rpc::RpcBuilder { rpc::RpcBuilder::new(MsgPackSerializer {}) } -#[allow(clippy::read_zero_byte_vec)] // false positive -pub async fn start_msgpack_rpc( - dispatcher: rpc::RpcDispatcher, - read: impl AsyncRead + Unpin, - mut write: impl AsyncWrite + Unpin, - mut msg_rx: mpsc::UnboundedReceiver>, - mut shutdown_rx: mpsc::UnboundedReceiver, -) -> io::Result> { - let (write_tx, mut write_rx) = mpsc::unbounded_channel::>(); - let mut read = BufReader::new(read); - let mut decode_buf = vec![]; +/// Starting processing msgpack rpc over the given i/o. It's recommended that +/// the reader be passed in as a BufReader for efficiency. +pub async fn start_msgpack_rpc< + C: Send + Sync + 'static, + X: Clone, + S: Send + Sync + Serialization, + Read: AsyncRead + Unpin, + Write: AsyncWrite + Unpin, +>( + dispatcher: rpc::RpcDispatcher, + mut read: Read, + mut write: Write, + mut msg_rx: impl Receivable>, + mut shutdown_rx: Barrier, +) -> io::Result<(Option, Read, Write)> { + let (write_tx, mut write_rx) = mpsc::channel::>(8); + let mut decoder = MsgPackCodec::new(); + let mut decoder_buf = bytes::BytesMut::new(); + + let shutdown_fut = shutdown_rx.wait(); + pin!(shutdown_fut); loop { tokio::select! { - u = read.read_u32() => { - let msg_length = u? as usize; - decode_buf.resize(msg_length, 0); - tokio::select! { - r = read.read_exact(&mut decode_buf) => match dispatcher.dispatch(&decode_buf[..r?]) { + r = read.read_buf(&mut decoder_buf) => { + r?; + + while let Some(frame) = decoder.decode(&mut decoder_buf)? { + match dispatcher.dispatch_with_partial(&frame.vec, frame.obj) { MaybeSync::Sync(Some(v)) => { - write_tx.send(v).ok(); + let _ = write_tx.send(v).await; }, MaybeSync::Sync(None) => continue, MaybeSync::Future(fut) => { let write_tx = write_tx.clone(); tokio::spawn(async move { if let Some(v) = fut.await { - write_tx.send(v).ok(); + let _ = write_tx.send(v).await; } }); } - }, - r = shutdown_rx.recv() => return Ok(r), + MaybeSync::Stream((stream, fut)) => { + if let Some(stream) = stream { + dispatcher.register_stream(write_tx.clone(), stream).await; + } + let write_tx = write_tx.clone(); + tokio::spawn(async move { + if let Some(v) = fut.await { + let _ = write_tx.send(v).await; + } + }); + } + } }; }, Some(m) = write_rx.recv() => { write.write_all(&m).await?; }, - Some(m) = msg_rx.recv() => { + Some(m) = msg_rx.recv_msg() => { write.write_all(&m).await?; }, - r = shutdown_rx.recv() => return Ok(r), + r = &mut shutdown_fut => return Ok((r.ok(), read, write)), } write.flush().await?; } } + +/// Reader that reads msgpack object messages in a cancellation-safe way using Tokio's codecs. +/// +/// rmp_serde does not support async reads, and does not plan to. But we know every +/// type in protocol is some kind of object, so by asking to deserialize the +/// requested object from a reader (repeatedly, if incomplete) we can +/// accomplish streaming. +pub struct MsgPackCodec { + _marker: std::marker::PhantomData, +} + +impl MsgPackCodec { + pub fn new() -> Self { + Self { + _marker: std::marker::PhantomData::default(), + } + } +} + +pub struct MsgPackDecoded { + pub obj: T, + pub vec: Vec, +} + +impl tokio_util::codec::Decoder for MsgPackCodec { + type Item = MsgPackDecoded; + type Error = io::Error; + + fn decode(&mut self, src: &mut bytes::BytesMut) -> Result, Self::Error> { + let bytes_ref = src.as_ref(); + let mut cursor = Cursor::new(bytes_ref); + + match rmp_serde::decode::from_read::<_, T>(&mut cursor) { + Err( + rmp_serde::decode::Error::InvalidDataRead(e) + | rmp_serde::decode::Error::InvalidMarkerRead(e), + ) if e.kind() == ErrorKind::UnexpectedEof => { + src.reserve(1024); + Ok(None) + } + Err(e) => Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + e.to_string(), + )), + Ok(obj) => { + let len = cursor.position() as usize; + let vec = src[..len].to_vec(); + src.advance(len); + Ok(Some(MsgPackDecoded { obj, vec })) + } + } + } +} + +#[cfg(test)] +mod tests { + use serde::{Deserialize, Serialize}; + + use super::*; + + #[derive(Serialize, Deserialize, PartialEq, Eq, Debug)] + pub struct Msg { + pub x: i32, + } + + #[test] + fn test_protocol() { + let mut c = MsgPackCodec::::new(); + let mut buf = bytes::BytesMut::new(); + + assert!(c.decode(&mut buf).unwrap().is_none()); + + buf.extend_from_slice(rmp_serde::to_vec_named(&Msg { x: 1 }).unwrap().as_slice()); + buf.extend_from_slice(rmp_serde::to_vec_named(&Msg { x: 2 }).unwrap().as_slice()); + + assert_eq!( + c.decode(&mut buf).unwrap().expect("expected msg1").obj, + Msg { x: 1 } + ); + assert_eq!( + c.decode(&mut buf).unwrap().expect("expected msg1").obj, + Msg { x: 2 } + ); + } +} diff --git a/cli/src/options.rs b/cli/src/options.rs index ca8fa7b9695..9423a6da92e 100644 --- a/cli/src/options.rs +++ b/cli/src/options.rs @@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize}; use crate::constants::{APPLICATION_NAME_MAP, PRODUCT_NAME_LONG_MAP, SERVER_NAME_MAP}; -#[derive(clap::ArgEnum, Copy, Clone, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] +#[derive(clap::ValueEnum, Copy, Clone, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] pub enum Quality { #[serde(rename = "stable")] Stable, @@ -95,7 +95,7 @@ impl TryFrom<&str> for Quality { } } -#[derive(clap::ArgEnum, Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[derive(clap::ValueEnum, Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub enum TelemetryLevel { Off, Crash, diff --git a/cli/src/rpc.rs b/cli/src/rpc.rs index 2249e5b7cf1..acd53dc38e0 100644 --- a/cli/src/rpc.rs +++ b/cli/src/rpc.rs @@ -15,17 +15,26 @@ use std::{ use crate::log; use futures::{future::BoxFuture, Future, FutureExt}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use tokio::sync::{mpsc, oneshot}; +use tokio::{ + io::{AsyncReadExt, AsyncWriteExt, DuplexStream, WriteHalf}, + sync::{mpsc, oneshot}, +}; use crate::util::errors::AnyError; pub type SyncMethod = Arc, &[u8]) -> Option>>; pub type AsyncMethod = Arc, &[u8]) -> BoxFuture<'static, Option>>>; +pub type Duplex = Arc< + dyn Send + + Sync + + Fn(Option, &[u8]) -> (Option, BoxFuture<'static, Option>>), +>; pub enum Method { Sync(SyncMethod), Async(AsyncMethod), + Duplex(Duplex), } /// Serialization is given to the RpcBuilder and defines how data gets serialized @@ -81,6 +90,12 @@ pub struct RpcMethodBuilder { calls: Arc>>, } +#[derive(Serialize)] +struct DuplexStreamStarted { + pub for_request_id: u32, + pub stream_ids: Vec, +} + impl RpcMethodBuilder { /// Registers a synchronous rpc call that returns its result directly. pub fn register_sync(&mut self, method_name: &'static str, callback: F) @@ -89,6 +104,10 @@ impl RpcMethodBuilder { R: Serialize, F: Fn(P, &C) -> Result + Send + Sync + 'static, { + if self.methods.contains_key(method_name) { + panic!("Method already registered: {}", method_name); + } + let serial = self.serializer.clone(); let context = self.context.clone(); self.methods.insert( @@ -179,14 +198,105 @@ impl RpcMethodBuilder { ); } + /// Registers an async rpc call that returns a Future containing a duplex + /// stream that should be handled by the client. + pub fn register_duplex( + &mut self, + method_name: &'static str, + streams: usize, + callback: F, + ) where + P: DeserializeOwned + Send + 'static, + R: Serialize + Send + Sync + 'static, + Fut: Future> + Send, + F: (Fn(Vec, P, Arc) -> Fut) + Clone + Send + Sync + 'static, + { + let serial = self.serializer.clone(); + let context = self.context.clone(); + self.methods.insert( + method_name, + Method::Duplex(Arc::new(move |id, body| { + let param = match serial.deserialize::>(body) { + Ok(p) => p, + Err(err) => { + return ( + None, + future::ready(id.map(|id| { + serial.serialize(&ErrorResponse { + id, + error: ResponseError { + code: 0, + message: format!("{:?}", err), + }, + }) + })) + .boxed(), + ); + } + }; + + let callback = callback.clone(); + let serial = serial.clone(); + let context = context.clone(); + + let mut dto = StreamDto { + req_id: id.unwrap_or(0), + streams: Vec::with_capacity(streams), + }; + let mut servers = Vec::with_capacity(streams); + + for _ in 0..streams { + let (client, server) = tokio::io::duplex(8192); + servers.push(server); + dto.streams.push((next_message_id(), client)); + } + + let fut = async move { + match callback(servers, param.params, context).await { + Ok(r) => id.map(|id| serial.serialize(&SuccessResponse { id, result: r })), + Err(err) => id.map(|id| { + serial.serialize(&ErrorResponse { + id, + error: ResponseError { + code: -1, + message: format!("{:?}", err), + }, + }) + }), + } + }; + + (Some(dto), fut.boxed()) + })), + ); + } + /// Builds into a usable, sync rpc dispatcher. - pub fn build(self, log: log::Logger) -> RpcDispatcher { + pub fn build(mut self, log: log::Logger) -> RpcDispatcher { + let streams = Streams::default(); + + let s1 = streams.clone(); + self.register_async(METHOD_STREAM_ENDED, move |m: StreamEndedParams, _| { + let s1 = s1.clone(); + async move { + s1.remove(m.stream).await; + Ok(()) + } + }); + + let s2 = streams.clone(); + self.register_sync(METHOD_STREAM_DATA, move |m: StreamDataIncomingParams, _| { + s2.write(m.stream, m.segment); + Ok(()) + }); + RpcDispatcher { log, context: self.context, calls: self.calls, serializer: self.serializer, methods: Arc::new(self.methods), + streams, } } } @@ -204,30 +314,34 @@ pub struct RpcCaller { } impl RpcCaller { + pub fn serialize_notify(serializer: &S, method: M, params: A) -> Vec + where + S: Serialization, + M: AsRef + serde::Serialize, + A: Serialize, + { + serializer.serialize(&FullRequest { + id: None, + method, + params, + }) + } + /// Enqueues an outbound call. Returns whether the message was enqueued. pub fn notify(&self, method: M, params: A) -> bool where - M: Into, + M: AsRef + serde::Serialize, A: Serialize, { - let body = self.serializer.serialize(&FullRequest { - id: None, - method: method.into(), - params, - }); - - self.sender.send(body).is_ok() + self.sender + .send(Self::serialize_notify(&self.serializer, method, params)) + .is_ok() } /// Enqueues an outbound call, returning its result. - #[allow(dead_code)] - pub async fn call( - &self, - method: M, - params: A, - ) -> oneshot::Receiver> + pub fn call(&self, method: M, params: A) -> oneshot::Receiver> where - M: Into, + M: AsRef + serde::Serialize, A: Serialize, R: DeserializeOwned + Send + 'static, { @@ -235,7 +349,7 @@ impl RpcCaller { let id = next_message_id(); let body = self.serializer.serialize(&FullRequest { id: Some(id), - method: method.into(), + method, params, }); @@ -277,6 +391,7 @@ pub struct RpcDispatcher { serializer: Arc, methods: Arc>, calls: Arc>>, + streams: Streams, } static MESSAGE_ID_COUNTER: AtomicU32 = AtomicU32::new(0); @@ -292,13 +407,17 @@ impl RpcDispatcher { /// The future or return result will be optional bytes that should be sent /// back to the socket. pub fn dispatch(&self, body: &[u8]) -> MaybeSync { - let partial = match self.serializer.deserialize::(body) { - Ok(b) => b, + match self.serializer.deserialize::(body) { + Ok(partial) => self.dispatch_with_partial(body, partial), Err(_err) => { warning!(self.log, "Failed to deserialize request, hex: {:X?}", body); - return MaybeSync::Sync(None); + MaybeSync::Sync(None) } - }; + } + } + + /// Like dispatch, but allows passing an existing PartialIncoming. + pub fn dispatch_with_partial(&self, body: &[u8], partial: PartialIncoming) -> MaybeSync { let id = partial.id; if let Some(method_name) = partial.method { @@ -306,6 +425,7 @@ impl RpcDispatcher { match method { Some(Method::Sync(callback)) => MaybeSync::Sync(callback(id, body)), Some(Method::Async(callback)) => MaybeSync::Future(callback(id, body)), + Some(Method::Duplex(callback)) => MaybeSync::Stream(callback(id, body)), None => MaybeSync::Sync(id.map(|id| { self.serializer.serialize(&ErrorResponse { id, @@ -321,13 +441,85 @@ impl RpcDispatcher { cb(Outcome::Error(err)); } MaybeSync::Sync(None) - } else if partial.result.is_some() { + } else { if let Some(cb) = self.calls.lock().unwrap().remove(&id.unwrap()) { cb(Outcome::Success(body.to_vec())); } MaybeSync::Sync(None) - } else { - MaybeSync::Sync(None) + } + } + + /// Registers a stream call returned from dispatch(). + pub async fn register_stream( + &self, + write_tx: mpsc::Sender> + Send>, + dto: StreamDto, + ) { + let r = write_tx + .send( + self.serializer + .serialize(&FullRequest { + id: None, + method: METHOD_STREAMS_STARTED, + params: DuplexStreamStarted { + stream_ids: dto.streams.iter().map(|(id, _)| *id).collect(), + for_request_id: dto.req_id, + }, + }) + .into(), + ) + .await; + + if r.is_err() { + return; + } + + for (stream_id, duplex) in dto.streams { + let (mut read, write) = tokio::io::split(duplex); + self.streams.insert(stream_id, write); + + let write_tx = write_tx.clone(); + let serial = self.serializer.clone(); + tokio::spawn(async move { + let mut buf = vec![0; 4096]; + loop { + match read.read(&mut buf).await { + Ok(0) | Err(_) => break, + Ok(n) => { + let r = write_tx + .send( + serial + .serialize(&FullRequest { + id: None, + method: METHOD_STREAM_DATA, + params: StreamDataParams { + segment: &buf[..n], + stream: stream_id, + }, + }) + .into(), + ) + .await; + + if r.is_err() { + return; + } + } + } + } + + let _ = write_tx + .send( + serial + .serialize(&FullRequest { + id: None, + method: METHOD_STREAM_ENDED, + params: StreamEndedParams { stream: stream_id }, + }) + .into(), + ) + .await; + }); } } @@ -336,22 +528,128 @@ impl RpcDispatcher { } } +struct StreamRec { + write: Option>, + q: Vec>, +} + +#[derive(Clone, Default)] +struct Streams { + map: Arc>>, +} + +impl Streams { + pub async fn remove(&self, id: u32) { + let stream = self.map.lock().unwrap().remove(&id); + if let Some(s) = stream { + // if there's no 'write' right now, it'll shut down in the write_loop + if let Some(mut w) = s.write { + let _ = w.shutdown().await; + } + } + } + + pub fn write(&self, id: u32, buf: Vec) { + let mut map = self.map.lock().unwrap(); + if let Some(s) = map.get_mut(&id) { + s.q.push(buf); + + if let Some(w) = s.write.take() { + tokio::spawn(write_loop(id, w, self.map.clone())); + } + } + } + + pub fn insert(&self, id: u32, stream: WriteHalf) { + self.map.lock().unwrap().insert( + id, + StreamRec { + write: Some(stream), + q: Vec::new(), + }, + ); + } +} + +/// Write loop started by `Streams.write`. It takes the WriteHalf, and +/// runs until there's no more items in the 'write queue'. At that point, if the +/// record still exists in the `streams` (i.e. we haven't shut down), it'll +/// return the WriteHalf so that the next `write` call starts +/// the loop again. Otherwise, it'll shut down the WriteHalf. +/// +/// This is the equivalent of the same write_loop in the server_multiplexer. +/// I couldn't figure out a nice way to abstract it without introducing +/// performance overhead... +async fn write_loop( + id: u32, + mut w: WriteHalf, + streams: Arc>>, +) { + let mut items_vec = vec![]; + loop { + { + let mut lock = streams.lock().unwrap(); + let stream_rec = match lock.get_mut(&id) { + Some(b) => b, + None => break, + }; + + if stream_rec.q.is_empty() { + stream_rec.write = Some(w); + return; + } + + std::mem::swap(&mut stream_rec.q, &mut items_vec); + } + + for item in items_vec.drain(..) { + if w.write_all(&item).await.is_err() { + break; + } + } + } + + let _ = w.shutdown().await; // got here from `break` above, meaning our record got cleared. Close the bridge if so +} + +const METHOD_STREAMS_STARTED: &str = "streams_started"; +const METHOD_STREAM_DATA: &str = "stream_data"; +const METHOD_STREAM_ENDED: &str = "stream_ended"; + trait AssertIsSync: Sync {} impl AssertIsSync for RpcDispatcher {} /// Approximate shape that is used to determine what kind of data is incoming. -#[derive(Deserialize)] -struct PartialIncoming { +#[derive(Deserialize, Debug)] +pub struct PartialIncoming { pub id: Option, pub method: Option, pub error: Option, - pub result: Option<()>, +} + +#[derive(Deserialize)] +struct StreamDataIncomingParams { + #[serde(with = "serde_bytes")] + pub segment: Vec, + pub stream: u32, +} + +#[derive(Serialize, Deserialize)] +struct StreamDataParams<'a> { + #[serde(with = "serde_bytes")] + pub segment: &'a [u8], + pub stream: u32, +} + +#[derive(Serialize, Deserialize)] +struct StreamEndedParams { + pub stream: u32, } #[derive(Serialize)] -pub struct FullRequest

{ +pub struct FullRequest, P> { pub id: Option, - pub method: String, + pub method: M, pub params: P, } @@ -372,7 +670,7 @@ struct ErrorResponse { pub error: ResponseError, } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug)] pub struct ResponseError { pub code: i32, pub message: String, @@ -383,7 +681,13 @@ enum Outcome { Error(ResponseError), } +pub struct StreamDto { + req_id: u32, + streams: Vec<(u32, DuplexStream)>, +} + pub enum MaybeSync { + Stream((Option, BoxFuture<'static, Option>>)), Future(BoxFuture<'static, Option>>), Sync(Option>), } diff --git a/cli/src/self_update.rs b/cli/src/self_update.rs index 7a5b41e83a7..2e95719a3b9 100644 --- a/cli/src/self_update.rs +++ b/cli/src/self_update.rs @@ -65,8 +65,8 @@ impl<'a> SelfUpdate<'a> { ) -> Result<(), AnyError> { // 1. Download the archive into a temporary directory let tempdir = tempdir().map_err(|e| wrap(e, "Failed to create temp dir"))?; - let archive_path = tempdir.path().join("archive"); let stream = self.update_service.get_download_stream(release).await?; + let archive_path = tempdir.path().join(stream.url_path_basename().unwrap()); http::download_into_file(&archive_path, progress, stream).await?; // 2. Unzip the archive and get the binary @@ -86,8 +86,8 @@ impl<'a> SelfUpdate<'a> { // Try to rename the old CLI to the tempdir, where it can get cleaned up by the // OS later. However, this can fail if the tempdir is on a different drive // than the installation dir. In this case just rename it to ".old". - if fs::rename(&target_path, &tempdir.path().join("old-code-cli")).is_err() { - fs::rename(&target_path, &target_path.with_extension(".old")) + if fs::rename(&target_path, tempdir.path().join("old-code-cli")).is_err() { + fs::rename(&target_path, target_path.with_extension(".old")) .map_err(|e| wrap(e, "failed to rename old CLI"))?; } @@ -106,7 +106,7 @@ fn validate_cli_is_good(exe_path: &Path) -> Result<(), AnyError> { if !o.status.success() { let msg = format!( - "could not execute new binary, aborting. Stdout:\r\n\r\n{}\r\n\r\nStderr:\r\n\r\n{}", + "could not execute new binary, aborting. Stdout:\n\n{}\n\nStderr:\n\n{}", String::from_utf8_lossy(&o.stdout), String::from_utf8_lossy(&o.stderr), ); @@ -132,7 +132,7 @@ fn copy_updated_cli_to_path(unzipped_content: &Path, staging_path: &Path) -> Res let archive_file = unzipped_files[0] .as_ref() .map_err(|e| wrap(e, "error listing update files"))?; - fs::copy(&archive_file.path(), staging_path) + fs::copy(archive_file.path(), staging_path) .map_err(|e| wrap(e, "error copying to staging file"))?; Ok(()) } @@ -140,7 +140,7 @@ fn copy_updated_cli_to_path(unzipped_content: &Path, staging_path: &Path) -> Res #[cfg(target_os = "windows")] fn copy_file_metadata(from: &Path, to: &Path) -> Result<(), std::io::Error> { let permissions = from.metadata()?.permissions(); - fs::set_permissions(&to, permissions)?; + fs::set_permissions(to, permissions)?; Ok(()) } diff --git a/cli/src/singleton.rs b/cli/src/singleton.rs new file mode 100644 index 00000000000..0ea9cda2a8a --- /dev/null +++ b/cli/src/singleton.rs @@ -0,0 +1,193 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +use serde::{Deserialize, Serialize}; +use std::{ + fs::{File, OpenOptions}, + io::{Seek, SeekFrom, Write}, + path::{Path, PathBuf}, + time::Duration, +}; +use sysinfo::{Pid, PidExt}; + +use crate::{ + async_pipe::{ + get_socket_name, get_socket_rw_stream, listen_socket_rw_stream, AsyncPipe, + AsyncPipeListener, + }, + util::{ + errors::CodeError, + file_lock::{FileLock, Lock, PREFIX_LOCKED_BYTES}, + machine::wait_until_process_exits, + }, +}; + +pub struct SingletonServer { + server: AsyncPipeListener, + _lock: FileLock, +} + +impl SingletonServer { + pub async fn accept(&mut self) -> Result { + self.server.accept().await + } +} + +pub enum SingletonConnection { + /// This instance got the singleton lock. It started listening on a socket + /// and has the read/write pair. If this gets dropped, the lock is released. + Singleton(SingletonServer), + /// Another instance is a singleton, and this client connected to it. + Client(AsyncPipe), +} + +/// Contents of the lock file; the listening socket ID and process ID +/// doing the listening. +#[derive(Deserialize, Serialize)] +struct LockFileMatter { + socket_path: String, + pid: u32, +} + +/// Tries to acquire the singleton homed at the given lock file, either starting +/// a new singleton if it doesn't exist, or connecting otherwise. +pub async fn acquire_singleton(lock_file: PathBuf) -> Result { + let file = OpenOptions::new() + .read(true) + .write(true) + .create(true) + .open(&lock_file) + .map_err(CodeError::SingletonLockfileOpenFailed)?; + + match FileLock::acquire(file) { + Ok(Lock::AlreadyLocked(mut file)) => connect_as_client_with_file(&mut file) + .await + .map(SingletonConnection::Client), + Ok(Lock::Acquired(lock)) => start_singleton_server(lock) + .await + .map(SingletonConnection::Singleton), + Err(e) => Err(e), + } +} + +/// Tries to connect to the singleton homed at the given file as a client. +pub async fn connect_as_client(lock_file: &Path) -> Result { + let mut file = OpenOptions::new() + .read(true) + .open(lock_file) + .map_err(CodeError::SingletonLockfileOpenFailed)?; + + connect_as_client_with_file(&mut file).await +} + +async fn start_singleton_server(mut lock: FileLock) -> Result { + let socket_path = get_socket_name(); + + let mut vec = Vec::with_capacity(128); + let _ = vec.write(&[0; PREFIX_LOCKED_BYTES]); + let _ = rmp_serde::encode::write( + &mut vec, + &LockFileMatter { + socket_path: socket_path.to_string_lossy().to_string(), + pid: std::process::id(), + }, + ); + + lock.file_mut() + .write_all(&vec) + .map_err(CodeError::SingletonLockfileOpenFailed)?; + + let server = listen_socket_rw_stream(&socket_path).await?; + Ok(SingletonServer { + server, + _lock: lock, + }) +} + +const MAX_CLIENT_ATTEMPTS: i32 = 10; + +async fn connect_as_client_with_file(mut file: &mut File) -> Result { + // retry, since someone else could get a lock and we could read it before + // the JSON info was finished writing out + let mut attempt = 0; + loop { + let _ = file.seek(SeekFrom::Start(PREFIX_LOCKED_BYTES as u64)); + let r = match rmp_serde::from_read::<_, LockFileMatter>(&mut file) { + Ok(prev) => { + let socket_path = PathBuf::from(prev.socket_path); + + tokio::select! { + p = retry_get_socket_rw_stream(&socket_path, 5, Duration::from_millis(500)) => p, + _ = wait_until_process_exits(Pid::from_u32(prev.pid), 500) => return Err(CodeError::SingletonLockedProcessExited(prev.pid)), + } + } + Err(e) => Err(CodeError::SingletonLockfileReadFailed(e)), + }; + + if r.is_ok() || attempt == MAX_CLIENT_ATTEMPTS { + return r; + } + + attempt += 1; + tokio::time::sleep(Duration::from_millis(500)).await; + } +} + +async fn retry_get_socket_rw_stream( + path: &Path, + max_tries: usize, + interval: Duration, +) -> Result { + for i in 0.. { + match get_socket_rw_stream(path).await { + Ok(s) => return Ok(s), + Err(e) if i == max_tries => return Err(e), + Err(_) => tokio::time::sleep(interval).await, + } + } + + unreachable!() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[tokio::test] + async fn test_acquires_singleton() { + let dir = tempfile::tempdir().expect("expected to make temp dir"); + let s = acquire_singleton(dir.path().join("lock")) + .await + .expect("expected to acquire"); + + match s { + SingletonConnection::Singleton(_) => {} + _ => panic!("expected to be singleton"), + } + } + + #[tokio::test] + async fn test_acquires_client() { + let dir = tempfile::tempdir().expect("expected to make temp dir"); + let lockfile = dir.path().join("lock"); + let s1 = acquire_singleton(lockfile.clone()) + .await + .expect("expected to acquire1"); + match s1 { + SingletonConnection::Singleton(mut l) => tokio::spawn(async move { + l.accept().await.expect("expected to accept"); + }), + _ => panic!("expected to be singleton"), + }; + + let s2 = acquire_singleton(lockfile) + .await + .expect("expected to acquire2"); + match s2 { + SingletonConnection::Client(_) => {} + _ => panic!("expected to be client"), + } + } +} diff --git a/cli/src/state.rs b/cli/src/state.rs index 3e55e139b1b..af0d18e160b 100644 --- a/cli/src/state.rs +++ b/cli/src/state.rs @@ -6,19 +6,25 @@ extern crate dirs; use std::{ - fs::{create_dir, read_to_string, remove_dir_all, write}, + fs::{create_dir_all, read_to_string, remove_dir_all, write}, path::{Path, PathBuf}, sync::{Arc, Mutex}, }; use serde::{de::DeserializeOwned, Serialize}; -use crate::util::errors::{wrap, AnyError, NoHomeForLauncherError, WrappedError}; +use crate::{ + constants::{DEFAULT_DATA_PARENT_DIR, VSCODE_CLI_QUALITY}, + download_cache::DownloadCache, + util::errors::{wrap, AnyError, NoHomeForLauncherError, WrappedError}, +}; const HOME_DIR_ALTS: [&str; 2] = ["$HOME", "~"]; #[derive(Clone)] pub struct LauncherPaths { + pub server_cache: DownloadCache, + pub cli_cache: DownloadCache, root: PathBuf, } @@ -92,21 +98,47 @@ where } /// Mutates persisted state. - pub fn update_with( - &self, - v: V, - mutator: fn(v: V, state: &mut T) -> R, - ) -> Result { + pub fn update(&self, mutator: impl FnOnce(&mut T) -> R) -> Result { let mut container = self.container.lock().unwrap(); let mut state = container.load_or_get(); - let r = mutator(v, &mut state); + let r = mutator(&mut state); container.save(state).map(|_| r) } } impl LauncherPaths { - pub fn new(root: &Option) -> Result { - let root = root.as_deref().unwrap_or("~/.vscode-cli"); + /// todo@conno4312: temporary migration from the old CLI data directory + pub fn migrate(root: Option) -> Result { + if root.is_some() { + return Self::new(root); + } + + let home_dir = match dirs::home_dir() { + None => return Self::new(root), + Some(d) => d, + }; + + let old_dir = home_dir.join(".vscode-cli"); + let mut new_dir = home_dir; + new_dir.push(DEFAULT_DATA_PARENT_DIR); + new_dir.push("cli"); + if !old_dir.exists() || new_dir.exists() { + return Self::new_for_path(new_dir); + } + + if let Err(e) = std::fs::rename(&old_dir, &new_dir) { + // no logger exists at this point in the lifecycle, so just log to stderr + eprintln!( + "Failed to migrate old CLI data directory, will create a new one ({})", + e + ); + } + + Self::new_for_path(new_dir) + } + + pub fn new(root: Option) -> Result { + let root = root.unwrap_or_else(|| format!("~/{}/cli", DEFAULT_DATA_PARENT_DIR)); let mut replaced = root.to_owned(); for token in HOME_DIR_ALTS { if root.contains(token) { @@ -118,18 +150,28 @@ impl LauncherPaths { } } - if !Path::new(&replaced).exists() { - create_dir(&replaced) - .map_err(|e| wrap(e, format!("error creating directory {}", &replaced)))?; + Self::new_for_path(PathBuf::from(replaced)) + } + + fn new_for_path(root: PathBuf) -> Result { + if !root.exists() { + create_dir_all(&root) + .map_err(|e| wrap(e, format!("error creating directory {}", root.display())))?; } - Ok(LauncherPaths::new_without_replacements(PathBuf::from( - replaced, - ))) + Ok(LauncherPaths::new_without_replacements(root)) } pub fn new_without_replacements(root: PathBuf) -> LauncherPaths { - LauncherPaths { root } + // cleanup folders that existed before the new LRU strategy: + let _ = std::fs::remove_dir_all(root.join("server-insiders")); + let _ = std::fs::remove_dir_all(root.join("server-stable")); + + LauncherPaths { + server_cache: DownloadCache::new(root.join("servers")), + cli_cache: DownloadCache::new(root.join("cli")), + root, + } } /// Root directory for the server launcher @@ -137,6 +179,14 @@ impl LauncherPaths { &self.root } + /// Lockfile for the running tunnel + pub fn tunnel_lockfile(&self) -> PathBuf { + self.root.join(format!( + "tunnel-{}.lock", + VSCODE_CLI_QUALITY.unwrap_or("oss") + )) + } + /// Suggested path for tunnel service logs, when using file logs pub fn service_log_file(&self) -> PathBuf { self.root.join("tunnel-service.log") diff --git a/cli/src/tunnels.rs b/cli/src/tunnels.rs index 73c5ffeb907..5d97b757afc 100644 --- a/cli/src/tunnels.rs +++ b/cli/src/tunnels.rs @@ -7,8 +7,13 @@ pub mod code_server; pub mod dev_tunnels; pub mod legal; pub mod paths; +pub mod protocol; pub mod shutdown_signal; +pub mod singleton_client; +pub mod singleton_server; +mod wsl_detect; +mod challenge; mod control_server; mod nosleep; #[cfg(target_os = "linux")] @@ -18,9 +23,6 @@ mod nosleep_macos; #[cfg(target_os = "windows")] mod nosleep_windows; mod port_forwarder; -mod protocol; -#[cfg_attr(unix, path = "tunnels/server_bridge_unix.rs")] -#[cfg_attr(windows, path = "tunnels/server_bridge_windows.rs")] mod server_bridge; mod server_multiplexer; mod service; @@ -31,11 +33,9 @@ mod service_macos; #[cfg(target_os = "windows")] mod service_windows; mod socket_signal; -mod wsl_server; -pub use control_server::serve; +pub use control_server::{serve, serve_stream, Next, ServeStreamParams}; pub use nosleep::SleepInhibitor; pub use service::{ create_service_manager, ServiceContainer, ServiceManager, SERVICE_LOG_FILE_NAME, }; -pub use wsl_server::serve_wsl; diff --git a/cli/src/tunnels/challenge.rs b/cli/src/tunnels/challenge.rs new file mode 100644 index 00000000000..81540004844 --- /dev/null +++ b/cli/src/tunnels/challenge.rs @@ -0,0 +1,42 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +#[cfg(not(feature = "vsda"))] +pub fn create_challenge() -> String { + use rand::distributions::{Alphanumeric, DistString}; + Alphanumeric.sample_string(&mut rand::thread_rng(), 16) +} + +#[cfg(not(feature = "vsda"))] +pub fn sign_challenge(challenge: &str) -> String { + use base64::{engine::general_purpose as b64, Engine as _}; + use sha2::{Digest, Sha256}; + let mut hash = Sha256::new(); + hash.update(challenge.as_bytes()); + let result = hash.finalize(); + b64::URL_SAFE_NO_PAD.encode(result) +} + +#[cfg(not(feature = "vsda"))] +pub fn verify_challenge(challenge: &str, response: &str) -> bool { + sign_challenge(challenge) == response +} + +#[cfg(feature = "vsda")] +pub fn create_challenge() -> String { + use rand::distributions::{Alphanumeric, DistString}; + let str = Alphanumeric.sample_string(&mut rand::thread_rng(), 16); + vsda::create_new_message(&str) +} + +#[cfg(feature = "vsda")] +pub fn sign_challenge(challenge: &str) -> String { + vsda::sign(challenge) +} + +#[cfg(feature = "vsda")] +pub fn verify_challenge(challenge: &str, response: &str) -> bool { + vsda::validate(challenge, response) +} diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs index 357f04750ba..1246e1c9441 100644 --- a/cli/src/tunnels/code_server.rs +++ b/cli/src/tunnels/code_server.rs @@ -2,28 +2,31 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use super::paths::{InstalledServer, LastUsedServers, ServerPaths}; -use crate::constants::{APPLICATION_NAME, QUALITYLESS_PRODUCT_NAME, QUALITYLESS_SERVER_NAME}; +use super::paths::{InstalledServer, ServerPaths}; +use crate::async_pipe::get_socket_name; +use crate::constants::{ + APPLICATION_NAME, EDITOR_WEB_URL, QUALITYLESS_PRODUCT_NAME, QUALITYLESS_SERVER_NAME, +}; +use crate::download_cache::DownloadCache; use crate::options::{Quality, TelemetryLevel}; use crate::state::LauncherPaths; +use crate::tunnels::paths::{get_server_folder_name, SERVER_FOLDER_NAME}; use crate::update_service::{ unzip_downloaded_release, Platform, Release, TargetKind, UpdateService, }; use crate::util::command::{capture_command, kill_tree}; -use crate::util::errors::{ - wrap, AnyError, ExtensionInstallFailed, MissingEntrypointError, WrappedError, -}; -use crate::util::http::{self, SimpleHttp}; +use crate::util::errors::{wrap, AnyError, CodeError, ExtensionInstallFailed, WrappedError}; +use crate::util::http::{self, BoxedHttp}; use crate::util::io::SilentCopyProgress; use crate::util::machine::process_exists; -use crate::{debug, info, log, span, spanf, trace, warning}; +use crate::{debug, info, log, spanf, trace, warning}; use lazy_static::lazy_static; use opentelemetry::KeyValue; use regex::Regex; use serde::Deserialize; use std::fs; use std::fs::File; -use std::io::{ErrorKind, Write}; +use std::io::Write; use std::path::{Path, PathBuf}; use std::sync::Arc; use std::time::Duration; @@ -32,7 +35,6 @@ use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::process::{Child, Command}; use tokio::sync::oneshot::Receiver; use tokio::time::{interval, timeout}; -use uuid::Uuid; lazy_static! { static ref LISTENING_PORT_RE: Regex = @@ -40,8 +42,6 @@ lazy_static! { static ref WEB_UI_RE: Regex = Regex::new(r"Web UI available at (.+)").unwrap(); } -const MAX_RETAINED_SERVERS: usize = 5; - #[derive(Clone, Debug, Default)] pub struct CodeServerArgs { pub host: Option, @@ -174,7 +174,7 @@ impl ServerParamsRaw { pub async fn resolve( self, log: &log::Logger, - http: impl SimpleHttp + Send + Sync + 'static, + http: BoxedHttp, ) -> Result { Ok(ResolvedServerParams { release: self.get_or_fetch_commit_id(log, http).await?, @@ -185,7 +185,7 @@ impl ServerParamsRaw { async fn get_or_fetch_commit_id( &self, log: &log::Logger, - http: impl SimpleHttp + Send + Sync + 'static, + http: BoxedHttp, ) -> Result { let target = match self.headless { true => TargetKind::Server, @@ -274,102 +274,6 @@ impl CodeServerOrigin { } } -async fn check_and_create_dir(path: &Path) -> Result<(), WrappedError> { - tokio::fs::create_dir_all(path) - .await - .map_err(|e| wrap(e, "error creating server directory"))?; - Ok(()) -} - -async fn install_server_if_needed( - log: &log::Logger, - paths: &ServerPaths, - release: &Release, - http: impl SimpleHttp + Send + Sync + 'static, - existing_archive_path: Option, -) -> Result<(), AnyError> { - if paths.executable.exists() { - info!( - log, - "Found existing installation at {}", - paths.server_dir.display() - ); - return Ok(()); - } - - let tar_file_path = match existing_archive_path { - Some(p) => p, - None => spanf!( - log, - log.span("server.download"), - download_server(&paths.server_dir, release, log, http) - )?, - }; - - span!( - log, - log.span("server.extract"), - install_server(&tar_file_path, paths, log) - )?; - - Ok(()) -} - -async fn download_server( - path: &Path, - release: &Release, - log: &log::Logger, - http: impl SimpleHttp + Send + Sync + 'static, -) -> Result { - let response = UpdateService::new(log.clone(), http) - .get_download_stream(release) - .await?; - - let mut save_path = path.to_owned(); - save_path.push("archive"); - - info!( - log, - "Downloading {} server -> {}", - QUALITYLESS_PRODUCT_NAME, - save_path.display() - ); - - http::download_into_file( - &save_path, - log.get_download_logger("server download progress:"), - response, - ) - .await?; - - Ok(save_path) -} - -fn install_server( - compressed_file: &Path, - paths: &ServerPaths, - log: &log::Logger, -) -> Result<(), AnyError> { - info!(log, "Setting up server..."); - - unzip_downloaded_release(compressed_file, &paths.server_dir, SilentCopyProgress())?; - - match fs::remove_file(compressed_file) { - Ok(()) => {} - Err(e) => { - if e.kind() != ErrorKind::NotFound { - return Err(AnyError::from(wrap(e, "error removing downloaded file"))); - } - } - } - - if !paths.executable.exists() { - return Err(AnyError::from(MissingEntrypointError())); - } - - Ok(()) -} - /// Ensures the given list of extensions are installed on the running server. async fn do_extension_install_on_running_server( start_script_path: &Path, @@ -401,25 +305,25 @@ async fn do_extension_install_on_running_server( } } -pub struct ServerBuilder<'a, Http: SimpleHttp + Send + Sync + Clone> { +pub struct ServerBuilder<'a> { logger: &'a log::Logger, server_params: &'a ResolvedServerParams, - last_used: LastUsedServers<'a>, + launcher_paths: &'a LauncherPaths, server_paths: ServerPaths, - http: Http, + http: BoxedHttp, } -impl<'a, Http: SimpleHttp + Send + Sync + Clone + 'static> ServerBuilder<'a, Http> { +impl<'a> ServerBuilder<'a> { pub fn new( logger: &'a log::Logger, server_params: &'a ResolvedServerParams, launcher_paths: &'a LauncherPaths, - http: Http, + http: BoxedHttp, ) -> Self { Self { logger, server_params, - last_used: LastUsedServers::new(launcher_paths), + launcher_paths, server_paths: server_params .as_installed_server() .server_paths(launcher_paths), @@ -475,31 +379,54 @@ impl<'a, Http: SimpleHttp + Send + Sync + Clone + 'static> ServerBuilder<'a, Htt } /// Ensures the server is set up in the configured directory. - pub async fn setup(&self, existing_archive_path: Option) -> Result<(), AnyError> { + pub async fn setup(&self) -> Result<(), AnyError> { debug!( self.logger, "Installing and setting up {}...", QUALITYLESS_SERVER_NAME ); - check_and_create_dir(&self.server_paths.server_dir).await?; - install_server_if_needed( - self.logger, - &self.server_paths, - &self.server_params.release, - self.http.clone(), - existing_archive_path, - ) - .await?; - debug!(self.logger, "Server setup complete"); - match self.last_used.add(self.server_params.as_installed_server()) { - Err(e) => warning!(self.logger, "Error adding server to last used: {}", e), - Ok(count) if count > MAX_RETAINED_SERVERS => { - if let Err(e) = self.last_used.trim(self.logger, MAX_RETAINED_SERVERS) { - warning!(self.logger, "Error trimming old servers: {}", e); - } - } - Ok(_) => {} - } + let update_service = UpdateService::new(self.logger.clone(), self.http.clone()); + let name = get_server_folder_name( + self.server_params.release.quality, + &self.server_params.release.commit, + ); + + self.launcher_paths + .server_cache + .create(name, |target_dir| async move { + let tmpdir = + tempfile::tempdir().map_err(|e| wrap(e, "error creating temp download dir"))?; + + let response = update_service + .get_download_stream(&self.server_params.release) + .await?; + let archive_path = tmpdir.path().join(response.url_path_basename().unwrap()); + + info!( + self.logger, + "Downloading {} server -> {}", + QUALITYLESS_PRODUCT_NAME, + archive_path.display() + ); + + http::download_into_file( + &archive_path, + self.logger.get_download_logger("server download progress:"), + response, + ) + .await?; + + unzip_downloaded_release( + &archive_path, + &target_dir.join(SERVER_FOLDER_NAME), + SilentCopyProgress(), + )?; + + Ok(()) + }) + .await?; + + debug!(self.logger, "Server setup complete"); Ok(()) } @@ -539,12 +466,7 @@ impl<'a, Http: SimpleHttp + Send + Sync + Clone + 'static> ServerBuilder<'a, Htt } pub async fn listen_on_default_socket(&self) -> Result { - let requested_file = if cfg!(target_os = "windows") { - PathBuf::from(format!(r"\\.\pipe\vscode-server-{}", Uuid::new_v4())) - } else { - std::env::temp_dir().join(format!("vscode-server-{}", Uuid::new_v4())) - }; - + let requested_file = get_socket_name(); self.listen_on_socket(&requested_file).await } @@ -802,3 +724,76 @@ fn parse_port_from(text: &str) -> Option { .and_then(|path| path.as_str().parse::().ok()) }) } + +pub fn print_listening(log: &log::Logger, tunnel_name: &str) { + debug!( + log, + "{} is listening for incoming connections", QUALITYLESS_SERVER_NAME + ); + + let home_dir = dirs::home_dir().unwrap_or_else(|| PathBuf::from("")); + let current_dir = std::env::current_dir().unwrap_or_else(|_| PathBuf::from("")); + + let dir = if home_dir == current_dir { + PathBuf::from("") + } else { + current_dir + }; + + let base_web_url = match EDITOR_WEB_URL { + Some(u) => u, + None => return, + }; + + let mut addr = url::Url::parse(base_web_url).unwrap(); + { + let mut ps = addr.path_segments_mut().unwrap(); + ps.push("tunnel"); + ps.push(tunnel_name); + for segment in &dir { + let as_str = segment.to_string_lossy(); + if !(as_str.len() == 1 && as_str.starts_with(std::path::MAIN_SEPARATOR)) { + ps.push(as_str.as_ref()); + } + } + } + + let message = &format!("\nOpen this link in your browser {}\n", addr); + log.result(message); +} + +pub async fn download_cli_into_cache( + cache: &DownloadCache, + release: &Release, + update_service: &UpdateService, +) -> Result { + let cache_name = format!( + "{}-{}-{}", + release.quality, release.commit, release.platform + ); + let cli_dir = cache + .create(&cache_name, |target_dir| async move { + let tmpdir = + tempfile::tempdir().map_err(|e| wrap(e, "error creating temp download dir"))?; + let response = update_service.get_download_stream(release).await?; + + let name = response.url_path_basename().unwrap(); + let archive_path = tmpdir.path().join(name); + http::download_into_file(&archive_path, SilentCopyProgress(), response).await?; + unzip_downloaded_release(&archive_path, &target_dir, SilentCopyProgress())?; + Ok(()) + }) + .await?; + + let cli = std::fs::read_dir(cli_dir) + .map_err(|_| CodeError::CorruptDownload("could not read cli folder contents"))? + .next(); + + match cli { + Some(Ok(cli)) => Ok(cli.path()), + _ => { + let _ = cache.delete(&cache_name); + Err(CodeError::CorruptDownload("cli directory is empty").into()) + } + } +} diff --git a/cli/src/tunnels/control_server.rs b/cli/src/tunnels/control_server.rs index aec9309ace8..e0c1ec19fc2 100644 --- a/cli/src/tunnels/control_server.rs +++ b/cli/src/tunnels/control_server.rs @@ -2,50 +2,60 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use crate::constants::{CONTROL_PORT, EDITOR_WEB_URL, QUALITYLESS_SERVER_NAME}; +use crate::async_pipe::get_socket_rw_stream; +use crate::constants::{CONTROL_PORT, PRODUCT_NAME_LONG}; use crate::log; -use crate::rpc::{MaybeSync, RpcBuilder, RpcDispatcher, Serialization}; +use crate::msgpack_rpc::{new_msgpack_rpc, start_msgpack_rpc, MsgPackCodec, MsgPackSerializer}; +use crate::rpc::{MaybeSync, RpcBuilder, RpcCaller, RpcDispatcher}; use crate::self_update::SelfUpdate; use crate::state::LauncherPaths; -use crate::tunnels::protocol::HttpRequestParams; +use crate::tunnels::protocol::{HttpRequestParams, METHOD_CHALLENGE_ISSUE}; use crate::tunnels::socket_signal::CloseReason; -use crate::update_service::{Platform, UpdateService}; +use crate::update_service::{Platform, Release, TargetKind, UpdateService}; use crate::util::errors::{ - wrap, AnyError, InvalidRpcDataError, MismatchedLaunchModeError, NoAttachedServerError, + wrap, AnyError, CodeError, MismatchedLaunchModeError, NoAttachedServerError, }; use crate::util::http::{ DelegatedHttpRequest, DelegatedSimpleHttp, FallbackSimpleHttp, ReqwestSimpleHttp, }; use crate::util::io::SilentCopyProgress; use crate::util::is_integrated_cli; -use crate::util::sync::{new_barrier, Barrier}; +use crate::util::os::os_release; +use crate::util::sync::{new_barrier, Barrier, BarrierOpener}; +use futures::stream::FuturesUnordered; +use futures::FutureExt; use opentelemetry::trace::SpanKind; use opentelemetry::KeyValue; use std::collections::HashMap; +use std::process::Stdio; +use tokio::pin; +use tokio::process::{ChildStderr, ChildStdin}; +use tokio_util::codec::Decoder; -use std::env; -use std::path::PathBuf; use std::sync::atomic::{AtomicBool, AtomicU32, AtomicUsize, Ordering}; use std::sync::Arc; use std::time::Instant; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, BufReader}; -use tokio::pin; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, BufReader, DuplexStream}; use tokio::sync::{mpsc, Mutex}; +use super::challenge::{create_challenge, sign_challenge, verify_challenge}; use super::code_server::{ - AnyCodeServer, CodeServerArgs, ServerBuilder, ServerParamsRaw, SocketCodeServer, + download_cli_into_cache, AnyCodeServer, CodeServerArgs, ServerBuilder, ServerParamsRaw, + SocketCodeServer, }; use super::dev_tunnels::ActiveTunnel; use super::paths::prune_stopped_servers; use super::port_forwarder::{PortForwarding, PortForwardingProcessor}; use super::protocol::{ - CallServerHttpParams, CallServerHttpResult, ClientRequestMethod, EmptyObject, ForwardParams, - ForwardResult, GetHostnameResponse, HttpBodyParams, HttpHeadersParams, ServeParams, ServerLog, - ServerMessageParams, ToClientRequest, UnforwardParams, UpdateParams, UpdateResult, - VersionParams, + AcquireCliParams, CallServerHttpParams, CallServerHttpResult, ChallengeIssueResponse, + ChallengeVerifyParams, ClientRequestMethod, EmptyObject, ForwardParams, ForwardResult, + FsStatRequest, FsStatResponse, GetEnvResponse, GetHostnameResponse, HttpBodyParams, + HttpHeadersParams, ServeParams, ServerLog, ServerMessageParams, SpawnParams, SpawnResult, + ToClientRequest, UnforwardParams, UpdateParams, UpdateResult, VersionResponse, + METHOD_CHALLENGE_VERIFY, }; -use super::server_bridge::{get_socket_rw_stream, ServerBridge}; +use super::server_bridge::ServerBridge; use super::server_multiplexer::ServerMultiplexer; use super::shutdown_signal::ShutdownSignal; use super::socket_signal::{ @@ -60,6 +70,8 @@ struct HandlerContext { log: log::Logger, /// Whether the server update during the handler session. did_update: Arc, + /// Whether authentication is still required on the socket. + auth_state: Arc>, /// A loopback channel to talk to the socket server task. socket_tx: mpsc::Sender, /// Configured launcher paths. @@ -71,15 +83,25 @@ struct HandlerContext { // the cli arguments used to start the code server code_server_args: CodeServerArgs, /// port forwarding functionality - port_forwarding: PortForwarding, + port_forwarding: Option, /// install platform for the VS Code server platform: Platform, /// http client to make download/update requests - http: FallbackSimpleHttp, + http: Arc, /// requests being served by the client http_requests: HttpRequestsMap, } +/// Handler auth state. +enum AuthState { + /// Auth is required, we're waiting for the client to send its challenge. + WaitingForChallenge, + /// A challenge has been issued. Waiting for a verification. + ChallengeIssued(String), + /// Auth is no longer required. + Authenticated, +} + static MESSAGE_ID_COUNTER: AtomicU32 = AtomicU32::new(0); // Gets a next incrementing number that can be used in logs @@ -103,47 +125,18 @@ enum ServerSignal { Respawn, } -pub struct ServerTermination { +pub enum Next { /// Whether the server should be respawned in a new binary (see ServerSignal.Respawn). - pub respawn: bool, - pub tunnel: ActiveTunnel, + Respawn, + /// Whether the tunnel should be restarted + Restart, + /// Whether the process should exit + Exit, } -fn print_listening(log: &log::Logger, tunnel_name: &str) { - debug!( - log, - "{} is listening for incoming connections", QUALITYLESS_SERVER_NAME - ); - - let home_dir = dirs::home_dir().unwrap_or_else(|| PathBuf::from("")); - let current_dir = env::current_dir().unwrap_or_else(|_| PathBuf::from("")); - - let dir = if home_dir == current_dir { - PathBuf::from("") - } else { - current_dir - }; - - let base_web_url = match EDITOR_WEB_URL { - Some(u) => u, - None => return, - }; - - let mut addr = url::Url::parse(base_web_url).unwrap(); - { - let mut ps = addr.path_segments_mut().unwrap(); - ps.push("tunnel"); - ps.push(tunnel_name); - for segment in &dir { - let as_str = segment.to_string_lossy(); - if !(as_str.len() == 1 && as_str.starts_with(std::path::MAIN_SEPARATOR)) { - ps.push(as_str.as_ref()); - } - } - } - - let message = &format!("\nOpen this link in your browser {}\n", addr); - log.result(message); +pub struct ServerTermination { + pub next: Next, + pub tunnel: ActiveTunnel, } // Runs the launcher server. Exits on a ctrl+c or when requested by a user. @@ -155,24 +148,23 @@ pub async fn serve( launcher_paths: &LauncherPaths, code_server_args: &CodeServerArgs, platform: Platform, - shutdown_rx: mpsc::UnboundedReceiver, + mut shutdown_rx: Barrier, ) -> Result { let mut port = tunnel.add_port_direct(CONTROL_PORT).await?; - print_listening(log, &tunnel.name); - let mut forwarding = PortForwardingProcessor::new(); let (tx, mut rx) = mpsc::channel::(4); let (exit_barrier, signal_exit) = new_barrier(); - pin!(shutdown_rx); - loop { tokio::select! { - Some(r) = shutdown_rx.recv() => { - info!(log, "Shutting down: {}", r ); + Ok(reason) = shutdown_rx.wait() => { + info!(log, "Shutting down: {}", reason); drop(signal_exit); return Ok(ServerTermination { - respawn: false, + next: match reason { + ShutdownSignal::RpcRestartRequested => Next::Restart, + _ => Next::Exit, + }, tunnel, }); }, @@ -180,7 +172,7 @@ pub async fn serve( if let Some(ServerSignal::Respawn) = c { drop(signal_exit); return Ok(ServerTermination { - respawn: true, + next: Next::Respawn, tunnel, }); } @@ -194,7 +186,7 @@ pub async fn serve( None => { warning!(log, "ssh tunnel disposed, tearing down"); return Ok(ServerTermination { - respawn: false, + next: Next::Restart, tunnel, }); } @@ -217,7 +209,14 @@ pub async fn serve( debug!(own_log, "Serving new connection"); let (writehalf, readhalf) = socket.into_split(); - let stats = process_socket(own_exit, readhalf, writehalf, own_log, own_tx, own_paths, own_code_server_args, own_forwarding, platform).with_context(cx.clone()).await; + let stats = process_socket(readhalf, writehalf, own_tx, Some(own_forwarding), ServeStreamParams { + log: own_log, + launcher_paths: own_paths, + code_server_args: own_code_server_args, + platform, + exit_barrier: own_exit, + requires_auth: false, + }).with_context(cx.clone()).await; cx.span().add_event( "socket.bandwidth", @@ -228,64 +227,91 @@ pub async fn serve( ], ); cx.span().end(); - }); + }); } } } } -struct SocketStats { +pub struct ServeStreamParams { + pub log: log::Logger, + pub launcher_paths: LauncherPaths, + pub code_server_args: CodeServerArgs, + pub platform: Platform, + pub requires_auth: bool, + pub exit_barrier: Barrier, +} + +pub async fn serve_stream( + readhalf: impl AsyncRead + Send + Unpin + 'static, + writehalf: impl AsyncWrite + Unpin, + params: ServeStreamParams, +) -> SocketStats { + // Currently the only server signal is respawn, that doesn't have much meaning + // when serving a stream, so make an ignored channel. + let (server_rx, server_tx) = mpsc::channel(1); + drop(server_tx); + + process_socket(readhalf, writehalf, server_rx, None, params).await +} + +pub struct SocketStats { rx: usize, tx: usize, } -#[derive(Copy, Clone)] -struct MsgPackSerializer {} - -impl Serialization for MsgPackSerializer { - fn serialize(&self, value: impl serde::Serialize) -> Vec { - rmp_serde::to_vec_named(&value).expect("expected to serialize") - } - - fn deserialize(&self, b: &[u8]) -> Result { - rmp_serde::from_slice(b).map_err(|e| InvalidRpcDataError(e.to_string()).into()) - } -} - -#[allow(clippy::too_many_arguments)] // necessary here -async fn process_socket( - mut exit_barrier: Barrier<()>, - readhalf: impl AsyncRead + Send + Unpin + 'static, - mut writehalf: impl AsyncWrite + Unpin, +#[allow(clippy::too_many_arguments)] +fn make_socket_rpc( log: log::Logger, - server_tx: mpsc::Sender, + socket_tx: mpsc::Sender, + http_delegated: DelegatedSimpleHttp, launcher_paths: LauncherPaths, code_server_args: CodeServerArgs, - port_forwarding: PortForwarding, + port_forwarding: Option, + requires_auth: bool, platform: Platform, -) -> SocketStats { - let (socket_tx, mut socket_rx) = mpsc::channel(4); - let rx_counter = Arc::new(AtomicUsize::new(0)); +) -> RpcDispatcher { let http_requests = Arc::new(std::sync::Mutex::new(HashMap::new())); let server_bridges = ServerMultiplexer::new(); - let (http_delegated, mut http_rx) = DelegatedSimpleHttp::new(log.clone()); let mut rpc = RpcBuilder::new(MsgPackSerializer {}).methods(HandlerContext { did_update: Arc::new(AtomicBool::new(false)), - socket_tx: socket_tx.clone(), + auth_state: Arc::new(std::sync::Mutex::new(match requires_auth { + true => AuthState::WaitingForChallenge, + false => AuthState::Authenticated, + })), + socket_tx, log: log.clone(), launcher_paths, code_server_args, code_server: Arc::new(Mutex::new(None)), - server_bridges: server_bridges.clone(), + server_bridges, port_forwarding, platform, - http: FallbackSimpleHttp::new(ReqwestSimpleHttp::new(), http_delegated), - http_requests: http_requests.clone(), + http: Arc::new(FallbackSimpleHttp::new( + ReqwestSimpleHttp::new(), + http_delegated, + )), + http_requests, }); rpc.register_sync("ping", |_: EmptyObject, _| Ok(EmptyObject {})); rpc.register_sync("gethostname", |_: EmptyObject, _| handle_get_hostname()); + rpc.register_sync("fs_stat", |p: FsStatRequest, c| { + ensure_auth(&c.auth_state)?; + handle_stat(p.path) + }); + rpc.register_sync("get_env", |_: EmptyObject, c| { + ensure_auth(&c.auth_state)?; + handle_get_env() + }); + rpc.register_sync(METHOD_CHALLENGE_ISSUE, |_: EmptyObject, c| { + handle_challenge_issue(&c.auth_state) + }); + rpc.register_sync(METHOD_CHALLENGE_VERIFY, |p: ChallengeVerifyParams, c| { + handle_challenge_verify(p.response, &c.auth_state) + }); rpc.register_async("serve", move |params: ServeParams, c| async move { + ensure_auth(&c.auth_state)?; handle_serve(c, params).await }); rpc.register_async("update", |p: UpdateParams, c| async move { @@ -303,18 +329,50 @@ async fn process_socket( handle_call_server_http(code_server, p).await }); rpc.register_async("forward", |p: ForwardParams, c| async move { + ensure_auth(&c.auth_state)?; handle_forward(&c.log, &c.port_forwarding, p).await }); rpc.register_async("unforward", |p: UnforwardParams, c| async move { + ensure_auth(&c.auth_state)?; handle_unforward(&c.log, &c.port_forwarding, p).await }); + rpc.register_async("acquire_cli", |p: AcquireCliParams, c| async move { + ensure_auth(&c.auth_state)?; + handle_acquire_cli(&c.launcher_paths, &c.http, &c.log, p).await + }); + rpc.register_duplex("spawn", 3, |mut streams, p: SpawnParams, c| async move { + ensure_auth(&c.auth_state)?; + handle_spawn( + &c.log, + p, + Some(streams.remove(0)), + Some(streams.remove(0)), + Some(streams.remove(0)), + ) + .await + }); + rpc.register_duplex( + "spawn_cli", + 3, + |mut streams, p: SpawnParams, c| async move { + ensure_auth(&c.auth_state)?; + handle_spawn_cli( + &c.log, + p, + streams.remove(0), + streams.remove(0), + streams.remove(0), + ) + .await + }, + ); rpc.register_sync("httpheaders", |p: HttpHeadersParams, c| { if let Some(req) = c.http_requests.lock().unwrap().get(&p.req_id) { req.initial_response(p.status_code, p.headers); } Ok(EmptyObject {}) }); - rpc.register_sync("unforward", move |p: HttpBodyParams, c| { + rpc.register_sync("httpbody", move |p: HttpBodyParams, c| { let mut reqs = c.http_requests.lock().unwrap(); if let Some(req) = reqs.get(&p.req_id) { if !p.segment.is_empty() { @@ -326,15 +384,64 @@ async fn process_socket( } Ok(EmptyObject {}) }); + rpc.register_sync( + "version", + |_: EmptyObject, _| Ok(VersionResponse::default()), + ); + + rpc.build(log) +} + +fn ensure_auth(is_authed: &Arc>) -> Result<(), AnyError> { + if let AuthState::Authenticated = &*is_authed.lock().unwrap() { + Ok(()) + } else { + Err(CodeError::ServerAuthRequired.into()) + } +} + +#[allow(clippy::too_many_arguments)] // necessary here +async fn process_socket( + readhalf: impl AsyncRead + Send + Unpin + 'static, + mut writehalf: impl AsyncWrite + Unpin, + server_tx: mpsc::Sender, + port_forwarding: Option, + params: ServeStreamParams, +) -> SocketStats { + let ServeStreamParams { + mut exit_barrier, + log, + launcher_paths, + code_server_args, + platform, + requires_auth, + } = params; + + let (http_delegated, mut http_rx) = DelegatedSimpleHttp::new(log.clone()); + let (socket_tx, mut socket_rx) = mpsc::channel(4); + let rx_counter = Arc::new(AtomicUsize::new(0)); + let http_requests = Arc::new(std::sync::Mutex::new(HashMap::new())); + + let rpc = make_socket_rpc( + log.clone(), + socket_tx.clone(), + http_delegated, + launcher_paths, + code_server_args, + port_forwarding, + requires_auth, + platform, + ); { let log = log.clone(); let rx_counter = rx_counter.clone(); let socket_tx = socket_tx.clone(); let exit_barrier = exit_barrier.clone(); - let rpc = rpc.build(log.clone()); tokio::spawn(async move { - send_version(&socket_tx).await; + if !requires_auth { + send_version(&socket_tx).await; + } if let Err(e) = handle_socket_read(&log, readhalf, exit_barrier, &socket_tx, rx_counter, &rpc).await @@ -354,6 +461,10 @@ async fn process_socket( } ctx.dispose().await; + + let _ = socket_tx + .send(SocketSignal::CloseWith(CloseReason("eof".to_string()))) + .await; }); } @@ -412,7 +523,7 @@ async fn process_socket( async fn send_version(tx: &mpsc::Sender) { tx.send(SocketSignal::from_message(&ToClientRequest { id: None, - params: ClientRequestMethod::version(VersionParams::default()), + params: ClientRequestMethod::version(VersionResponse::default()), })) .await .ok(); @@ -420,25 +531,29 @@ async fn send_version(tx: &mpsc::Sender) { async fn handle_socket_read( _log: &log::Logger, readhalf: impl AsyncRead + Unpin, - mut closer: Barrier<()>, + mut closer: Barrier, socket_tx: &mpsc::Sender, rx_counter: Arc, rpc: &RpcDispatcher, ) -> Result<(), std::io::Error> { - let mut socket_reader = BufReader::new(readhalf); - let mut decode_buf = vec![]; + let mut readhalf = BufReader::new(readhalf); + let mut decoder = MsgPackCodec::new(); + let mut decoder_buf = bytes::BytesMut::new(); loop { - let read = read_next( - &mut socket_reader, - &rx_counter, - &mut closer, - &mut decode_buf, - ) - .await; + let read_len = tokio::select! { + r = readhalf.read_buf(&mut decoder_buf) => r, + _ = closer.wait() => Err(std::io::Error::new(std::io::ErrorKind::UnexpectedEof, "eof")), + }?; - match read { - Ok(len) => match rpc.dispatch(&decode_buf[..len]) { + if read_len == 0 { + return Ok(()); + } + + rx_counter.fetch_add(read_len, Ordering::Relaxed); + + while let Some(frame) = decoder.decode(&mut decoder_buf)? { + match rpc.dispatch_with_partial(&frame.vec, frame.obj) { MaybeSync::Sync(Some(v)) => { if socket_tx.send(SocketSignal::Send(v)).await.is_err() { return Ok(()); @@ -453,34 +568,22 @@ async fn handle_socket_read( } }); } - }, - Err(e) if e.kind() == std::io::ErrorKind::UnexpectedEof => return Ok(()), - Err(e) => return Err(e), + MaybeSync::Stream((stream, fut)) => { + if let Some(stream) = stream { + rpc.register_stream(socket_tx.clone(), stream).await; + } + let socket_tx = socket_tx.clone(); + tokio::spawn(async move { + if let Some(v) = fut.await { + socket_tx.send(SocketSignal::Send(v)).await.ok(); + } + }); + } + } } } } -/// Reads and handles the next data packet. Returns the next packet to dispatch, -/// or an error (including EOF). -async fn read_next( - socket_reader: &mut BufReader, - rx_counter: &Arc, - closer: &mut Barrier<()>, - decode_buf: &mut Vec, -) -> Result { - let msg_length = tokio::select! { - u = socket_reader.read_u32() => u? as usize, - _ = closer.wait() => return Err(std::io::Error::new(std::io::ErrorKind::UnexpectedEof, "eof")), - }; - decode_buf.resize(msg_length, 0); - rx_counter.fetch_add(msg_length + 4 /* u32 */, Ordering::Relaxed); - - tokio::select! { - r = socket_reader.read_exact(decode_buf) => r, - _ = closer.wait() => Err(std::io::Error::new(std::io::ErrorKind::UnexpectedEof, "eof")), - } -} - #[derive(Clone)] struct ServerOutputSink { tx: mpsc::Sender, @@ -508,6 +611,7 @@ async fn handle_serve( ) -> Result { // fill params.extensions into code_server_args.install_extensions let mut csa = c.code_server_args.clone(); + csa.connection_token = params.connection_token.or(csa.connection_token); csa.install_extensions.extend(params.extensions.into_iter()); let params_raw = ServerParamsRaw { @@ -519,7 +623,9 @@ async fn handle_serve( }; let resolved = if params.use_local_download { - params_raw.resolve(&c.log, c.http.delegated()).await + params_raw + .resolve(&c.log, Arc::new(c.http.delegated())) + .await } else { params_raw.resolve(&c.log, c.http.clone()).await }?; @@ -538,7 +644,7 @@ async fn handle_serve( Some(AnyCodeServer::Socket(s)) => s, Some(_) => return Err(AnyError::from(MismatchedLaunchModeError())), None => { - $sb.setup(None).await?; + $sb.setup().await?; $sb.listen_on_default_socket().await? } } @@ -550,7 +656,7 @@ async fn handle_serve( &install_log, &resolved, &c.launcher_paths, - c.http.delegated(), + Arc::new(c.http.delegated()), ); do_setup!(sb) } else { @@ -638,7 +744,7 @@ fn handle_prune(paths: &LauncherPaths) -> Result, AnyError> { } async fn handle_update( - http: &FallbackSimpleHttp, + http: &Arc, log: &log::Logger, did_update: &AtomicBool, params: &UpdateParams, @@ -690,11 +796,72 @@ fn handle_get_hostname() -> Result { }) } +fn handle_stat(path: String) -> Result { + Ok(std::fs::metadata(path) + .map(|m| FsStatResponse { + exists: true, + size: Some(m.len()), + kind: Some(match m.file_type() { + t if t.is_dir() => "dir", + t if t.is_file() => "file", + t if t.is_symlink() => "link", + _ => "unknown", + }), + }) + .unwrap_or_default()) +} + +fn handle_get_env() -> Result { + Ok(GetEnvResponse { + env: std::env::vars().collect(), + os_release: os_release().unwrap_or_else(|_| "unknown".to_string()), + #[cfg(windows)] + os_platform: "win32", + #[cfg(target_os = "linux")] + os_platform: "linux", + #[cfg(target_os = "macos")] + os_platform: "darwin", + }) +} + +fn handle_challenge_issue( + auth_state: &Arc>, +) -> Result { + let challenge = create_challenge(); + + let mut auth_state = auth_state.lock().unwrap(); + *auth_state = AuthState::ChallengeIssued(challenge.clone()); + + Ok(ChallengeIssueResponse { challenge }) +} + +fn handle_challenge_verify( + response: String, + auth_state: &Arc>, +) -> Result { + let mut auth_state = auth_state.lock().unwrap(); + + match &*auth_state { + AuthState::Authenticated => Ok(EmptyObject {}), + AuthState::WaitingForChallenge => Err(CodeError::AuthChallengeNotIssued.into()), + AuthState::ChallengeIssued(c) => match verify_challenge(c, &response) { + false => Err(CodeError::AuthChallengeNotIssued.into()), + true => { + *auth_state = AuthState::Authenticated; + Ok(EmptyObject {}) + } + }, + } +} + async fn handle_forward( log: &log::Logger, - port_forwarding: &PortForwarding, + port_forwarding: &Option, params: ForwardParams, ) -> Result { + let port_forwarding = port_forwarding + .as_ref() + .ok_or(CodeError::PortForwardingNotAvailable)?; info!(log, "Forwarding port {}", params.port); let uri = port_forwarding.forward(params.port).await?; Ok(ForwardResult { uri }) @@ -702,9 +869,12 @@ async fn handle_forward( async fn handle_unforward( log: &log::Logger, - port_forwarding: &PortForwarding, + port_forwarding: &Option, params: UnforwardParams, ) -> Result { + let port_forwarding = port_forwarding + .as_ref() + .ok_or(CodeError::PortForwardingNotAvailable)?; info!(log, "Unforwarding port {}", params.port); port_forwarding.unforward(params.port).await?; Ok(EmptyObject {}) @@ -764,3 +934,235 @@ async fn handle_call_server_http( .to_vec(), }) } + +async fn handle_acquire_cli( + paths: &LauncherPaths, + http: &Arc, + log: &log::Logger, + params: AcquireCliParams, +) -> Result { + let update_service = UpdateService::new(log.clone(), http.clone()); + + let release = match params.commit_id { + Some(commit) => Release { + name: format!("{} CLI", PRODUCT_NAME_LONG), + commit, + platform: params.platform, + quality: params.quality, + target: TargetKind::Cli, + }, + None => { + update_service + .get_latest_commit(params.platform, TargetKind::Cli, params.quality) + .await? + } + }; + + let cli = download_cli_into_cache(&paths.cli_cache, &release, &update_service).await?; + let file = tokio::fs::File::open(cli) + .await + .map_err(|e| wrap(e, "error opening cli file"))?; + + handle_spawn::<_, DuplexStream>(log, params.spawn, Some(file), None, None).await +} + +async fn handle_spawn( + log: &log::Logger, + params: SpawnParams, + stdin: Option, + stdout: Option, + stderr: Option, +) -> Result +where + Stdin: AsyncRead + Unpin + Send + 'static, + StdoutAndErr: AsyncWrite + Unpin + Send + 'static, +{ + debug!( + log, + "requested to spawn {} with args {:?}", params.command, params.args + ); + + macro_rules! pipe_if { + ($e: expr) => { + if $e { + Stdio::piped() + } else { + Stdio::null() + } + }; + } + + let mut p = tokio::process::Command::new(¶ms.command); + p.args(¶ms.args); + p.envs(¶ms.env); + p.stdin(pipe_if!(stdin.is_some())); + p.stdout(pipe_if!(stdin.is_some())); + p.stderr(pipe_if!(stderr.is_some())); + if let Some(cwd) = ¶ms.cwd { + p.current_dir(cwd); + } + + let mut p = p.spawn().map_err(CodeError::ProcessSpawnFailed)?; + + let futs = FuturesUnordered::new(); + if let (Some(mut a), Some(mut b)) = (p.stdout.take(), stdout) { + futs.push(async move { tokio::io::copy(&mut a, &mut b).await }.boxed()); + } + if let (Some(mut a), Some(mut b)) = (p.stderr.take(), stderr) { + futs.push(async move { tokio::io::copy(&mut a, &mut b).await }.boxed()); + } + if let (Some(mut b), Some(mut a)) = (p.stdin.take(), stdin) { + futs.push(async move { tokio::io::copy(&mut a, &mut b).await }.boxed()); + } + + wait_for_process_exit(log, ¶ms.command, p, futs).await +} + +async fn handle_spawn_cli( + log: &log::Logger, + params: SpawnParams, + mut protocol_in: DuplexStream, + mut protocol_out: DuplexStream, + mut log_out: DuplexStream, +) -> Result { + debug!( + log, + "requested to spawn cli {} with args {:?}", params.command, params.args + ); + + let mut p = tokio::process::Command::new(¶ms.command); + p.args(¶ms.args); + + // CLI args to spawn a server; contracted with clients that they should _not_ provide these. + p.arg("--verbose"); + p.arg("command-shell"); + + p.envs(¶ms.env); + p.stdin(Stdio::piped()); + p.stdout(Stdio::piped()); + p.stderr(Stdio::piped()); + if let Some(cwd) = ¶ms.cwd { + p.current_dir(cwd); + } + + let mut p = p.spawn().map_err(CodeError::ProcessSpawnFailed)?; + + let mut stdin = p.stdin.take().unwrap(); + let mut stdout = p.stdout.take().unwrap(); + let mut stderr = p.stderr.take().unwrap(); + + // Start handling logs while doing the handshake in case there's some kind of error + let log_pump = tokio::spawn(async move { tokio::io::copy(&mut stdout, &mut log_out).await }); + + // note: intentionally do not wrap stdin in a bufreader, since we don't + // want to read anything other than our handshake messages. + if let Err(e) = spawn_do_child_authentication(log, &mut stdin, &mut stderr).await { + warning!(log, "failed to authenticate with child process {}", e); + let _ = p.kill().await; + return Err(e.into()); + } + + debug!(log, "cli authenticated, attaching stdio"); + let futs = FuturesUnordered::new(); + futs.push(async move { tokio::io::copy(&mut protocol_in, &mut stdin).await }.boxed()); + futs.push(async move { tokio::io::copy(&mut stderr, &mut protocol_out).await }.boxed()); + futs.push(async move { log_pump.await.unwrap() }.boxed()); + + wait_for_process_exit(log, ¶ms.command, p, futs).await +} + +type TokioCopyFuture = dyn futures::Future> + Send; + +async fn wait_for_process_exit( + log: &log::Logger, + command: &str, + mut process: tokio::process::Child, + futs: FuturesUnordered>>, +) -> Result { + let closed = process.wait(); + pin!(closed); + + let r = tokio::select! { + _ = futures::future::join_all(futs) => closed.await, + r = &mut closed => r + }; + + let r = match r { + Ok(e) => SpawnResult { + message: e.to_string(), + exit_code: e.code().unwrap_or(-1), + }, + Err(e) => SpawnResult { + message: e.to_string(), + exit_code: -1, + }, + }; + + debug!( + log, + "spawned cli {} exited with code {}", command, r.exit_code + ); + + Ok(r) +} + +async fn spawn_do_child_authentication( + log: &log::Logger, + stdin: &mut ChildStdin, + stdout: &mut ChildStderr, +) -> Result<(), CodeError> { + let (msg_tx, msg_rx) = mpsc::unbounded_channel(); + let (shutdown_rx, shutdown) = new_barrier(); + let mut rpc = new_msgpack_rpc(); + let caller = rpc.get_caller(msg_tx); + + let challenge_response = do_challenge_response_flow(caller, shutdown); + let rpc = start_msgpack_rpc( + rpc.methods(()).build(log.prefixed("client-auth")), + stdout, + stdin, + msg_rx, + shutdown_rx, + ); + pin!(rpc); + + tokio::select! { + r = &mut rpc => { + match r { + // means shutdown happened cleanly already, we're good + Ok(_) => Ok(()), + Err(e) => Err(CodeError::ProcessSpawnHandshakeFailed(e)) + } + }, + r = challenge_response => { + r?; + rpc.await.map(|_| ()).map_err(CodeError::ProcessSpawnFailed) + } + } +} + +async fn do_challenge_response_flow( + caller: RpcCaller, + shutdown: BarrierOpener<()>, +) -> Result<(), CodeError> { + let challenge: ChallengeIssueResponse = caller + .call(METHOD_CHALLENGE_ISSUE, EmptyObject {}) + .await + .unwrap() + .map_err(CodeError::TunnelRpcCallFailed)?; + + let _: EmptyObject = caller + .call( + METHOD_CHALLENGE_VERIFY, + ChallengeVerifyParams { + response: sign_challenge(&challenge.challenge), + }, + ) + .await + .unwrap() + .map_err(CodeError::TunnelRpcCallFailed)?; + + shutdown.open(()); + + Ok(()) +} diff --git a/cli/src/tunnels/dev_tunnels.rs b/cli/src/tunnels/dev_tunnels.rs index e489806c587..8476028a2f5 100644 --- a/cli/src/tunnels/dev_tunnels.rs +++ b/cli/src/tunnels/dev_tunnels.rs @@ -4,8 +4,7 @@ *--------------------------------------------------------------------------------------------*/ use crate::auth; use crate::constants::{ - CONTROL_PORT, IS_INTERACTIVE_CLI, PROTOCOL_VERSION_TAG, PROTOCOL_VERSION_TAG_PREFIX, - TUNNEL_SERVICE_USER_AGENT, + CONTROL_PORT, IS_INTERACTIVE_CLI, PROTOCOL_VERSION_TAG, TUNNEL_SERVICE_USER_AGENT, }; use crate::state::{LauncherPaths, PersistedState}; use crate::util::errors::{ @@ -32,6 +31,8 @@ use tunnels::management::{ NO_REQUEST_OPTIONS, }; +use super::wsl_detect::is_wsl_installed; + #[derive(Clone, Serialize, Deserialize)] pub struct PersistedTunnel { pub name: String, @@ -274,61 +275,37 @@ impl DevTunnels { /// Renames the current tunnel to the new name. pub async fn rename_tunnel(&mut self, name: &str) -> Result<(), AnyError> { - is_valid_name(name)?; - - self.check_is_name_free(name).await?; - - let mut tunnel = match self.launcher_tunnel.load() { - Some(t) => t, - None => { - debug!(self.log, "No code server tunnel found, creating new one"); - let (persisted, _) = self.create_tunnel(name, NO_REQUEST_OPTIONS).await?; - self.launcher_tunnel.save(Some(persisted))?; - return Ok(()); - } - }; - - let locator = tunnel.locator(); - - let mut full_tunnel = spanf!( - self.log, - self.log.span("dev-tunnel.tag.get"), - self.client.get_tunnel(&locator, NO_REQUEST_OPTIONS) - ) - .map_err(|e| wrap(e, "failed to lookup original tunnel"))?; - - full_tunnel.tags = vec![name.to_string(), VSCODE_CLI_TUNNEL_TAG.to_string()]; - spanf!( - self.log, - self.log.span("dev-tunnel.tag.update"), - self.client.update_tunnel(&full_tunnel, NO_REQUEST_OPTIONS) - ) - .map_err(|e| wrap(e, "failed to update tunnel tags"))?; - - tunnel.name = name.to_string(); - self.launcher_tunnel.save(Some(tunnel.clone()))?; - Ok(()) + self.update_tunnel_name(None, name).await.map(|_| ()) } /// Updates the name of the existing persisted tunnel to the new name. /// Gracefully creates a new tunnel if the previous one was deleted. async fn update_tunnel_name( &mut self, - persisted: PersistedTunnel, + persisted: Option, name: &str, ) -> Result<(Tunnel, PersistedTunnel), AnyError> { - self.check_is_name_free(name).await?; + let name = name.to_ascii_lowercase(); + self.check_is_name_free(&name).await?; debug!(self.log, "Tunnel name changed, applying updates..."); - let (mut full_tunnel, mut persisted, is_new) = self - .get_or_create_tunnel(persisted, Some(name), NO_REQUEST_OPTIONS) - .await?; + let (mut full_tunnel, mut persisted, is_new) = match persisted { + Some(persisted) => { + self.get_or_create_tunnel(persisted, Some(&name), NO_REQUEST_OPTIONS) + .await + } + None => self + .create_tunnel(&name, NO_REQUEST_OPTIONS) + .await + .map(|(pt, t)| (t, pt, true)), + }?; + if is_new { return Ok((full_tunnel, persisted)); } - full_tunnel.tags = vec![name.to_string(), VSCODE_CLI_TUNNEL_TAG.to_string()]; + full_tunnel.tags = self.get_tags(&name); let new_tunnel = spanf!( self.log, @@ -337,7 +314,7 @@ impl DevTunnels { ) .map_err(|e| wrap(e, "failed to rename tunnel"))?; - persisted.name = name.to_string(); + persisted.name = name; self.launcher_tunnel.save(Some(persisted.clone()))?; Ok((new_tunnel, persisted)) @@ -367,7 +344,6 @@ impl DevTunnels { let (persisted, tunnel) = self .create_tunnel(create_with_new_name.unwrap_or(&persisted.name), options) .await?; - self.launcher_tunnel.save(Some(persisted.clone()))?; Ok((tunnel, persisted, true)) } Err(e) => Err(wrap(e, "failed to lookup tunnel").into()), @@ -378,14 +354,16 @@ impl DevTunnels { /// this attempts to reuse or create a tunnel of a preferred name or of a generated friendly tunnel name. pub async fn start_new_launcher_tunnel( &mut self, - preferred_name: Option, + preferred_name: Option<&str>, use_random_name: bool, ) -> Result { let (mut tunnel, persisted) = match self.launcher_tunnel.load() { Some(mut persisted) => { - if let Some(name) = preferred_name { - if persisted.name.ne(&name) { - (_, persisted) = self.update_tunnel_name(persisted, &name).await?; + if let Some(preferred_name) = preferred_name.map(|n| n.to_ascii_lowercase()) { + if persisted.name.to_ascii_lowercase() != preferred_name { + (_, persisted) = self + .update_tunnel_name(Some(persisted), &preferred_name) + .await?; } } @@ -402,16 +380,13 @@ impl DevTunnels { let (persisted, full_tunnel) = self .create_tunnel(&name, &HOST_TUNNEL_REQUEST_OPTIONS) .await?; - self.launcher_tunnel.save(Some(persisted.clone()))?; (full_tunnel, persisted) } }; - if !tunnel.tags.iter().any(|t| t == PROTOCOL_VERSION_TAG) { - tunnel = self - .update_protocol_version_tag(tunnel, &HOST_TUNNEL_REQUEST_OPTIONS) - .await?; - } + tunnel = self + .sync_tunnel_tags(&persisted.name, tunnel, &HOST_TUNNEL_REQUEST_OPTIONS) + .await?; let locator = TunnelLocator::try_from(&tunnel).unwrap(); let host_token = get_host_token_from_tunnel(&tunnel); @@ -495,9 +470,17 @@ impl DevTunnels { continue; } + if let Some(d) = e.get_details() { + let detail = d.detail.unwrap_or_else(|| "unknown".to_string()); + return Err(AnyError::from(TunnelCreationFailed( + name.to_string(), + detail, + ))); + } + return Err(AnyError::from(TunnelCreationFailed( name.to_string(), - "You've exceeded the 10 machine limit for the port fowarding service. Please remove other machines before trying to add this machine.".to_string(), + "You have exceeded a limit for the port fowarding service. Please remove other machines before trying to add this machine.".to_string(), ))); } Err(e) => { @@ -507,36 +490,53 @@ impl DevTunnels { ))) } Ok(t) => { - return Ok(( - PersistedTunnel { - cluster: t.cluster_id.clone().unwrap(), - id: t.tunnel_id.clone().unwrap(), - name: name.to_string(), - }, - t, - )) + let pt = PersistedTunnel { + cluster: t.cluster_id.clone().unwrap(), + id: t.tunnel_id.clone().unwrap(), + name: name.to_string(), + }; + + self.launcher_tunnel.save(Some(pt.clone()))?; + return Ok((pt, t)); } } } } + /// Gets the expected tunnel tags + fn get_tags(&self, name: &str) -> Vec { + let mut tags = vec![ + name.to_string(), + PROTOCOL_VERSION_TAG.to_string(), + VSCODE_CLI_TUNNEL_TAG.to_string(), + ]; + + if is_wsl_installed(&self.log) { + tags.push("_wsl".to_string()) + } + + tags + } + /// Ensures the tunnel contains a tag for the current PROTCOL_VERSION, and no /// other version tags. - async fn update_protocol_version_tag( + async fn sync_tunnel_tags( &self, + name: &str, tunnel: Tunnel, options: &TunnelRequestOptions, ) -> Result { + let new_tags = self.get_tags(name); + if vec_eq_unsorted(&tunnel.tags, &new_tags) { + return Ok(tunnel); + } + debug!( self.log, - "Updating tunnel protocol version tag to {}", PROTOCOL_VERSION_TAG + "Updating tunnel tags {} -> {}", + tunnel.tags.join(", "), + new_tags.join(", ") ); - let mut new_tags: Vec = tunnel - .tags - .into_iter() - .filter(|t| !t.starts_with(PROTOCOL_VERSION_TAG_PREFIX)) - .collect(); - new_tags.push(PROTOCOL_VERSION_TAG.to_string()); let tunnel_update = Tunnel { tags: new_tags, @@ -631,7 +631,7 @@ impl DevTunnels { async fn get_name_for_tunnel( &mut self, - preferred_name: Option, + preferred_name: Option<&str>, mut use_random_name: bool, ) -> Result { let existing_tunnels = self.list_all_server_tunnels().await?; @@ -645,7 +645,7 @@ impl DevTunnels { }; if let Some(machine_name) = preferred_name { - let name = machine_name; + let name = machine_name.to_ascii_lowercase(); if let Err(e) = is_valid_name(&name) { info!(self.log, "{} is an invalid name", e); return Err(AnyError::from(wrap(e, "invalid name"))); @@ -662,6 +662,8 @@ impl DevTunnels { let mut placeholder_name = clean_hostname_for_tunnel(&gethostname::gethostname().to_string_lossy()); + placeholder_name.make_ascii_lowercase(); + if !is_name_free(&placeholder_name) { for i in 2.. { let fixed_name = format!("{}{}", placeholder_name, i); @@ -677,11 +679,13 @@ impl DevTunnels { } loop { - let name = prompt_placeholder( + let mut name = prompt_placeholder( "What would you like to call this machine?", &placeholder_name, )?; + name.make_ascii_lowercase(); + if let Err(e) = is_valid_name(&name) { info!(self.log, "{}", e); continue; @@ -994,6 +998,20 @@ fn clean_hostname_for_tunnel(hostname: &str) -> String { } } +fn vec_eq_unsorted(a: &[String], b: &[String]) -> bool { + if a.len() != b.len() { + return false; + } + + for item in a { + if !b.contains(item) { + return false; + } + } + + true +} + #[cfg(test)] mod test { use super::*; diff --git a/cli/src/tunnels/legal.rs b/cli/src/tunnels/legal.rs index 1e3d7b1bac3..84b72bf8e69 100644 --- a/cli/src/tunnels/legal.rs +++ b/cli/src/tunnels/legal.rs @@ -41,7 +41,10 @@ pub fn require_consent( if accept_server_license_terms { load.consented = Some(true); } else if !*IS_INTERACTIVE_CLI { - return Err(MissingLegalConsent("Run this command again with --accept-server-license-terms to indicate your agreement.".to_string()) + return Err(MissingLegalConsent( + "Run this command again with --accept-server-license-terms to indicate your agreement." + .to_string(), + ) .into()); } else { match prompt_yn(prompt) { diff --git a/cli/src/tunnels/paths.rs b/cli/src/tunnels/paths.rs index 3c47b2575d7..a0cd43cd83c 100644 --- a/cli/src/tunnels/paths.rs +++ b/cli/src/tunnels/paths.rs @@ -11,19 +11,15 @@ use std::{ use serde::{Deserialize, Serialize}; use crate::{ - log, options, - state::{LauncherPaths, PersistedState}, + options::{self, Quality}, + state::LauncherPaths, util::{ errors::{wrap, AnyError, WrappedError}, machine, }, }; -const INSIDERS_INSTALL_FOLDER: &str = "server-insiders"; -const STABLE_INSTALL_FOLDER: &str = "server-stable"; -const EXPLORATION_INSTALL_FOLDER: &str = "server-exploration"; -const PIDFILE_SUFFIX: &str = ".pid"; -const LOGFILE_SUFFIX: &str = ".log"; +pub const SERVER_FOLDER_NAME: &str = "server"; pub struct ServerPaths { // Directory into which the server is downloaded @@ -68,7 +64,7 @@ impl ServerPaths { // VS Code Server pid pub fn write_pid(&self, pid: u32) -> Result<(), WrappedError> { - write(&self.pidfile, &format!("{}", pid)).map_err(|e| { + write(&self.pidfile, format!("{}", pid)).map_err(|e| { wrap( e, format!("error writing process id into {}", self.pidfile.display()), @@ -93,76 +89,32 @@ pub struct InstalledServer { impl InstalledServer { /// Gets path information about where a specific server should be stored. pub fn server_paths(&self, p: &LauncherPaths) -> ServerPaths { - let base_folder = self.get_install_folder(p); - let server_dir = base_folder.join("bin").join(&self.commit); + let server_dir = self.get_install_folder(p); ServerPaths { - executable: server_dir - .join("bin") - .join(self.quality.server_entrypoint()), + // allow using the OSS server in development via an override + executable: if let Some(p) = option_env!("VSCODE_CLI_OVERRIDE_SERVER_PATH") { + PathBuf::from(p) + } else { + server_dir + .join(SERVER_FOLDER_NAME) + .join("bin") + .join(self.quality.server_entrypoint()) + }, + logfile: server_dir.join("log.txt"), + pidfile: server_dir.join("pid.txt"), server_dir, - logfile: base_folder.join(format!(".{}{}", self.commit, LOGFILE_SUFFIX)), - pidfile: base_folder.join(format!(".{}{}", self.commit, PIDFILE_SUFFIX)), } } fn get_install_folder(&self, p: &LauncherPaths) -> PathBuf { - let name = match self.quality { - options::Quality::Insiders => INSIDERS_INSTALL_FOLDER, - options::Quality::Exploration => EXPLORATION_INSTALL_FOLDER, - options::Quality::Stable => STABLE_INSTALL_FOLDER, - }; - - p.root().join(if !self.headless { - format!("{}-web", name) + p.server_cache.path().join(if !self.headless { + format!("{}-web", get_server_folder_name(self.quality, &self.commit)) } else { - name.to_string() + get_server_folder_name(self.quality, &self.commit) }) } } -pub struct LastUsedServers<'a> { - state: PersistedState>, - paths: &'a LauncherPaths, -} - -impl<'a> LastUsedServers<'a> { - pub fn new(paths: &'a LauncherPaths) -> LastUsedServers { - LastUsedServers { - state: PersistedState::new(paths.root().join("last-used-servers.json")), - paths, - } - } - - /// Adds a server as having been used most recently. Returns the number of retained server. - pub fn add(&self, server: InstalledServer) -> Result { - self.state.update_with(server, |server, l| { - if let Some(index) = l.iter().position(|s| s == &server) { - l.remove(index); - } - l.insert(0, server); - l.len() - }) - } - - /// Trims so that at most `max_servers` are saved on disk. - pub fn trim(&self, log: &log::Logger, max_servers: usize) -> Result<(), WrappedError> { - let mut servers = self.state.load(); - while servers.len() > max_servers { - let server = servers.pop().unwrap(); - debug!( - log, - "Removing old server {}/{}", - server.quality.get_machine_name(), - server.commit - ); - let server_paths = server.server_paths(self.paths); - server_paths.delete()?; - } - self.state.save(servers)?; - Ok(()) - } -} - /// Prunes servers not currently running, and returns the deleted servers. pub fn prune_stopped_servers(launcher_paths: &LauncherPaths) -> Result, AnyError> { get_all_servers(launcher_paths) @@ -177,40 +129,31 @@ pub fn prune_stopped_servers(launcher_paths: &LauncherPaths) -> Result Vec { let mut servers: Vec = vec![]; - let mut server = InstalledServer { - commit: "".to_owned(), - headless: false, - quality: options::Quality::Stable, - }; + if let Ok(children) = read_dir(lp.server_cache.path()) { + for child in children.flatten() { + let fname = child.file_name(); + let fname = fname.to_string_lossy(); + let (quality, commit) = match fname.split_once('-') { + Some(r) => r, + None => continue, + }; - add_server_paths_in_folder(lp, &server, &mut servers); + let quality = match options::Quality::try_from(quality) { + Ok(q) => q, + Err(_) => continue, + }; - server.headless = true; - add_server_paths_in_folder(lp, &server, &mut servers); - - server.headless = false; - server.quality = options::Quality::Insiders; - add_server_paths_in_folder(lp, &server, &mut servers); - - server.headless = true; - add_server_paths_in_folder(lp, &server, &mut servers); + servers.push(InstalledServer { + quality, + commit: commit.to_string(), + headless: true, + }); + } + } servers } -fn add_server_paths_in_folder( - lp: &LauncherPaths, - server: &InstalledServer, - servers: &mut Vec, -) { - let dir = server.get_install_folder(lp).join("bin"); - if let Ok(children) = read_dir(dir) { - for bin in children.flatten() { - servers.push(InstalledServer { - quality: server.quality, - headless: server.headless, - commit: bin.file_name().to_string_lossy().into(), - }); - } - } +pub fn get_server_folder_name(quality: Quality, commit: &str) -> String { + format!("{}-{}", quality, commit) } diff --git a/cli/src/tunnels/protocol.rs b/cli/src/tunnels/protocol.rs index f2d6dd65dae..eb20afe0ce5 100644 --- a/cli/src/tunnels/protocol.rs +++ b/cli/src/tunnels/protocol.rs @@ -4,7 +4,11 @@ *--------------------------------------------------------------------------------------------*/ use std::collections::HashMap; -use crate::{constants::{VSCODE_CLI_VERSION, PROTOCOL_VERSION}, options::Quality}; +use crate::{ + constants::{PROTOCOL_VERSION, VSCODE_CLI_VERSION}, + options::Quality, + update_service::Platform, +}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Debug)] @@ -14,7 +18,7 @@ pub enum ClientRequestMethod<'a> { servermsg(RefServerMessageParams<'a>), serverlog(ServerLog<'a>), makehttpreq(HttpRequestParams<'a>), - version(VersionParams), + version(VersionResponse), } #[derive(Deserialize, Debug)] @@ -54,14 +58,6 @@ pub struct ForwardResult { pub uri: String, } -/// The `install_local` method in the wsl control server -#[derive(Deserialize, Debug)] -pub struct InstallFromLocalFolderParams { - pub archive_path: String, - #[serde(flatten)] - pub inner: ServeParams, -} - #[derive(Deserialize, Debug)] pub struct ServeParams { pub socket_id: u16, @@ -124,6 +120,26 @@ pub struct GetHostnameResponse { pub value: String, } +#[derive(Serialize)] +pub struct GetEnvResponse { + pub env: HashMap, + pub os_platform: &'static str, + pub os_release: String, +} + +#[derive(Deserialize)] +pub struct FsStatRequest { + pub path: String, +} + +#[derive(Serialize, Default)] +pub struct FsStatResponse { + pub exists: bool, + pub size: Option, + #[serde(rename = "type")] + pub kind: Option<&'static str>, +} + #[derive(Deserialize, Debug)] pub struct CallServerHttpParams { pub path: String, @@ -141,12 +157,12 @@ pub struct CallServerHttpResult { } #[derive(Serialize, Debug)] -pub struct VersionParams { +pub struct VersionResponse { pub version: &'static str, pub protocol_version: u32, } -impl Default for VersionParams { +impl Default for VersionResponse { fn default() -> Self { Self { version: VSCODE_CLI_VERSION.unwrap_or("dev"), @@ -154,3 +170,80 @@ impl Default for VersionParams { } } } + +#[derive(Deserialize)] +pub struct SpawnParams { + pub command: String, + pub args: Vec, + #[serde(default)] + pub cwd: Option, + #[serde(default)] + pub env: HashMap, +} + +#[derive(Deserialize)] +pub struct AcquireCliParams { + pub platform: Platform, + pub quality: Quality, + pub commit_id: Option, + #[serde(flatten)] + pub spawn: SpawnParams, +} + +#[derive(Serialize)] +pub struct SpawnResult { + pub message: String, + pub exit_code: i32, +} + +pub const METHOD_CHALLENGE_ISSUE: &str = "challenge_issue"; +pub const METHOD_CHALLENGE_VERIFY: &str = "challenge_verify"; + +#[derive(Serialize, Deserialize)] +pub struct ChallengeIssueResponse { + pub challenge: String, +} + +#[derive(Deserialize, Serialize)] +pub struct ChallengeVerifyParams { + pub response: String, +} + +pub mod singleton { + use crate::log; + use serde::{Deserialize, Serialize}; + + pub const METHOD_RESTART: &str = "restart"; + pub const METHOD_SHUTDOWN: &str = "shutdown"; + pub const METHOD_STATUS: &str = "status"; + pub const METHOD_LOG: &str = "log"; + pub const METHOD_LOG_REPLY_DONE: &str = "log_done"; + + #[derive(Serialize)] + pub struct LogMessage<'a> { + pub level: Option, + pub prefix: &'a str, + pub message: &'a str, + } + + #[derive(Deserialize)] + pub struct LogMessageOwned { + pub level: Option, + pub prefix: String, + pub message: String, + } + + #[derive(Serialize, Deserialize)] + pub struct Status { + pub tunnel: TunnelState, + } + + #[derive(Deserialize, Serialize, Debug)] + pub struct LogReplayFinished {} + + #[derive(Deserialize, Serialize, Debug)] + pub enum TunnelState { + Disconnected, + Connected { name: String }, + } +} diff --git a/cli/src/tunnels/server_bridge_unix.rs b/cli/src/tunnels/server_bridge.rs similarity index 75% rename from cli/src/tunnels/server_bridge_unix.rs rename to cli/src/tunnels/server_bridge.rs index c7be34cf5d0..50dde8e7303 100644 --- a/cli/src/tunnels/server_bridge_unix.rs +++ b/cli/src/tunnels/server_bridge.rs @@ -2,36 +2,19 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use std::path::Path; - -use tokio::{ - io::{AsyncReadExt, AsyncWriteExt}, - net::{unix::OwnedWriteHalf, UnixStream}, -}; - -use crate::util::errors::{wrap, AnyError}; - use super::socket_signal::{ClientMessageDecoder, ServerMessageSink}; +use crate::{ + async_pipe::{get_socket_rw_stream, socket_stream_split, AsyncPipeWriteHalf}, + util::errors::AnyError, +}; +use std::path::Path; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; pub struct ServerBridge { - write: OwnedWriteHalf, + write: AsyncPipeWriteHalf, decoder: ClientMessageDecoder, } -pub async fn get_socket_rw_stream(path: &Path) -> Result { - let s = UnixStream::connect(path).await.map_err(|e| { - wrap( - e, - format!( - "error connecting to vscode server socket in {}", - path.display() - ), - ) - })?; - - Ok(s) -} - const BUFFER_SIZE: usize = 65536; impl ServerBridge { @@ -41,7 +24,7 @@ impl ServerBridge { decoder: ClientMessageDecoder, ) -> Result { let stream = get_socket_rw_stream(path).await?; - let (mut read, write) = stream.into_split(); + let (mut read, write) = socket_stream_split(stream); tokio::spawn(async move { let mut read_buf = vec![0; BUFFER_SIZE]; diff --git a/cli/src/tunnels/server_bridge_windows.rs b/cli/src/tunnels/server_bridge_windows.rs deleted file mode 100644 index ca604468518..00000000000 --- a/cli/src/tunnels/server_bridge_windows.rs +++ /dev/null @@ -1,132 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -use std::{path::Path, time::Duration}; - -use tokio::{ - io::{self, Interest}, - net::windows::named_pipe::{ClientOptions, NamedPipeClient}, - sync::mpsc, - time::sleep, -}; - -use crate::util::errors::{wrap, AnyError}; - -use super::socket_signal::{ClientMessageDecoder, ServerMessageSink}; - -pub struct ServerBridge { - write_tx: mpsc::Sender>, - decoder: ClientMessageDecoder, -} - -const BUFFER_SIZE: usize = 65536; - -pub async fn get_socket_rw_stream(path: &Path) -> Result { - // Tokio says we can need to try in a loop. Do so. - // https://docs.rs/tokio/latest/tokio/net/windows/named_pipe/struct.NamedPipeClient.html - let client = loop { - match ClientOptions::new().open(path) { - Ok(client) => break client, - // ERROR_PIPE_BUSY https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499- - Err(e) if e.raw_os_error() == Some(231) => sleep(Duration::from_millis(100)).await, - Err(e) => { - return Err(AnyError::WrappedError(wrap( - e, - format!( - "error connecting to vscode server socket in {}", - path.display() - ), - ))) - } - } - }; - - Ok(client) -} - -impl ServerBridge { - pub async fn new( - path: &Path, - mut target: ServerMessageSink, - decoder: ClientMessageDecoder, - ) -> Result { - let client = get_socket_rw_stream(path).await?; - let (write_tx, mut write_rx) = mpsc::channel(4); - tokio::spawn(async move { - let mut read_buf = vec![0; BUFFER_SIZE]; - let mut pending_recv: Option> = None; - - // See https://docs.rs/tokio/1.17.0/tokio/net/windows/named_pipe/struct.NamedPipeClient.html#method.ready - // With additional complications. If there's nothing queued to write, we wait for the - // pipe to be readable, or for something to come in. If there is something to - // write, wait until the pipe is either readable or writable. - loop { - let ready_result = if pending_recv.is_none() { - tokio::select! { - msg = write_rx.recv() => match msg { - Some(msg) => { - pending_recv = Some(msg); - client.ready(Interest::READABLE | Interest::WRITABLE).await - }, - None => return - }, - r = client.ready(Interest::READABLE) => r, - } - } else { - client.ready(Interest::READABLE | Interest::WRITABLE).await - }; - - let ready = match ready_result { - Ok(r) => r, - Err(_) => return, - }; - - if ready.is_readable() { - match client.try_read(&mut read_buf) { - Ok(0) => return, // EOF - Ok(s) => { - let send = target.server_message(&read_buf[..s]).await; - if send.is_err() { - return; - } - } - Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => { - continue; - } - Err(_) => return, - } - } - - if let Some(msg) = &pending_recv { - if ready.is_writable() { - match client.try_write(msg) { - Ok(n) if n == msg.len() => pending_recv = None, - Ok(n) => pending_recv = Some(msg[n..].to_vec()), - Err(e) if e.kind() == io::ErrorKind::WouldBlock => { - continue; - } - Err(_) => return, - } - } - } - } - }); - - Ok(ServerBridge { write_tx, decoder }) - } - - pub async fn write(&mut self, b: Vec) -> std::io::Result<()> { - let dec = self.decoder.decode(&b)?; - if !dec.is_empty() { - self.write_tx.send(dec.to_vec()).await.ok(); - } - Ok(()) - } - - pub async fn close(self) -> std::io::Result<()> { - drop(self.write_tx); - Ok(()) - } -} diff --git a/cli/src/tunnels/server_multiplexer.rs b/cli/src/tunnels/server_multiplexer.rs index 34782ff375b..65eb1df7ad5 100644 --- a/cli/src/tunnels/server_multiplexer.rs +++ b/cli/src/tunnels/server_multiplexer.rs @@ -105,7 +105,7 @@ impl ServerMultiplexer { } } -/// Write loop started by `handle_server_message`. It take sthe ServerBridge, and +/// Write loop started by `handle_server_message`. It takes the ServerBridge, and /// runs until there's no more items in the 'write queue'. At that point, if the /// record still exists in the bridges_lock (i.e. we haven't shut down), it'll /// return the ServerBridge so that the next handle_server_message call starts diff --git a/cli/src/tunnels/service.rs b/cli/src/tunnels/service.rs index a0a2129bef9..dba68f3b614 100644 --- a/cli/src/tunnels/service.rs +++ b/cli/src/tunnels/service.rs @@ -6,15 +6,12 @@ use std::path::{Path, PathBuf}; use async_trait::async_trait; -use tokio::sync::mpsc; use crate::log; use crate::state::LauncherPaths; use crate::util::errors::{wrap, AnyError}; use crate::util::io::{tailf, TailEvent}; -use super::shutdown_signal::ShutdownSignal; - pub const SERVICE_LOG_FILE_NAME: &str = "tunnel-service.log"; #[async_trait] @@ -23,7 +20,6 @@ pub trait ServiceContainer: Send { &mut self, log: log::Logger, launcher_paths: LauncherPaths, - shutdown_rx: mpsc::UnboundedReceiver, ) -> Result<(), AnyError>; } @@ -45,6 +41,9 @@ pub trait ServiceManager { /// Show logs from the running service to standard out. async fn show_logs(&self) -> Result<(), AnyError>; + /// Gets whether the tunnel service is installed. + async fn is_installed(&self) -> Result; + /// Unregisters the current executable as a service. async fn unregister(&self) -> Result<(), AnyError>; } diff --git a/cli/src/tunnels/service_linux.rs b/cli/src/tunnels/service_linux.rs index 022d4cee409..b60d114dc46 100644 --- a/cli/src/tunnels/service_linux.rs +++ b/cli/src/tunnels/service_linux.rs @@ -10,7 +10,6 @@ use std::{ process::Command, }; -use super::shutdown_signal::ShutdownSignal; use async_trait::async_trait; use zbus::{dbus_proxy, zvariant, Connection}; @@ -18,7 +17,7 @@ use crate::{ constants::{APPLICATION_NAME, PRODUCT_NAME_LONG}, log, state::LauncherPaths, - util::errors::{wrap, AnyError}, + util::errors::{wrap, AnyError, DbusConnectFailedError}, }; use super::ServiceManager; @@ -41,7 +40,7 @@ impl SystemdService { async fn connect() -> Result { let connection = Connection::session() .await - .map_err(|e| wrap(e, "error creating dbus session"))?; + .map_err(|e| DbusConnectFailedError(e.to_string()))?; Ok(connection) } @@ -111,16 +110,33 @@ impl ServiceManager for SystemdService { info!(self.log, "Tunnel service successfully started"); + if std::env::var("SSH_CLIENT").is_ok() || std::env::var("SSH_TTY").is_ok() { + info!(self.log, "Tip: run `sudo loginctl enable-linger $USER` to ensure the service stays running after you disconnect."); + } + Ok(()) } + async fn is_installed(&self) -> Result { + let connection = SystemdService::connect().await?; + let proxy = SystemdService::proxy(&connection).await?; + let state = proxy + .get_unit_file_state(SystemdService::service_name_string()) + .await; + + if let Ok(s) = state { + Ok(s == "enabled") + } else { + Ok(false) + } + } + async fn run( self, launcher_paths: crate::state::LauncherPaths, mut handle: impl 'static + super::ServiceContainer, ) -> Result<(), crate::util::errors::AnyError> { - let rx = ShutdownSignal::create_rx(&[ShutdownSignal::CtrlC]); - handle.run_service(self.log, launcher_paths, rx).await + handle.run_service(self.log, launcher_paths).await } async fn show_logs(&self) -> Result<(), AnyError> { @@ -221,6 +237,8 @@ trait SystemdManagerDbus { force: bool, ) -> zbus::Result<(bool, Vec<(String, String, String)>)>; + fn get_unit_file_state(&self, file: String) -> zbus::Result; + fn link_unit_files( &self, files: Vec, diff --git a/cli/src/tunnels/service_macos.rs b/cli/src/tunnels/service_macos.rs index 6c83af0f039..2d0a23f8cb2 100644 --- a/cli/src/tunnels/service_macos.rs +++ b/cli/src/tunnels/service_macos.rs @@ -9,7 +9,6 @@ use std::{ path::{Path, PathBuf}, }; -use super::shutdown_signal::ShutdownSignal; use async_trait::async_trait; use crate::{ @@ -18,7 +17,7 @@ use crate::{ state::LauncherPaths, util::{ command::capture_command_and_check_status, - errors::{wrap, AnyError, MissingHomeDirectory}, + errors::{wrap, AnyError, CodeError, MissingHomeDirectory}, }, }; @@ -73,8 +72,12 @@ impl ServiceManager for LaunchdService { launcher_paths: crate::state::LauncherPaths, mut handle: impl 'static + super::ServiceContainer, ) -> Result<(), crate::util::errors::AnyError> { - let rx = ShutdownSignal::create_rx(&[ShutdownSignal::CtrlC]); - handle.run_service(self.log, launcher_paths, rx).await + handle.run_service(self.log, launcher_paths).await + } + + async fn is_installed(&self) -> Result { + let cmd = capture_command_and_check_status("launchctl", &["list"]).await?; + Ok(String::from_utf8_lossy(&cmd.stdout).contains(&get_service_label())) } async fn unregister(&self) -> Result<(), crate::util::errors::AnyError> { @@ -83,8 +86,8 @@ impl ServiceManager for LaunchdService { match capture_command_and_check_status("launchctl", &["stop", &get_service_label()]).await { Ok(_) => {} // status 3 == "no such process" - Err(AnyError::CommandFailed(e)) if e.output.status.code() == Some(3) => {} - Err(e) => return Err(e), + Err(CodeError::CommandFailed { code, .. }) if code == 3 => {} + Err(e) => return Err(wrap(e, "error stopping service").into()), }; info!(self.log, "Successfully stopped service..."); diff --git a/cli/src/tunnels/service_windows.rs b/cli/src/tunnels/service_windows.rs index 7d839ccf330..427eddd620d 100644 --- a/cli/src/tunnels/service_windows.rs +++ b/cli/src/tunnels/service_windows.rs @@ -5,26 +5,29 @@ use async_trait::async_trait; use shell_escape::windows::escape as shell_escape; +use std::os::windows::process::CommandExt; use std::{ - io, path::PathBuf, process::{Command, Stdio}, }; -use sysinfo::{ProcessExt, System, SystemExt}; +use winapi::um::winbase::{CREATE_NEW_PROCESS_GROUP, DETACHED_PROCESS}; use winreg::{enums::HKEY_CURRENT_USER, RegKey}; use crate::{ constants::TUNNEL_ACTIVITY_NAME, log, state::LauncherPaths, - tunnels::shutdown_signal::ShutdownSignal, + tunnels::{protocol, singleton_client::do_single_rpc_call}, util::errors::{wrap, wrapdbg, AnyError}, }; use super::service::{tail_log_file, ServiceContainer, ServiceManager as CliServiceManager}; +const DID_LAUNCH_AS_HIDDEN_PROCESS: &str = "VSCODE_CLI_DID_LAUNCH_AS_HIDDEN_PROCESS"; + pub struct WindowsService { log: log::Logger, + tunnel_lock: PathBuf, log_file: PathBuf, } @@ -32,6 +35,7 @@ impl WindowsService { pub fn new(log: log::Logger, paths: &LauncherPaths) -> Self { Self { log, + tunnel_lock: paths.tunnel_lockfile(), log_file: paths.service_log_file(), } } @@ -60,7 +64,7 @@ impl CliServiceManager for WindowsService { }; for arg in args { - add_arg(*arg); + add_arg(arg); } add_arg("--log-to-file"); @@ -90,36 +94,51 @@ impl CliServiceManager for WindowsService { launcher_paths: LauncherPaths, mut handle: impl 'static + ServiceContainer, ) -> Result<(), AnyError> { - let rx = ShutdownSignal::create_rx(&[ShutdownSignal::CtrlC]); - handle.run_service(self.log, launcher_paths, rx).await + if std::env::var(DID_LAUNCH_AS_HIDDEN_PROCESS).is_ok() { + return handle.run_service(self.log, launcher_paths).await; + } + + // Start as a hidden subprocess to avoid showing cmd.exe on startup. + // Fixes https://github.com/microsoft/vscode/issues/184058 + // I also tried the winapi ShowWindow, but that didn't yield fruit. + Command::new(std::env::current_exe().unwrap()) + .args(std::env::args().skip(1)) + .env(DID_LAUNCH_AS_HIDDEN_PROCESS, "1") + .stderr(Stdio::null()) + .stdout(Stdio::null()) + .stdin(Stdio::null()) + .creation_flags(CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS) + .spawn() + .map_err(|e| wrap(e, "error starting nested process"))?; + + Ok(()) + } + + async fn is_installed(&self) -> Result { + let key = WindowsService::open_key()?; + Ok(key.get_raw_value(TUNNEL_ACTIVITY_NAME).is_ok()) } async fn unregister(&self) -> Result<(), AnyError> { let key = WindowsService::open_key()?; - let prev_command_line: String = match key.get_value(TUNNEL_ACTIVITY_NAME) { - Ok(l) => l, - Err(e) if e.kind() == io::ErrorKind::NotFound => return Ok(()), - Err(e) => return Err(wrap(e, "error getting registry key").into()), - }; - key.delete_value(TUNNEL_ACTIVITY_NAME) .map_err(|e| AnyError::from(wrap(e, "error deleting registry key")))?; info!(self.log, "Tunnel service uninstalled"); - let mut sys = System::new(); - sys.refresh_processes(); + let r = do_single_rpc_call::<_, ()>( + &self.tunnel_lock, + self.log.clone(), + protocol::singleton::METHOD_SHUTDOWN, + protocol::EmptyObject {}, + ) + .await; - for process in sys.processes().values() { - let joined = process.cmd().join(" "); // this feels a little sketch, but seems to work fine - if joined == prev_command_line { - process.kill(); - info!(self.log, "Successfully shut down running tunnel"); - return Ok(()); - } + if r.is_err() { + warning!(self.log, "The tunnel service has been unregistered, but we couldn't find a running tunnel process. You may need to restart or log out and back in to fully stop the tunnel."); + } else { + info!(self.log, "Successfully shut down running tunnel."); } - warning!(self.log, "The tunnel service has been unregistered, but we couldn't find a running tunnel process. You may need to restart or log out and back in to fully stop the tunnel."); - Ok(()) } } diff --git a/cli/src/tunnels/shutdown_signal.rs b/cli/src/tunnels/shutdown_signal.rs index 9e185770058..9914b33bb92 100644 --- a/cli/src/tunnels/shutdown_signal.rs +++ b/cli/src/tunnels/shutdown_signal.rs @@ -3,16 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use std::{fmt, time::Duration}; +use futures::{stream::FuturesUnordered, StreamExt}; +use std::{fmt, path::PathBuf}; +use sysinfo::Pid; -use sysinfo::{Pid, SystemExt}; -use tokio::{sync::mpsc, time::sleep}; +use crate::util::{ + machine::{wait_until_exe_deleted, wait_until_process_exits}, + sync::{new_barrier, Barrier, Receivable}, +}; /// Describes the signal to manully stop the server +#[derive(Copy, Clone)] pub enum ShutdownSignal { CtrlC, ParentProcessKilled(Pid), + ExeUninstalled, ServiceStopped, + RpcShutdownRequested, + RpcRestartRequested, } impl fmt::Display for ShutdownSignal { @@ -22,42 +30,61 @@ impl fmt::Display for ShutdownSignal { ShutdownSignal::ParentProcessKilled(p) => { write!(f, "Parent process {} no longer exists", p) } + ShutdownSignal::ExeUninstalled => { + write!(f, "Executable no longer exists") + } ShutdownSignal::ServiceStopped => write!(f, "Service stopped"), + ShutdownSignal::RpcShutdownRequested => write!(f, "RPC client requested shutdown"), + ShutdownSignal::RpcRestartRequested => { + write!(f, "RPC client requested a tunnel restart") + } } } } -impl ShutdownSignal { +pub enum ShutdownRequest { + CtrlC, + ParentProcessKilled(Pid), + ExeUninstalled(PathBuf), + Derived(Box + Send>), +} + +impl ShutdownRequest { + async fn wait(self) -> Option { + match self { + ShutdownRequest::CtrlC => { + let ctrl_c = tokio::signal::ctrl_c(); + ctrl_c.await.ok(); + Some(ShutdownSignal::CtrlC) + } + ShutdownRequest::ParentProcessKilled(pid) => { + wait_until_process_exits(pid, 2000).await; + Some(ShutdownSignal::ParentProcessKilled(pid)) + } + ShutdownRequest::ExeUninstalled(exe_path) => { + wait_until_exe_deleted(&exe_path, 2000).await; + Some(ShutdownSignal::ExeUninstalled) + } + ShutdownRequest::Derived(mut rx) => rx.recv_msg().await, + } + } /// Creates a receiver channel sent to once any of the signals are received. /// Note: does not handle ServiceStopped - pub fn create_rx(signals: &[ShutdownSignal]) -> mpsc::UnboundedReceiver { - let (tx, rx) = mpsc::unbounded_channel(); - for signal in signals { - let tx = tx.clone(); - match signal { - ShutdownSignal::CtrlC => { - let ctrl_c = tokio::signal::ctrl_c(); - tokio::spawn(async move { - ctrl_c.await.ok(); - tx.send(ShutdownSignal::CtrlC).ok(); - }); - } - ShutdownSignal::ParentProcessKilled(pid) => { - let pid = *pid; - let tx = tx.clone(); - tokio::spawn(async move { - let mut s = sysinfo::System::new(); - while s.refresh_process(pid) { - sleep(Duration::from_millis(2000)).await; - } - tx.send(ShutdownSignal::ParentProcessKilled(pid)).ok(); - }); - } - ShutdownSignal::ServiceStopped => { - unreachable!("Cannot use ServiceStopped in ShutdownSignal::create_rx"); - } + pub fn create_rx( + signals: impl IntoIterator, + ) -> Barrier { + let (barrier, opener) = new_barrier(); + let futures = signals + .into_iter() + .map(|s| s.wait()) + .collect::>(); + + tokio::spawn(async move { + if let Some(s) = futures.filter_map(futures::future::ready).next().await { + opener.open(s); } - } - rx + }); + + barrier } } diff --git a/cli/src/tunnels/singleton_client.rs b/cli/src/tunnels/singleton_client.rs new file mode 100644 index 00000000000..ef9fdf85cc0 --- /dev/null +++ b/cli/src/tunnels/singleton_client.rs @@ -0,0 +1,190 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +use std::{ + path::Path, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + thread, +}; + +use const_format::concatcp; +use tokio::sync::mpsc; + +use crate::{ + async_pipe::{socket_stream_split, AsyncPipe}, + constants::IS_INTERACTIVE_CLI, + json_rpc::{new_json_rpc, start_json_rpc, JsonRpcSerializer}, + log, + rpc::RpcCaller, + singleton::connect_as_client, + tunnels::{code_server::print_listening, protocol::EmptyObject}, + util::{errors::CodeError, sync::Barrier}, +}; + +use super::{ + protocol, + shutdown_signal::{ShutdownRequest, ShutdownSignal}, +}; + +pub struct SingletonClientArgs { + pub log: log::Logger, + pub stream: AsyncPipe, + pub shutdown: Barrier, +} + +struct SingletonServerContext { + log: log::Logger, + exit_entirely: Arc, + caller: RpcCaller, +} + +const CONTROL_INSTRUCTIONS_COMMON: &str = + "Connected to an existing tunnel process running on this machine."; + +const CONTROL_INSTRUCTIONS_INTERACTIVE: &str = concatcp!( + CONTROL_INSTRUCTIONS_COMMON, + " You can press: + +- \"x\" + Enter to stop the tunnel and exit +- \"r\" + Enter to restart the tunnel +- Ctrl+C to detach +" +); + +/// Serves a client singleton. Returns true if the process should exit after +/// this returns, instead of trying to start a tunnel. +pub async fn start_singleton_client(args: SingletonClientArgs) -> bool { + let mut rpc = new_json_rpc(); + let (msg_tx, msg_rx) = mpsc::unbounded_channel(); + let exit_entirely = Arc::new(AtomicBool::new(false)); + + debug!( + args.log, + "An existing tunnel is running on this machine, connecting to it..." + ); + + if *IS_INTERACTIVE_CLI { + let stdin_handle = rpc.get_caller(msg_tx.clone()); + thread::spawn(move || { + let mut input = String::new(); + loop { + input.truncate(0); + match std::io::stdin().read_line(&mut input) { + Err(_) | Ok(0) => return, // EOF or not a tty + _ => {} + }; + + match input.chars().next().map(|c| c.to_ascii_lowercase()) { + Some('x') => { + stdin_handle.notify(protocol::singleton::METHOD_SHUTDOWN, EmptyObject {}); + return; + } + Some('r') => { + stdin_handle.notify(protocol::singleton::METHOD_RESTART, EmptyObject {}); + } + Some(_) | None => {} + } + } + }); + } + + let caller = rpc.get_caller(msg_tx); + let mut rpc = rpc.methods(SingletonServerContext { + log: args.log.clone(), + exit_entirely: exit_entirely.clone(), + caller, + }); + + rpc.register_sync(protocol::singleton::METHOD_SHUTDOWN, |_: EmptyObject, c| { + c.exit_entirely.store(true, Ordering::SeqCst); + Ok(()) + }); + + rpc.register_async( + protocol::singleton::METHOD_LOG_REPLY_DONE, + |_: EmptyObject, c| async move { + c.log.result(if *IS_INTERACTIVE_CLI { + CONTROL_INSTRUCTIONS_INTERACTIVE + } else { + CONTROL_INSTRUCTIONS_COMMON + }); + + let res = c.caller.call::<_, _, protocol::singleton::Status>( + protocol::singleton::METHOD_STATUS, + protocol::EmptyObject {}, + ); + + // we want to ensure the "listening" string always gets printed for + // consumers (i.e. VS Code). Ask for it. If the tunnel is not currently + // connected though, it will be soon, and that'll be in the log replays. + if let Ok(Ok(s)) = res.await { + if let protocol::singleton::TunnelState::Connected { name } = s.tunnel { + print_listening(&c.log, &name); + } + } + + Ok(()) + }, + ); + + rpc.register_sync( + protocol::singleton::METHOD_LOG, + |log: protocol::singleton::LogMessageOwned, c| { + match log.level { + Some(level) => c.log.emit(level, &format!("{}{}", log.prefix, log.message)), + None => c.log.result(format!("{}{}", log.prefix, log.message)), + } + Ok(()) + }, + ); + + let (read, write) = socket_stream_split(args.stream); + let _ = start_json_rpc(rpc.build(args.log), read, write, msg_rx, args.shutdown).await; + + exit_entirely.load(Ordering::SeqCst) +} + +pub async fn do_single_rpc_call< + P: serde::Serialize + 'static, + R: serde::de::DeserializeOwned + Send + 'static, +>( + lock_file: &Path, + log: log::Logger, + method: &'static str, + params: P, +) -> Result { + let client = match connect_as_client(lock_file).await { + Ok(p) => p, + Err(CodeError::SingletonLockfileOpenFailed(_)) + | Err(CodeError::SingletonLockedProcessExited(_)) => { + return Err(CodeError::NoRunningTunnel); + } + Err(e) => return Err(e), + }; + + let (msg_tx, msg_rx) = mpsc::unbounded_channel(); + let mut rpc = new_json_rpc(); + let caller = rpc.get_caller(msg_tx); + let (read, write) = socket_stream_split(client); + + let rpc = tokio::spawn(async move { + start_json_rpc( + rpc.methods(()).build(log), + read, + write, + msg_rx, + ShutdownRequest::create_rx([ShutdownRequest::CtrlC]), + ) + .await + .unwrap(); + }); + + let r = caller.call(method, params).await.unwrap(); + rpc.abort(); + r.map_err(CodeError::TunnelRpcCallFailed) +} diff --git a/cli/src/tunnels/singleton_server.rs b/cli/src/tunnels/singleton_server.rs new file mode 100644 index 00000000000..703c09f5120 --- /dev/null +++ b/cli/src/tunnels/singleton_server.rs @@ -0,0 +1,263 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +use std::{ + pin::Pin, + sync::{Arc, Mutex}, +}; + +use super::{ + code_server::CodeServerArgs, + control_server::ServerTermination, + dev_tunnels::ActiveTunnel, + protocol, + shutdown_signal::{ShutdownRequest, ShutdownSignal}, +}; +use crate::{ + async_pipe::socket_stream_split, + json_rpc::{new_json_rpc, start_json_rpc, JsonRpcSerializer}, + log, + rpc::{RpcCaller, RpcDispatcher}, + singleton::SingletonServer, + state::LauncherPaths, + tunnels::code_server::print_listening, + update_service::Platform, + util::{ + errors::{AnyError, CodeError}, + ring_buffer::RingBuffer, + sync::{Barrier, ConcatReceivable}, + }, +}; +use futures::future::Either; +use tokio::{ + pin, + sync::{broadcast, mpsc}, + task::JoinHandle, +}; + +pub struct SingletonServerArgs<'a> { + pub server: &'a mut RpcServer, + pub log: log::Logger, + pub tunnel: ActiveTunnel, + pub paths: &'a LauncherPaths, + pub code_server_args: &'a CodeServerArgs, + pub platform: Platform, + pub shutdown: Barrier, + pub log_broadcast: &'a BroadcastLogSink, +} + +#[derive(Clone)] +struct SingletonServerContext { + log: log::Logger, + shutdown_tx: broadcast::Sender, + broadcast_tx: broadcast::Sender>, + current_name: Arc>>, +} + +pub struct RpcServer { + fut: JoinHandle>, + shutdown_broadcast: broadcast::Sender, + current_name: Arc>>, +} + +pub fn make_singleton_server( + log_broadcast: BroadcastLogSink, + log: log::Logger, + server: SingletonServer, + shutdown_rx: Barrier, +) -> RpcServer { + let (shutdown_broadcast, _) = broadcast::channel(4); + let rpc = new_json_rpc(); + + let current_name = Arc::new(Mutex::new(None)); + let mut rpc = rpc.methods(SingletonServerContext { + log: log.clone(), + shutdown_tx: shutdown_broadcast.clone(), + broadcast_tx: log_broadcast.get_brocaster(), + current_name: current_name.clone(), + }); + + rpc.register_sync( + protocol::singleton::METHOD_RESTART, + |_: protocol::EmptyObject, ctx| { + info!(ctx.log, "restarting tunnel after client request"); + let _ = ctx.shutdown_tx.send(ShutdownSignal::RpcRestartRequested); + Ok(()) + }, + ); + + rpc.register_sync( + protocol::singleton::METHOD_STATUS, + |_: protocol::EmptyObject, c| { + Ok(protocol::singleton::Status { + tunnel: match c.current_name.lock().unwrap().clone() { + Some(name) => protocol::singleton::TunnelState::Connected { name }, + None => protocol::singleton::TunnelState::Disconnected, + }, + }) + }, + ); + + rpc.register_sync( + protocol::singleton::METHOD_SHUTDOWN, + |_: protocol::EmptyObject, ctx| { + info!( + ctx.log, + "closing tunnel and all clients after a shutdown request" + ); + let _ = ctx.broadcast_tx.send(RpcCaller::serialize_notify( + &JsonRpcSerializer {}, + protocol::singleton::METHOD_SHUTDOWN, + protocol::EmptyObject {}, + )); + let _ = ctx.shutdown_tx.send(ShutdownSignal::RpcShutdownRequested); + Ok(()) + }, + ); + + // we tokio spawn instead of keeping a future, since we want it to progress + // even outside of the start_singleton_server loop (i.e. while the tunnel restarts) + let fut = tokio::spawn(async move { + serve_singleton_rpc(log_broadcast, server, rpc.build(log), shutdown_rx).await + }); + RpcServer { + shutdown_broadcast, + current_name, + fut, + } +} + +pub async fn start_singleton_server<'a>( + args: SingletonServerArgs<'_>, +) -> Result { + let shutdown_rx = ShutdownRequest::create_rx([ + ShutdownRequest::Derived(Box::new(args.server.shutdown_broadcast.subscribe())), + ShutdownRequest::Derived(Box::new(args.shutdown.clone())), + ]); + + { + print_listening(&args.log, &args.tunnel.name); + let mut name = args.server.current_name.lock().unwrap(); + *name = Some(args.tunnel.name.clone()) + } + + let serve_fut = super::serve( + &args.log, + args.tunnel, + args.paths, + args.code_server_args, + args.platform, + shutdown_rx, + ); + + pin!(serve_fut); + + match futures::future::select(Pin::new(&mut args.server.fut), &mut serve_fut).await { + Either::Left((rpc_result, fut)) => { + // the rpc server will only end as a result of a graceful shutdown, or + // with an error. Return the result of the eventual shutdown of the + // control server. + rpc_result.unwrap()?; + fut.await + } + Either::Right((ctrl_result, _)) => ctrl_result, + } +} + +async fn serve_singleton_rpc( + log_broadcast: BroadcastLogSink, + mut server: SingletonServer, + dispatcher: RpcDispatcher, + shutdown_rx: Barrier, +) -> Result<(), CodeError> { + let mut own_shutdown = shutdown_rx.clone(); + let shutdown_fut = own_shutdown.wait(); + pin!(shutdown_fut); + + loop { + let cnx = tokio::select! { + c = server.accept() => c?, + _ = &mut shutdown_fut => return Ok(()), + }; + + let (read, write) = socket_stream_split(cnx); + let dispatcher = dispatcher.clone(); + let msg_rx = log_broadcast.replay_and_subscribe(); + let shutdown_rx = shutdown_rx.clone(); + tokio::spawn(async move { + let _ = start_json_rpc(dispatcher.clone(), read, write, msg_rx, shutdown_rx).await; + }); + } +} + +/// Log sink that can broadcast and replay log events. Used for transmitting +/// logs from the singleton to all clients. This should be created and injected +/// into other services, like the tunnel, before `start_singleton_server` +/// is called. +#[derive(Clone)] +pub struct BroadcastLogSink { + recent: Arc>>>, + tx: broadcast::Sender>, +} + +impl Default for BroadcastLogSink { + fn default() -> Self { + Self::new() + } +} + +impl BroadcastLogSink { + pub fn new() -> Self { + let (tx, _) = broadcast::channel(64); + Self { + tx, + recent: Arc::new(Mutex::new(RingBuffer::new(50))), + } + } + + fn get_brocaster(&self) -> broadcast::Sender> { + self.tx.clone() + } + + fn replay_and_subscribe( + &self, + ) -> ConcatReceivable, mpsc::UnboundedReceiver>, broadcast::Receiver>> { + let (log_replay_tx, log_replay_rx) = mpsc::unbounded_channel(); + + for log in self.recent.lock().unwrap().iter() { + let _ = log_replay_tx.send(log.clone()); + } + + let _ = log_replay_tx.send(RpcCaller::serialize_notify( + &JsonRpcSerializer {}, + protocol::singleton::METHOD_LOG_REPLY_DONE, + protocol::EmptyObject {}, + )); + + ConcatReceivable::new(log_replay_rx, self.tx.subscribe()) + } +} + +impl log::LogSink for BroadcastLogSink { + fn write_log(&self, level: log::Level, prefix: &str, message: &str) { + let s = JsonRpcSerializer {}; + let serialized = RpcCaller::serialize_notify( + &s, + protocol::singleton::METHOD_LOG, + protocol::singleton::LogMessage { + level: Some(level), + prefix, + message, + }, + ); + + let _ = self.tx.send(serialized.clone()); + self.recent.lock().unwrap().push(serialized); + } + + fn write_result(&self, message: &str) { + self.write_log(log::Level::Info, "", message); + } +} diff --git a/cli/src/tunnels/socket_signal.rs b/cli/src/tunnels/socket_signal.rs index c625593a21a..2a2df6607ea 100644 --- a/cli/src/tunnels/socket_signal.rs +++ b/cli/src/tunnels/socket_signal.rs @@ -22,6 +22,12 @@ pub enum SocketSignal { CloseWith(CloseReason), } +impl From> for SocketSignal { + fn from(v: Vec) -> Self { + SocketSignal::Send(v) + } +} + impl SocketSignal { pub fn from_message(msg: &T) -> Self where @@ -32,6 +38,7 @@ impl SocketSignal { } /// todo@connor4312: cleanup once everything is moved to rpc standard interfaces +#[allow(dead_code)] pub enum ServerMessageDestination { Channel(mpsc::Sender), Rpc(MsgPackCaller), diff --git a/cli/src/tunnels/wsl_detect.rs b/cli/src/tunnels/wsl_detect.rs new file mode 100644 index 00000000000..ec386feb26e --- /dev/null +++ b/cli/src/tunnels/wsl_detect.rs @@ -0,0 +1,51 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +use crate::log; + +#[cfg(not(windows))] +pub fn is_wsl_installed(_log: &log::Logger) -> bool { + false +} + +#[cfg(windows)] +pub fn is_wsl_installed(log: &log::Logger) -> bool { + use std::{path::PathBuf, process::Command}; + + let system32 = { + let sys_root = match std::env::var("SystemRoot") { + Ok(s) => s, + Err(_) => return false, + }; + + let is_32_on_64 = std::env::var("PROCESSOR_ARCHITEW6432").is_ok(); + let mut system32 = PathBuf::from(sys_root); + system32.push(if is_32_on_64 { "Sysnative" } else { "System32" }); + system32 + }; + + // Windows builds < 22000 + let mut maybe_lxss = system32.join("lxss"); + maybe_lxss.push("LxssManager.dll"); + if maybe_lxss.exists() { + trace!(log, "wsl availability detected via lxss"); + return true; + } + + // Windows builds >= 22000 + let maybe_wsl = system32.join("wsl.exe"); + if maybe_wsl.exists() { + if let Ok(s) = Command::new(maybe_wsl).arg("--status").output() { + if s.status.success() { + trace!(log, "wsl availability detected via subprocess"); + return true; + } + } + } + + trace!(log, "wsl not detected"); + + false +} diff --git a/cli/src/tunnels/wsl_server.rs b/cli/src/tunnels/wsl_server.rs deleted file mode 100644 index 8859cc7f53e..00000000000 --- a/cli/src/tunnels/wsl_server.rs +++ /dev/null @@ -1,165 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -use tokio::sync::mpsc; - -use crate::{ - log, - msgpack_rpc::{new_msgpack_rpc, start_msgpack_rpc, MsgPackCaller}, - state::LauncherPaths, - tunnels::code_server::ServerBuilder, - update_service::{Platform, Release, TargetKind}, - util::{ - errors::{ - wrap, AnyError, InvalidRpcDataError, MismatchedLaunchModeError, NoAttachedServerError, - }, - http::ReqwestSimpleHttp, - }, -}; - -use super::{ - code_server::{AnyCodeServer, CodeServerArgs, ResolvedServerParams}, - protocol::{EmptyObject, InstallFromLocalFolderParams, ServerMessageParams, VersionParams}, - server_bridge::ServerBridge, - server_multiplexer::ServerMultiplexer, - shutdown_signal::ShutdownSignal, - socket_signal::{ClientMessageDecoder, ServerMessageDestination, ServerMessageSink}, -}; - -struct HandlerContext { - log: log::Logger, - code_server_args: CodeServerArgs, - launcher_paths: LauncherPaths, - platform: Platform, - http: ReqwestSimpleHttp, - caller: MsgPackCaller, - multiplexer: ServerMultiplexer, -} - -#[derive(Clone)] -struct RpcLogSink(MsgPackCaller); - -impl RpcLogSink { - fn write_json(&self, level: String, message: &str) { - self.0.notify( - "log", - serde_json::json!({ - "level": level, - "message": message, - }), - ); - } -} - -impl log::LogSink for RpcLogSink { - fn write_log(&self, level: log::Level, _prefix: &str, message: &str) { - self.write_json(level.to_string(), message); - } - - fn write_result(&self, message: &str) { - self.write_json("result".to_string(), message); - } -} - -pub async fn serve_wsl( - log: log::Logger, - launcher_paths: LauncherPaths, - code_server_args: CodeServerArgs, - platform: Platform, - http: reqwest::Client, - shutdown_rx: mpsc::UnboundedReceiver, -) -> Result { - let (caller_tx, caller_rx) = mpsc::unbounded_channel(); - let mut rpc = new_msgpack_rpc(); - let caller = rpc.get_caller(caller_tx); - - // notify the incoming client about the server version - caller.notify("version", VersionParams::default()); - - let log = log.with_sink(RpcLogSink(caller.clone())); - let mut rpc = rpc.methods(HandlerContext { - log: log.clone(), - caller, - code_server_args, - launcher_paths, - platform, - multiplexer: ServerMultiplexer::new(), - http: ReqwestSimpleHttp::with_client(http), - }); - - rpc.register_async( - "serve", - move |m: InstallFromLocalFolderParams, c| async move { handle_serve(&c, m).await }, - ); - rpc.register_sync("servermsg", move |m: ServerMessageParams, c| { - if c.multiplexer.write_message(&c.log, m.i, m.body) { - Ok(EmptyObject {}) - } else { - Err(NoAttachedServerError().into()) - } - }); - - start_msgpack_rpc( - rpc.build(log), - tokio::io::stdin(), - tokio::io::stderr(), - caller_rx, - shutdown_rx, - ) - .await - .map_err(|e| wrap(e, "error handling server stdio"))?; - - Ok(0) -} - -async fn handle_serve( - c: &HandlerContext, - params: InstallFromLocalFolderParams, -) -> Result { - // fill params.extensions into code_server_args.install_extensions - let mut csa = c.code_server_args.clone(); - csa.connection_token = params.inner.connection_token.or(csa.connection_token); - csa.install_extensions - .extend(params.inner.extensions.into_iter()); - - let resolved = ResolvedServerParams { - code_server_args: csa, - release: Release { - name: String::new(), - commit: params - .inner - .commit_id - .ok_or_else(|| InvalidRpcDataError("commit_id is required".to_string()))?, - platform: c.platform, - target: TargetKind::Server, - quality: params.inner.quality, - }, - }; - - let sb = ServerBuilder::new(&c.log, &resolved, &c.launcher_paths, c.http.clone()); - let code_server = match sb.get_running().await? { - Some(AnyCodeServer::Socket(s)) => s, - Some(_) => return Err(MismatchedLaunchModeError().into()), - None => { - sb.setup(Some(params.archive_path.into())).await?; - sb.listen_on_default_socket().await? - } - }; - - let bridge = ServerBridge::new( - &code_server.socket, - ServerMessageSink::new_plain( - c.multiplexer.clone(), - params.inner.socket_id, - ServerMessageDestination::Rpc(c.caller.clone()), - ), - ClientMessageDecoder::new_plain(), - ) - .await?; - - c.multiplexer.register(params.inner.socket_id, bridge); - trace!(c.log, "Attached to server"); - Ok(EmptyObject {}) -} diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs index 9dcfc0f5107..b03d8ea5963 100644 --- a/cli/src/update_service.rs +++ b/cli/src/update_service.rs @@ -3,27 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use std::path::Path; +use std::{ffi::OsStr, fmt, path::Path}; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use crate::{ constants::VSCODE_CLI_UPDATE_ENDPOINT, debug, log, options, spanf, util::{ - errors::{AnyError, UnsupportedPlatformError, UpdatesNotConfigured, WrappedError}, - http::{SimpleHttp, SimpleResponse}, + errors::{AnyError, CodeError, UpdatesNotConfigured, WrappedError}, + http::{BoxedHttp, SimpleResponse}, io::ReportCopyProgress, + tar, zipper, }, }; /// Implementation of the VS Code Update service for use in the CLI. pub struct UpdateService { - client: Box, + client: BoxedHttp, log: log::Logger, } /// Describes a specific release, can be created manually or returned from the update service. +#[derive(Clone, Eq, PartialEq)] pub struct Release { pub name: String, pub platform: Platform, @@ -53,11 +55,8 @@ fn quality_download_segment(quality: options::Quality) -> &'static str { } impl UpdateService { - pub fn new(log: log::Logger, http: impl SimpleHttp + Send + Sync + 'static) -> Self { - UpdateService { - client: Box::new(http), - log, - } + pub fn new(log: log::Logger, http: BoxedHttp) -> Self { + UpdateService { client: http, log } } pub async fn get_release_by_semver_version( @@ -71,7 +70,7 @@ impl UpdateService { VSCODE_CLI_UPDATE_ENDPOINT.ok_or_else(UpdatesNotConfigured::no_url)?; let download_segment = target .download_segment(platform) - .ok_or(UnsupportedPlatformError())?; + .ok_or_else(|| CodeError::UnsupportedPlatform(platform.to_string()))?; let download_url = format!( "{}/api/versions/{}/{}/{}", update_endpoint, @@ -113,7 +112,7 @@ impl UpdateService { VSCODE_CLI_UPDATE_ENDPOINT.ok_or_else(UpdatesNotConfigured::no_url)?; let download_segment = target .download_segment(platform) - .ok_or(UnsupportedPlatformError())?; + .ok_or_else(|| CodeError::UnsupportedPlatform(platform.to_string()))?; let download_url = format!( "{}/api/latest/{}/{}", update_endpoint, @@ -150,7 +149,7 @@ impl UpdateService { let download_segment = release .target .download_segment(release.platform) - .ok_or(UnsupportedPlatformError())?; + .ok_or_else(|| CodeError::UnsupportedPlatform(release.platform.to_string()))?; let download_url = format!( "{}/commit:{}/{}/{}", @@ -177,14 +176,9 @@ pub fn unzip_downloaded_release( where T: ReportCopyProgress, { - #[cfg(any(target_os = "windows", target_os = "macos"))] - { - use crate::util::zipper; + if compressed_file.extension() == Some(OsStr::new("zip")) { zipper::unzip_file(compressed_file, target_dir, reporter) - } - #[cfg(target_os = "linux")] - { - use crate::util::tar; + } else { tar::decompress_tarball(compressed_file, target_dir, reporter) } } @@ -208,7 +202,7 @@ impl TargetKind { } } -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)] pub enum Platform { LinuxAlpineX64, LinuxAlpineARM64, @@ -306,3 +300,20 @@ impl Platform { } } } + +impl fmt::Display for Platform { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str(match self { + Platform::LinuxAlpineARM64 => "LinuxAlpineARM64", + Platform::LinuxAlpineX64 => "LinuxAlpineX64", + Platform::LinuxX64 => "LinuxX64", + Platform::LinuxARM64 => "LinuxARM64", + Platform::LinuxARM32 => "LinuxARM32", + Platform::DarwinX64 => "DarwinX64", + Platform::DarwinARM64 => "DarwinARM64", + Platform::WindowsX64 => "WindowsX64", + Platform::WindowsX86 => "WindowsX86", + Platform::WindowsARM64 => "WindowsARM64", + }) + } +} diff --git a/cli/src/util.rs b/cli/src/util.rs index 2ed47f2f263..3acd046f5f9 100644 --- a/cli/src/util.rs +++ b/cli/src/util.rs @@ -12,11 +12,11 @@ pub mod input; pub mod io; pub mod machine; pub mod prereqs; +pub mod ring_buffer; pub mod sync; pub use is_integrated::*; - -#[cfg(target_os = "linux")] +pub mod app_lock; +pub mod file_lock; +pub mod os; pub mod tar; - -#[cfg(any(target_os = "windows", target_os = "macos"))] pub mod zipper; diff --git a/cli/src/util/app_lock.rs b/cli/src/util/app_lock.rs new file mode 100644 index 00000000000..35cd7803e0c --- /dev/null +++ b/cli/src/util/app_lock.rs @@ -0,0 +1,61 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +#[cfg(windows)] +use std::{io, ptr}; + +#[cfg(windows)] +use winapi::{ + shared::winerror::ERROR_ALREADY_EXISTS, + um::{handleapi::CloseHandle, synchapi::CreateMutexA, winnt::HANDLE}, +}; + +use super::errors::CodeError; + +pub struct AppMutex { + #[cfg(windows)] + handle: HANDLE, +} + +#[cfg(windows)] // handle is thread-safe, mark it so with this +unsafe impl Send for AppMutex {} + +impl AppMutex { + #[cfg(unix)] + pub fn new(_name: &str) -> Result { + Ok(Self {}) + } + + #[cfg(windows)] + pub fn new(name: &str) -> Result { + use std::ffi::CString; + + let cname = CString::new(name).unwrap(); + let handle = unsafe { CreateMutexA(ptr::null_mut(), 0, cname.as_ptr() as _) }; + + if !handle.is_null() { + return Ok(Self { handle }); + } + + let err = io::Error::last_os_error(); + let raw = err.raw_os_error(); + // docs report it should return ERROR_IO_PENDING, but in my testing it actually + // returns ERROR_LOCK_VIOLATION. Or maybe winapi is wrong? + if raw == Some(ERROR_ALREADY_EXISTS as i32) { + return Err(CodeError::AppAlreadyLocked(name.to_string())); + } + + Err(CodeError::AppLockFailed(err)) + } +} + +impl Drop for AppMutex { + fn drop(&mut self) { + #[cfg(windows)] + unsafe { + CloseHandle(self.handle) + }; + } +} diff --git a/cli/src/util/command.rs b/cli/src/util/command.rs index c0434b10647..ad1f3a1d13e 100644 --- a/cli/src/util/command.rs +++ b/cli/src/util/command.rs @@ -2,29 +2,47 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use super::errors::{wrap, AnyError, CommandFailed, WrappedError}; -use std::{borrow::Cow, ffi::OsStr, process::Stdio}; +use super::errors::CodeError; +use std::{ + borrow::Cow, + ffi::OsStr, + process::{Output, Stdio}, +}; use tokio::process::Command; pub async fn capture_command_and_check_status( command_str: impl AsRef, args: &[impl AsRef], -) -> Result { +) -> Result { let output = capture_command(&command_str, args).await?; + check_output_status(output, || { + format!( + "{} {}", + command_str.as_ref().to_string_lossy(), + args.iter() + .map(|a| a.as_ref().to_string_lossy()) + .collect::>>() + .join(" ") + ) + }) +} + +pub fn check_output_status( + output: Output, + cmd_str: impl FnOnce() -> String, +) -> Result { if !output.status.success() { - return Err(CommandFailed { - command: format!( - "{} {}", - command_str.as_ref().to_string_lossy(), - args.iter() - .map(|a| a.as_ref().to_string_lossy()) - .collect::>>() - .join(" ") - ), - output, - } - .into()); + return Err(CodeError::CommandFailed { + command: cmd_str(), + code: output.status.code().unwrap_or(-1), + output: String::from_utf8_lossy(if output.stderr.is_empty() { + &output.stdout + } else { + &output.stderr + }) + .into(), + }); } Ok(output) @@ -33,7 +51,7 @@ pub async fn capture_command_and_check_status( pub async fn capture_command( command_str: A, args: I, -) -> Result +) -> Result where A: AsRef, I: IntoIterator, @@ -45,27 +63,23 @@ where .stdout(Stdio::piped()) .output() .await - .map_err(|e| { - wrap( - e, - format!( - "failed to execute command '{}'", - command_str.as_ref().to_string_lossy() - ), - ) + .map_err(|e| CodeError::CommandFailed { + command: command_str.as_ref().to_string_lossy().to_string(), + code: -1, + output: e.to_string(), }) } /// Kills and processes and all of its children. #[cfg(target_os = "windows")] -pub async fn kill_tree(process_id: u32) -> Result<(), WrappedError> { +pub async fn kill_tree(process_id: u32) -> Result<(), CodeError> { capture_command("taskkill", &["/t", "/pid", &process_id.to_string()]).await?; Ok(()) } /// Kills and processes and all of its children. #[cfg(not(target_os = "windows"))] -pub async fn kill_tree(process_id: u32) -> Result<(), WrappedError> { +pub async fn kill_tree(process_id: u32) -> Result<(), CodeError> { use futures::future::join_all; use tokio::io::{AsyncBufReadExt, BufReader}; @@ -82,7 +96,11 @@ pub async fn kill_tree(process_id: u32) -> Result<(), WrappedError> { .stdin(Stdio::null()) .stdout(Stdio::piped()) .spawn() - .map_err(|e| wrap(e, "error enumerating process tree"))?; + .map_err(|e| CodeError::CommandFailed { + command: format!("pgrep -P {}", parent_id), + code: -1, + output: e.to_string(), + })?; let mut kill_futures = vec![tokio::spawn( async move { kill_single_pid(parent_id).await }, diff --git a/cli/src/util/errors.rs b/cli/src/util/errors.rs index fa5d67db300..ca6d4bf3d8a 100644 --- a/cli/src/util/errors.rs +++ b/cli/src/util/errors.rs @@ -2,11 +2,12 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use std::fmt::Display; - -use crate::constants::{ - APPLICATION_NAME, CONTROL_PORT, DOCUMENTATION_URL, QUALITYLESS_PRODUCT_NAME, + use crate::{ + constants::{APPLICATION_NAME, CONTROL_PORT, DOCUMENTATION_URL, QUALITYLESS_PRODUCT_NAME}, + rpc::ResponseError, }; +use std::fmt::Display; +use thiserror::Error; // Wraps another error with additional info. #[derive(Debug, Clone)] @@ -171,7 +172,7 @@ impl std::fmt::Display for SetupError { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!( f, - "{}\r\n\r\nMore info at {}/remote/linux", + "{}\n\nMore info at {}/remote/linux", DOCUMENTATION_URL.unwrap_or(""), self.0 ) @@ -257,18 +258,6 @@ impl std::fmt::Display for RefreshTokenNotAvailableError { } } -#[derive(Debug)] -pub struct UnsupportedPlatformError(); - -impl std::fmt::Display for UnsupportedPlatformError { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!( - f, - "This operation is not supported on your current platform" - ) - } -} - #[derive(Debug)] pub struct NoInstallInUserProvidedPath(pub String); @@ -343,7 +332,7 @@ pub struct ServiceAlreadyRegistered(); impl std::fmt::Display for ServiceAlreadyRegistered { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "Already registered the service. Run `code tunnel service uninstall` to unregister it first") + write!(f, "Already registered the service. Run `{} tunnel service uninstall` to unregister it first", APPLICATION_NAME) } } @@ -418,28 +407,6 @@ impl std::fmt::Display for OAuthError { } } -#[derive(Debug)] -pub struct CommandFailed { - pub output: std::process::Output, - pub command: String, -} - -impl std::fmt::Display for CommandFailed { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!( - f, - "Failed to run command \"{}\" (code {}): {}", - self.command, - self.output.status, - String::from_utf8_lossy(if self.output.stderr.is_empty() { - &self.output.stdout - } else { - &self.output.stderr - }) - ) - } -} - // Makes an "AnyError" enum that contains any of the given errors, in the form // `enum AnyError { FooError(FooError) }` (when given `makeAnyError!(FooError)`). // Useful to easily deal with application error types without making tons of "From" @@ -475,6 +442,79 @@ macro_rules! makeAnyError { }; } +#[derive(Debug)] +pub struct DbusConnectFailedError(pub String); + +impl Display for DbusConnectFailedError { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let mut str = String::new(); + str.push_str("Error creating dbus session. This command uses systemd for managing services, you should check that systemd is installed and under your user."); + + if std::env::var("WSL_DISTRO_NAME").is_ok() { + str.push_str("\n\nTo enable systemd on WSL, check out: https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/.\n\n"); + } + + str.push_str("If running `systemctl status` works, systemd is ok, but your session dbus may not be. You might need to:\n\n- Install the `dbus-user-session` package, and reboot if it was not installed\n- Start the user dbus session with `systemctl --user enable dbus --now`.\n\nThe error encountered was: "); + str.push_str(&self.0); + str.push('\n'); + + write!(f, "{}", str) + } +} + +/// Internal errors in the VS Code CLI. +/// Note: other error should be migrated to this type gradually +#[derive(Error, Debug)] +pub enum CodeError { + #[error("could not connect to socket/pipe: {0:?}")] + AsyncPipeFailed(std::io::Error), + #[error("could not listen on socket/pipe: {0:?}")] + AsyncPipeListenerFailed(std::io::Error), + #[error("could not create singleton lock file: {0:?}")] + SingletonLockfileOpenFailed(std::io::Error), + #[error("could not read singleton lock file: {0:?}")] + SingletonLockfileReadFailed(rmp_serde::decode::Error), + #[error("the process holding the singleton lock file (pid={0}) exited")] + SingletonLockedProcessExited(u32), + #[error("no tunnel process is currently running")] + NoRunningTunnel, + #[error("rpc call failed: {0:?}")] + TunnelRpcCallFailed(ResponseError), + #[cfg(windows)] + #[error("the windows app lock {0} already exists")] + AppAlreadyLocked(String), + #[cfg(windows)] + #[error("could not get windows app lock: {0:?}")] + AppLockFailed(std::io::Error), + #[error("failed to run command \"{command}\" (code {code}): {output}")] + CommandFailed { + command: String, + code: i32, + output: String, + }, + + #[error("platform not currently supported: {0}")] + UnsupportedPlatform(String), + #[error("This machine not meet {name}'s prerequisites, expected either...: {bullets}")] + PrerequisitesFailed { name: &'static str, bullets: String }, + #[error("failed to spawn process: {0:?}")] + ProcessSpawnFailed(std::io::Error), + #[error("failed to handshake spawned process: {0:?}")] + ProcessSpawnHandshakeFailed(std::io::Error), + #[error("download appears corrupted, please retry ({0})")] + CorruptDownload(&'static str), + #[error("port forwarding is not available in this context")] + PortForwardingNotAvailable, + #[error("'auth' call required")] + ServerAuthRequired, + #[error("challenge not yet issued")] + AuthChallengeNotIssued, + #[error("unauthorized client refused")] + AuthMismatch, + #[error("keyring communication timed out after 5s")] + KeyringTimeout, +} + makeAnyError!( MissingLegalConsent, MismatchConnectionToken, @@ -491,7 +531,6 @@ makeAnyError!( ExtensionInstallFailed, MismatchedLaunchModeError, NoAttachedServerError, - UnsupportedPlatformError, RefreshTokenNotAvailableError, NoInstallInUserProvidedPath, UserCancelledInstallation, @@ -503,9 +542,10 @@ makeAnyError!( UpdatesNotConfigured, CorruptDownload, MissingHomeDirectory, - CommandFailed, OAuthError, - InvalidRpcDataError + InvalidRpcDataError, + CodeError, + DbusConnectFailedError ); impl From for AnyError { diff --git a/cli/src/util/file_lock.rs b/cli/src/util/file_lock.rs new file mode 100644 index 00000000000..8ee60cba4f8 --- /dev/null +++ b/cli/src/util/file_lock.rs @@ -0,0 +1,125 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +use crate::util::errors::CodeError; +use std::{fs::File, io}; + +pub struct FileLock { + file: File, + #[cfg(windows)] + overlapped: winapi::um::minwinbase::OVERLAPPED, +} + +#[cfg(windows)] // overlapped is thread-safe, mark it so with this +unsafe impl Send for FileLock {} + +pub enum Lock { + Acquired(FileLock), + AlreadyLocked(File), +} + +/// Number of locked bytes in the file. On Windows, locking prevents reads, +/// but consumers of the lock may still want to read what the locking file +/// as written. Thus, only PREFIX_LOCKED_BYTES are locked, and any globally- +/// readable content should be written after the prefix. +#[cfg(windows)] +pub const PREFIX_LOCKED_BYTES: usize = 1; + +#[cfg(unix)] +pub const PREFIX_LOCKED_BYTES: usize = 0; + +impl FileLock { + #[cfg(windows)] + pub fn acquire(file: File) -> Result { + use std::os::windows::prelude::AsRawHandle; + use winapi::{ + shared::winerror::{ERROR_IO_PENDING, ERROR_LOCK_VIOLATION}, + um::{ + fileapi::LockFileEx, + minwinbase::{LOCKFILE_EXCLUSIVE_LOCK, LOCKFILE_FAIL_IMMEDIATELY}, + }, + }; + + let handle = file.as_raw_handle(); + let (overlapped, ok) = unsafe { + let mut overlapped = std::mem::zeroed(); + let ok = LockFileEx( + handle, + LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY, + 0, + PREFIX_LOCKED_BYTES as u32, + 0, + &mut overlapped, + ); + + (overlapped, ok) + }; + + if ok != 0 { + return Ok(Lock::Acquired(Self { file, overlapped })); + } + + let err = io::Error::last_os_error(); + let raw = err.raw_os_error(); + // docs report it should return ERROR_IO_PENDING, but in my testing it actually + // returns ERROR_LOCK_VIOLATION. Or maybe winapi is wrong? + if raw == Some(ERROR_IO_PENDING as i32) || raw == Some(ERROR_LOCK_VIOLATION as i32) { + return Ok(Lock::AlreadyLocked(file)); + } + + Err(CodeError::SingletonLockfileOpenFailed(err)) + } + + #[cfg(unix)] + pub fn acquire(file: File) -> Result { + use std::os::unix::io::AsRawFd; + + let fd = file.as_raw_fd(); + let res = unsafe { libc::flock(fd, libc::LOCK_EX | libc::LOCK_NB) }; + if res == 0 { + return Ok(Lock::Acquired(Self { file })); + } + + let err = io::Error::last_os_error(); + if err.kind() == io::ErrorKind::WouldBlock { + return Ok(Lock::AlreadyLocked(file)); + } + + Err(CodeError::SingletonLockfileOpenFailed(err)) + } + + pub fn file(&self) -> &File { + &self.file + } + + pub fn file_mut(&mut self) -> &mut File { + &mut self.file + } +} + +impl Drop for FileLock { + #[cfg(windows)] + fn drop(&mut self) { + use std::os::windows::prelude::AsRawHandle; + use winapi::um::fileapi::UnlockFileEx; + + unsafe { + UnlockFileEx( + self.file.as_raw_handle(), + 0, + u32::MAX, + u32::MAX, + &mut self.overlapped, + ) + }; + } + + #[cfg(unix)] + fn drop(&mut self) { + use std::os::unix::io::AsRawFd; + + unsafe { libc::flock(self.file.as_raw_fd(), libc::LOCK_UN) }; + } +} diff --git a/cli/src/util/http.rs b/cli/src/util/http.rs index 16681c07596..e49120578a7 100644 --- a/cli/src/util/http.rs +++ b/cli/src/util/http.rs @@ -16,7 +16,7 @@ use hyper::{ HeaderMap, StatusCode, }; use serde::de::DeserializeOwned; -use std::{io, pin::Pin, str::FromStr, task::Poll}; +use std::{io, pin::Pin, str::FromStr, sync::Arc, task::Poll}; use tokio::{ fs, io::{AsyncRead, AsyncReadExt}, @@ -59,14 +59,23 @@ pub struct SimpleResponse { pub status_code: StatusCode, pub headers: HeaderMap, pub read: Pin>, - pub url: String, + pub url: Option, } impl SimpleResponse { - pub fn generic_error(url: String) -> Self { + pub fn url_path_basename(&self) -> Option { + self.url.as_ref().and_then(|u| { + u.path_segments() + .and_then(|s| s.last().map(|s| s.to_owned())) + }) + } +} + +impl SimpleResponse { + pub fn generic_error(url: &str) -> Self { let (_, rx) = mpsc::unbounded_channel(); SimpleResponse { - url, + url: url::Url::parse(url).ok(), status_code: StatusCode::INTERNAL_SERVER_ERROR, headers: HeaderMap::new(), read: Box::pin(DelegatedReader::new(rx)), @@ -79,7 +88,10 @@ impl SimpleResponse { self.read.read_to_string(&mut body).await.ok(); StatusError { - url: self.url, + url: self + .url + .map(|u| u.to_string()) + .unwrap_or_else(|| "".to_owned()), status_code: self.status_code.as_u16(), body, } @@ -97,7 +109,7 @@ impl SimpleResponse { .map_err(|e| wrap(e, "error reading response"))?; let t = serde_json::from_slice(&buf) - .map_err(|e| wrap(e, format!("error decoding json from {}", self.url)))?; + .map_err(|e| wrap(e, format!("error decoding json from {:?}", self.url)))?; Ok(t) } @@ -116,6 +128,8 @@ pub trait SimpleHttp { ) -> Result; } +pub type BoxedHttp = Arc; + // Implementation of SimpleHttp that uses a reqwest client. #[derive(Clone)] pub struct ReqwestSimpleHttp { @@ -159,7 +173,7 @@ impl SimpleHttp for ReqwestSimpleHttp { Ok(SimpleResponse { status_code: res.status(), headers: res.headers().clone(), - url, + url: Some(res.url().clone()), read: Box::pin( res.bytes_stream() .map_err(|e| futures::io::Error::new(futures::io::ErrorKind::Other, e)) @@ -248,7 +262,7 @@ impl SimpleHttp for DelegatedSimpleHttp { .await; if sent.is_err() { - return Ok(SimpleResponse::generic_error(url)); // sender shut down + return Ok(SimpleResponse::generic_error(&url)); // sender shut down } match rx.recv().await { @@ -273,16 +287,16 @@ impl SimpleHttp for DelegatedSimpleHttp { } Ok(SimpleResponse { - url, + url: url::Url::parse(&url).ok(), status_code: StatusCode::from_u16(status_code) .unwrap_or(StatusCode::INTERNAL_SERVER_ERROR), headers: headers_map, read: Box::pin(DelegatedReader::new(rx)), }) } - Some(DelegatedHttpEvent::End) => Ok(SimpleResponse::generic_error(url)), + Some(DelegatedHttpEvent::End) => Ok(SimpleResponse::generic_error(&url)), Some(_) => panic!("expected initresponse as first message from delegated http"), - None => Ok(SimpleResponse::generic_error(url)), // sender shut down + None => Ok(SimpleResponse::generic_error(&url)), // sender shut down } } } @@ -324,7 +338,6 @@ impl AsyncRead for DelegatedReader { /// Simple http implementation that falls back to delegated http if /// making a direct reqwest fails. -#[derive(Clone)] pub struct FallbackSimpleHttp { native: ReqwestSimpleHttp, delegated: DelegatedSimpleHttp, diff --git a/cli/src/util/io.rs b/cli/src/util/io.rs index a21a2ceb632..95b378c0c65 100644 --- a/cli/src/util/io.rs +++ b/cli/src/util/io.rs @@ -15,6 +15,8 @@ use tokio::{ time::sleep, }; +use super::ring_buffer::RingBuffer; + pub trait ReportCopyProgress { fn report_progress(&mut self, bytes_so_far: u64, total_bytes: u64); } @@ -132,8 +134,7 @@ pub fn tailf(file: File, n: usize) -> mpsc::UnboundedReceiver { // Read the initial "n" lines back from the request. initial_lines // is a small ring buffer. - let mut initial_lines = Vec::with_capacity(n); - let mut initial_lines_i = 0; + let mut initial_lines = RingBuffer::new(n); loop { let mut line = String::new(); let bytes_read = match reader.read_line(&mut line) { @@ -151,26 +152,11 @@ pub fn tailf(file: File, n: usize) -> mpsc::UnboundedReceiver { } pos += bytes_read as u64; - if initial_lines.len() < initial_lines.capacity() { - initial_lines.push(line) - } else { - initial_lines[initial_lines_i] = line; - } - - initial_lines_i = (initial_lines_i + 1) % n; + initial_lines.push(line); } - // remove tail lines... - if initial_lines_i < initial_lines.len() { - for line in initial_lines.drain((initial_lines_i)..) { - tx.send(TailEvent::Line(line)).ok(); - } - } - // then the remaining lines - if !initial_lines.is_empty() { - for line in initial_lines.drain(0..) { - tx.send(TailEvent::Line(line)).ok(); - } + for line in initial_lines.into_iter() { + tx.send(TailEvent::Line(line)).ok(); } // now spawn the poll process to keep reading new lines diff --git a/cli/src/util/machine.rs b/cli/src/util/machine.rs index c3e0e2bfb98..1df4a7843ff 100644 --- a/cli/src/util/machine.rs +++ b/cli/src/util/machine.rs @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use std::path::Path; +use std::{path::Path, time::Duration}; use sysinfo::{Pid, PidExt, ProcessExt, System, SystemExt}; pub fn process_at_path_exists(pid: u32, name: &Path) -> bool { @@ -29,6 +29,14 @@ pub fn process_exists(pid: u32) -> bool { sys.refresh_process(Pid::from_u32(pid)) } +pub async fn wait_until_process_exits(pid: Pid, poll_ms: u64) { + let mut s = System::new(); + let duration = Duration::from_millis(poll_ms); + while s.refresh_process(pid) { + tokio::time::sleep(duration).await; + } +} + pub fn find_running_process(name: &Path) -> Option { let mut sys = System::new(); sys.refresh_processes(); @@ -44,3 +52,10 @@ pub fn find_running_process(name: &Path) -> Option { } None } + +pub async fn wait_until_exe_deleted(current_exe: &Path, poll_ms: u64) { + let duration = Duration::from_millis(poll_ms); + while current_exe.exists() { + tokio::time::sleep(duration).await; + } +} diff --git a/cli/src/util/os.rs b/cli/src/util/os.rs new file mode 100644 index 00000000000..d8105baf65a --- /dev/null +++ b/cli/src/util/os.rs @@ -0,0 +1,39 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +#[cfg(windows)] +pub fn os_release() -> Result { + // The windows API *had* nice GetVersionEx/A APIs, but these were deprecated + // in Winodws 8 and there's no newer win API to get version numbers. So + // instead read the registry. + + use winreg::{enums::HKEY_LOCAL_MACHINE, RegKey}; + + let key = RegKey::predef(HKEY_LOCAL_MACHINE) + .open_subkey(r"SOFTWARE\Microsoft\Windows NT\CurrentVersion")?; + + let major: u32 = key.get_value("CurrentMajorVersionNumber")?; + let minor: u32 = key.get_value("CurrentMinorVersionNumber")?; + let build: String = key.get_value("CurrentBuild")?; + + Ok(format!("{}.{}.{}", major, minor, build)) +} + +#[cfg(unix)] +pub fn os_release() -> Result { + use std::{ffi::CStr, mem}; + + unsafe { + let mut ret = mem::MaybeUninit::zeroed(); + + if libc::uname(ret.as_mut_ptr()) != 0 { + return Err(std::io::Error::last_os_error()); + } + + let ret = ret.assume_init(); + let c_str: &CStr = CStr::from_ptr(ret.release.as_ptr()); + Ok(c_str.to_string_lossy().into_owned()) + } +} diff --git a/cli/src/util/prereqs.rs b/cli/src/util/prereqs.rs index 5e5c6db7c15..d8cbd1b91dd 100644 --- a/cli/src/util/prereqs.rs +++ b/cli/src/util/prereqs.rs @@ -7,13 +7,12 @@ use std::cmp::Ordering; use super::command::capture_command; use crate::constants::QUALITYLESS_SERVER_NAME; use crate::update_service::Platform; -use crate::util::errors::SetupError; use lazy_static::lazy_static; use regex::bytes::Regex as BinRegex; use regex::Regex; use tokio::fs; -use super::errors::AnyError; +use super::errors::CodeError; lazy_static! { static ref LDCONFIG_STDC_RE: Regex = Regex::new(r"libstdc\+\+.* => (.+)").unwrap(); @@ -41,19 +40,18 @@ impl PreReqChecker { } #[cfg(not(target_os = "linux"))] - pub async fn verify(&self) -> Result { - use crate::constants::QUALITYLESS_PRODUCT_NAME; + pub async fn verify(&self) -> Result { Platform::env_default().ok_or_else(|| { - SetupError(format!( - "{} is not supported on this platform", - QUALITYLESS_PRODUCT_NAME + CodeError::UnsupportedPlatform(format!( + "{} {}", + std::env::consts::OS, + std::env::consts::ARCH )) - .into() }) } #[cfg(target_os = "linux")] - pub async fn verify(&self) -> Result { + pub async fn verify(&self) -> Result { let (is_nixos, gnu_a, gnu_b, or_musl) = tokio::join!( check_is_nixos(), check_glibc_version(), @@ -96,10 +94,10 @@ impl PreReqChecker { .collect::>() .join("\n"); - Err(AnyError::from(SetupError(format!( - "This machine not meet {}'s prerequisites, expected either...\n{}", - QUALITYLESS_SERVER_NAME, bullets, - )))) + Err(CodeError::PrerequisitesFailed { + bullets, + name: QUALITYLESS_SERVER_NAME, + }) } } diff --git a/cli/src/util/ring_buffer.rs b/cli/src/util/ring_buffer.rs new file mode 100644 index 00000000000..3dfb8c587d9 --- /dev/null +++ b/cli/src/util/ring_buffer.rs @@ -0,0 +1,142 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +pub struct RingBuffer { + data: Vec, + i: usize, +} + +impl RingBuffer { + pub fn new(capacity: usize) -> Self { + Self { + data: Vec::with_capacity(capacity), + i: 0, + } + } + + pub fn capacity(&self) -> usize { + self.data.capacity() + } + + pub fn len(&self) -> usize { + self.data.len() + } + + pub fn is_full(&self) -> bool { + self.data.len() == self.data.capacity() + } + + pub fn is_empty(&self) -> bool { + self.data.len() == 0 + } + + pub fn push(&mut self, value: T) { + if self.data.len() == self.data.capacity() { + self.data[self.i] = value; + } else { + self.data.push(value); + } + + self.i = (self.i + 1) % self.data.capacity(); + } + + pub fn iter(&self) -> RingBufferIter<'_, T> { + RingBufferIter { + index: 0, + buffer: self, + } + } +} + +impl IntoIterator for RingBuffer { + type Item = T; + type IntoIter = OwnedRingBufferIter; + + fn into_iter(self) -> OwnedRingBufferIter + where + T: Default, + { + OwnedRingBufferIter { + index: 0, + buffer: self, + } + } +} + +pub struct OwnedRingBufferIter { + buffer: RingBuffer, + index: usize, +} + +impl Iterator for OwnedRingBufferIter { + type Item = T; + + fn next(&mut self) -> Option { + if self.index == self.buffer.len() { + return None; + } + + let ii = (self.index + self.buffer.i) % self.buffer.len(); + let item = std::mem::take(&mut self.buffer.data[ii]); + self.index += 1; + Some(item) + } +} + +pub struct RingBufferIter<'a, T> { + buffer: &'a RingBuffer, + index: usize, +} + +impl<'a, T> Iterator for RingBufferIter<'a, T> { + type Item = &'a T; + + fn next(&mut self) -> Option { + if self.index == self.buffer.len() { + return None; + } + + let ii = (self.index + self.buffer.i) % self.buffer.len(); + let item = &self.buffer.data[ii]; + self.index += 1; + Some(item) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_inserts() { + let mut rb = RingBuffer::new(3); + assert_eq!(rb.capacity(), 3); + assert!(!rb.is_full()); + assert_eq!(rb.len(), 0); + assert_eq!(rb.iter().copied().count(), 0); + + rb.push(1); + assert!(!rb.is_full()); + assert_eq!(rb.len(), 1); + assert_eq!(rb.iter().copied().collect::>(), vec![1]); + + rb.push(2); + assert!(!rb.is_full()); + assert_eq!(rb.len(), 2); + assert_eq!(rb.iter().copied().collect::>(), vec![1, 2]); + + rb.push(3); + assert!(rb.is_full()); + assert_eq!(rb.len(), 3); + assert_eq!(rb.iter().copied().collect::>(), vec![1, 2, 3]); + + rb.push(4); + assert!(rb.is_full()); + assert_eq!(rb.len(), 3); + assert_eq!(rb.iter().copied().collect::>(), vec![2, 3, 4]); + + assert_eq!(rb.into_iter().collect::>(), vec![2, 3, 4]); + } +} diff --git a/cli/src/util/sync.rs b/cli/src/util/sync.rs index 5f33419488a..8b653cd2d53 100644 --- a/cli/src/util/sync.rs +++ b/cli/src/util/sync.rs @@ -2,38 +2,60 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -use tokio::sync::watch::{ - self, - error::{RecvError, SendError}, +use async_trait::async_trait; +use std::{marker::PhantomData, sync::Arc}; +use tokio::sync::{ + broadcast, mpsc, + watch::{self, error::RecvError}, }; #[derive(Clone)] pub struct Barrier(watch::Receiver>) where - T: Copy; + T: Clone; impl Barrier where - T: Copy, + T: Clone, { /// Waits for the barrier to be closed, returning a value if one was sent. pub async fn wait(&mut self) -> Result { loop { self.0.changed().await?; - if let Some(v) = *(self.0.borrow()) { + if let Some(v) = self.0.borrow().clone() { return Ok(v); } } } + + /// Gets whether the barrier is currently open + pub fn is_open(&self) -> bool { + self.0.borrow().is_some() + } } -pub struct BarrierOpener(watch::Sender>); +#[async_trait] +impl Receivable for Barrier { + async fn recv_msg(&mut self) -> Option { + self.wait().await.ok() + } +} -impl BarrierOpener { - /// Closes the barrier. - pub fn open(self, value: T) -> Result<(), SendError>> { - self.0.send(Some(value)) +#[derive(Clone)] +pub struct BarrierOpener(Arc>>); + +impl BarrierOpener { + /// Opens the barrier. + pub fn open(&self, value: T) { + self.0.send_if_modified(|v| { + if v.is_none() { + *v = Some(value); + true + } else { + false + } + }); } } @@ -44,7 +66,119 @@ where T: Copy, { let (closed_tx, closed_rx) = watch::channel(None); - (Barrier(closed_rx), BarrierOpener(closed_tx)) + (Barrier(closed_rx), BarrierOpener(Arc::new(closed_tx))) +} + +/// Type that can receive messages in an async way. +#[async_trait] +pub trait Receivable { + async fn recv_msg(&mut self) -> Option; +} + +// todo: ideally we would use an Arc in the broadcast::Receiver to avoid having +// to clone bytes everywhere, requires updating rpc consumers as well. +#[async_trait] +impl Receivable for broadcast::Receiver { + async fn recv_msg(&mut self) -> Option { + loop { + match self.recv().await { + Ok(v) => return Some(v), + Err(broadcast::error::RecvError::Lagged(_)) => continue, + Err(broadcast::error::RecvError::Closed) => return None, + } + } + } +} + +#[async_trait] +impl Receivable for mpsc::UnboundedReceiver { + async fn recv_msg(&mut self) -> Option { + self.recv().await + } +} + +#[async_trait] +impl Receivable for () { + async fn recv_msg(&mut self) -> Option { + futures::future::pending().await + } +} + +pub struct ConcatReceivable, B: Receivable> { + left: Option, + right: B, + _marker: PhantomData, +} + +impl, B: Receivable> ConcatReceivable { + pub fn new(left: A, right: B) -> Self { + Self { + left: Some(left), + right, + _marker: PhantomData, + } + } +} + +#[async_trait] +impl, B: Send + Receivable> Receivable + for ConcatReceivable +{ + async fn recv_msg(&mut self) -> Option { + if let Some(left) = &mut self.left { + match left.recv_msg().await { + Some(v) => return Some(v), + None => { + self.left = None; + } + } + } + + return self.right.recv_msg().await; + } +} + +pub struct MergedReceivable, B: Receivable> { + left: Option, + right: Option, + _marker: PhantomData, +} + +impl, B: Receivable> MergedReceivable { + pub fn new(left: A, right: B) -> Self { + Self { + left: Some(left), + right: Some(right), + _marker: PhantomData, + } + } +} + +#[async_trait] +impl, B: Send + Receivable> Receivable + for MergedReceivable +{ + async fn recv_msg(&mut self) -> Option { + loop { + match (&mut self.left, &mut self.right) { + (Some(left), Some(right)) => { + tokio::select! { + left = left.recv_msg() => match left { + Some(v) => return Some(v), + None => { self.left = None; continue; }, + }, + right = right.recv_msg() => match right { + Some(v) => return Some(v), + None => { self.right = None; continue; }, + }, + } + } + (Some(a), None) => break a.recv_msg().await, + (None, Some(b)) => break b.recv_msg().await, + (None, None) => break None, + } + } + } } #[cfg(test)] @@ -60,7 +194,7 @@ mod tests { tx.send(barrier.wait().await.unwrap()).unwrap(); }); - opener.open(42).unwrap(); + opener.open(42); assert!(rx.await.unwrap() == 42); } @@ -71,7 +205,7 @@ mod tests { let (tx1, rx1) = tokio::sync::oneshot::channel::(); let (tx2, rx2) = tokio::sync::oneshot::channel::(); - opener.open(42).unwrap(); + opener.open(42); let mut b1 = barrier.clone(); tokio::spawn(async move { tx1.send(b1.wait().await.unwrap()).unwrap(); diff --git a/cli/src/util/tar.rs b/cli/src/util/tar.rs index 77dd67abbb0..248f63f9720 100644 --- a/cli/src/util/tar.rs +++ b/cli/src/util/tar.rs @@ -6,7 +6,7 @@ use crate::util::errors::{wrap, WrappedError}; use flate2::read::GzDecoder; use std::fs; -use std::io::{Seek, SeekFrom}; +use std::io::Seek; use std::path::{Path, PathBuf}; use tar::Archive; @@ -65,7 +65,7 @@ where // reset since skip logic read the tar already: tar_gz - .seek(SeekFrom::Start(0)) + .rewind() .map_err(|e| wrap(e, "error resetting seek position"))?; let tar = GzDecoder::new(tar_gz); diff --git a/cli/src/util/zipper.rs b/cli/src/util/zipper.rs index 84eec040b0e..0e9939d4db5 100644 --- a/cli/src/util/zipper.rs +++ b/cli/src/util/zipper.rs @@ -88,8 +88,13 @@ where use std::io::Read; use std::os::unix::ffi::OsStringExt; - if matches!(file.unix_mode(), Some(mode) if mode & (S_IFLNK as u32) == (S_IFLNK as u32)) - { + #[cfg(target_os = "macos")] + const S_IFLINK_32: u32 = S_IFLNK as u32; + + #[cfg(target_os = "linux")] + const S_IFLINK_32: u32 = S_IFLNK; + + if matches!(file.unix_mode(), Some(mode) if mode & S_IFLINK_32 == S_IFLINK_32) { let mut link_to = Vec::new(); file.read_to_end(&mut link_to).map_err(|e| { wrap( diff --git a/extensions/configuration-editing/src/settingsDocumentHelper.ts b/extensions/configuration-editing/src/settingsDocumentHelper.ts index 6c52bb5a511..110494fdb3e 100644 --- a/extensions/configuration-editing/src/settingsDocumentHelper.ts +++ b/extensions/configuration-editing/src/settingsDocumentHelper.ts @@ -266,7 +266,7 @@ export class SettingsDocument { const languageOverrideRange = languageOverridesRanges.find(range => range.contains(position)); /** - * Skip if suggestsions are for first language override range + * Skip if suggestions are for first language override range * Since VSCode registers language overrides to the schema, JSON language server does suggestions for first language override. */ if (languageOverrideRange && !languageOverrideRange.isEqual(languageOverridesRanges[0])) { diff --git a/extensions/cpp/cgmanifest.json b/extensions/cpp/cgmanifest.json index 2a52ca43b94..03ec3e1ac14 100644 --- a/extensions/cpp/cgmanifest.json +++ b/extensions/cpp/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "jeff-hykin/better-cpp-syntax", "repositoryUrl": "https://github.com/jeff-hykin/better-cpp-syntax", - "commitHash": "7aef15d9203f0dfeaf075f0673ab3ab382dfb0b1" + "commitHash": "f1d127a8af2b184db570345f0bb179503c47fdf6" } }, "license": "MIT", diff --git a/extensions/cpp/syntaxes/cpp.embedded.macro.tmLanguage.json b/extensions/cpp/syntaxes/cpp.embedded.macro.tmLanguage.json index f5391a200a8..03c6f1ef93e 100644 --- a/extensions/cpp/syntaxes/cpp.embedded.macro.tmLanguage.json +++ b/extensions/cpp/syntaxes/cpp.embedded.macro.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/jeff-hykin/better-cpp-syntax/commit/7aef15d9203f0dfeaf075f0673ab3ab382dfb0b1", + "version": "https://github.com/jeff-hykin/better-cpp-syntax/commit/f1d127a8af2b184db570345f0bb179503c47fdf6", "name": "C++", "scopeName": "source.cpp.embedded.macro", "patterns": [ @@ -126,6 +126,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -158,6 +161,9 @@ }, { "include": "source.cpp#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -1723,6 +1729,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -1755,6 +1764,9 @@ }, { "include": "source.cpp#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -4243,6 +4255,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -4275,6 +4290,9 @@ }, { "include": "source.cpp#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -4894,6 +4912,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -4926,6 +4947,9 @@ }, { "include": "source.cpp#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -6216,6 +6240,9 @@ "name": "comment.block.cpp punctuation.definition.comment.end.cpp" } } + }, + { + "include": "#ever_present_context" } ] }, @@ -6517,6 +6544,9 @@ }, { "include": "#evaluation_context" + }, + { + "include": "#ever_present_context" } ] }, diff --git a/extensions/cpp/syntaxes/cpp.tmLanguage.json b/extensions/cpp/syntaxes/cpp.tmLanguage.json index 6f7699cb2c3..5c1dd863ba4 100644 --- a/extensions/cpp/syntaxes/cpp.tmLanguage.json +++ b/extensions/cpp/syntaxes/cpp.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/jeff-hykin/better-cpp-syntax/commit/7aef15d9203f0dfeaf075f0673ab3ab382dfb0b1", + "version": "https://github.com/jeff-hykin/better-cpp-syntax/commit/f1d127a8af2b184db570345f0bb179503c47fdf6", "name": "C++", "scopeName": "source.cpp", "patterns": [ @@ -163,6 +163,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -195,6 +198,9 @@ }, { "include": "#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -1982,6 +1988,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -2014,6 +2023,9 @@ }, { "include": "#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -5222,6 +5234,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -5254,6 +5269,9 @@ }, { "include": "#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -6431,6 +6449,9 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, @@ -6463,6 +6484,9 @@ }, { "include": "#number_literal" + }, + { + "include": "#ever_present_context" } ] }, @@ -9063,6 +9087,9 @@ "name": "comment.block.cpp punctuation.definition.comment.end.cpp" } } + }, + { + "include": "#ever_present_context" } ] }, @@ -9860,6 +9887,9 @@ }, { "include": "#evaluation_context" + }, + { + "include": "#ever_present_context" } ] }, diff --git a/extensions/csharp/cgmanifest.json b/extensions/csharp/cgmanifest.json index 494aff45567..733388a98a1 100644 --- a/extensions/csharp/cgmanifest.json +++ b/extensions/csharp/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "dotnet/csharp-tmLanguage", "repositoryUrl": "https://github.com/dotnet/csharp-tmLanguage", - "commitHash": "5e7dd90d2af9817b0dfb614b21c79a3e81882d9f" + "commitHash": "878aefe73f942ac68dc4a46a0f154661bcb9eff4" } }, "license": "MIT", diff --git a/extensions/csharp/syntaxes/csharp.tmLanguage.json b/extensions/csharp/syntaxes/csharp.tmLanguage.json index 6c5db82f06c..27af054bc3b 100644 --- a/extensions/csharp/syntaxes/csharp.tmLanguage.json +++ b/extensions/csharp/syntaxes/csharp.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/dotnet/csharp-tmLanguage/commit/5e7dd90d2af9817b0dfb614b21c79a3e81882d9f", + "version": "https://github.com/dotnet/csharp-tmLanguage/commit/878aefe73f942ac68dc4a46a0f154661bcb9eff4", "name": "C#", "scopeName": "source.cs", "patterns": [ @@ -57,10 +57,10 @@ "script-top-level": { "patterns": [ { - "include": "#method-declaration" + "include": "#statement" }, { - "include": "#statement" + "include": "#method-declaration" }, { "include": "#punctuation-semicolon" @@ -91,10 +91,10 @@ "include": "#interface-declaration" }, { - "include": "#record-declaration" + "include": "#struct-declaration" }, { - "include": "#struct-declaration" + "include": "#record-declaration" }, { "include": "#attribute-section" @@ -381,13 +381,19 @@ "using-directive": { "patterns": [ { - "begin": "\\b(using)\\b\\s+(static)\\s+", + "begin": "(\\b(global)\\b\\s+)?\\b(using)\\b\\s+(static)\\b\\s+(\\b(unsafe)\\b\\s+)?", "beginCaptures": { - "1": { + "2": { + "name": "keyword.other.global.cs" + }, + "3": { "name": "keyword.other.using.cs" }, - "2": { + "4": { "name": "keyword.other.static.cs" + }, + "6": { + "name": "storage.modifier.cs" } }, "end": "(?=;)", @@ -398,12 +404,18 @@ ] }, { - "begin": "\\b(using)\\s+(?=(@?[_[:alpha:]][_[:alnum:]]*)\\s*=)", + "begin": "(\\b(global)\\b\\s+)?\\b(using)\\b\\s+(\\b(unsafe)\\b\\s+)?(?=(@?[_[:alpha:]][_[:alnum:]]*)\\s*=)", "beginCaptures": { - "1": { + "2": { + "name": "keyword.other.global.cs" + }, + "3": { "name": "keyword.other.using.cs" }, - "2": { + "5": { + "name": "storage.modifier.cs" + }, + "6": { "name": "entity.name.type.alias.cs" } }, @@ -421,9 +433,12 @@ ] }, { - "begin": "\\b(using)\\s*", + "begin": "(\\b(global)\\b\\s+)?\\b(using)\\s*(?!\\(|\\s|var)", "beginCaptures": { - "1": { + "2": { + "name": "keyword.other.global.cs" + }, + "3": { "name": "keyword.other.using.cs" } }, @@ -574,23 +589,26 @@ }, "storage-modifier": { "name": "storage.modifier.cs", - "match": "(? e.affectsConfiguration(setting)) ) { - updateAutoAttach(State.Disabled); - updateAutoAttach(readCurrentState()); + refreshAutoAttachVars(); } }), ); @@ -85,6 +85,11 @@ export async function deactivate(): Promise { await destroyAttachServer(); } +function refreshAutoAttachVars() { + updateAutoAttach(State.Disabled); + updateAutoAttach(readCurrentState()); +} + function getDefaultScope(info: ReturnType) { if (!info) { return vscode.ConfigurationTarget.Global; @@ -204,8 +209,22 @@ async function createAttachServer(context: vscode.ExtensionContext) { return undefined; } - server = createServerInner(ipcAddress).catch(err => { - console.error(err); + server = createServerInner(ipcAddress).catch(async err => { + console.error('[debug-auto-launch] Error creating auto attach server: ', err); + + if (process.platform !== 'win32') { + // On macOS, and perhaps some Linux distros, the temporary directory can + // sometimes change. If it looks like that's the cause of a listener + // error, automatically refresh the auto attach vars. + try { + await fs.access(dirname(ipcAddress)); + } catch { + console.error('[debug-auto-launch] Refreshing variables from error'); + refreshAutoAttachVars(); + return undefined; + } + } + return undefined; }); diff --git a/extensions/debug-server-ready/src/extension.ts b/extensions/debug-server-ready/src/extension.ts index d5f51150680..307b5e25475 100644 --- a/extensions/debug-server-ready/src/extension.ts +++ b/extensions/debug-server-ready/src/extension.ts @@ -308,8 +308,8 @@ class ServerReadyDetector extends vscode.Disposable { export function activate(context: vscode.ExtensionContext) { - context.subscriptions.push(vscode.debug.onDidChangeActiveDebugSession(session => { - if (session && session.configuration.serverReadyAction) { + context.subscriptions.push(vscode.debug.onDidStartDebugSession(session => { + if (session.configuration.serverReadyAction) { const detector = ServerReadyDetector.start(session); if (detector) { ServerReadyDetector.startListeningTerminalData(); diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json index 2824dfdf669..1b791b48365 100644 --- a/extensions/emmet/package.json +++ b/extensions/emmet/package.json @@ -482,11 +482,10 @@ "@types/node": "16.x" }, "dependencies": { - "@emmetio/abbreviation": "^2.2.0", "@emmetio/css-parser": "ramya-rao-a/css-parser#vscode", "@emmetio/html-matcher": "^0.3.3", - "@emmetio/math-expression": "^1.0.4", - "@vscode/emmet-helper": "^2.3.0", + "@emmetio/math-expression": "^1.0.5", + "@vscode/emmet-helper": "^2.8.8", "image-size": "~1.0.0", "vscode-languageserver-textdocument": "^1.0.1" }, diff --git a/extensions/emmet/src/test/abbreviationAction.test.ts b/extensions/emmet/src/test/abbreviationAction.test.ts index 3f18a1ffc5d..17ccacfc94a 100644 --- a/extensions/emmet/src/test/abbreviationAction.test.ts +++ b/extensions/emmet/src/test/abbreviationAction.test.ts @@ -47,8 +47,6 @@ const invokeCompletionContext: CompletionContext = { }; suite('Tests for Expand Abbreviations (HTML)', () => { - const oldValueForExcludeLanguages = workspace.getConfiguration('emmet').inspect('excludeLanguages'); - const oldValueForIncludeLanguages = workspace.getConfiguration('emmet').inspect('includeLanguages'); teardown(closeAllEditors); test('Expand snippets (HTML)', () => { @@ -364,6 +362,7 @@ suite('Tests for Expand Abbreviations (HTML)', () => { }); test('Expand html when inside script tag with javascript type if js is mapped to html (HTML)', async () => { + const oldConfig = workspace.getConfiguration('emmet').inspect('includeLanguages')?.globalValue; await workspace.getConfiguration('emmet').update('includeLanguages', { 'javascript': 'html' }, ConfigurationTarget.Global); await withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => { editor.selection = new Selection(24, 10, 24, 10); @@ -374,12 +373,13 @@ suite('Tests for Expand Abbreviations (HTML)', () => { await expandPromise; assert.strictEqual(editor.document.getText(), htmlContents.replace('span.bye', '')); }); - return workspace.getConfiguration('emmet').update('includeLanguages', oldValueForIncludeLanguages || {}, ConfigurationTarget.Global); + await workspace.getConfiguration('emmet').update('includeLanguages', oldConfig, ConfigurationTarget.Global); }); test('Expand html in completion list when inside script tag with javascript type if js is mapped to html (HTML)', async () => { const abbreviation = 'span.bye'; const expandedText = ''; + const oldConfig = workspace.getConfiguration('emmet').inspect('includeLanguages')?.globalValue; await workspace.getConfiguration('emmet').update('includeLanguages', { 'javascript': 'html' }, ConfigurationTarget.Global); await withRandomFileEditor(htmlContents, 'html', async (editor, _doc) => { editor.selection = new Selection(24, 10, 24, 10); @@ -399,7 +399,7 @@ suite('Tests for Expand Abbreviations (HTML)', () => { assert.strictEqual(((emmetCompletionItem.documentation) || '').replace(/\|/g, ''), expandedText, `Docs of completion item doesnt match.`); return Promise.resolve(); }); - return workspace.getConfiguration('emmet').update('includeLanguages', oldValueForIncludeLanguages || {}, ConfigurationTarget.Global); + await workspace.getConfiguration('emmet').update('includeLanguages', oldConfig, ConfigurationTarget.Global); }); // test('No expanding when html is excluded in the settings', () => { @@ -411,9 +411,10 @@ suite('Tests for Expand Abbreviations (HTML)', () => { // }); test('No expanding when html is excluded in the settings in completion list', async () => { + const oldConfig = workspace.getConfiguration('emmet').inspect('excludeLanguages')?.globalValue; await workspace.getConfiguration('emmet').update('excludeLanguages', ['html'], ConfigurationTarget.Global); await testHtmlCompletionProvider(new Selection(9, 6, 9, 6), '', '', true); - return workspace.getConfiguration('emmet').update('excludeLanguages', oldValueForExcludeLanguages ? oldValueForExcludeLanguages.globalValue : undefined, ConfigurationTarget.Global); + await workspace.getConfiguration('emmet').update('excludeLanguages', oldConfig, ConfigurationTarget.Global); }); // test('No expanding when php (mapped syntax) is excluded in the settings', () => { diff --git a/extensions/emmet/yarn.lock b/extensions/emmet/yarn.lock index 1d9d3075850..f5321aede70 100644 --- a/extensions/emmet/yarn.lock +++ b/extensions/emmet/yarn.lock @@ -2,26 +2,19 @@ # yarn lockfile v1 -"@emmetio/abbreviation@^2.2.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.2.2.tgz#746762fd9e7a8c2ea604f580c62e3cfe250e6989" - integrity sha512-TtE/dBnkTCct8+LntkqVrwqQao6EnPAs1YN3cUgxOxTaBlesBCY37ROUAVZrRlG64GNnVShdl/b70RfAI3w5lw== +"@emmetio/abbreviation@^2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz#ed2b88fe37b972292d6026c7c540aaf887cecb6e" + integrity sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA== dependencies: - "@emmetio/scanner" "^1.0.0" + "@emmetio/scanner" "^1.0.4" -"@emmetio/abbreviation@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz#2b3c0383c1a4652f677d5b56fb3f1616fe16ef10" - integrity sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA== +"@emmetio/css-abbreviation@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz#b785313486eba6cb7eb623ad39378c4e1063dc00" + integrity sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw== dependencies: - "@emmetio/scanner" "^1.0.0" - -"@emmetio/css-abbreviation@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz#90362e8a1122ce3b76f6c3157907d30182f53f54" - integrity sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw== - dependencies: - "@emmetio/scanner" "^1.0.0" + "@emmetio/scanner" "^1.0.4" "@emmetio/css-parser@ramya-rao-a/css-parser#vscode": version "0.4.0" @@ -38,17 +31,17 @@ "@emmetio/stream-reader" "^2.0.0" "@emmetio/stream-reader-utils" "^0.1.0" -"@emmetio/math-expression@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@emmetio/math-expression/-/math-expression-1.0.4.tgz#cb657ed944f82b3728f863bf5ece1b1ff3ae7497" - integrity sha512-1m7y8/VeXCAfgFoPGTerbqCIadApcIINujd3TaM/LRLPPKiod8aT1PPmh542spnsUSsSnZJjbuF7xiO4WFA42g== +"@emmetio/math-expression@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@emmetio/math-expression/-/math-expression-1.0.5.tgz#d0cc52ed453a107bc9b19c5d71d1390d3aecbe48" + integrity sha512-qf5SXD/ViS04rXSeDg9CRGM10xLC9dVaKIbMHrrwxYr5LNB/C0rOfokhGSBwnVQKcidLmdRJeNWH1V1tppZ84Q== dependencies: - "@emmetio/scanner" "^1.0.0" + "@emmetio/scanner" "^1.0.4" -"@emmetio/scanner@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emmetio/scanner/-/scanner-1.0.0.tgz#065b2af6233fe7474d44823e3deb89724af42b5f" - integrity sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA== +"@emmetio/scanner@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@emmetio/scanner/-/scanner-1.0.4.tgz#e9cdc67194fd91f8b7eb141014be4f2d086c15f1" + integrity sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA== "@emmetio/stream-reader-utils@^0.1.0": version "0.1.0" @@ -65,24 +58,24 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== -"@vscode/emmet-helper@^2.3.0": - version "2.8.6" - resolved "https://registry.yarnpkg.com/@vscode/emmet-helper/-/emmet-helper-2.8.6.tgz#ee2fa52321d6af8a40310fd9d37b8590a4dabb18" - integrity sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ== +"@vscode/emmet-helper@^2.8.8": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@vscode/emmet-helper/-/emmet-helper-2.9.2.tgz#cd5d1e64e7138ad76300e8cba5fd84f1c03e13ee" + integrity sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg== dependencies: - emmet "^2.3.0" + emmet "^2.4.3" jsonc-parser "^2.3.0" vscode-languageserver-textdocument "^1.0.1" vscode-languageserver-types "^3.15.1" vscode-uri "^2.1.2" -emmet@^2.3.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/emmet/-/emmet-2.3.6.tgz#1d93c1ac03164da9ddf74864c1f341ed6ff6c336" - integrity sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A== +emmet@^2.4.3: + version "2.4.4" + resolved "https://registry.yarnpkg.com/emmet/-/emmet-2.4.4.tgz#801aad64659dc76f3003130db767d77a78ac298e" + integrity sha512-v8Mwpjym55CS3EjJgiCLWUB3J2HSR93jhzXW325720u8KvYxdI2voYLstW3pHBxFz54H6jFjayR9G4LfTG0q+g== dependencies: - "@emmetio/abbreviation" "^2.2.3" - "@emmetio/css-abbreviation" "^2.1.4" + "@emmetio/abbreviation" "^2.3.3" + "@emmetio/css-abbreviation" "^2.1.8" image-size@~1.0.0: version "1.0.0" @@ -114,9 +107,9 @@ vscode-languageserver-textdocument@^1.0.1: integrity sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A== vscode-languageserver-types@^3.15.1: - version "3.17.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" - integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== + version "3.17.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" + integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== vscode-uri@^2.1.2: version "2.1.2" diff --git a/extensions/esbuild-webview-common.js b/extensions/esbuild-webview-common.js new file mode 100644 index 00000000000..c7a20839947 --- /dev/null +++ b/extensions/esbuild-webview-common.js @@ -0,0 +1,90 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// @ts-check + +/** + * @fileoverview Common build script for extension scripts used in in webviews. + */ + +const path = require('path'); +const esbuild = require('esbuild'); + +/** + * @typedef {Partial & { + * entryPoints: string[] | Record | { in: string, out: string }[]; + * outdir: string; + * }} BuildOptions + */ + +/** + * Build the source code once using esbuild. + * + * @param {BuildOptions} options + * @param {(outDir: string) => unknown} [didBuild] + */ +async function build(options, didBuild) { + await esbuild.build({ + bundle: true, + minify: true, + sourcemap: false, + format: 'esm', + platform: 'browser', + target: ['es2020'], + ...options, + }); + + await didBuild?.(options.outdir); +} + +/** + * Build the source code once using esbuild, logging errors instead of throwing. + * + * @param {BuildOptions} options + * @param {(outDir: string) => unknown} [didBuild] + */ +async function tryBuild(options, didBuild) { + try { + await build(options, didBuild); + } catch (err) { + console.error(err); + } +} + +/** + * @param {{ + * srcDir: string; + * outdir: string; + * entryPoints: string[] | Record | { in: string, out: string }[]; + * additionalOptions?: Partial + * }} config + * @param {string[]} args + * @param {(outDir: string) => unknown} [didBuild] + */ +module.exports.run = async function (config, args, didBuild) { + let outdir = config.outdir; + const outputRootIndex = args.indexOf('--outputRoot'); + if (outputRootIndex >= 0) { + const outputRoot = args[outputRootIndex + 1]; + const outputDirName = path.basename(outdir); + outdir = path.join(outputRoot, outputDirName); + } + + /** @type {BuildOptions} */ + const resolvedOptions = { + entryPoints: config.entryPoints, + outdir, + ...(config.additionalOptions || {}), + }; + + const isWatch = args.indexOf('--watch') >= 0; + if (isWatch) { + await tryBuild(resolvedOptions, didBuild); + + const watcher = require('@parcel/watcher'); + watcher.subscribe(config.srcDir, () => tryBuild(resolvedOptions, didBuild)); + } else { + return build(resolvedOptions, didBuild).catch(() => process.exit(1)); + } +}; diff --git a/extensions/extension-editing/src/extensionLinter.ts b/extensions/extension-editing/src/extensionLinter.ts index 19b2c5a0e10..459bd9a8e16 100644 --- a/extensions/extension-editing/src/extensionLinter.ts +++ b/extensions/extension-editing/src/extensionLinter.ts @@ -10,8 +10,9 @@ import { URL } from 'url'; import { parseTree, findNodeAtLocation, Node as JsonNode, getNodeValue } from 'jsonc-parser'; import * as MarkdownItType from 'markdown-it'; -import { languages, workspace, Disposable, TextDocument, Uri, Diagnostic, Range, DiagnosticSeverity, Position, env, l10n } from 'vscode'; +import { commands, languages, workspace, Disposable, TextDocument, Uri, Diagnostic, Range, DiagnosticSeverity, Position, env, l10n } from 'vscode'; import { INormalizedVersion, normalizeVersion, parseVersion } from './extensionEngineValidation'; +import { JsonStringScanner } from './jsonReconstruct'; const product = JSON.parse(fs.readFileSync(path.join(env.appRoot, 'product.json'), { encoding: 'utf-8' })); const allowedBadgeProviders: string[] = (product.extensionAllowedBadgeProviders || []).map((s: string) => s.toLowerCase()); @@ -29,13 +30,13 @@ const svgsNotValid = l10n.t("SVGs are not a valid image source."); const embeddedSvgsNotValid = l10n.t("Embedded SVGs are not a valid image source."); const dataUrlsNotValid = l10n.t("Data URLs are not a valid image source."); const relativeUrlRequiresHttpsRepository = l10n.t("Relative image URLs require a repository with HTTPS protocol to be specified in the package.json."); -const relativeIconUrlRequiresHttpsRepository = l10n.t("An icon requires a repository with HTTPS protocol to be specified in this package.json."); const relativeBadgeUrlRequiresHttpsRepository = l10n.t("Relative badge URLs require a repository with HTTPS protocol to be specified in this package.json."); const apiProposalNotListed = l10n.t("This proposal cannot be used because for this extension the product defines a fixed set of API proposals. You can test your extension but before publishing you MUST reach out to the VS Code team."); const implicitActivationEvent = l10n.t("This activation event cannot be explicitly listed by your extension."); const redundantImplicitActivationEvent = l10n.t("This activation event can be removed as VS Code generates these automatically from your package.json contribution declarations."); const bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75 as VS Code will generate these automatically from your package.json contribution declarations."); const starActivation = l10n.t("Using '*' activation is usually a bad idea as it impacts performance."); +const parsingErrorHeader = l10n.t("Error parsing the when-clause:"); enum Context { ICON, @@ -110,15 +111,17 @@ export class ExtensionLinter { } private async lint() { - this.lintPackageJson(); - await this.lintReadme(); + await Promise.all([ + this.lintPackageJson(), + this.lintReadme() + ]); } - private lintPackageJson() { - this.packageJsonQ.forEach(document => { + private async lintPackageJson() { + for (const document of Array.from(this.packageJsonQ)) { this.packageJsonQ.delete(document); if (document.isClosed) { - return; + continue; } const diagnostics: Diagnostic[] = []; @@ -190,16 +193,88 @@ export class ExtensionLinter { } } } + + const whenClauseLinting = await this.lintWhenClauses(findNodeAtLocation(tree, ['contributes']), document); + diagnostics.push(...whenClauseLinting); } this.diagnosticsCollection.set(document.uri, diagnostics); - }); + } + } + + /** lints `when` and `enablement` clauses */ + private async lintWhenClauses(contributesNode: JsonNode | undefined, document: TextDocument): Promise { + if (!contributesNode) { + return []; + } + + const whenClauses: JsonNode[] = []; + + function findWhens(node: JsonNode | undefined, clauseName: string) { + if (node) { + switch (node.type) { + case 'property': + if (node.children && node.children.length === 2) { + const key = node.children[0]; + const value = node.children[1]; + switch (value.type) { + case 'string': + if (key.value === clauseName && typeof value.value === 'string' /* careful: `.value` MUST be a string 1) because a when/enablement clause is string; so also, type cast to string below is safe */) { + whenClauses.push(value); + } + case 'object': + case 'array': + findWhens(value, clauseName); + } + } + break; + case 'object': + case 'array': + if (node.children) { + node.children.forEach(n => findWhens(n, clauseName)); + } + } + } + } + + [ + findNodeAtLocation(contributesNode, ['menus']), + findNodeAtLocation(contributesNode, ['views']), + findNodeAtLocation(contributesNode, ['viewsWelcome']), + findNodeAtLocation(contributesNode, ['keybindings']), + ].forEach(n => findWhens(n, 'when')); + + findWhens(findNodeAtLocation(contributesNode, ['commands']), 'enablement'); + + const parseResults = await commands.executeCommand<{ errorMessage: string; offset: number; length: number }[][]>('_validateWhenClauses', whenClauses.map(w => w.value as string /* we make sure to capture only if `w.value` is string above */)); + + const diagnostics: Diagnostic[] = []; + for (let i = 0; i < parseResults.length; ++i) { + const whenClauseJSONNode = whenClauses[i]; + + const jsonStringScanner = new JsonStringScanner(document.getText(), whenClauseJSONNode.offset + 1); + + for (const error of parseResults[i]) { + const realOffset = jsonStringScanner.getOffsetInEncoded(error.offset); + const realOffsetEnd = jsonStringScanner.getOffsetInEncoded(error.offset + error.length); + const start = document.positionAt(realOffset /* +1 to account for the quote (I think) */); + const end = document.positionAt(realOffsetEnd); + const errMsg = `${parsingErrorHeader}\n\n${error.errorMessage}`; + const diagnostic = new Diagnostic(new Range(start, end), errMsg, DiagnosticSeverity.Error); + diagnostic.code = { + value: 'See docs', + target: Uri.parse('https://code.visualstudio.com/api/references/when-clause-contexts'), + }; + diagnostics.push(diagnostic); + } + } + return diagnostics; } private async lintReadme() { - for (const document of Array.from(this.readmeQ)) { + for (const document of this.readmeQ) { this.readmeQ.delete(document); if (document.isClosed) { - return; + continue; } const folder = this.getUriFolder(document.uri); @@ -382,11 +457,10 @@ export class ExtensionLinter { diagnostics.push(new Diagnostic(range, dataUrlsNotValid, DiagnosticSeverity.Warning)); } - if (!hasScheme && !info.hasHttpsRepository) { + if (!hasScheme && !info.hasHttpsRepository && context !== Context.ICON) { const range = new Range(document.positionAt(begin), document.positionAt(end)); const message = (() => { switch (context) { - case Context.ICON: return relativeIconUrlRequiresHttpsRepository; case Context.BADGE: return relativeBadgeUrlRequiresHttpsRepository; default: return relativeUrlRequiresHttpsRepository; } @@ -449,7 +523,8 @@ function parseImplicitActivationEvents(tree: JsonNode): Set { const languageContributions = findNodeAtLocation(tree, ['contributes', 'languages']); languageContributions?.children?.forEach(child => { const id = findNodeAtLocation(child, ['id']); - if (id && id.type === 'string') { + const configuration = findNodeAtLocation(child, ['configuration']); + if (id && id.type === 'string' && configuration && configuration.type === 'string') { activationEvents.add(`onLanguage:${id.value}`); } }); diff --git a/extensions/extension-editing/src/jsonReconstruct.ts b/extensions/extension-editing/src/jsonReconstruct.ts new file mode 100644 index 00000000000..41e2971ba3b --- /dev/null +++ b/extensions/extension-editing/src/jsonReconstruct.ts @@ -0,0 +1,183 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/** + * This class has a very specific purpose: + * + * It can return convert offset within a decoded JSON string to offset within the encoded JSON string. + */ +export class JsonStringScanner { + private resultChars = 0; + private pos = 0; + + /** + * + * @param text the encoded JSON string + * @param pos must not include ", ie must be `stringJSONNode.offset + 1` + */ + constructor(private readonly text: string, initialPos: number /* offset within `text` */) { + this.pos = initialPos; + } + + // note that we don't do bound checks here, because we know that the offset is within the string + getOffsetInEncoded(offsetDecoded: number) { + + let start = this.pos; + + while (true) { + if (this.resultChars > offsetDecoded) { + return start; + } + + const ch = this.text.charCodeAt(this.pos); + + if (ch === CharacterCodes.backslash) { + start = this.pos; + this.pos++; + + const ch2 = this.text.charCodeAt(this.pos++); + switch (ch2) { + case CharacterCodes.doubleQuote: + case CharacterCodes.backslash: + case CharacterCodes.slash: + case CharacterCodes.b: + case CharacterCodes.f: + case CharacterCodes.n: + case CharacterCodes.r: + case CharacterCodes.t: + this.resultChars += 1; + break; + case CharacterCodes.u: { + const ch3 = this.scanHexDigits(4, true); + if (ch3 >= 0) { + this.resultChars += String.fromCharCode(ch3).length; + } + break; + } + } + continue; + } + start = this.pos; + this.pos++; + this.resultChars++; + } + } + + scanHexDigits(count: number, exact?: boolean): number { + let digits = 0; + let value = 0; + while (digits < count || !exact) { + const ch = this.text.charCodeAt(this.pos); + if (ch >= CharacterCodes._0 && ch <= CharacterCodes._9) { + value = value * 16 + ch - CharacterCodes._0; + } + else if (ch >= CharacterCodes.A && ch <= CharacterCodes.F) { + value = value * 16 + ch - CharacterCodes.A + 10; + } + else if (ch >= CharacterCodes.a && ch <= CharacterCodes.f) { + value = value * 16 + ch - CharacterCodes.a + 10; + } + else { + break; + } + this.pos++; + digits++; + } + if (digits < count) { + value = -1; + } + return value; + } +} + + +const enum CharacterCodes { + lineFeed = 0x0A, // \n + carriageReturn = 0x0D, // \r + + space = 0x0020, // " " + + _0 = 0x30, + _1 = 0x31, + _2 = 0x32, + _3 = 0x33, + _4 = 0x34, + _5 = 0x35, + _6 = 0x36, + _7 = 0x37, + _8 = 0x38, + _9 = 0x39, + + a = 0x61, + b = 0x62, + c = 0x63, + d = 0x64, + e = 0x65, + f = 0x66, + g = 0x67, + h = 0x68, + i = 0x69, + j = 0x6A, + k = 0x6B, + l = 0x6C, + m = 0x6D, + n = 0x6E, + o = 0x6F, + p = 0x70, + q = 0x71, + r = 0x72, + s = 0x73, + t = 0x74, + u = 0x75, + v = 0x76, + w = 0x77, + x = 0x78, + y = 0x79, + z = 0x7A, + + A = 0x41, + B = 0x42, + C = 0x43, + D = 0x44, + E = 0x45, + F = 0x46, + G = 0x47, + H = 0x48, + I = 0x49, + J = 0x4A, + K = 0x4B, + L = 0x4C, + M = 0x4D, + N = 0x4E, + O = 0x4F, + P = 0x50, + Q = 0x51, + R = 0x52, + S = 0x53, + T = 0x54, + U = 0x55, + V = 0x56, + W = 0x57, + X = 0x58, + Y = 0x59, + Z = 0x5a, + + asterisk = 0x2A, // * + backslash = 0x5C, // \ + closeBrace = 0x7D, // } + closeBracket = 0x5D, // ] + colon = 0x3A, // : + comma = 0x2C, // , + dot = 0x2E, // . + doubleQuote = 0x22, // " + minus = 0x2D, // - + openBrace = 0x7B, // { + openBracket = 0x5B, // [ + plus = 0x2B, // + + slash = 0x2F, // / + + formFeed = 0x0C, // \f + tab = 0x09, // \t +} diff --git a/extensions/fsharp/cgmanifest.json b/extensions/fsharp/cgmanifest.json index a3f2c2601b8..30868b0b969 100644 --- a/extensions/fsharp/cgmanifest.json +++ b/extensions/fsharp/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "ionide/ionide-fsgrammar", "repositoryUrl": "https://github.com/ionide/ionide-fsgrammar", - "commitHash": "713cd4a34e7729e444cf85ae287dd94c19e34337" + "commitHash": "71b1ead8c99715f6c994115ebab7ee4a14cf0c59" } }, "license": "MIT", diff --git a/extensions/fsharp/syntaxes/fsharp.tmLanguage.json b/extensions/fsharp/syntaxes/fsharp.tmLanguage.json index 9d1f8c1c82f..ceb5a4c1a27 100644 --- a/extensions/fsharp/syntaxes/fsharp.tmLanguage.json +++ b/extensions/fsharp/syntaxes/fsharp.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/ionide/ionide-fsgrammar/commit/713cd4a34e7729e444cf85ae287dd94c19e34337", + "version": "https://github.com/ionide/ionide-fsgrammar/commit/71b1ead8c99715f6c994115ebab7ee4a14cf0c59", "name": "fsharp", "scopeName": "source.fsharp", "patterns": [ @@ -241,7 +241,7 @@ "match": "\\b(private|to|public|internal|function|yield!|yield|class|exception|match|delegate|of|new|in|as|if|then|else|elif|for|begin|end|inherit|do|let\\!|return\\!|return|interface|with|abstract|enum|member|try|finally|and|when|or|use|use\\!|struct|while|mutable|assert|base|done|downcast|downto|extern|fixed|global|lazy|upcast|not)(?!')\\b" }, { - "name": "keyword.fsharp", + "name": "keyword.symbol.fsharp", "match": ":" }, { @@ -488,7 +488,7 @@ "end": "\\s*(?=(->))", "beginCaptures": { "1": { - "name": "keyword.symbol.arrow.fsharp" + "name": "keyword.symbol.fsharp" } }, "endCaptures": { @@ -607,7 +607,7 @@ "constants": { "patterns": [ { - "name": "constant.language.unit.fsharp", + "name": "keyword.symbol.fsharp", "match": "\\(\\)" }, { @@ -624,7 +624,7 @@ }, { "name": "constant.other.fsharp", - "match": "\\b(null|unit|void)\\b" + "match": "\\b(null|void)\\b" } ] }, @@ -643,7 +643,7 @@ "name": "support.function.attribute.fsharp" }, "5": { - "name": "keyword.fsharp" + "name": "keyword.symbol.fsharp" } }, "endCaptures": { @@ -813,7 +813,7 @@ "match": "(->)\\s*(\\()?\\s*([?[:alpha:]0-9'`^._ ]+)*", "captures": { "1": { - "name": "keyword.symbol.fsharp" + "name": "keyword.symbol.arrow.fsharp" }, "2": { "name": "keyword.symbol.fsharp" @@ -929,7 +929,7 @@ { "name": "binding.fsharp", "begin": "\\b(let mutable|static let mutable|static let|let inline|let|and|member val|static member inline|static member|default|member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?", - "end": "\\s*(with\\b|=|\\n+=|(?<=\\=))", + "end": "\\s*((with\\b)|(=|\\n+=|(?<=\\=)))", "beginCaptures": { "1": { "name": "keyword.fsharp" @@ -948,8 +948,11 @@ } }, "endCaptures": { - "1": { + "2": { "name": "keyword.fsharp" + }, + "3": { + "name": "keyword.symbol.fsharp" } }, "patterns": [ @@ -969,7 +972,7 @@ }, "endCaptures": { "1": { - "name": "keyword.fsharp" + "name": "keyword.symbol.fsharp" } }, "patterns": [ @@ -989,7 +992,7 @@ }, "endCaptures": { "1": { - "name": "keyword.fsharp" + "name": "keyword.symbol.fsharp" } }, "patterns": [ @@ -1034,12 +1037,12 @@ "name": "keyword.fsharp" }, "2": { - "name": "keyword.fsharp" + "name": "keyword.symbol.fsharp" } }, "endCaptures": { "1": { - "name": "keyword.fsharp" + "name": "keyword.symbol.fsharp" } }, "patterns": [ @@ -1110,19 +1113,19 @@ }, { "name": "keyword.fsharp", - "match": "\\b(private|to|public|internal|function|class|exception|delegate|of|as|begin|end|inherit|let!|interface|abstract|enum|member|and|when|or|use|use\\!|struct|mutable|assert|base|done|downcast|downto|extern|fixed|global|lazy|upcast|not)(?!')\\b" + "match": "\\b(private|to|public|internal|function|class|exception|delegate|of|new|as|begin|end|inherit|let!|interface|abstract|enum|member|and|when|or|use|use\\!|struct|mutable|assert|base|done|downcast|downto|extern|fixed|global|lazy|upcast|not)(?!')\\b" }, { "name": "keyword.control", "match": "\\b(match|yield|yield!|with|if|then|else|elif|for|in|return!|return|try|finally|while|do)(?!')\\b" }, { - "name": "keyword.symbol.new", - "match": "\\b(new)\\b" + "name": "keyword.symbol.arrow.fsharp", + "match": "(\\->|\\<\\-)" }, { "name": "keyword.symbol.fsharp", - "match": "(&&&|\\|\\|\\||\\^\\^\\^|~~~|<<<|>>>|\\|>|\\->|\\<\\-|:>|:\\?>|:|\\[|\\]|\\;|<>|=|@|\\|\\||&&|{|}|\\||_|\\.\\.|\\,|\\+|\\-|\\*|\\/|\\^|\\!|\\>|\\>\\=|\\>\\>|\\<|\\<\\=|\\(|\\)|\\<\\<)" + "match": "(&&&|\\|\\|\\||\\^\\^\\^|~~~|<<<|>>>|\\|>|:>|:\\?>|:|\\[|\\]|\\;|<>|=|@|\\|\\||&&|{|}|\\||_|\\.\\.|\\,|\\+|\\-|\\*|\\/|\\^|\\!|\\>|\\>\\=|\\>\\>|\\<|\\<\\=|\\(|\\)|\\<\\<)" } ] }, @@ -1208,7 +1211,7 @@ "name": "entity.name.type.namespace.fsharp" }, "3": { - "name": "punctuation.separator.namespace-definition.fsharp" + "name": "keyword.symbol.fsharp" }, "4": { "name": "entity.name.section.fsharp" @@ -1324,7 +1327,7 @@ "variables": { "patterns": [ { - "name": "constant.language.unit.fsharp", + "name": "keyword.symbol.fsharp", "match": "\\(\\)" }, { @@ -1347,7 +1350,7 @@ "end": "(>)", "beginCaptures": { "1": { - "name": "keyword.symbol.fsharp" + "name": "keyword.symbol.arrow.fsharp" }, "2": { "name": "entity.name.type.fsharp" @@ -1379,7 +1382,7 @@ "match": "\\s*(->)\\s*(?!with|get|set\\b)\\b([\\w0-9'`^._]+)", "captures": { "1": { - "name": "keyword.symbol.fsharp" + "name": "keyword.symbol.arrow.fsharp" }, "2": { "name": "entity.name.type.fsharp" @@ -1582,7 +1585,7 @@ "name": "keyword.symbol.fsharp" }, "7": { - "name": "constant.language.unit.fsharp" + "name": "keyword.symbol.fsharp" } }, "patterns": [ @@ -1605,12 +1608,12 @@ "end": "((?)", "beginCaptures": { "1": { - "name": "keyword.fsharp" + "name": "keyword.symbol.fsharp" } }, "endCaptures": { "1": { - "name": "keyword.fsharp" + "name": "keyword.symbol.fsharp" } }, "patterns": [ @@ -1671,9 +1674,6 @@ "match": "\\s*(private|internal|public)", "captures": { "1": { - "name": "keyword.symbol.fsharp" - }, - "2": { "name": "storage.modifier.fsharp" } } @@ -1792,7 +1792,7 @@ "patterns": [ { "name": "cexpr.fsharp", - "match": "\\b(async|seq|promise|task|maybe|asyncMaybe|controller|scope|application|pipeline)\\s*\\{", + "match": "\\b(async|seq|promise|task|maybe|asyncMaybe|controller|scope|application|pipeline)(?=\\s*\\{)", "captures": { "0": { "name": "keyword.fsharp" @@ -1832,4 +1832,4 @@ ] } } -} \ No newline at end of file +} diff --git a/extensions/git-base/src/api/api1.ts b/extensions/git-base/src/api/api1.ts index 7b261f10683..005a7930356 100644 --- a/extensions/git-base/src/api/api1.ts +++ b/extensions/git-base/src/api/api1.ts @@ -5,9 +5,9 @@ import { Disposable, commands } from 'vscode'; import { Model } from '../model'; -import { pickRemoteSource } from '../remoteSource'; +import { getRemoteSourceActions, pickRemoteSource } from '../remoteSource'; import { GitBaseExtensionImpl } from './extension'; -import { API, PickRemoteSourceOptions, PickRemoteSourceResult, RemoteSourceProvider } from './git-base'; +import { API, PickRemoteSourceOptions, PickRemoteSourceResult, RemoteSourceAction, RemoteSourceProvider } from './git-base'; export class ApiImpl implements API { @@ -17,6 +17,10 @@ export class ApiImpl implements API { return pickRemoteSource(this._model, options as any); } + getRemoteSourceActions(url: string): Promise { + return getRemoteSourceActions(this._model, url); + } + registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable { return this._model.registerRemoteSourceProvider(provider); } diff --git a/extensions/git-base/src/api/git-base.d.ts b/extensions/git-base/src/api/git-base.d.ts index 8510df6d043..53cac4d5c70 100644 --- a/extensions/git-base/src/api/git-base.d.ts +++ b/extensions/git-base/src/api/git-base.d.ts @@ -44,6 +44,15 @@ export interface PickRemoteSourceResult { readonly branch?: string; } +export interface RemoteSourceAction { + readonly label: string; + /** + * Codicon name + */ + readonly icon: string; + run(branch: string): void; +} + export interface RemoteSource { readonly name: string; readonly description?: string; @@ -70,6 +79,7 @@ export interface RemoteSourceProvider { readonly supportsQuery?: boolean; getBranches?(url: string): ProviderResult; + getRemoteSourceActions?(url: string): ProviderResult; getRecentRemoteSources?(query?: string): ProviderResult; getRemoteSources(query?: string): ProviderResult; } diff --git a/extensions/git-base/src/remoteSource.ts b/extensions/git-base/src/remoteSource.ts index 38729dc6194..05831eb010b 100644 --- a/extensions/git-base/src/remoteSource.ts +++ b/extensions/git-base/src/remoteSource.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { QuickPickItem, window, QuickPick, QuickPickItemKind, l10n } from 'vscode'; -import { RemoteSourceProvider, RemoteSource, PickRemoteSourceOptions, PickRemoteSourceResult } from './api/git-base'; +import { RemoteSourceProvider, RemoteSource, PickRemoteSourceOptions, PickRemoteSourceResult, RemoteSourceAction } from './api/git-base'; import { Model } from './model'; import { throttle, debounce } from './decorators'; @@ -81,11 +81,24 @@ class RemoteSourceProviderQuickPick { } } +export async function getRemoteSourceActions(model: Model, url: string): Promise { + const providers = model.getRemoteProviders(); + + const remoteSourceActions = []; + for (const provider of providers) { + const providerActions = await provider.getRemoteSourceActions?.(url); + if (providerActions?.length) { + remoteSourceActions.push(...providerActions); + } + } + + return remoteSourceActions; +} + export async function pickRemoteSource(model: Model, options: PickRemoteSourceOptions & { branch?: false | undefined }): Promise; export async function pickRemoteSource(model: Model, options: PickRemoteSourceOptions & { branch: true }): Promise; export async function pickRemoteSource(model: Model, options: PickRemoteSourceOptions = {}): Promise { const quickpick = window.createQuickPick<(QuickPickItem & { provider?: RemoteSourceProvider; url?: string })>(); - quickpick.ignoreFocusOut = true; quickpick.title = options.title; if (options.providerName) { diff --git a/extensions/git/package.json b/extensions/git/package.json index a6ce8854c93..45a221730ca 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -13,6 +13,7 @@ "diffCommand", "contribEditorContentMenu", "contribEditSessions", + "canonicalUriProvider", "contribViewsWelcome", "editSessionIdentityProvider", "quickDiffProvider", @@ -83,6 +84,12 @@ "category": "Git", "enablement": "!operationInProgress" }, + { + "command": "git.reopenClosedRepositories", + "title": "%command.reopenClosedRepositories%", + "category": "Git", + "enablement": "!operationInProgress && git.closedRepositoryCount != 0" + }, { "command": "git.close", "title": "%command.close%", @@ -1681,17 +1688,17 @@ { "command": "git.stageSelectedRanges", "group": "2_git@1", - "when": "isInDiffRightEditor && !isInEmbeddedDiffEditor && config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme =~ /^git$|^file$/" + "when": "isInDiffRightEditor && !isEmbeddedDiffEditor && config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme =~ /^git$|^file$/" }, { "command": "git.unstageSelectedRanges", "group": "2_git@2", - "when": "isInDiffRightEditor && !isInEmbeddedDiffEditor && config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme =~ /^git$|^file$/" + "when": "isInDiffRightEditor && !isEmbeddedDiffEditor && config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme =~ /^git$|^file$/" }, { "command": "git.revertSelectedRanges", "group": "2_git@3", - "when": "isInDiffRightEditor && !isInEmbeddedDiffEditor && config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme =~ /^git$|^file$/" + "when": "isInDiffRightEditor && !isEmbeddedDiffEditor && config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme =~ /^git$|^file$/" } ], "editor/content": [ @@ -1885,31 +1892,31 @@ "git.branch": [ { "command": "git.merge", - "group": "branch@1" + "group": "1_merge@1" }, { "command": "git.rebase", - "group": "branch@2" + "group": "1_merge@2" }, { "command": "git.branch", - "group": "branch@3" + "group": "2_branch@1" }, { "command": "git.branchFrom", - "group": "branch@4" + "group": "2_branch@2" }, { "command": "git.renameBranch", - "group": "branch@5" + "group": "3_modify@1" }, { "command": "git.deleteBranch", - "group": "branch@6" + "group": "3_modify@2" }, { "command": "git.publish", - "group": "branch@7" + "group": "4_publish@1" } ], "git.remotes": [ @@ -1925,40 +1932,40 @@ "git.stash": [ { "command": "git.stash", - "group": "stash@1" + "group": "1_stash@1" }, { "command": "git.stashIncludeUntracked", - "group": "stash@2" + "group": "1_stash@2" }, { "command": "git.stashStaged", "when": "gitVersion2.35", - "group": "stash@3" + "group": "1_stash@3" }, { "command": "git.stashApplyLatest", - "group": "stash@4" + "group": "2_apply@1" }, { "command": "git.stashApply", - "group": "stash@5" + "group": "2_apply@2" }, { "command": "git.stashPopLatest", - "group": "stash@6" + "group": "3_pop@1" }, { "command": "git.stashPop", - "group": "stash@7" + "group": "3_pop@2" }, { "command": "git.stashDrop", - "group": "stash@8" + "group": "4_drop@1" }, { "command": "git.stashDropAll", - "group": "stash@9" + "group": "4_drop@2" } ], "git.tags": [ @@ -2073,6 +2080,12 @@ "markdownDescription": "%config.autofetchPeriod%", "default": 180 }, + "git.defaultBranchName": { + "type": "string", + "markdownDescription": "%config.defaultBranchName%", + "default": "main", + "scope": "resource" + }, "git.branchPrefix": { "type": "string", "description": "%config.branchPrefix%", @@ -2700,6 +2713,14 @@ "default": "prompt", "markdownDescription": "%config.openRepositoryInParentFolders%", "scope": "resource" + }, + "git.similarityThreshold": { + "type": "number", + "default": 50, + "minimum": 0, + "maximum": 100, + "markdownDescription": "%config.similarityThreshold%", + "scope": "resource" } } }, @@ -2845,14 +2866,14 @@ { "view": "scm", "contents": "%view.workbench.scm.empty%", - "when": "config.git.enabled && !git.missing && workbenchState == empty && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0", + "when": "config.git.enabled && !git.missing && workbenchState == empty && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0", "enablement": "git.state == initialized", "group": "2_open@1" }, { "view": "scm", "contents": "%view.workbench.scm.emptyWorkspace%", - "when": "config.git.enabled && !git.missing && workbenchState == workspace && workspaceFolderCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0", + "when": "config.git.enabled && !git.missing && workbenchState == workspace && workspaceFolderCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0", "enablement": "git.state == initialized", "group": "2_open@1" }, @@ -2869,13 +2890,13 @@ { "view": "scm", "contents": "%view.workbench.scm.folder%", - "when": "config.git.enabled && !git.missing && git.state == initialized && workbenchState == folder && scmRepositoryCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && remoteName != 'codespaces'", + "when": "config.git.enabled && !git.missing && git.state == initialized && workbenchState == folder && scmRepositoryCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0 && remoteName != 'codespaces'", "group": "5_scm@1" }, { "view": "scm", "contents": "%view.workbench.scm.workspace%", - "when": "config.git.enabled && !git.missing && git.state == initialized && workbenchState == workspace && workspaceFolderCount != 0 && scmRepositoryCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && remoteName != 'codespaces'", + "when": "config.git.enabled && !git.missing && git.state == initialized && workbenchState == workspace && workspaceFolderCount != 0 && scmRepositoryCount == 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0 && remoteName != 'codespaces'", "group": "5_scm@1" }, { @@ -2898,6 +2919,16 @@ "contents": "%view.workbench.scm.unsafeRepositories%", "when": "config.git.enabled && !git.missing && git.state == initialized && git.unsafeRepositoryCount > 1" }, + { + "view": "scm", + "contents": "%view.workbench.scm.closedRepository%", + "when": "config.git.enabled && !git.missing && git.state == initialized && git.closedRepositoryCount == 1" + }, + { + "view": "scm", + "contents": "%view.workbench.scm.closedRepositories%", + "when": "config.git.enabled && !git.missing && git.state == initialized && git.closedRepositoryCount > 1" + }, { "view": "explorer", "contents": "%view.workbench.cloneRepository%", @@ -2921,14 +2952,14 @@ "jschardet": "3.0.0", "picomatch": "2.3.1", "vscode-uri": "^2.0.0", - "which": "^1.3.0" + "which": "3.0.1" }, "devDependencies": { "@types/byline": "4.2.31", "@types/mocha": "^9.1.1", "@types/node": "16.x", "@types/picomatch": "2.3.0", - "@types/which": "^1.0.28" + "@types/which": "3.0.0" }, "repository": { "type": "git", diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index f7721583196..74386ba1464 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -7,6 +7,7 @@ "command.cloneRecursive": "Clone (Recursive)", "command.init": "Initialize Repository", "command.openRepository": "Open Repository", + "command.reopenClosedRepositories": "Reopen Closed Repositories...", "command.close": "Close Repository", "command.refresh": "Refresh", "command.openChange": "Open Changes", @@ -131,6 +132,7 @@ "config.checkoutType.local": "Local branches", "config.checkoutType.tags": "Tags", "config.checkoutType.remote": "Remote branches", + "config.defaultBranchName": "The name of the default branch (ex: main, trunk, development) when initializing a new git repository. When set to empty, the default branch name configured in git will be used. **Note:** Requires git version `2.28.0` or later.", "config.branchPrefix": "Prefix used when creating a new branch.", "config.branchProtection": "List of protected branches. By default, a prompt is shown before changes are committed to a protected branch. The prompt can be controlled using the `#git.branchProtectionPrompt#` setting.", "config.branchProtectionPrompt": "Controls whether a prompt is being shown before changes are committed to a protected branch.", @@ -251,6 +253,7 @@ "config.publishBeforeContinueOn.always": "Always publish unpublished git state when using Continue Working On from a git repository", "config.publishBeforeContinueOn.never": "Never publish unpublished git state when using Continue Working On from a git repository", "config.publishBeforeContinueOn.prompt": "Prompt to publish unpublished git state when using Continue Working On from a git repository", + "config.similarityThreshold": "Controls the threshold of the similarity index (i.e. amount of additions/deletions compared to the file's size) for changes in a pair of added/deleted files to be considered a rename. **Note:** Requires git version `2.18.0` or later.", "submenu.explorer": "Git", "submenu.commit": "Commit", "submenu.commit.amend": "Amend", @@ -376,6 +379,22 @@ "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" ] }, + "view.workbench.scm.closedRepository": { + "message": "A git repository was found that was previously closed.\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\nTo learn more about how to use git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "comment": [ + "{Locked='](command:git.reopenClosedRepositories'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, + "view.workbench.scm.closedRepositories": { + "message": "Git repositories were found that were previously closed.\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\nTo learn more about how to use git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "comment": [ + "{Locked='](command:git.reopenClosedRepositories'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, "view.workbench.cloneRepository": { "message": "You can clone a repository locally.\n[Clone Repository](command:git.clone 'Clone a repository once the git extension has activated')", "comment": [ diff --git a/extensions/git/src/actionButton.ts b/extensions/git/src/actionButton.ts index e95e0afae0e..e0524d9dff6 100644 --- a/extensions/git/src/actionButton.ts +++ b/extensions/git/src/actionButton.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Command, Disposable, Event, EventEmitter, SourceControlActionButton, Uri, workspace, l10n } from 'vscode'; -import { Branch, Status } from './api/git'; +import { Branch, RefType, Status } from './api/git'; import { OperationKind } from './operation'; import { CommitCommandsCenter } from './postCommitCommands'; import { Repository } from './repository'; @@ -12,6 +12,7 @@ import { dispose } from './util'; interface ActionButtonState { readonly HEAD: Branch | undefined; + readonly isCheckoutInProgress: boolean; readonly isCommitInProgress: boolean; readonly isMergeInProgress: boolean; readonly isRebaseInProgress: boolean; @@ -39,6 +40,7 @@ export class ActionButtonCommand { readonly postCommitCommandCenter: CommitCommandsCenter) { this._state = { HEAD: undefined, + isCheckoutInProgress: false, isCommitInProgress: false, isMergeInProgress: false, isRebaseInProgress: false, @@ -49,6 +51,7 @@ export class ActionButtonCommand { repository.onDidRunGitStatus(this.onDidRunGitStatus, this, this.disposables); repository.onDidChangeOperations(this.onDidChangeOperations, this, this.disposables); + this.disposables.push(repository.onDidChangeBranchProtection(() => this._onDidChange.fire())); this.disposables.push(postCommitCommandCenter.onDidChange(() => this._onDidChange.fire())); const root = Uri.file(repository.root); @@ -59,8 +62,7 @@ export class ActionButtonCommand { this.onDidChangeSmartCommitSettings(); } - if (e.affectsConfiguration('git.branchProtection', root) || - e.affectsConfiguration('git.branchProtectionPrompt', root) || + if (e.affectsConfiguration('git.branchProtectionPrompt', root) || e.affectsConfiguration('git.postCommitCommand', root) || e.affectsConfiguration('git.rememberPostCommitCommand', root) || e.affectsConfiguration('git.showActionButton', root)) { @@ -136,7 +138,7 @@ export class ActionButtonCommand { const showActionButton = config.get<{ publish: boolean }>('showActionButton', { publish: true }); // Not a branch (tag, detached), branch does have an upstream, commit/merge/rebase is in progress, or the button is disabled - if (!this.state.HEAD?.name || this.state.HEAD?.upstream || this.state.isCommitInProgress || this.state.isMergeInProgress || this.state.isRebaseInProgress || !showActionButton.publish) { return undefined; } + if (this.state.HEAD?.type === RefType.Tag || !this.state.HEAD?.name || this.state.HEAD?.upstream || this.state.isCommitInProgress || this.state.isMergeInProgress || this.state.isRebaseInProgress || !showActionButton.publish) { return undefined; } // Button icon const icon = this.state.isSyncInProgress ? '$(sync~spin)' : '$(cloud-upload)'; @@ -154,7 +156,7 @@ export class ActionButtonCommand { l10n.t({ message: 'Publish Branch', comment: ['{Locked="Branch"}', 'Do not translate "Branch" as it is a git term'] })), arguments: [this.repository.sourceControl], }, - enabled: !this.state.isSyncInProgress + enabled: !this.state.isCheckoutInProgress && !this.state.isSyncInProgress }; } @@ -180,11 +182,15 @@ export class ActionButtonCommand { arguments: [this.repository.sourceControl], }, description: `${icon}${behind}${ahead}`, - enabled: !this.state.isSyncInProgress + enabled: !this.state.isCheckoutInProgress && !this.state.isSyncInProgress }; } private onDidChangeOperations(): void { + const isCheckoutInProgress + = this.repository.operations.isRunning(OperationKind.Checkout) || + this.repository.operations.isRunning(OperationKind.CheckoutTracking); + const isCommitInProgress = this.repository.operations.isRunning(OperationKind.Commit) || this.repository.operations.isRunning(OperationKind.PostCommitCommand) || @@ -195,7 +201,7 @@ export class ActionButtonCommand { this.repository.operations.isRunning(OperationKind.Push) || this.repository.operations.isRunning(OperationKind.Pull); - this.state = { ...this.state, isCommitInProgress, isSyncInProgress }; + this.state = { ...this.state, isCheckoutInProgress, isCommitInProgress, isSyncInProgress }; } private onDidChangeSmartCommitSettings(): void { diff --git a/extensions/git/src/api/api1.ts b/extensions/git/src/api/api1.ts index faa70b84949..375d07c4198 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 } 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'; @@ -294,9 +294,9 @@ export class ApiImpl implements API { return result ? new ApiRepository(result) : null; } - async init(root: Uri): Promise { + async init(root: Uri, options?: InitOptions): Promise { const path = root.fsPath; - await this._model.git.init(path); + await this._model.git.init(path, options); await this._model.openRepository(path); return this.getRepository(root) || null; } @@ -333,6 +333,10 @@ export class ApiImpl implements API { return this._model.registerPushErrorHandler(handler); } + registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable { + return this._model.registerBranchProtectionProvider(root, provider); + } + constructor(private _model: Model) { } } @@ -358,6 +362,7 @@ function getStatus(status: Status): string { case Status.UNTRACKED: return 'UNTRACKED'; case Status.IGNORED: return 'IGNORED'; case Status.INTENT_TO_ADD: return 'INTENT_TO_ADD'; + case Status.INTENT_TO_RENAME: return 'INTENT_TO_RENAME'; case Status.ADDED_BY_US: return 'ADDED_BY_US'; case Status.ADDED_BY_THEM: return 'ADDED_BY_THEM'; case Status.DELETED_BY_US: return 'DELETED_BY_US'; diff --git a/extensions/git/src/api/git-base.d.ts b/extensions/git/src/api/git-base.d.ts index dca68d13071..1eeb1739901 100644 --- a/extensions/git/src/api/git-base.d.ts +++ b/extensions/git/src/api/git-base.d.ts @@ -8,6 +8,7 @@ export { ProviderResult } from 'vscode'; export interface API { pickRemoteSource(options: PickRemoteSourceOptions): Promise; + getRemoteSourceActions(url: string): Promise; registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable; } @@ -31,9 +32,12 @@ export interface GitBaseExtension { export interface PickRemoteSourceOptions { readonly providerLabel?: (provider: RemoteSourceProvider) => string; - readonly urlLabel?: string; + readonly urlLabel?: string | ((url: string) => string); readonly providerName?: string; + readonly title?: string; + readonly placeholder?: string; readonly branch?: boolean; // then result is PickRemoteSourceResult + readonly showRecentSources?: boolean; } export interface PickRemoteSourceResult { @@ -41,20 +45,42 @@ export interface PickRemoteSourceResult { readonly branch?: string; } +export interface RemoteSourceAction { + readonly label: string; + /** + * Codicon name + */ + readonly icon: string; + run(branch: string): void; +} + export interface RemoteSource { readonly name: string; readonly description?: string; + readonly detail?: string; + /** + * Codicon name + */ + readonly icon?: string; readonly url: string | string[]; } +export interface RecentRemoteSource extends RemoteSource { + readonly timestamp: number; +} + export interface RemoteSourceProvider { readonly name: string; /** * Codicon name */ readonly icon?: string; + readonly label?: string; + readonly placeholder?: string; readonly supportsQuery?: boolean; getBranches?(url: string): ProviderResult; + getRemoteSourceActions?(url: string): ProviderResult; + getRecentRemoteSources?(query?: string): ProviderResult; getRemoteSources(query?: string): ProviderResult; } diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts index 0b428fa73c1..30b8c271103 100644 --- a/extensions/git/src/api/git.d.ts +++ b/extensions/git/src/api/git.d.ts @@ -78,6 +78,7 @@ export const enum Status { UNTRACKED, IGNORED, INTENT_TO_ADD, + INTENT_TO_RENAME, ADDED_BY_US, ADDED_BY_THEM, @@ -156,6 +157,10 @@ export interface FetchOptions { depth?: number; } +export interface InitOptions { + defaultBranch?: string; +} + export interface RefQuery { readonly contains?: string; readonly count?: number; @@ -274,6 +279,21 @@ export interface PushErrorHandler { handlePushError(repository: Repository, remote: Remote, refspec: string, error: Error & { gitErrorCode: GitErrorCodes }): Promise; } +export interface BranchProtection { + readonly remote: string; + readonly rules: BranchProtectionRule[]; +} + +export interface BranchProtectionRule { + readonly include?: string[]; + readonly exclude?: string[]; +} + +export interface BranchProtectionProvider { + onDidChangeBranchProtection: Event; + provideBranchProtection(): BranchProtection[]; +} + export type APIState = 'uninitialized' | 'initialized'; export interface PublishEvent { @@ -292,7 +312,7 @@ export interface API { toGitUri(uri: Uri, ref: string): Uri; getRepository(uri: Uri): Repository | null; - init(root: Uri): Promise; + init(root: Uri, options?: InitOptions): Promise; openRepository(root: Uri): Promise registerRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable; @@ -300,6 +320,7 @@ export interface API { registerCredentialsProvider(provider: CredentialsProvider): Disposable; registerPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable; registerPushErrorHandler(handler: PushErrorHandler): Disposable; + registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable; } export interface GitExtension { diff --git a/extensions/git/src/askpass.ts b/extensions/git/src/askpass.ts index ffd299bfdf3..7821ce112e8 100644 --- a/extensions/git/src/askpass.ts +++ b/extensions/git/src/askpass.ts @@ -18,6 +18,8 @@ export class Askpass implements IIPCHandler, ITerminalEnvironmentProvider { private cache = new Map(); private credentialsProviders = new Set(); + readonly featureDescription = 'git auth provider'; + constructor(private ipc?: IIPCServer) { if (ipc) { this.disposable = ipc.registerHandler('askpass', this); diff --git a/extensions/git/src/branchProtection.ts b/extensions/git/src/branchProtection.ts new file mode 100644 index 00000000000..0fbb3b7d4b1 --- /dev/null +++ b/extensions/git/src/branchProtection.ts @@ -0,0 +1,52 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Disposable, Event, EventEmitter, Uri, workspace } from 'vscode'; +import { BranchProtection, BranchProtectionProvider } from './api/git'; +import { dispose, filterEvent } from './util'; + +export interface IBranchProtectionProviderRegistry { + readonly onDidChangeBranchProtectionProviders: Event; + + getBranchProtectionProviders(root: Uri): BranchProtectionProvider[]; + registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable; +} + +export class GitBranchProtectionProvider implements BranchProtectionProvider { + + private readonly _onDidChangeBranchProtection = new EventEmitter(); + onDidChangeBranchProtection = this._onDidChangeBranchProtection.event; + + private branchProtection!: BranchProtection; + + private disposables: Disposable[] = []; + + constructor(private readonly repositoryRoot: Uri) { + const onDidChangeBranchProtectionEvent = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.branchProtection', repositoryRoot)); + onDidChangeBranchProtectionEvent(this.updateBranchProtection, this, this.disposables); + this.updateBranchProtection(); + } + + provideBranchProtection(): BranchProtection[] { + return [this.branchProtection]; + } + + private updateBranchProtection(): void { + const scopedConfig = workspace.getConfiguration('git', this.repositoryRoot); + const branchProtectionConfig = scopedConfig.get('branchProtection') ?? []; + const branchProtectionValues = Array.isArray(branchProtectionConfig) ? branchProtectionConfig : [branchProtectionConfig]; + + const branches = branchProtectionValues + .map(bp => typeof bp === 'string' ? bp.trim() : '') + .filter(bp => bp !== ''); + + this.branchProtection = { remote: '', rules: [{ include: branches }] }; + this._onDidChangeBranchProtection.fire(this.repositoryRoot); + } + + dispose(): void { + this.disposables = dispose(this.disposables); + } +} diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index a4cde48ee21..ef9b0a56fad 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -5,7 +5,7 @@ import * as os from 'os'; import * as path from 'path'; -import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind } from 'vscode'; +import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon } from 'vscode'; import TelemetryReporter from '@vscode/extension-telemetry'; import { uniqueNamesGenerator, adjectives, animals, colors, NumberDictionary } from '@joaomoreno/unique-names-generator'; import { Branch, ForcePushMode, GitErrorCodes, Ref, RefType, Status, CommitOptions, RemoteSourcePublisher, Remote } from './api/git'; @@ -17,16 +17,20 @@ import { fromGitUri, toGitUri, isGitUri, toMergeUris } from './uri'; import { grep, isDescendant, pathEquals, relativePath } from './util'; import { GitTimelineItem } from './timelineProvider'; import { ApiRepository } from './api/api1'; -import { pickRemoteSource } from './remoteSource'; +import { getRemoteSourceActions, pickRemoteSource } from './remoteSource'; +import { RemoteSourceAction } from './api/git-base'; class CheckoutItem implements QuickPickItem { protected get shortCommit(): string { return (this.ref.commit || '').substr(0, 8); } - get label(): string { return `${this.repository.isBranchProtected(this.ref.name ?? '') ? '$(lock)' : '$(git-branch)'} ${this.ref.name || this.shortCommit}`; } + get label(): string { return `${this.repository.isBranchProtected(this.ref) ? '$(lock)' : '$(git-branch)'} ${this.ref.name || this.shortCommit}`; } get description(): string { return this.shortCommit; } get refName(): string | undefined { return this.ref.name; } + get refRemote(): string | undefined { return this.ref.remote; } + get buttons(): QuickInputButton[] | undefined { return this._buttons; } + set buttons(newButtons: QuickInputButton[] | undefined) { this._buttons = newButtons; } - constructor(protected repository: Repository, protected ref: Ref) { } + constructor(protected repository: Repository, protected ref: Ref, protected _buttons?: QuickInputButton[]) { } async run(opts?: { detached?: boolean }): Promise { if (!this.ref.name) { @@ -192,9 +196,9 @@ class FetchAllRemotesItem implements QuickPickItem { } class RepositoryItem implements QuickPickItem { - get label(): string { - return `$(repo) ${this.path}`; - } + get label(): string { return `$(repo) ${getRepositoryLabel(this.path)}`; } + + get description(): string { return this.path; } constructor(public readonly path: string) { } } @@ -278,7 +282,54 @@ async function createCheckoutItems(repository: Repository, detached = false): Pr } } - return processors.reduce((r, p) => r.concat(...p.items), []); + const buttons = await getRemoteRefItemButtons(repository); + let fallbackRemoteButtons: RemoteSourceActionButton[] | undefined = []; + const remote = repository.remotes.find(r => r.pushUrl === repository.HEAD?.remote || r.fetchUrl === repository.HEAD?.remote) ?? repository.remotes[0]; + const remoteUrl = remote?.pushUrl ?? remote?.fetchUrl; + if (remoteUrl) { + fallbackRemoteButtons = buttons.get(remoteUrl); + } + + return processors.reduce((r, p) => r.concat(...p.items.map((item) => { + if (item.refRemote) { + const matchingRemote = repository.remotes.find((remote) => remote.name === item.refRemote); + const remoteUrl = matchingRemote?.pushUrl ?? matchingRemote?.fetchUrl; + if (remoteUrl) { + item.buttons = buttons.get(item.refRemote); + } + } + + item.buttons = fallbackRemoteButtons; + return item; + })), []); +} + +type RemoteSourceActionButton = { + iconPath: ThemeIcon; + tooltip: string; + actual: RemoteSourceAction; +}; + +async function getRemoteRefItemButtons(repository: Repository) { + // Compute actions for all known remotes + const remoteUrlsToActions = new Map(); + + const getButtons = async (remoteUrl: string) => (await getRemoteSourceActions(remoteUrl)).map((action) => ({ iconPath: new ThemeIcon(action.icon), tooltip: action.label, actual: action })); + + for (const remote of repository.remotes) { + if (remote.fetchUrl) { + const actions = remoteUrlsToActions.get(remote.fetchUrl) ?? []; + actions.push(...await getButtons(remote.fetchUrl)); + remoteUrlsToActions.set(remote.fetchUrl, actions); + } + if (remote.pushUrl && remote.pushUrl !== remote.fetchUrl) { + const actions = remoteUrlsToActions.get(remote.pushUrl) ?? []; + actions.push(...await getButtons(remote.pushUrl)); + remoteUrlsToActions.set(remote.pushUrl, actions); + } + } + + return remoteUrlsToActions; } class CheckoutProcessor { @@ -307,6 +358,19 @@ function getCheckoutProcessor(repository: Repository, type: string): CheckoutPro return undefined; } +function getRepositoryLabel(repositoryRoot: string): string { + const workspaceFolder = workspace.getWorkspaceFolder(Uri.file(repositoryRoot)); + return workspaceFolder?.uri.toString() === repositoryRoot ? workspaceFolder.name : path.basename(repositoryRoot); +} + +function compareRepositoryLabel(repositoryRoot1: string, repositoryRoot2: string): number { + return getRepositoryLabel(repositoryRoot1).localeCompare(getRepositoryLabel(repositoryRoot2)); +} + +function sanitizeBranchName(name: string, whitespaceChar: string): string { + return name ? name.trim().replace(/^-+/, '').replace(/^\.|\/\.|\.\.|~|\^|:|\/$|\.lock$|\.lock\/|\\|\*|\s|^\s*$|\.$|\[|\]$/g, whitespaceChar) : name; +} + function sanitizeRemoteName(name: string) { name = name.trim(); return name && name.replace(/^\.|\/\.|\.\.|~|\^|:|\/$|\.lock$|\.lock\/|\\|\*|\s|^\s*$|\.$|\[|\]$/g, '-'); @@ -686,15 +750,22 @@ export class CommandCenter { if (uri !== undefined) { // Launch desktop client if currently in web + let target = `${env.uriScheme}://vscode.git/clone?url=${encodeURIComponent(uri)}`; if (env.uiKind === UIKind.Web) { - let target = `${env.uriScheme}://vscode.git/clone?url=${encodeURIComponent(uri)}`; if (ref !== undefined) { target += `&ref=${encodeURIComponent(ref)}`; } return Uri.parse(target); } - // If already in desktop client, directly clone + // If already in desktop client but in a remote window, we need to force a new window + // so that the git extension can access the local filesystem for cloning + if (env.remoteName !== undefined) { + target += `&windowId=_blank`; + return Uri.parse(target); + } + + // Otherwise, directly clone void this.clone(uri, undefined, { ref: ref }); } } @@ -772,7 +843,11 @@ export class CommandCenter { } } - await this.git.init(repositoryPath); + const config = workspace.getConfiguration('git'); + const defaultBranchName = config.get('defaultBranchName', 'main'); + const branchWhitespaceChar = config.get('branchWhitespaceChar', '-'); + + await this.git.init(repositoryPath, { defaultBranch: sanitizeBranchName(defaultBranchName, branchWhitespaceChar) }); let message = l10n.t('Would you like to open the initialized repository?'); const open = l10n.t('Open'); @@ -821,7 +896,44 @@ export class CommandCenter { path = result[0].fsPath; } - await this.model.openRepository(path); + await this.model.openRepository(path, true); + } + + @command('git.reopenClosedRepositories', { repository: false }) + async reopenClosedRepositories(): Promise { + if (this.model.closedRepositories.length === 0) { + return; + } + + const closedRepositories: string[] = []; + + const title = l10n.t('Reopen Closed Repositories'); + const placeHolder = l10n.t('Pick a repository to reopen'); + + const allRepositoriesLabel = l10n.t('All Repositories'); + const allRepositoriesQuickPickItem: QuickPickItem = { label: allRepositoriesLabel }; + const repositoriesQuickPickItems: QuickPickItem[] = this.model.closedRepositories + .sort(compareRepositoryLabel).map(r => new RepositoryItem(r)); + + const items = this.model.closedRepositories.length === 1 ? [...repositoriesQuickPickItems] : + [...repositoriesQuickPickItems, { label: '', kind: QuickPickItemKind.Separator }, allRepositoriesQuickPickItem]; + + const repositoryItem = await window.showQuickPick(items, { title, placeHolder }); + if (!repositoryItem) { + return; + } + + if (repositoryItem === allRepositoriesQuickPickItem) { + // All Repositories + closedRepositories.push(...this.model.closedRepositories.values()); + } else { + // One Repository + closedRepositories.push((repositoryItem as RepositoryItem).path); + } + + for (const repository of closedRepositories) { + await this.model.openRepository(repository, true); + } } @command('git.close', { repository: true }) @@ -883,7 +995,7 @@ export class CommandCenter { const document = window.activeTextEditor?.document; // If the document doesn't match what we opened then don't attempt to select the range - // Additioanlly if there was no previous document we don't have information to select a range + // Additionally if there was no previous document we don't have information to select a range if (document?.uri.toString() !== uri.toString() || !activeTextEditor || !previousURI || !previousSelection) { continue; } @@ -2076,7 +2188,17 @@ export class CommandCenter { quickpick.items = picks; quickpick.busy = false; - const choice = await new Promise(c => quickpick.onDidAccept(() => c(quickpick.activeItems[0]))); + const choice = await new Promise(c => { + quickpick.onDidAccept(() => c(quickpick.activeItems[0])); + quickpick.onDidTriggerItemButton((e) => { + quickpick.hide(); + const button = e.button as QuickInputButton & { actual: RemoteSourceAction }; + const item = e.item as CheckoutItem; + if (button.actual && item.refName) { + button.actual.run(item.refRemote ? item.refName.substring(item.refRemote.length + 1) : item.refName); + } + }); + }); quickpick.hide(); if (!choice) { @@ -2179,9 +2301,6 @@ export class CommandCenter { const branchPrefix = config.get('branchPrefix')!; const branchWhitespaceChar = config.get('branchWhitespaceChar')!; const branchValidationRegex = config.get('branchValidationRegex')!; - const sanitize = (name: string) => name ? - name.trim().replace(/^-+/, '').replace(/^\.|\/\.|\.\.|~|\^|:|\/$|\.lock$|\.lock\/|\\|\*|\s|^\s*$|\.$|\[|\]$/g, branchWhitespaceChar) - : name; let rawBranchName = defaultName; @@ -2206,7 +2325,7 @@ export class CommandCenter { ignoreFocusOut: true, validateInput: (name: string) => { const validateName = new RegExp(branchValidationRegex); - const sanitizedName = sanitize(name); + const sanitizedName = sanitizeBranchName(name, branchWhitespaceChar); if (validateName.test(sanitizedName)) { // If the sanitized name that we will use is different than what is // in the input box, show an info message to the user informing them @@ -2224,7 +2343,7 @@ export class CommandCenter { }); } - return sanitize(rawBranchName || ''); + return sanitizeBranchName(rawBranchName || '', branchWhitespaceChar); } private async _branch(repository: Repository, defaultName?: string, from = false): Promise { @@ -3357,9 +3476,10 @@ export class CommandCenter { const allRepositoriesLabel = l10n.t('All Repositories'); const allRepositoriesQuickPickItem: QuickPickItem = { label: allRepositoriesLabel }; - const repositoriesQuickPickItems: QuickPickItem[] = Array.from(this.model.parentRepositories.keys()).sort().map(r => new RepositoryItem(r)); + const repositoriesQuickPickItems: QuickPickItem[] = this.model.parentRepositories + .sort(compareRepositoryLabel).map(r => new RepositoryItem(r)); - const items = this.model.parentRepositories.size === 1 ? [...repositoriesQuickPickItems] : + const items = this.model.parentRepositories.length === 1 ? [...repositoriesQuickPickItems] : [...repositoriesQuickPickItems, { label: '', kind: QuickPickItemKind.Separator }, allRepositoriesQuickPickItem]; const repositoryItem = await window.showQuickPick(items, { title, placeHolder }); @@ -3369,7 +3489,7 @@ export class CommandCenter { if (repositoryItem === allRepositoriesQuickPickItem) { // All Repositories - parentRepositories.push(...this.model.parentRepositories.keys()); + parentRepositories.push(...this.model.parentRepositories); } else { // One Repository parentRepositories.push((repositoryItem as RepositoryItem).path); @@ -3390,9 +3510,10 @@ export class CommandCenter { const allRepositoriesLabel = l10n.t('All Repositories'); const allRepositoriesQuickPickItem: QuickPickItem = { label: allRepositoriesLabel }; - const repositoriesQuickPickItems: QuickPickItem[] = Array.from(this.model.unsafeRepositories.keys()).sort().map(r => new RepositoryItem(r)); + const repositoriesQuickPickItems: QuickPickItem[] = this.model.unsafeRepositories + .sort(compareRepositoryLabel).map(r => new RepositoryItem(r)); - quickpick.items = this.model.unsafeRepositories.size === 1 ? [...repositoriesQuickPickItems] : + quickpick.items = this.model.unsafeRepositories.length === 1 ? [...repositoriesQuickPickItems] : [...repositoriesQuickPickItems, { label: '', kind: QuickPickItemKind.Separator }, allRepositoriesQuickPickItem]; quickpick.show(); @@ -3409,7 +3530,7 @@ export class CommandCenter { if (repositoryItem.label === allRepositoriesLabel) { // All Repositories - unsafeRepositories.push(...this.model.unsafeRepositories.keys()); + unsafeRepositories.push(...this.model.unsafeRepositories); } else { // One Repository unsafeRepositories.push((repositoryItem as RepositoryItem).path); @@ -3417,11 +3538,11 @@ export class CommandCenter { for (const unsafeRepository of unsafeRepositories) { // Mark as Safe - await this.git.addSafeDirectory(this.model.unsafeRepositories.get(unsafeRepository)!); + await this.git.addSafeDirectory(this.model.getUnsafeRepositoryPath(unsafeRepository)!); // Open Repository await this.model.openRepository(unsafeRepository); - this.model.unsafeRepositories.delete(unsafeRepository); + this.model.deleteUnsafeRepository(unsafeRepository); } } diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts index 7c8ee74043c..c630f00c712 100644 --- a/extensions/git/src/decorationProvider.ts +++ b/extensions/git/src/decorationProvider.ts @@ -131,7 +131,7 @@ class GitDecorationProvider implements FileDecorationProvider { bucket.set(r.rightUri.toString(), decoration); } - if (r.type === Status.INDEX_RENAMED) { + if (r.type === Status.INDEX_RENAMED || r.type === Status.INTENT_TO_RENAME) { bucket.set(r.resourceUri.toString(), decoration); } } diff --git a/extensions/git/src/editSessionIdentityProvider.ts b/extensions/git/src/editSessionIdentityProvider.ts index 3212b80f37b..6a0a31774a1 100644 --- a/extensions/git/src/editSessionIdentityProvider.ts +++ b/extensions/git/src/editSessionIdentityProvider.ts @@ -24,7 +24,7 @@ export class GitEditSessionIdentityProvider implements vscode.EditSessionIdentit this.providerRegistration.dispose(); } - async provideEditSessionIdentity(workspaceFolder: vscode.WorkspaceFolder, _token: vscode.CancellationToken): Promise { + async provideEditSessionIdentity(workspaceFolder: vscode.WorkspaceFolder, token: vscode.CancellationToken): Promise { await this.model.openRepository(path.dirname(workspaceFolder.uri.fsPath)); const repository = this.model.getRepository(workspaceFolder.uri); @@ -34,8 +34,11 @@ export class GitEditSessionIdentityProvider implements vscode.EditSessionIdentit return undefined; } + const remoteUrl = repository.remotes.find((remote) => remote.name === repository.HEAD?.upstream?.remote)?.pushUrl?.replace(/^(git@[^\/:]+)(:)/i, 'ssh://$1/'); + const remote = remoteUrl ? await vscode.workspace.getCanonicalUri(vscode.Uri.parse(remoteUrl), { targetScheme: 'https' }, token) : null; + return JSON.stringify({ - remote: repository.remotes.find((remote) => remote.name === repository.HEAD?.upstream?.remote)?.pushUrl ?? null, + remote: remote?.toString() ?? remoteUrl, ref: repository.HEAD?.upstream?.name ?? null, sha: repository.HEAD?.commit ?? null, }); diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index b8729a9e2d8..ab03a354d11 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -12,10 +12,10 @@ import * as which from 'which'; import { EventEmitter } from 'events'; import * as iconv from '@vscode/iconv-lite-umd'; import * as filetype from 'file-type'; -import { assign, groupBy, IDisposable, toDisposable, dispose, mkdirp, readBytes, detectUnicodeEncoding, Encoding, onceEvent, splitInChunks, Limiter, Versions, isWindows, pathEquals } from './util'; +import { assign, groupBy, IDisposable, toDisposable, dispose, mkdirp, readBytes, detectUnicodeEncoding, Encoding, onceEvent, splitInChunks, Limiter, Versions, isWindows, pathEquals, isMacintosh, isDescendant } from './util'; import { CancellationError, CancellationToken, ConfigurationChangeEvent, LogOutputChannel, Progress, Uri, workspace } from 'vscode'; import { detectEncoding } from './encoding'; -import { Ref, RefType, Branch, Remote, ForcePushMode, GitErrorCodes, LogOptions, Change, Status, CommitOptions, RefQuery } from './api/git'; +import { Ref, RefType, Branch, Remote, ForcePushMode, GitErrorCodes, LogOptions, Change, Status, CommitOptions, RefQuery, InitOptions } from './api/git'; import * as byline from 'byline'; import { StringDecoder } from 'string_decoder'; @@ -73,7 +73,7 @@ function findSpecificGit(path: string, onValidate: (path: string) => boolean): P const child = cp.spawn(path, ['--version']); child.stdout.on('data', (b: Buffer) => buffers.push(b)); child.on('error', cpErrorHandler(e)); - child.on('exit', code => code ? e(new Error('Not found')) : c({ path, version: parseVersion(Buffer.concat(buffers).toString('utf8').trim()) })); + child.on('close', code => code ? e(new Error('Not found')) : c({ path, version: parseVersion(Buffer.concat(buffers).toString('utf8').trim()) })); }); } @@ -129,9 +129,9 @@ function findSystemGitWin32(base: string, onValidate: (path: string) => boolean) return findSpecificGit(path.join(base, 'Git', 'cmd', 'git.exe'), onValidate); } -function findGitWin32InPath(onValidate: (path: string) => boolean): Promise { - const whichPromise = new Promise((c, e) => which('git.exe', (err, path) => err ? e(err) : c(path))); - return whichPromise.then(path => findSpecificGit(path, onValidate)); +async function findGitWin32InPath(onValidate: (path: string) => boolean): Promise { + const path = await which('git.exe'); + return findSpecificGit(path, onValidate); } function findGitWin32(onValidate: (path: string) => boolean): Promise { @@ -401,9 +401,14 @@ export class Git { return new Repository(this, repository, dotGit, logger); } - async init(repository: string): Promise { - await this.exec(repository, ['init']); - return; + async init(repository: string, options: InitOptions = {}): Promise { + const args = ['init']; + + if (options.defaultBranch && options.defaultBranch !== '' && this.compareGitVersionTo('2.28.0') !== -1) { + args.push('-b', options.defaultBranch); + } + + await this.exec(repository, args); } async clone(url: string, options: ICloneOptions, cancellationToken?: CancellationToken): Promise { @@ -472,18 +477,18 @@ export class Git { return folderPath; } - async getRepositoryRoot(repositoryPath: string): Promise { - const result = await this.exec(repositoryPath, ['rev-parse', '--show-toplevel']); + async getRepositoryRoot(pathInsidePossibleRepository: string): Promise { + const result = await this.exec(pathInsidePossibleRepository, ['rev-parse', '--show-toplevel']); // Keep trailing spaces which are part of the directory name - const repoPath = path.normalize(result.stdout.trimLeft().replace(/[\r\n]+$/, '')); + const repositoryRootPath = path.normalize(result.stdout.trimLeft().replace(/[\r\n]+$/, '')); if (isWindows) { // On Git 2.25+ if you call `rev-parse --show-toplevel` on a mapped drive, instead of getting the mapped // drive path back, you get the UNC path for the mapped drive. So we will try to normalize it back to the // mapped drive path, if possible - const repoUri = Uri.file(repoPath); - const pathUri = Uri.file(repositoryPath); + const repoUri = Uri.file(repositoryRootPath); + const pathUri = Uri.file(pathInsidePossibleRepository); if (repoUri.authority.length !== 0 && pathUri.authority.length === 0) { // eslint-disable-next-line local/code-no-look-behind-regex const match = /(?<=^\/?)([a-zA-Z])(?=:\/)/.exec(pathUri.path); @@ -515,7 +520,18 @@ export class Git { } } - return repoPath; + // Handle symbolic links + // Git 2.31 added the `--path-format` flag to rev-parse which + // allows us to get the relative path of the repository root + if (!pathEquals(pathInsidePossibleRepository, repositoryRootPath) && + !isDescendant(repositoryRootPath, pathInsidePossibleRepository) && + !isDescendant(pathInsidePossibleRepository, repositoryRootPath) && + this.compareGitVersionTo('2.31.0') !== -1) { + const relativePathResult = await this.exec(pathInsidePossibleRepository, ['rev-parse', '--path-format=relative', '--show-toplevel',]); + return path.resolve(pathInsidePossibleRepository, relativePathResult.stdout.trimLeft().replace(/[\r\n]+$/, '')); + } + + return repositoryRootPath; } async getRepositoryDotGit(repositoryPath: string): Promise<{ path: string; commonPath?: string }> { @@ -788,7 +804,7 @@ export class GitStatusParser { // space i++; - if (entry.x === 'R' || entry.x === 'C') { + if (entry.x === 'R' || entry.y === 'R' || entry.x === 'C') { lastIndex = raw.indexOf('\0', i); if (lastIndex === -1) { @@ -1995,7 +2011,7 @@ export class Repository { } } - async getStatus(opts?: { limit?: number; ignoreSubmodules?: boolean; untrackedChanges?: 'mixed' | 'separate' | 'hidden'; cancellationToken?: CancellationToken }): Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }> { + async getStatus(opts?: { limit?: number; ignoreSubmodules?: boolean; similarityThreshold?: number; untrackedChanges?: 'mixed' | 'separate' | 'hidden'; cancellationToken?: CancellationToken }): Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }> { if (opts?.cancellationToken && opts?.cancellationToken.isCancellationRequested) { throw new CancellationError(); } @@ -2015,6 +2031,11 @@ export class Repository { args.push('--ignore-submodules'); } + // --find-renames option is only available starting with git 2.18.0 + if (opts?.similarityThreshold && opts.similarityThreshold !== 50 && this._git.compareGitVersionTo('2.18.0') !== -1) { + args.push(`--find-renames=${opts.similarityThreshold}%`); + } + const child = this.stream(args, { env }); let result = new Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }>((c, e) => { @@ -2342,6 +2363,13 @@ export class Repository { args.push('--format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref)'); } + // On Windows and macOS ref names are case insensitive so we add --ignore-case + // to handle the scenario where the user switched to a branch with incorrect + // casing + if (isWindows || isMacintosh) { + args.push('--ignore-case'); + } + if (/^refs\/(head|remotes)\//i.test(name)) { args.push(name); } else { diff --git a/extensions/git/src/gitEditor.ts b/extensions/git/src/gitEditor.ts index fb0688e4401..f43e6f68209 100644 --- a/extensions/git/src/gitEditor.ts +++ b/extensions/git/src/gitEditor.ts @@ -17,6 +17,8 @@ export class GitEditor implements IIPCHandler, ITerminalEnvironmentProvider { private env: { [key: string]: string }; private disposable: IDisposable = EmptyDisposable; + readonly featureDescription = 'git editor'; + constructor(ipc?: IIPCServer) { if (ipc) { this.disposable = ipc.registerHandler('git-editor', this); diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts index 54b86c843dc..7c93979ee69 100644 --- a/extensions/git/src/main.ts +++ b/extensions/git/src/main.ts @@ -86,7 +86,7 @@ async function createModel(context: ExtensionContext, logger: LogOutputChannel, version: info.version, env: environment, }); - const model = new Model(git, askpass, context.globalState, logger, telemetryReporter); + const model = new Model(git, askpass, context.globalState, context.workspaceState, logger, telemetryReporter); disposables.push(model); const onRepository = () => commands.executeCommand('setContext', 'gitOpenRepositoryCount', `${model.repositories.length}`); diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index 863bacdfb1b..e8a496822f0 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -12,12 +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 } 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'; class RepositoryPick implements QuickPickItem { @memoize get label(): string { @@ -33,50 +34,6 @@ class RepositoryPick implements QuickPickItem { constructor(public readonly repository: Repository, public readonly index: number) { } } -abstract class RepositoryMap extends Map { - constructor() { - super(); - this.updateContextKey(); - } - - override set(key: string, value: T): this { - const result = super.set(key, value); - this.updateContextKey(); - - return result; - } - - override delete(key: string): boolean { - const result = super.delete(key); - this.updateContextKey(); - - return result; - } - - abstract updateContextKey(): void; -} - -/** - * Key - normalized path used in user interface - * Value - path extracted from the output of the `git status` command - * used when calling `git config --global --add safe.directory` - */ -class UnsafeRepositoryMap extends RepositoryMap { - updateContextKey(): void { - commands.executeCommand('setContext', 'git.unsafeRepositoryCount', this.size); - } -} - -/** - * Key - normalized path used in user interface - * Value - value indicating whether the repository should be opened - */ -class ParentRepositoryMap extends RepositoryMap { - updateContextKey(): void { - commands.executeCommand('setContext', 'git.parentRepositoryCount', this.size); - } -} - export interface ModelChangeEvent { repository: Repository; uri: Uri; @@ -91,7 +48,129 @@ interface OpenRepository extends Disposable { repository: Repository; } -export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry { +class ClosedRepositoriesManager { + + private _repositories: Set; + get repositories(): string[] { + return [...this._repositories.values()]; + } + + constructor(private readonly workspaceState: Memento) { + this._repositories = new Set(workspaceState.get('closedRepositories', [])); + this.onDidChangeRepositories(); + } + + addRepository(repository: string): void { + this._repositories.add(repository); + this.onDidChangeRepositories(); + } + + deleteRepository(repository: string): boolean { + const result = this._repositories.delete(repository); + if (result) { + this.onDidChangeRepositories(); + } + + return result; + } + + isRepositoryClosed(repository: string): boolean { + return this._repositories.has(repository); + } + + private onDidChangeRepositories(): void { + this.workspaceState.update('closedRepositories', [...this._repositories.values()]); + commands.executeCommand('setContext', 'git.closedRepositoryCount', this._repositories.size); + } +} + +class ParentRepositoriesManager { + + /** + * Key - normalized path used in user interface + * Value - value indicating whether the repository should be opened + */ + private _repositories = new Set; + get repositories(): string[] { + return [...this._repositories.values()]; + } + + constructor(private readonly globalState: Memento) { + this.onDidChangeRepositories(); + } + + addRepository(repository: string): void { + this._repositories.add(repository); + this.onDidChangeRepositories(); + } + + deleteRepository(repository: string): boolean { + const result = this._repositories.delete(repository); + if (result) { + this.onDidChangeRepositories(); + } + + return result; + } + + hasRepository(repository: string): boolean { + return this._repositories.has(repository); + } + + openRepository(repository: string): void { + this.globalState.update(`parentRepository:${repository}`, true); + this.deleteRepository(repository); + } + + private onDidChangeRepositories(): void { + commands.executeCommand('setContext', 'git.parentRepositoryCount', this._repositories.size); + } +} + +class UnsafeRepositoriesManager { + + /** + * Key - normalized path used in user interface + * Value - path extracted from the output of the `git status` command + * used when calling `git config --global --add safe.directory` + */ + private _repositories = new Map(); + get repositories(): string[] { + return [...this._repositories.keys()]; + } + + constructor() { + this.onDidChangeRepositories(); + } + + addRepository(repository: string, path: string): void { + this._repositories.set(repository, path); + this.onDidChangeRepositories(); + } + + deleteRepository(repository: string): boolean { + const result = this._repositories.delete(repository); + if (result) { + this.onDidChangeRepositories(); + } + + return result; + } + + getRepositoryPath(repository: string): string | undefined { + return this._repositories.get(repository); + } + + hasRepository(repository: string): boolean { + return this._repositories.has(repository); + } + + private onDidChangeRepositories(): void { + commands.executeCommand('setContext', 'git.unsafeRepositoryCount', this._repositories.size); + } +} + +export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry { private _onDidOpenRepository = new EventEmitter(); readonly onDidOpenRepository: Event = this._onDidOpenRepository.event; @@ -151,16 +230,26 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand private _onDidChangePostCommitCommandsProviders = new EventEmitter(); readonly onDidChangePostCommitCommandsProviders = this._onDidChangePostCommitCommandsProviders.event; + private branchProtectionProviders = new Map>(); + + private _onDidChangeBranchProtectionProviders = new EventEmitter(); + readonly onDidChangeBranchProtectionProviders = this._onDidChangeBranchProtectionProviders.event; + private pushErrorHandlers = new Set(); - private _unsafeRepositories = new UnsafeRepositoryMap(); - get unsafeRepositories(): UnsafeRepositoryMap { - return this._unsafeRepositories; + private _unsafeRepositoriesManager: UnsafeRepositoriesManager; + get unsafeRepositories(): string[] { + return this._unsafeRepositoriesManager.repositories; } - private _parentRepositories = new ParentRepositoryMap(); - get parentRepositories(): ParentRepositoryMap { - return this._parentRepositories; + private _parentRepositoriesManager: ParentRepositoriesManager; + get parentRepositories(): string[] { + return this._parentRepositoriesManager.repositories; + } + + private _closedRepositoriesManager: ClosedRepositoriesManager; + get closedRepositories(): string[] { + return [...this._closedRepositoriesManager.repositories]; } /** @@ -175,7 +264,12 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand private disposables: Disposable[] = []; - constructor(readonly git: Git, private readonly askpass: Askpass, private globalState: Memento, private logger: LogOutputChannel, private telemetryReporter: TelemetryReporter) { + constructor(readonly git: Git, private readonly askpass: Askpass, private globalState: Memento, readonly workspaceState: Memento, private logger: LogOutputChannel, private telemetryReporter: TelemetryReporter) { + // Repositories managers + this._closedRepositoriesManager = new ClosedRepositoriesManager(workspaceState); + this._parentRepositoriesManager = new ParentRepositoriesManager(globalState); + this._unsafeRepositoriesManager = new UnsafeRepositoriesManager(); + workspace.onDidChangeWorkspaceFolders(this.onDidChangeWorkspaceFolders, this, this.disposables); window.onDidChangeVisibleTextEditors(this.onDidChangeVisibleTextEditors, this, this.disposables); workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this.disposables); @@ -210,11 +304,11 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand await initialScanFn(); } - if (this._parentRepositories.size !== 0 && + if (this.parentRepositories.length !== 0 && parentRepositoryConfig === 'prompt') { // Parent repositories notification this.showParentRepositoryNotification(); - } else if (this._unsafeRepositories.size !== 0) { + } else if (this.unsafeRepositories.length !== 0) { // Unsafe repositories notification this.showUnsafeRepositoryNotification(); } @@ -397,7 +491,7 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand } @sequentialize - async openRepository(repoPath: string): Promise { + async openRepository(repoPath: string, openIfClosed = false): Promise { this.logger.trace(`Opening repository: ${repoPath}`); if (this.getRepositoryExact(repoPath)) { this.logger.trace(`Repository for path ${repoPath} already exists`); @@ -447,13 +541,13 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand if (isRepositoryOutsideWorkspace) { this.logger.trace(`Repository in parent folder: ${repositoryRoot}`); - if (!this._parentRepositories.has(repositoryRoot)) { + if (!this._parentRepositoriesManager.hasRepository(repositoryRoot)) { // Show a notification if the parent repository is opened after the initial scan if (this.state === 'initialized' && parentRepositoryConfig === 'prompt') { this.showParentRepositoryNotification(); } - this._parentRepositories.set(repositoryRoot); + this._parentRepositoriesManager.addRepository(repositoryRoot); } return; @@ -465,21 +559,31 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand this.logger.trace(`Unsafe repository: ${repositoryRoot}`); // Show a notification if the unsafe repository is opened after the initial scan - if (this._state === 'initialized' && !this._unsafeRepositories.has(repositoryRoot)) { + if (this._state === 'initialized' && !this._unsafeRepositoriesManager.hasRepository(repositoryRoot)) { this.showUnsafeRepositoryNotification(); } - this._unsafeRepositories.set(repositoryRoot, unsafeRepositoryMatch[2]); + this._unsafeRepositoriesManager.addRepository(repositoryRoot, unsafeRepositoryMatch[2]); return; } + // Handle repositories that were closed by the user + if (!openIfClosed && this._closedRepositoriesManager.isRepositoryClosed(repositoryRoot)) { + this.logger.trace(`Repository for path ${repositoryRoot} is closed`); + return; + } + // Open repository const dotGit = await this.git.getRepositoryDotGit(repositoryRoot); - const repository = new Repository(this.git.open(repositoryRoot, dotGit, this.logger), this, this, this, this.globalState, this.logger, this.telemetryReporter); + const repository = new Repository(this.git.open(repositoryRoot, dotGit, this.logger), this, this, this, this, this.globalState, this.logger, this.telemetryReporter); this.open(repository); - repository.status(); // do not await this, we want SCM to know about the repo asap + this._closedRepositoriesManager.deleteRepository(repository.root); + + // Do not await this, we want SCM + // to know about the repo asap + repository.status(); } catch (err) { // noop this.logger.trace(`Opening repository for path='${repoPath}' failed; ex=${err}`); @@ -487,11 +591,8 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand } async openParentRepository(repoPath: string): Promise { - // Mark the repository to be opened from the parent folders - this.globalState.update(`parentRepository:${repoPath}`, true); - await this.openRepository(repoPath); - this.parentRepositories.delete(repoPath); + this._parentRepositoriesManager.openRepository(repoPath); } private async getRepositoryRoot(repoPath: string): Promise<{ repositoryRoot: string; unsafeRepositoryMatch: RegExpMatchArray | null }> { @@ -627,6 +728,8 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand } this.logger.info(`Close repository: ${repository.root}`); + this._closedRepositoriesManager.addRepository(openRepository.repository.root); + openRepository.dispose(); } @@ -760,6 +863,31 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand return [...this.remoteSourcePublishers.values()]; } + registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable { + const providerDisposables: Disposable[] = []; + + this.branchProtectionProviders.set(root.toString(), (this.branchProtectionProviders.get(root.toString()) ?? new Set()).add(provider)); + providerDisposables.push(provider.onDidChangeBranchProtection(uri => this._onDidChangeBranchProtectionProviders.fire(uri))); + + this._onDidChangeBranchProtectionProviders.fire(root); + + return toDisposable(() => { + const providers = this.branchProtectionProviders.get(root.toString()); + + if (providers && providers.has(provider)) { + providers.delete(provider); + this.branchProtectionProviders.set(root.toString(), providers); + this._onDidChangeBranchProtectionProviders.fire(root); + } + + dispose(providerDisposables); + }); + } + + getBranchProtectionProviders(root: Uri): BranchProtectionProvider[] { + return [...(this.branchProtectionProviders.get(root.toString()) ?? new Set()).values()]; + } + registerPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable { this.postCommitCommandsProviders.add(provider); this._onDidChangePostCommitCommandsProviders.fire(); @@ -787,6 +915,14 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand return [...this.pushErrorHandlers]; } + getUnsafeRepositoryPath(repository: string): string | undefined { + return this._unsafeRepositoriesManager.getRepositoryPath(repository); + } + + deleteUnsafeRepository(repository: string): boolean { + return this._unsafeRepositoriesManager.deleteRepository(repository); + } + private async isRepositoryOutsideWorkspace(repositoryPath: string): Promise { const workspaceFolders = (workspace.workspaceFolders || []) .filter(folder => folder.uri.scheme === 'file'); @@ -795,12 +931,14 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand return true; } - const result = await Promise.all(workspaceFolders.map(async folder => { - const workspaceFolderRealPath = await this.getWorkspaceFolderRealPath(folder); - return workspaceFolderRealPath ? pathEquals(workspaceFolderRealPath, repositoryPath) || isDescendant(workspaceFolderRealPath, repositoryPath) : undefined; - })); + // The repository path may be a canonical path or it may contain a symbolic link so we have + // to match it against the workspace folders and the canonical paths of the workspace folders + const workspaceFolderPaths = new Set([ + ...workspaceFolders.map(folder => folder.uri.fsPath), + ...await Promise.all(workspaceFolders.map(folder => this.getWorkspaceFolderRealPath(folder))) + ]); - return !result.some(r => r); + return !Array.from(workspaceFolderPaths).some(folder => folder && (pathEquals(folder, repositoryPath) || isDescendant(folder, repositoryPath))); } private async getWorkspaceFolderRealPath(workspaceFolder: WorkspaceFolder): Promise { @@ -820,7 +958,7 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand } private async showParentRepositoryNotification(): Promise { - const message = this.parentRepositories.size === 1 ? + const message = this.parentRepositories.length === 1 ? l10n.t('A git repository was found in the parent folders of the workspace or the open file(s). Would you like to open the repository?') : l10n.t('Git repositories were found in the parent folders of the workspace or the open file(s). Would you like to open the repositories?'); @@ -838,7 +976,7 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand await config.update('openRepositoryInParentFolders', choice === always ? 'always' : 'never', true); if (choice === always) { - for (const parentRepository of [...this.parentRepositories.keys()]) { + for (const parentRepository of this.parentRepositories) { await this.openParentRepository(parentRepository); } } @@ -853,7 +991,7 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand return; } - const message = this._unsafeRepositories.size === 1 ? + const message = this.unsafeRepositories.length === 1 ? l10n.t('The git repository in the current folder is potentially unsafe as the folder is owned by someone other than the current user.') : l10n.t('The git repositories in the current folder are potentially unsafe as the folders are owned by someone other than the current user.'); diff --git a/extensions/git/src/remoteSource.ts b/extensions/git/src/remoteSource.ts index 4f62181f00c..4fdd6f06c1d 100644 --- a/extensions/git/src/remoteSource.ts +++ b/extensions/git/src/remoteSource.ts @@ -11,3 +11,7 @@ export async function pickRemoteSource(options: PickRemoteSourceOptions & { bran export async function pickRemoteSource(options: PickRemoteSourceOptions = {}): Promise { return GitBaseApi.getAPI().pickRemoteSource(options); } + +export async function getRemoteSourceActions(url: string) { + return GitBaseApi.getAPI().getRemoteSourceActions(url); +} diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 4a12fb8eb2b..1593e7309be 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -22,6 +22,7 @@ import { IRemoteSourcePublisherRegistry } from './remotePublisher'; import { ActionButtonCommand } from './actionButton'; import { IPostCommitCommandsProviderRegistry, CommitCommandsCenter } from './postCommitCommands'; import { Operation, OperationKind, OperationManager, OperationResult } from './operation'; +import { GitBranchProtectionProvider, IBranchProtectionProviderRegistry } from './branchProtection'; const timeout = (millis: number) => new Promise(c => setTimeout(c, millis)); @@ -57,6 +58,7 @@ export class Resource implements SourceControlResourceState { case Status.UNTRACKED: return l10n.t('Untracked'); case Status.IGNORED: return l10n.t('Ignored'); case Status.INTENT_TO_ADD: return l10n.t('Intent to Add'); + case Status.INTENT_TO_RENAME: return l10n.t('Intent to Rename'); case Status.BOTH_DELETED: return l10n.t('Conflict: Both Deleted'); case Status.ADDED_BY_US: return l10n.t('Conflict: Added By Us'); case Status.DELETED_BY_THEM: return l10n.t('Conflict: Deleted By Them'); @@ -70,7 +72,7 @@ export class Resource implements SourceControlResourceState { @memoize get resourceUri(): Uri { - if (this.renameResourceUri && (this._type === Status.MODIFIED || this._type === Status.DELETED || this._type === Status.INDEX_RENAMED || this._type === Status.INDEX_COPIED)) { + if (this.renameResourceUri && (this._type === Status.MODIFIED || this._type === Status.DELETED || this._type === Status.INDEX_RENAMED || this._type === Status.INDEX_COPIED || this._type === Status.INTENT_TO_RENAME)) { return this.renameResourceUri; } @@ -135,6 +137,7 @@ export class Resource implements SourceControlResourceState { case Status.UNTRACKED: return Resource.Icons[theme].Untracked; case Status.IGNORED: return Resource.Icons[theme].Ignored; case Status.INTENT_TO_ADD: return Resource.Icons[theme].Added; + case Status.INTENT_TO_RENAME: return Resource.Icons[theme].Renamed; case Status.BOTH_DELETED: return Resource.Icons[theme].Conflict; case Status.ADDED_BY_US: return Resource.Icons[theme].Conflict; case Status.DELETED_BY_THEM: return Resource.Icons[theme].Conflict; @@ -192,6 +195,7 @@ export class Resource implements SourceControlResourceState { case Status.DELETED: return 'D'; case Status.INDEX_RENAMED: + case Status.INTENT_TO_RENAME: return 'R'; case Status.UNTRACKED: return 'U'; @@ -229,6 +233,7 @@ export class Resource implements SourceControlResourceState { return new ThemeColor('gitDecoration.addedResourceForeground'); case Status.INDEX_COPIED: case Status.INDEX_RENAMED: + case Status.INTENT_TO_RENAME: return new ThemeColor('gitDecoration.renamedResourceForeground'); case Status.UNTRACKED: return new ThemeColor('gitDecoration.untrackedResourceForeground'); @@ -519,6 +524,7 @@ class ResourceCommandResolver { case Status.INDEX_MODIFIED: case Status.INDEX_RENAMED: case Status.INDEX_ADDED: + case Status.INTENT_TO_RENAME: return toGitUri(resource.original, 'HEAD'); case Status.MODIFIED: @@ -553,7 +559,8 @@ class ResourceCommandResolver { case Status.MODIFIED: case Status.UNTRACKED: case Status.IGNORED: - case Status.INTENT_TO_ADD: { + case Status.INTENT_TO_ADD: + case Status.INTENT_TO_RENAME: { const uriString = resource.resourceUri.toString(); const [indexStatus] = this.repository.indexGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString); @@ -598,12 +605,21 @@ class ResourceCommandResolver { case Status.UNTRACKED: return l10n.t('{0} (Untracked)', basename); + case Status.INTENT_TO_ADD: + case Status.INTENT_TO_RENAME: + return l10n.t('{0} (Intent to add)', basename); + default: return ''; } } } +interface BranchProtectionMatcher { + include?: picomatch.Matcher; + exclude?: picomatch.Matcher; +} + export class Repository implements Disposable { private _onDidChangeRepository = new EventEmitter(); @@ -624,6 +640,9 @@ export class Repository implements Disposable { private _onDidRunOperation = new EventEmitter(); readonly onDidRunOperation: Event = this._onDidRunOperation.event; + private _onDidChangeBranchProtection = new EventEmitter(); + readonly onDidChangeBranchProtection: Event = this._onDidChangeBranchProtection.event; + @memoize get onDidChangeOperations(): Event { return anyEvent(this.onRunOperation as Event, this.onDidRunOperation as Event); @@ -740,7 +759,7 @@ export class Repository implements Disposable { private isRepositoryHuge: false | { limit: number } = false; private didWarnAboutLimit = false; - private isBranchProtectedMatcher: picomatch.Matcher | undefined; + private branchProtection = new Map(); private commitCommandCenter: CommitCommandsCenter; private resourceCommandResolver = new ResourceCommandResolver(this); private updateModelStateCancellationTokenSource: CancellationTokenSource | undefined; @@ -751,6 +770,7 @@ export class Repository implements Disposable { private pushErrorHandlerRegistry: IPushErrorHandlerRegistry, remoteSourcePublisherRegistry: IRemoteSourcePublisherRegistry, postCommitCommandsProviderRegistry: IPostCommitCommandsProviderRegistry, + private readonly branchProtectionProviderRegistry: IBranchProtectionProviderRegistry, globalState: Memento, private readonly logger: LogOutputChannel, private telemetryReporter: TelemetryReporter @@ -759,7 +779,7 @@ export class Repository implements Disposable { this.disposables.push(repositoryWatcher); const onRepositoryFileChange = anyEvent(repositoryWatcher.onDidChange, repositoryWatcher.onDidCreate, repositoryWatcher.onDidDelete); - const onRepositoryWorkingTreeFileChange = filterEvent(onRepositoryFileChange, uri => !/\.git($|\/)/.test(relativePath(repository.root, uri.fsPath))); + const onRepositoryWorkingTreeFileChange = filterEvent(onRepositoryFileChange, uri => !/\.git($|\\|\/)/.test(relativePath(repository.root, uri.fsPath))); let onRepositoryDotGitFileChange: Event; @@ -770,7 +790,7 @@ export class Repository implements Disposable { } catch (err) { logger.error(`Failed to watch path:'${this.dotGit.path}' or commonPath:'${this.dotGit.commonPath}', reverting to legacy API file watched. Some events might be lost.\n${err.stack || err}`); - onRepositoryDotGitFileChange = filterEvent(onRepositoryFileChange, uri => /\.git($|\/)/.test(uri.path)); + onRepositoryDotGitFileChange = filterEvent(onRepositoryFileChange, uri => /\.git($|\\|\/)/.test(uri.path)); } // FS changes should trigger `git status`: @@ -816,12 +836,12 @@ export class Repository implements Disposable { }, undefined, this.disposables); filterEvent(workspace.onDidChangeConfiguration, e => - e.affectsConfiguration('git.branchProtection', root) - || e.affectsConfiguration('git.branchSortOrder', root) + e.affectsConfiguration('git.branchSortOrder', root) || e.affectsConfiguration('git.untrackedChanges', root) || e.affectsConfiguration('git.ignoreSubmodules', root) || e.affectsConfiguration('git.openDiffOnClick', root) || e.affectsConfiguration('git.showActionButton', root) + || e.affectsConfiguration('git.similarityThreshold', root) )(() => this.updateModelState(), this, this.disposables); const updateInputBoxVisibility = () => { @@ -862,9 +882,10 @@ export class Repository implements Disposable { } }, null, this.disposables); - const onDidChangeBranchProtection = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.branchProtection', root)); - onDidChangeBranchProtection(this.updateBranchProtectionMatcher, this, this.disposables); - this.updateBranchProtectionMatcher(); + // Default branch protection provider + const onBranchProtectionProviderChanged = filterEvent(this.branchProtectionProviderRegistry.onDidChangeBranchProtectionProviders, e => pathEquals(e.fsPath, root.fsPath)); + this.disposables.push(onBranchProtectionProviderChanged(root => this.updateBranchProtectionMatchers(root))); + this.disposables.push(this.branchProtectionProviderRegistry.registerBranchProtectionProvider(root, new GitBranchProtectionProvider(root))); const statusBar = new StatusBarCommands(this, remoteSourcePublisherRegistry); this.disposables.push(statusBar); @@ -972,9 +993,13 @@ export class Repository implements Disposable { return; } - const path = uri.path; + // Ignore path that is inside a merge group + if (this.mergeGroup.resourceStates.some(r => r.resourceUri.path === uri.path)) { + return undefined; + } - if (this.mergeGroup.resourceStates.some(r => r.resourceUri.path === path)) { + // Ignore path that is inside a submodule + if (this.submodules.some(s => isDescendant(path.join(this.repository.root, s.path), uri.path))) { return undefined; } @@ -1171,6 +1196,10 @@ export class Repository implements Disposable { } async commit(message: string | undefined, opts: CommitOptions = Object.create(null)): Promise { + const indexResources = [...this.indexGroup.resourceStates.map(r => r.resourceUri.fsPath)]; + const workingGroupResources = opts.all && opts.all !== 'tracked' ? + [...this.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath)] : []; + if (this.rebaseCommit) { await this.run( Operation.RebaseContinue, @@ -1181,7 +1210,7 @@ export class Repository implements Disposable { } await this.repository.rebaseContinue(); - await this.commitOperationCleanup(message, opts); + await this.commitOperationCleanup(message, indexResources, workingGroupResources); }, () => this.commitOperationGetOptimisticResourceGroups(opts)); } else { @@ -1204,7 +1233,7 @@ export class Repository implements Disposable { } await this.repository.commit(message, opts); - await this.commitOperationCleanup(message, opts); + await this.commitOperationCleanup(message, indexResources, workingGroupResources); }, () => this.commitOperationGetOptimisticResourceGroups(opts)); @@ -1215,15 +1244,10 @@ export class Repository implements Disposable { } } - private async commitOperationCleanup(message: string | undefined, opts: CommitOptions) { + private async commitOperationCleanup(message: string | undefined, indexResources: string[], workingGroupResources: string[]) { if (message) { this.inputBox.value = await this.getInputTemplate(); } - - const indexResources = [...this.indexGroup.resourceStates.map(r => r.resourceUri.fsPath)]; - const workingGroupResources = opts.all && opts.all !== 'tracked' ? - [...this.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath)] : []; - this.closeDiffEditors(indexResources, workingGroupResources); } @@ -2042,9 +2066,10 @@ export class Repository implements Disposable { const ignoreSubmodules = scopedConfig.get('ignoreSubmodules'); const limit = scopedConfig.get('statusLimit', 10000); + const similarityThreshold = scopedConfig.get('similarityThreshold', 50); const start = new Date().getTime(); - const { status, statusLength, didHitLimit } = await this.repository.getStatus({ limit, ignoreSubmodules, untrackedChanges, cancellationToken }); + const { status, statusLength, didHitLimit } = await this.repository.getStatus({ limit, ignoreSubmodules, similarityThreshold, untrackedChanges, cancellationToken }); const totalTime = new Date().getTime() - start; this.isRepositoryHuge = didHitLimit ? { limit } : false; @@ -2162,6 +2187,7 @@ export class Repository implements Disposable { case 'M': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.MODIFIED, useIcons, renameUri)); break; case 'D': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.DELETED, useIcons, renameUri)); break; case 'A': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.INTENT_TO_ADD, useIcons, renameUri)); break; + case 'R': workingTreeGroup.push(new Resource(this.resourceCommandResolver, ResourceGroupType.WorkingTree, uri, Status.INTENT_TO_RENAME, useIcons, renameUri)); break; } return undefined; @@ -2243,14 +2269,17 @@ export class Repository implements Disposable { const autorefresh = config.get('autorefresh'); if (!autorefresh) { + this.logger.trace('Skip running git status because autorefresh setting is disabled.'); return; } if (this.isRepositoryHuge) { + this.logger.trace('Skip running git status because repository is huge.'); return; } if (!this.operations.isIdle()) { + this.logger.trace('Skip running git status because an operation is running.'); return; } @@ -2354,15 +2383,29 @@ export class Repository implements Disposable { } } - private updateBranchProtectionMatcher(): void { - const scopedConfig = workspace.getConfiguration('git', Uri.file(this.repository.root)); - const branchProtectionGlobs = scopedConfig.get('branchProtection')!.map(bp => bp.trim()).filter(bp => bp !== ''); + private updateBranchProtectionMatchers(root: Uri): void { + this.branchProtection.clear(); - if (branchProtectionGlobs.length === 0) { - this.isBranchProtectedMatcher = undefined; - } else { - this.isBranchProtectedMatcher = picomatch(branchProtectionGlobs); + for (const provider of this.branchProtectionProviderRegistry.getBranchProtectionProviders(root)) { + for (const { remote, rules } of provider.provideBranchProtection()) { + const matchers: BranchProtectionMatcher[] = []; + + for (const rule of rules) { + const include = rule.include && rule.include.length !== 0 ? picomatch(rule.include) : undefined; + const exclude = rule.exclude && rule.exclude.length !== 0 ? picomatch(rule.exclude) : undefined; + + if (include || exclude) { + matchers.push({ include, exclude }); + } + } + + if (matchers.length !== 0) { + this.branchProtection.set(remote, matchers); + } + } } + + this._onDidChangeBranchProtection.fire(); } private optimisticUpdateEnabled(): boolean { @@ -2402,8 +2445,31 @@ export class Repository implements Disposable { return true; } - public isBranchProtected(name = this.HEAD?.name ?? ''): boolean { - return this.isBranchProtectedMatcher ? this.isBranchProtectedMatcher(name) : false; + public isBranchProtected(branch = this.HEAD): boolean { + if (branch?.name) { + // Default branch protection (settings) + const defaultBranchProtectionMatcher = this.branchProtection.get(''); + if (defaultBranchProtectionMatcher?.length === 1 && + defaultBranchProtectionMatcher[0].include && + defaultBranchProtectionMatcher[0].include(branch.name)) { + return true; + } + + if (branch.upstream?.remote) { + // Branch protection (contributed) + const remoteBranchProtectionMatcher = this.branchProtection.get(branch.upstream.remote); + if (remoteBranchProtectionMatcher && remoteBranchProtectionMatcher?.length !== 0) { + return remoteBranchProtectionMatcher.some(matcher => { + const include = matcher.include ? matcher.include(branch.name!) : true; + const exclude = matcher.exclude ? matcher.exclude(branch.name!) : false; + + return include && !exclude; + }); + } + } + } + + return false; } dispose(): void { diff --git a/extensions/git/src/statusbar.ts b/extensions/git/src/statusbar.ts index bb2abe2ee26..e58096442f2 100644 --- a/extensions/git/src/statusbar.ts +++ b/extensions/git/src/statusbar.ts @@ -38,6 +38,7 @@ class CheckoutStatusBar { repository.onDidChangeOperations(this.onDidChangeOperations, this, this.disposables); repository.onDidRunGitStatus(this._onDidChange.fire, this._onDidChange, this.disposables); + repository.onDidChangeBranchProtection(this._onDidChange.fire, this._onDidChange, this.disposables); } get command(): Command | undefined { diff --git a/extensions/git/src/terminal.ts b/extensions/git/src/terminal.ts index 9501cc88bba..4f6d95488bb 100644 --- a/extensions/git/src/terminal.ts +++ b/extensions/git/src/terminal.ts @@ -3,10 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ExtensionContext, workspace } from 'vscode'; +import { ExtensionContext, l10n, workspace } from 'vscode'; import { filterEvent, IDisposable } from './util'; export interface ITerminalEnvironmentProvider { + featureDescription?: string; getTerminalEnv(): { [key: string]: string }; } @@ -29,12 +30,19 @@ export class TerminalEnvironmentManager { return; } + const features: string[] = []; for (const envProvider of this.envProviders) { const terminalEnv = envProvider?.getTerminalEnv() ?? {}; for (const name of Object.keys(terminalEnv)) { this.context.environmentVariableCollection.replace(name, terminalEnv[name]); } + if (envProvider?.featureDescription && Object.keys(terminalEnv).length > 0) { + features.push(envProvider.featureDescription); + } + } + if (features.length) { + this.context.environmentVariableCollection.description = l10n.t('Enables the following features: {0}', features.join(', ')); } } diff --git a/extensions/git/src/typings/vscode.proposed.canonicalUriProvider.d.ts b/extensions/git/src/typings/vscode.proposed.canonicalUriProvider.d.ts new file mode 100644 index 00000000000..84ee599797d --- /dev/null +++ b/extensions/git/src/typings/vscode.proposed.canonicalUriProvider.d.ts @@ -0,0 +1,47 @@ +/*--------------------------------------------------------------------------------------------- + * 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/180582 + + export namespace workspace { + /** + * + * @param scheme The URI scheme that this provider can provide canonical URIs for. + * A canonical URI represents the conversion of a resource's alias into a source of truth URI. + * Multiple aliases may convert to the same source of truth URI. + * @param provider A provider which can convert URIs of scheme @param scheme to + * a canonical URI which is stable across machines. + */ + export function registerCanonicalUriProvider(scheme: string, provider: CanonicalUriProvider): Disposable; + + /** + * + * @param uri The URI to provide a canonical URI for. + * @param token A cancellation token for the request. + */ + export function getCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, token: CancellationToken): ProviderResult; + } + + export interface CanonicalUriProvider { + /** + * + * @param uri The URI to provide a canonical URI for. + * @param options Options that the provider should honor in the URI it returns. + * @param token A cancellation token for the request. + * @returns The canonical URI for the requested URI or undefined if no canonical URI can be provided. + */ + provideCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, token: CancellationToken): ProviderResult; + } + + export interface CanonicalUriRequestOptions { + /** + * + * The desired scheme of the canonical URI. + */ + targetScheme: string; + } +} diff --git a/extensions/git/yarn.lock b/extensions/git/yarn.lock index fac7f29a878..b11a72fd3c2 100644 --- a/extensions/git/yarn.lock +++ b/extensions/git/yarn.lock @@ -202,10 +202,10 @@ resolved "https://registry.yarnpkg.com/@types/picomatch/-/picomatch-2.3.0.tgz#75db5e75a713c5a83d5b76780c3da84a82806003" integrity sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g== -"@types/which@^1.0.28": - version "1.0.28" - resolved "https://registry.yarnpkg.com/@types/which/-/which-1.0.28.tgz#016e387629b8817bed653fe32eab5d11279c8df6" - integrity sha1-AW44dim4gXvtZT/jLqtdESecjfY= +"@types/which@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/which/-/which-3.0.0.tgz#849afdd9fdcb0b67339b9cfc80fa6ea4e0253fc5" + integrity sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ== "@vscode/extension-telemetry@0.7.5": version "0.7.5" @@ -487,9 +487,9 @@ vscode-uri@^2.0.0: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.0.0.tgz#2df704222f72b8a71ff266ba0830ed6c51ac1542" integrity sha512-lWXWofDSYD8r/TIyu64MdwB4FaSirQ608PP/TzUyslyOeHGwQ0eTHUZeJrK1ILOmwUHaJtV693m2JoUYroUDpw== -which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg== +which@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== dependencies: isexe "^2.0.0" diff --git a/extensions/github-authentication/src/common/env.ts b/extensions/github-authentication/src/common/env.ts index 7b99a148373..ebc474936aa 100644 --- a/extensions/github-authentication/src/common/env.ts +++ b/extensions/github-authentication/src/common/env.ts @@ -29,6 +29,10 @@ export function isSupportedClient(uri: Uri): boolean { export function isSupportedTarget(type: AuthProviderType, gheUri?: Uri): boolean { return ( type === AuthProviderType.github || - /\.ghe\.com$/.test(gheUri!.authority) + isHostedGitHubEnterprise(gheUri!) ); } + +export function isHostedGitHubEnterprise(uri: Uri): boolean { + return /\.ghe\.com$/.test(uri.authority); +} diff --git a/extensions/github-authentication/src/common/errors.ts b/extensions/github-authentication/src/common/errors.ts new file mode 100644 index 00000000000..3ba3dfc006a --- /dev/null +++ b/extensions/github-authentication/src/common/errors.ts @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export const TIMED_OUT_ERROR = 'Timed out'; + +// These error messages are internal and should not be shown to the user in any way. +export const USER_CANCELLATION_ERROR = 'User Cancelled'; +export const NETWORK_ERROR = 'network error'; diff --git a/src/typings/windows-registry.d.ts b/extensions/github-authentication/src/config.ts similarity index 57% rename from src/typings/windows-registry.d.ts rename to extensions/github-authentication/src/config.ts index 165a20613ab..30b9dd66265 100644 --- a/src/typings/windows-registry.d.ts +++ b/extensions/github-authentication/src/config.ts @@ -3,7 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -declare module '@vscode/windows-registry' { - export type HKEY = 'HKEY_CURRENT_USER' | 'HKEY_LOCAL_MACHINE' | 'HKEY_CLASSES_ROOT' | 'HKEY_USERS' | 'HKEY_CURRENT_CONFIG'; - export function GetStringRegKey(hive: HKEY, path: string, name: string): string | undefined; +export interface IConfig { + // The client ID of the GitHub OAuth app + gitHubClientId: string; + gitHubClientSecret?: string; } + +// For easy access to mixin client ID and secret +export const Config: IConfig = { + gitHubClientId: '01ab8ac9400c4e429b23' +}; diff --git a/extensions/github-authentication/src/flows.ts b/extensions/github-authentication/src/flows.ts new file mode 100644 index 00000000000..f3f9277bdc1 --- /dev/null +++ b/extensions/github-authentication/src/flows.ts @@ -0,0 +1,499 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as path from 'path'; +import { ProgressLocation, Uri, commands, env, l10n, window } from 'vscode'; +import { Log } from './common/logger'; +import { Config } from './config'; +import { UriEventHandler } from './github'; +import { fetching } from './node/fetch'; +import { LoopbackAuthServer } from './node/authServer'; +import { promiseFromEvent } from './common/utils'; +import { isHostedGitHubEnterprise } from './common/env'; +import { NETWORK_ERROR, TIMED_OUT_ERROR, USER_CANCELLATION_ERROR } from './common/errors'; + +interface IGitHubDeviceCodeResponse { + device_code: string; + user_code: string; + verification_uri: string; + interval: number; +} + +interface IFlowOptions { + // GitHub.com + readonly supportsGitHubDotCom: boolean; + // A GitHub Enterprise Server that is hosted by an organization + readonly supportsGitHubEnterpriseServer: boolean; + // A GitHub Enterprise Server that is hosted by GitHub for an organization + readonly supportsHostedGitHubEnterprise: boolean; + + // Runtimes - there are constraints on which runtimes support which flows + readonly supportsWebWorkerExtensionHost: boolean; + readonly supportsRemoteExtensionHost: boolean; + + // Clients - see `isSupportedClient` in `common/env.ts` for what constitutes a supported client + readonly supportsSupportedClients: boolean; + readonly supportsUnsupportedClients: boolean; + + // Configurations - some flows require a client secret + readonly supportsNoClientSecret: boolean; +} + +export const enum GitHubTarget { + DotCom, + Enterprise, + HostedEnterprise +} + +export const enum ExtensionHost { + WebWorker, + Remote, + Local +} + +interface IFlowQuery { + target: GitHubTarget; + extensionHost: ExtensionHost; + isSupportedClient: boolean; +} + +interface IFlowTriggerOptions { + scopes: string; + baseUri: Uri; + logger: Log; + redirectUri: Uri; + nonce: string; + callbackUri: Uri; + uriHandler: UriEventHandler; + enterpriseUri?: Uri; +} + +interface IFlow { + label: string; + options: IFlowOptions; + trigger(options: IFlowTriggerOptions): Promise; +} + +async function exchangeCodeForToken( + logger: Log, + endpointUri: Uri, + redirectUri: Uri, + code: string, + enterpriseUri?: Uri +): Promise { + logger.info('Exchanging code for token...'); + + const clientSecret = Config.gitHubClientSecret; + if (!clientSecret) { + throw new Error('No client secret configured for GitHub authentication.'); + } + + const body = new URLSearchParams([ + ['code', code], + ['client_id', Config.gitHubClientId], + ['redirect_uri', redirectUri.toString(true)], + ['client_secret', clientSecret] + ]); + if (enterpriseUri) { + body.append('github_enterprise', enterpriseUri.toString(true)); + } + const result = await fetching(endpointUri.toString(true), { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': body.toString() + + }, + body: body.toString() + }); + + if (result.ok) { + const json = await result.json(); + logger.info('Token exchange success!'); + return json.access_token; + } else { + const text = await result.text(); + const error = new Error(text); + error.name = 'GitHubTokenExchangeError'; + throw error; + } +} + +const allFlows: IFlow[] = [ + new class UrlHandlerFlow implements IFlow { + label = l10n.t('url handler'); + options: IFlowOptions = { + supportsGitHubDotCom: true, + // Supporting GHES would be challenging because different versions + // used a different client ID. We could try to detect the version + // and use the right one, but that's a lot of work when we have + // other flows that work well. + supportsGitHubEnterpriseServer: false, + supportsHostedGitHubEnterprise: true, + supportsRemoteExtensionHost: true, + supportsWebWorkerExtensionHost: true, + // exchanging a code for a token requires a client secret + supportsNoClientSecret: false, + supportsSupportedClients: true, + supportsUnsupportedClients: false + }; + + async trigger({ + scopes, + baseUri, + redirectUri, + logger, + nonce, + callbackUri, + uriHandler, + enterpriseUri + }: IFlowTriggerOptions): Promise { + logger.info(`Trying without local server... (${scopes})`); + return await window.withProgress({ + location: ProgressLocation.Notification, + title: l10n.t({ + message: 'Signing in to {0}...', + args: [baseUri.authority], + comment: ['The {0} will be a url, e.g. github.com'] + }), + cancellable: true + }, async (_, token) => { + const promise = uriHandler.waitForCode(logger, scopes, nonce, token); + + const searchParams = new URLSearchParams([ + ['client_id', Config.gitHubClientId], + ['redirect_uri', redirectUri.toString(true)], + ['scope', scopes], + ['state', encodeURIComponent(callbackUri.toString(true))] + ]); + + // The extra toString, parse is apparently needed for env.openExternal + // to open the correct URL. + const uri = Uri.parse(baseUri.with({ + path: '/login/oauth/authorize', + query: searchParams.toString() + }).toString(true)); + await env.openExternal(uri); + + const code = await promise; + + const proxyEndpoints: { [providerId: string]: string } | undefined = await commands.executeCommand('workbench.getCodeExchangeProxyEndpoints'); + const endpointUrl = proxyEndpoints?.github + ? Uri.parse(`${proxyEndpoints.github}login/oauth/access_token`) + : baseUri.with({ path: '/login/oauth/access_token' }); + + const accessToken = await exchangeCodeForToken(logger, endpointUrl, redirectUri, code, enterpriseUri); + return accessToken; + }); + } + }, + new class LocalServerFlow implements IFlow { + label = l10n.t('local server'); + options: IFlowOptions = { + supportsGitHubDotCom: true, + // Supporting GHES would be challenging because different versions + // used a different client ID. We could try to detect the version + // and use the right one, but that's a lot of work when we have + // other flows that work well. + supportsGitHubEnterpriseServer: false, + supportsHostedGitHubEnterprise: true, + supportsRemoteExtensionHost: true, + supportsWebWorkerExtensionHost: true, + // exchanging a code for a token requires a client secret + supportsNoClientSecret: false, + supportsSupportedClients: true, + supportsUnsupportedClients: true + }; + async trigger({ + scopes, + baseUri, + redirectUri, + logger, + enterpriseUri + }: IFlowTriggerOptions): Promise { + logger.info(`Trying with local server... (${scopes})`); + return await window.withProgress({ + location: ProgressLocation.Notification, + title: l10n.t({ + message: 'Signing in to {0}...', + args: [baseUri.authority], + comment: ['The {0} will be a url, e.g. github.com'] + }), + cancellable: true + }, async (_, token) => { + const searchParams = new URLSearchParams([ + ['client_id', Config.gitHubClientId], + ['redirect_uri', redirectUri.toString(true)], + ['scope', scopes], + ]); + + const loginUrl = baseUri.with({ + path: '/login/oauth/authorize', + query: searchParams.toString() + }); + const server = new LoopbackAuthServer(path.join(__dirname, '../media'), loginUrl.toString(true)); + const port = await server.start(); + + let codeToExchange; + try { + env.openExternal(Uri.parse(`http://127.0.0.1:${port}/signin?nonce=${encodeURIComponent(server.nonce)}`)); + const { code } = await Promise.race([ + server.waitForOAuthResponse(), + new Promise((_, reject) => setTimeout(() => reject(TIMED_OUT_ERROR), 300_000)), // 5min timeout + promiseFromEvent(token.onCancellationRequested, (_, __, reject) => { reject(USER_CANCELLATION_ERROR); }).promise + ]); + codeToExchange = code; + } finally { + setTimeout(() => { + void server.stop(); + }, 5000); + } + + const accessToken = await exchangeCodeForToken( + logger, + baseUri.with({ path: '/login/oauth/access_token' }), + redirectUri, + codeToExchange, + enterpriseUri); + return accessToken; + }); + } + }, + new class DeviceCodeFlow implements IFlow { + label = l10n.t('device code'); + options: IFlowOptions = { + supportsGitHubDotCom: true, + supportsGitHubEnterpriseServer: true, + supportsHostedGitHubEnterprise: true, + supportsRemoteExtensionHost: true, + // CORS prevents this from working in web workers + supportsWebWorkerExtensionHost: false, + supportsNoClientSecret: true, + supportsSupportedClients: true, + supportsUnsupportedClients: true + }; + async trigger({ scopes, baseUri, logger }: IFlowTriggerOptions) { + logger.info(`Trying device code flow... (${scopes})`); + + // Get initial device code + const uri = baseUri.with({ + path: '/login/device/code', + query: `client_id=${Config.gitHubClientId}&scope=${scopes}` + }); + const result = await fetching(uri.toString(true), { + method: 'POST', + headers: { + Accept: 'application/json' + } + }); + if (!result.ok) { + throw new Error(`Failed to get one-time code: ${await result.text()}`); + } + + const json = await result.json() as IGitHubDeviceCodeResponse; + + const button = l10n.t('Copy & Continue to GitHub'); + const modalResult = await window.showInformationMessage( + l10n.t({ message: 'Your Code: {0}', args: [json.user_code], comment: ['The {0} will be a code, e.g. 123-456'] }), + { + modal: true, + detail: l10n.t('To finish authenticating, navigate to GitHub and paste in the above one-time code.') + }, button); + + if (modalResult !== button) { + throw new Error(USER_CANCELLATION_ERROR); + } + + await env.clipboard.writeText(json.user_code); + + const uriToOpen = await env.asExternalUri(Uri.parse(json.verification_uri)); + await env.openExternal(uriToOpen); + + return await this.waitForDeviceCodeAccessToken(baseUri, json); + } + + private async waitForDeviceCodeAccessToken( + baseUri: Uri, + json: IGitHubDeviceCodeResponse, + ): Promise { + return await window.withProgress({ + location: ProgressLocation.Notification, + cancellable: true, + title: l10n.t({ + message: 'Open [{0}]({0}) in a new tab and paste your one-time code: {1}', + args: [json.verification_uri, json.user_code], + comment: [ + 'The [{0}]({0}) will be a url and the {1} will be a code, e.g. 123-456', + '{Locked="[{0}]({0})"}' + ] + }) + }, async (_, token) => { + const refreshTokenUri = baseUri.with({ + path: '/login/oauth/access_token', + query: `client_id=${Config.gitHubClientId}&device_code=${json.device_code}&grant_type=urn:ietf:params:oauth:grant-type:device_code` + }); + + // Try for 2 minutes + const attempts = 120 / json.interval; + for (let i = 0; i < attempts; i++) { + await new Promise(resolve => setTimeout(resolve, json.interval * 1000)); + if (token.isCancellationRequested) { + throw new Error(USER_CANCELLATION_ERROR); + } + let accessTokenResult; + try { + accessTokenResult = await fetching(refreshTokenUri.toString(true), { + method: 'POST', + headers: { + Accept: 'application/json' + } + }); + } catch { + continue; + } + + if (!accessTokenResult.ok) { + continue; + } + + const accessTokenJson = await accessTokenResult.json(); + + if (accessTokenJson.error === 'authorization_pending') { + continue; + } + + if (accessTokenJson.error) { + throw new Error(accessTokenJson.error_description); + } + + return accessTokenJson.access_token; + } + + throw new Error(TIMED_OUT_ERROR); + }); + } + }, + new class PatFlow implements IFlow { + label = l10n.t('personal access token'); + options: IFlowOptions = { + supportsGitHubDotCom: true, + supportsGitHubEnterpriseServer: true, + supportsHostedGitHubEnterprise: true, + supportsRemoteExtensionHost: true, + supportsWebWorkerExtensionHost: true, + supportsNoClientSecret: true, + // PATs can't be used with Settings Sync so we don't enable this flow + // for supported clients + supportsSupportedClients: false, + supportsUnsupportedClients: true + }; + + async trigger({ scopes, baseUri, logger, enterpriseUri }: IFlowTriggerOptions) { + logger.info(`Trying to retrieve PAT... (${scopes})`); + + const button = l10n.t('Continue to GitHub'); + const modalResult = await window.showInformationMessage( + l10n.t('Continue to GitHub to create a Personal Access Token (PAT)'), + { + modal: true, + detail: l10n.t('To finish authenticating, navigate to GitHub to create a PAT then paste the PAT into the input box.') + }, button); + + if (modalResult !== button) { + throw new Error(USER_CANCELLATION_ERROR); + } + + const description = `${env.appName} (${scopes})`; + const uriToOpen = await env.asExternalUri(baseUri.with({ path: '/settings/tokens/new', query: `description=${description}&scopes=${scopes.split(' ').join(',')}` })); + await env.openExternal(uriToOpen); + const token = await window.showInputBox({ placeHolder: `ghp_1a2b3c4...`, prompt: `GitHub Personal Access Token - ${scopes}`, ignoreFocusOut: true }); + if (!token) { throw new Error(USER_CANCELLATION_ERROR); } + + const appUri = !enterpriseUri || isHostedGitHubEnterprise(enterpriseUri) + ? Uri.parse(`${baseUri.scheme}://api.${baseUri.authority}`) + : Uri.parse(`${baseUri.scheme}://${baseUri.authority}/api/v3`); + + const tokenScopes = await this.getScopes(token, appUri, logger); // Example: ['repo', 'user'] + const scopesList = scopes.split(' '); // Example: 'read:user repo user:email' + if (!scopesList.every(scope => { + const included = tokenScopes.includes(scope); + if (included || !scope.includes(':')) { + return included; + } + + return scope.split(':').some(splitScopes => { + return tokenScopes.includes(splitScopes); + }); + })) { + throw new Error(`The provided token does not match the requested scopes: ${scopes}`); + } + + return token; + } + + private async getScopes(token: string, serverUri: Uri, logger: Log): Promise { + try { + logger.info('Getting token scopes...'); + const result = await fetching(serverUri.toString(), { + headers: { + Authorization: `token ${token}`, + 'User-Agent': `${env.appName} (${env.appHost})` + } + }); + + if (result.ok) { + const scopes = result.headers.get('X-OAuth-Scopes'); + return scopes ? scopes.split(',').map(scope => scope.trim()) : []; + } else { + logger.error(`Getting scopes failed: ${result.statusText}`); + throw new Error(result.statusText); + } + } catch (ex) { + logger.error(ex.message); + throw new Error(NETWORK_ERROR); + } + } + } +]; + +export function getFlows(query: IFlowQuery) { + return allFlows.filter(flow => { + let useFlow: boolean = true; + switch (query.target) { + case GitHubTarget.DotCom: + useFlow &&= flow.options.supportsGitHubDotCom; + break; + case GitHubTarget.Enterprise: + useFlow &&= flow.options.supportsGitHubEnterpriseServer; + break; + case GitHubTarget.HostedEnterprise: + useFlow &&= flow.options.supportsHostedGitHubEnterprise; + break; + } + + switch (query.extensionHost) { + case ExtensionHost.Remote: + useFlow &&= flow.options.supportsRemoteExtensionHost; + break; + case ExtensionHost.WebWorker: + useFlow &&= flow.options.supportsWebWorkerExtensionHost; + break; + } + + if (!Config.gitHubClientSecret) { + useFlow &&= flow.options.supportsNoClientSecret; + } + + if (query.isSupportedClient) { + // TODO: revisit how we support PAT in GHES but not DotCom... but this works for now since + // there isn't another flow that has supportsSupportedClients = false + useFlow &&= (flow.options.supportsSupportedClients || query.target !== GitHubTarget.DotCom); + } else { + useFlow &&= flow.options.supportsUnsupportedClients; + } + return useFlow; + }); +} diff --git a/extensions/github-authentication/src/github.ts b/extensions/github-authentication/src/github.ts index 6dc6aceaae9..c710cbe4f2f 100644 --- a/extensions/github-authentication/src/github.ts +++ b/extensions/github-authentication/src/github.ts @@ -7,10 +7,11 @@ import * as vscode from 'vscode'; import TelemetryReporter from '@vscode/extension-telemetry'; import { Keychain } from './common/keychain'; import { GitHubServer, IGitHubServer } from './githubServer'; -import { arrayEquals } from './common/utils'; +import { PromiseAdapter, arrayEquals, promiseFromEvent } from './common/utils'; import { ExperimentationTelemetry } from './common/experimentationService'; import { Log } from './common/logger'; import { crypto } from './node/crypto'; +import { TIMED_OUT_ERROR, USER_CANCELLATION_ERROR } from './common/errors'; interface SessionData { id: string; @@ -29,9 +30,63 @@ export enum AuthProviderType { } export class UriEventHandler extends vscode.EventEmitter implements vscode.UriHandler { + private readonly _pendingNonces = new Map(); + private readonly _codeExchangePromises = new Map; cancel: vscode.EventEmitter }>(); + public handleUri(uri: vscode.Uri) { this.fire(uri); } + + public async waitForCode(logger: Log, scopes: string, nonce: string, token: vscode.CancellationToken) { + const existingNonces = this._pendingNonces.get(scopes) || []; + this._pendingNonces.set(scopes, [...existingNonces, nonce]); + + let codeExchangePromise = this._codeExchangePromises.get(scopes); + if (!codeExchangePromise) { + codeExchangePromise = promiseFromEvent(this.event, this.handleEvent(logger, scopes)); + this._codeExchangePromises.set(scopes, codeExchangePromise); + } + + try { + return await Promise.race([ + codeExchangePromise.promise, + new Promise((_, reject) => setTimeout(() => reject(TIMED_OUT_ERROR), 300_000)), // 5min timeout + promiseFromEvent(token.onCancellationRequested, (_, __, reject) => { reject(USER_CANCELLATION_ERROR); }).promise + ]); + } finally { + this._pendingNonces.delete(scopes); + codeExchangePromise?.cancel.fire(); + this._codeExchangePromises.delete(scopes); + } + } + + private handleEvent: (logger: Log, scopes: string) => PromiseAdapter = + (logger: Log, scopes) => (uri, resolve, reject) => { + const query = new URLSearchParams(uri.query); + const code = query.get('code'); + const nonce = query.get('nonce'); + if (!code) { + reject(new Error('No code')); + return; + } + if (!nonce) { + reject(new Error('No nonce')); + return; + } + + const acceptedNonces = this._pendingNonces.get(scopes) || []; + if (!acceptedNonces.includes(nonce)) { + // A common scenario of this happening is if you: + // 1. Trigger a sign in with one set of scopes + // 2. Before finishing 1, you trigger a sign in with a different set of scopes + // In this scenario we should just return and wait for the next UriHandler event + // to run as we are probably still waiting on the user to hit 'Continue' + logger.info('Nonce not found in accepted nonces. Skipping this execution...'); + return; + } + + resolve(code); + }; } export class GitHubAuthenticationProvider implements vscode.AuthenticationProvider, vscode.Disposable { @@ -110,7 +165,7 @@ export class GitHubAuthenticationProvider implements vscode.AuthenticationProvid // We only want to fire a telemetry if we haven't seen this account yet in this session. if (!this._accountsSeen.has(session.account.id)) { this._accountsSeen.add(session.account.id); - this._githubServer.sendAdditionalTelemetryInfo(session.accessToken); + this._githubServer.sendAdditionalTelemetryInfo(session); } } diff --git a/extensions/github-authentication/src/githubServer.ts b/extensions/github-authentication/src/githubServer.ts index dc7278f6d4f..7ac5cd8c577 100644 --- a/extensions/github-authentication/src/githubServer.ts +++ b/extensions/github-authentication/src/githubServer.ts @@ -4,19 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as path from 'path'; -import { PromiseAdapter, promiseFromEvent } from './common/utils'; import { ExperimentationTelemetry } from './common/experimentationService'; import { AuthProviderType, UriEventHandler } from './github'; import { Log } from './common/logger'; import { isSupportedClient, isSupportedTarget } from './common/env'; -import { LoopbackAuthServer } from './node/authServer'; import { crypto } from './node/crypto'; import { fetching } from './node/fetch'; +import { ExtensionHost, GitHubTarget, getFlows } from './flows'; +import { NETWORK_ERROR, USER_CANCELLATION_ERROR } from './common/errors'; -const CLIENT_ID = '01ab8ac9400c4e429b23'; -const GITHUB_TOKEN_URL = 'https://vscode.dev/codeExchangeProxyEndpoints/github/login/oauth/access_token'; -const NETWORK_ERROR = 'network error'; +// This is the error message that we throw if the login was cancelled for any reason. Extensions +// calling `getSession` can handle this error to know that the user cancelled the login. +const CANCELLATION_ERROR = 'Cancelled'; const REDIRECT_URL_STABLE = 'https://vscode.dev/redirect'; const REDIRECT_URL_INSIDERS = 'https://insiders.vscode.dev/redirect'; @@ -24,45 +23,14 @@ const REDIRECT_URL_INSIDERS = 'https://insiders.vscode.dev/redirect'; export interface IGitHubServer { login(scopes: string): Promise; getUserInfo(token: string): Promise<{ id: string; accountName: string }>; - sendAdditionalTelemetryInfo(token: string): Promise; + sendAdditionalTelemetryInfo(session: vscode.AuthenticationSession): Promise; friendlyName: string; } -interface IGitHubDeviceCodeResponse { - device_code: string; - user_code: string; - verification_uri: string; - interval: number; -} - -async function getScopes(token: string, serverUri: vscode.Uri, logger: Log): Promise { - try { - logger.info('Getting token scopes...'); - const result = await fetching(serverUri.toString(), { - headers: { - Authorization: `token ${token}`, - 'User-Agent': 'Visual-Studio-Code' - } - }); - - if (result.ok) { - const scopes = result.headers.get('X-OAuth-Scopes'); - return scopes ? scopes.split(',').map(scope => scope.trim()) : []; - } else { - logger.error(`Getting scopes failed: ${result.statusText}`); - throw new Error(result.statusText); - } - } catch (ex) { - logger.error(ex.message); - throw new Error(NETWORK_ERROR); - } -} export class GitHubServer implements IGitHubServer { readonly friendlyName: string; - private readonly _pendingNonces = new Map(); - private readonly _codeExchangePromises = new Map; cancel: vscode.EventEmitter }>(); private readonly _type: AuthProviderType; private _redirectEndpoint: string | undefined; @@ -122,17 +90,17 @@ export class GitHubServer implements IGitHubServer { let userCancelled: boolean | undefined; const yes = vscode.l10n.t('Yes'); const no = vscode.l10n.t('No'); - const promptToContinue = async () => { + const promptToContinue = async (mode: string) => { if (userCancelled === undefined) { // We haven't had a failure yet so wait to prompt return; } const message = userCancelled - ? vscode.l10n.t('Having trouble logging in? Would you like to try a different way?') - : vscode.l10n.t('You have not yet finished authorizing this extension to use GitHub. Would you like to keep trying?'); + ? vscode.l10n.t('Having trouble logging in? Would you like to try a different way? ({0})', mode) + : vscode.l10n.t('You have not yet finished authorizing this extension to use GitHub. Would you like to try a different way? ({0})', mode); const result = await vscode.window.showWarningMessage(message, yes, no); if (result !== yes) { - throw new Error('Cancelled'); + throw new Error(CANCELLATION_ERROR); } }; @@ -141,352 +109,39 @@ export class GitHubServer implements IGitHubServer { const supportedClient = isSupportedClient(callbackUri); const supportedTarget = isSupportedTarget(this._type, this._ghesUri); - if (supportedClient && supportedTarget) { + + const flows = getFlows({ + target: this._type === AuthProviderType.github + ? GitHubTarget.DotCom + : supportedTarget ? GitHubTarget.HostedEnterprise : GitHubTarget.Enterprise, + extensionHost: typeof navigator === 'undefined' + ? this._extensionKind === vscode.ExtensionKind.UI ? ExtensionHost.Local : ExtensionHost.Remote + : ExtensionHost.WebWorker, + isSupportedClient: supportedClient + }); + + + for (const flow of flows) { try { - return await this.doLoginWithoutLocalServer(scopes, nonce, callbackUri); + if (flow !== flows[0]) { + await promptToContinue(flow.label); + } + return await flow.trigger({ + scopes, + callbackUri, + nonce, + baseUri: this.baseUri, + logger: this._logger, + uriHandler: this._uriHandler, + enterpriseUri: this._ghesUri, + redirectUri: vscode.Uri.parse(await this.getRedirectEndpoint()), + }); } catch (e) { - this._logger.error(e); - userCancelled = e.message ?? e === 'User Cancelled'; + userCancelled = this.processLoginError(e); } } - // Starting a local server is only supported if: - // 1. We are in a UI extension because we need to open a port on the machine that has the browser - // 2. We are in a node runtime because we need to open a port on the machine - // 3. code exchange can only be done with a supported target - if ( - this._extensionKind === vscode.ExtensionKind.UI && - typeof navigator === 'undefined' && - supportedTarget - ) { - try { - await promptToContinue(); - return await this.doLoginWithLocalServer(scopes); - } catch (e) { - this._logger.error(e); - userCancelled = e.message ?? e === 'User Cancelled'; - } - } - - // We only can use the Device Code flow when we have a full node environment because of CORS. - if (typeof navigator === 'undefined') { - try { - await promptToContinue(); - return await this.doLoginDeviceCodeFlow(scopes); - } catch (e) { - this._logger.error(e); - userCancelled = e.message ?? e === 'User Cancelled'; - } - } - - // In a supported environment, we can't use PAT auth because we use this auth for Settings Sync and it doesn't support PATs. - // With that said, GitHub Enterprise isn't used by Settings Sync so we can use PATs for that. - if (!supportedClient || this._type === AuthProviderType.githubEnterprise) { - try { - await promptToContinue(); - return await this.doLoginWithPat(scopes); - } catch (e) { - this._logger.error(e); - userCancelled = e.message ?? e === 'User Cancelled'; - } - } - - throw new Error(userCancelled ? 'Cancelled' : 'No auth flow succeeded.'); - } - - private async doLoginWithoutLocalServer(scopes: string, nonce: string, callbackUri: vscode.Uri): Promise { - this._logger.info(`Trying without local server... (${scopes})`); - return await vscode.window.withProgress({ - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t({ - message: 'Signing in to {0}...', - args: [this.baseUri.authority], - comment: ['The {0} will be a url, e.g. github.com'] - }), - cancellable: true - }, async (_, token) => { - const existingNonces = this._pendingNonces.get(scopes) || []; - this._pendingNonces.set(scopes, [...existingNonces, nonce]); - const redirectUri = await this.getRedirectEndpoint(); - const searchParams = new URLSearchParams([ - ['client_id', CLIENT_ID], - ['redirect_uri', redirectUri], - ['scope', scopes], - ['state', encodeURIComponent(callbackUri.toString(true))] - ]); - - const uri = vscode.Uri.parse(this.baseUri.with({ - path: '/login/oauth/authorize', - query: searchParams.toString() - }).toString(true)); - await vscode.env.openExternal(uri); - - // Register a single listener for the URI callback, in case the user starts the login process multiple times - // before completing it. - let codeExchangePromise = this._codeExchangePromises.get(scopes); - if (!codeExchangePromise) { - codeExchangePromise = promiseFromEvent(this._uriHandler!.event, this.handleUri(scopes)); - this._codeExchangePromises.set(scopes, codeExchangePromise); - } - - try { - return await Promise.race([ - codeExchangePromise.promise, - new Promise((_, reject) => setTimeout(() => reject('Timed out'), 300_000)), // 5min timeout - promiseFromEvent(token.onCancellationRequested, (_, __, reject) => { reject('User Cancelled'); }).promise - ]); - } finally { - this._pendingNonces.delete(scopes); - codeExchangePromise?.cancel.fire(); - this._codeExchangePromises.delete(scopes); - } - }); - } - - private async doLoginWithLocalServer(scopes: string): Promise { - this._logger.info(`Trying with local server... (${scopes})`); - return await vscode.window.withProgress({ - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t({ - message: 'Signing in to {0}...', - args: [this.baseUri.authority], - comment: ['The {0} will be a url, e.g. github.com'] - }), - cancellable: true - }, async (_, token) => { - const redirectUri = await this.getRedirectEndpoint(); - const searchParams = new URLSearchParams([ - ['client_id', CLIENT_ID], - ['redirect_uri', redirectUri], - ['scope', scopes], - ]); - - const loginUrl = this.baseUri.with({ - path: '/login/oauth/authorize', - query: searchParams.toString() - }); - const server = new LoopbackAuthServer(path.join(__dirname, '../media'), loginUrl.toString(true)); - const port = await server.start(); - - let codeToExchange; - try { - vscode.env.openExternal(vscode.Uri.parse(`http://127.0.0.1:${port}/signin?nonce=${encodeURIComponent(server.nonce)}`)); - const { code } = await Promise.race([ - server.waitForOAuthResponse(), - new Promise((_, reject) => setTimeout(() => reject('Timed out'), 300_000)), // 5min timeout - promiseFromEvent(token.onCancellationRequested, (_, __, reject) => { reject('User Cancelled'); }).promise - ]); - codeToExchange = code; - } finally { - setTimeout(() => { - void server.stop(); - }, 5000); - } - - const accessToken = await this.exchangeCodeForToken(codeToExchange); - return accessToken; - }); - } - - private async doLoginDeviceCodeFlow(scopes: string): Promise { - this._logger.info(`Trying device code flow... (${scopes})`); - - // Get initial device code - const uri = this.baseUri.with({ - path: '/login/device/code', - query: `client_id=${CLIENT_ID}&scope=${scopes}` - }); - const result = await fetching(uri.toString(true), { - method: 'POST', - headers: { - Accept: 'application/json' - } - }); - if (!result.ok) { - throw new Error(`Failed to get one-time code: ${await result.text()}`); - } - - const json = await result.json() as IGitHubDeviceCodeResponse; - - const button = vscode.l10n.t('Copy & Continue to GitHub'); - const modalResult = await vscode.window.showInformationMessage( - vscode.l10n.t({ message: 'Your Code: {0}', args: [json.user_code], comment: ['The {0} will be a code, e.g. 123-456'] }), - { - modal: true, - detail: vscode.l10n.t('To finish authenticating, navigate to GitHub and paste in the above one-time code.') - }, button); - - if (modalResult !== button) { - throw new Error('User Cancelled'); - } - - await vscode.env.clipboard.writeText(json.user_code); - - const uriToOpen = await vscode.env.asExternalUri(vscode.Uri.parse(json.verification_uri)); - await vscode.env.openExternal(uriToOpen); - - return await this.waitForDeviceCodeAccessToken(json); - } - - private async doLoginWithPat(scopes: string): Promise { - this._logger.info(`Trying to retrieve PAT... (${scopes})`); - - const button = vscode.l10n.t('Continue to GitHub'); - const modalResult = await vscode.window.showInformationMessage( - vscode.l10n.t('Continue to GitHub to create a Personal Access Token (PAT)'), - { - modal: true, - detail: vscode.l10n.t('To finish authenticating, navigate to GitHub to create a PAT then paste the PAT into the input box.') - }, button); - - if (modalResult !== button) { - throw new Error('User Cancelled'); - } - - const description = `${vscode.env.appName} (${scopes})`; - const uriToOpen = await vscode.env.asExternalUri(this.baseUri.with({ path: '/settings/tokens/new', query: `description=${description}&scopes=${scopes.split(' ').join(',')}` })); - await vscode.env.openExternal(uriToOpen); - const token = await vscode.window.showInputBox({ placeHolder: `ghp_1a2b3c4...`, prompt: `GitHub Personal Access Token - ${scopes}`, ignoreFocusOut: true }); - if (!token) { throw new Error('User Cancelled'); } - - const tokenScopes = await getScopes(token, this.getServerUri('/'), this._logger); // Example: ['repo', 'user'] - const scopesList = scopes.split(' '); // Example: 'read:user repo user:email' - if (!scopesList.every(scope => { - const included = tokenScopes.includes(scope); - if (included || !scope.includes(':')) { - return included; - } - - return scope.split(':').some(splitScopes => { - return tokenScopes.includes(splitScopes); - }); - })) { - throw new Error(`The provided token does not match the requested scopes: ${scopes}`); - } - - return token; - } - - private async waitForDeviceCodeAccessToken( - json: IGitHubDeviceCodeResponse, - ): Promise { - return await vscode.window.withProgress({ - location: vscode.ProgressLocation.Notification, - cancellable: true, - title: vscode.l10n.t({ - message: 'Open [{0}]({0}) in a new tab and paste your one-time code: {1}', - args: [json.verification_uri, json.user_code], - comment: [ - 'The [{0}]({0}) will be a url and the {1} will be a code, e.g. 123-456', - '{Locked="[{0}]({0})"}' - ] - }) - }, async (_, token) => { - const refreshTokenUri = this.baseUri.with({ - path: '/login/oauth/access_token', - query: `client_id=${CLIENT_ID}&device_code=${json.device_code}&grant_type=urn:ietf:params:oauth:grant-type:device_code` - }); - - // Try for 2 minutes - const attempts = 120 / json.interval; - for (let i = 0; i < attempts; i++) { - await new Promise(resolve => setTimeout(resolve, json.interval * 1000)); - if (token.isCancellationRequested) { - throw new Error('User Cancelled'); - } - let accessTokenResult; - try { - accessTokenResult = await fetching(refreshTokenUri.toString(true), { - method: 'POST', - headers: { - Accept: 'application/json' - } - }); - } catch { - continue; - } - - if (!accessTokenResult.ok) { - continue; - } - - const accessTokenJson = await accessTokenResult.json(); - - if (accessTokenJson.error === 'authorization_pending') { - continue; - } - - if (accessTokenJson.error) { - throw new Error(accessTokenJson.error_description); - } - - return accessTokenJson.access_token; - } - - throw new Error('Cancelled'); - }); - } - - private handleUri: (scopes: string) => PromiseAdapter = - (scopes) => (uri, resolve, reject) => { - const query = new URLSearchParams(uri.query); - const code = query.get('code'); - const nonce = query.get('nonce'); - if (!code) { - reject(new Error('No code')); - return; - } - if (!nonce) { - reject(new Error('No nonce')); - return; - } - - const acceptedNonces = this._pendingNonces.get(scopes) || []; - if (!acceptedNonces.includes(nonce)) { - // A common scenario of this happening is if you: - // 1. Trigger a sign in with one set of scopes - // 2. Before finishing 1, you trigger a sign in with a different set of scopes - // In this scenario we should just return and wait for the next UriHandler event - // to run as we are probably still waiting on the user to hit 'Continue' - this._logger.info('Nonce not found in accepted nonces. Skipping this execution...'); - return; - } - - resolve(this.exchangeCodeForToken(code)); - }; - - private async exchangeCodeForToken(code: string): Promise { - this._logger.info('Exchanging code for token...'); - - const proxyEndpoints: { [providerId: string]: string } | undefined = await vscode.commands.executeCommand('workbench.getCodeExchangeProxyEndpoints'); - const endpointUrl = proxyEndpoints?.github ? `${proxyEndpoints.github}login/oauth/access_token` : GITHUB_TOKEN_URL; - - const body = new URLSearchParams([['code', code]]); - if (this._type === AuthProviderType.githubEnterprise) { - body.append('github_enterprise', this.baseUri.toString(true)); - body.append('redirect_uri', await this.getRedirectEndpoint()); - } - const result = await fetching(endpointUrl, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded', - 'Content-Length': body.toString() - - }, - body: body.toString() - }); - - if (result.ok) { - const json = await result.json(); - this._logger.info('Token exchange success!'); - return json.access_token; - } else { - const text = await result.text(); - const error = new Error(text); - error.name = 'GitHubTokenExchangeError'; - throw error; - } + throw new Error(userCancelled ? CANCELLATION_ERROR : 'No auth flow succeeded.'); } private getServerUri(path: string = '') { @@ -506,7 +161,7 @@ export class GitHubServer implements IGitHubServer { result = await fetching(this.getServerUri('/user').toString(), { headers: { Authorization: `token ${token}`, - 'User-Agent': 'Visual-Studio-Code' + 'User-Agent': `${vscode.env.appName} (${vscode.env.appHost})` } }); } catch (ex) { @@ -539,7 +194,7 @@ export class GitHubServer implements IGitHubServer { } } - public async sendAdditionalTelemetryInfo(token: string): Promise { + public async sendAdditionalTelemetryInfo(session: vscode.AuthenticationSession): Promise { if (!vscode.env.isTelemetryEnabled) { return; } @@ -550,22 +205,22 @@ export class GitHubServer implements IGitHubServer { } if (this._type === AuthProviderType.github) { - return await this.checkUserDetails(token); + return await this.checkUserDetails(session); } // GHES - await this.checkEnterpriseVersion(token); + await this.checkEnterpriseVersion(session.accessToken); } - private async checkUserDetails(token: string): Promise { + private async checkUserDetails(session: vscode.AuthenticationSession): Promise { let edu: string | undefined; try { const result = await fetching('https://education.github.com/api/user', { headers: { - Authorization: `token ${token}`, + Authorization: `token ${session.accessToken}`, 'faculty-check-preview': 'true', - 'User-Agent': 'Visual-Studio-Code' + 'User-Agent': `${vscode.env.appName} (${vscode.env.appHost})` } }); @@ -576,22 +231,11 @@ export class GitHubServer implements IGitHubServer { : json.faculty ? 'faculty' : 'none'; + } else { + edu = 'unknown'; } } catch (e) { - // No-op - } - - let managed: string | undefined; - try { - const user = await this.getUserInfo(token); - // Apparently, this is how you tell if a user is an EMU... - managed = user.accountName.includes('_') ? 'true' : 'false'; - } catch (e) { - // No-op - } - - if (edu === undefined && managed === undefined) { - return; + edu = 'unknown'; } /* __GDPR__ @@ -602,8 +246,9 @@ export class GitHubServer implements IGitHubServer { } */ this._telemetryReporter.sendTelemetryEvent('session', { - isEdu: edu ?? 'unknown', - isManaged: managed ?? 'unknown' + isEdu: edu, + // Apparently, this is how you tell if a user is an EMU... + isManaged: session.account.label.includes('_') ? 'true' : 'false' }); } @@ -614,7 +259,7 @@ export class GitHubServer implements IGitHubServer { const result = await fetching(this.getServerUri('/meta').toString(), { headers: { Authorization: `token ${token}`, - 'User-Agent': 'Visual-Studio-Code' + 'User-Agent': `${vscode.env.appName} (${vscode.env.appHost})` } }); @@ -641,4 +286,12 @@ export class GitHubServer implements IGitHubServer { // No-op } } + + private processLoginError(error: Error): boolean { + if (error.message === CANCELLATION_ERROR) { + throw error; + } + this._logger.error(error.message ?? error); + return error.message === USER_CANCELLATION_ERROR; + } } diff --git a/extensions/github/package.json b/extensions/github/package.json index 2cdb0307196..da9ccd0084e 100644 --- a/extensions/github/package.json +++ b/extensions/github/package.json @@ -8,6 +8,7 @@ "engines": { "vscode": "^1.41.0" }, + "aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "icon": "images/icon.png", "categories": [ "Other" @@ -27,7 +28,9 @@ }, "enabledApiProposals": [ "contribShareMenu", - "contribEditSessions" + "contribEditSessions", + "canonicalUriProvider", + "shareProvider" ], "contributes": { "commands": [ @@ -43,6 +46,10 @@ "command": "github.copyVscodeDevLinkFile", "title": "Copy vscode.dev Link" }, + { + "command": "github.copyVscodeDevLinkWithoutRange", + "title": "Copy vscode.dev Link" + }, { "command": "github.openOnVscodeDev", "title": "Open in vscode.dev", @@ -72,6 +79,10 @@ "command": "github.copyVscodeDevLinkFile", "when": "false" }, + { + "command": "github.copyVscodeDevLinkWithoutRange", + "when": "false" + }, { "command": "github.openOnVscodeDev", "when": "false" @@ -80,14 +91,40 @@ "file/share": [ { "command": "github.copyVscodeDevLinkFile", - "when": "github.hasGitHubRepo", + "when": "github.hasGitHubRepo && remoteName != 'codespaces'", "group": "0_vscode@0" } ], "editor/context/share": [ { "command": "github.copyVscodeDevLink", - "when": "github.hasGitHubRepo && resourceScheme != untitled", + "when": "github.hasGitHubRepo && resourceScheme != untitled && remoteName != 'codespaces'", + "group": "0_vscode@0" + } + ], + "explorer/context/share": [ + { + "command": "github.copyVscodeDevLinkWithoutRange", + "when": "github.hasGitHubRepo && resourceScheme != untitled && remoteName != 'codespaces'", + "group": "0_vscode@0" + } + ], + "editor/lineNumber/context": [ + { + "command": "github.copyVscodeDevLink", + "when": "github.hasGitHubRepo && resourceScheme != untitled && activeEditor == workbench.editors.files.textFileEditor && config.editor.lineNumbers == on && remoteName != 'codespaces'", + "group": "1_cutcopypaste@2" + }, + { + "command": "github.copyVscodeDevLink", + "when": "github.hasGitHubRepo && resourceScheme != untitled && activeEditor == workbench.editor.notebook && remoteName != 'codespaces'", + "group": "1_cutcopypaste@2" + } + ], + "editor/title/context/share": [ + { + "command": "github.copyVscodeDevLinkWithoutRange", + "when": "github.hasGitHubRepo && resourceScheme != untitled && remoteName != 'codespaces'", "group": "0_vscode@0" } ] @@ -96,6 +133,12 @@ { "title": "GitHub", "properties": { + "github.branchProtection": { + "type": "boolean", + "scope": "resource", + "default": false, + "description": "%config.branchProtection%" + }, "github.gitAuthentication": { "type": "boolean", "scope": "resource", @@ -118,12 +161,12 @@ { "view": "scm", "contents": "%welcome.publishFolder%", - "when": "config.git.enabled && git.state == initialized && workbenchState == folder && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0" + "when": "config.git.enabled && git.state == initialized && workbenchState == folder && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0" }, { "view": "scm", "contents": "%welcome.publishWorkspaceFolder%", - "when": "config.git.enabled && git.state == initialized && workbenchState == workspace && workspaceFolderCount != 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0" + "when": "config.git.enabled && git.state == initialized && workbenchState == workspace && workspaceFolderCount != 0 && git.parentRepositoryCount == 0 && git.unsafeRepositoryCount == 0 && git.closedRepositoryCount == 0" } ], "markdown.previewStyles": [ @@ -136,8 +179,11 @@ "watch": "gulp watch-extension:github" }, "dependencies": { + "@octokit/graphql": "5.0.5", + "@octokit/graphql-schema": "14.4.0", "@octokit/rest": "19.0.4", - "tunnel": "^0.0.6" + "tunnel": "^0.0.6", + "@vscode/extension-telemetry": "0.7.5" }, "devDependencies": { "@types/node": "16.x" diff --git a/extensions/github/package.nls.json b/extensions/github/package.nls.json index 1e0ac702bb4..ad3cf82e010 100644 --- a/extensions/github/package.nls.json +++ b/extensions/github/package.nls.json @@ -1,6 +1,7 @@ { "displayName": "GitHub", "description": "GitHub features for VS Code", + "config.branchProtection": "Controls whether to query repository rules for GitHub repositories", "config.gitAuthentication": "Controls whether to enable automatic GitHub authentication for git commands within VS Code.", "config.gitProtocol": "Controls which protocol is used to clone a GitHub repository", "welcome.publishFolder": { diff --git a/extensions/github/src/auth.ts b/extensions/github/src/auth.ts index 859fe9fa821..e7be2637da0 100644 --- a/extensions/github/src/auth.ts +++ b/extensions/github/src/auth.ts @@ -5,10 +5,13 @@ import { AuthenticationSession, authentication, window } from 'vscode'; import { Agent, globalAgent } from 'https'; +import { graphql } from '@octokit/graphql/dist-types/types'; import { Octokit } from '@octokit/rest'; import { httpsOverHttp } from 'tunnel'; import { URL } from 'url'; +export class AuthenticationError extends Error { } + function getAgent(url: string | undefined = process.env.HTTPS_PROXY): Agent { if (!url) { return globalAgent; @@ -53,3 +56,34 @@ export function getOctokit(): Promise { return _octokit; } + +let _octokitGraphql: Promise | undefined; + +export async function getOctokitGraphql(): Promise { + if (!_octokitGraphql) { + try { + const session = await authentication.getSession('github', scopes, { silent: true }); + + if (!session) { + throw new AuthenticationError('No GitHub authentication session available.'); + } + + const token = session.accessToken; + const { graphql } = await import('@octokit/graphql'); + + return graphql.defaults({ + headers: { + authorization: `token ${token}` + }, + request: { + agent: getAgent() + } + }); + } catch (err) { + _octokitGraphql = undefined; + throw err; + } + } + + return _octokitGraphql; +} diff --git a/extensions/github/src/branchProtection.ts b/extensions/github/src/branchProtection.ts new file mode 100644 index 00000000000..8966b41c155 --- /dev/null +++ b/extensions/github/src/branchProtection.ts @@ -0,0 +1,231 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { authentication, EventEmitter, LogOutputChannel, Memento, Uri, workspace } from 'vscode'; +import { Repository as GitHubRepository, RepositoryRuleset } from '@octokit/graphql-schema'; +import { AuthenticationError, getOctokitGraphql } from './auth'; +import { API, BranchProtection, BranchProtectionProvider, BranchProtectionRule, Repository } from './typings/git'; +import { DisposableStore, getRepositoryFromUrl } from './util'; + +const REPOSITORY_QUERY = ` + query repositoryPermissions($owner: String!, $repo: String!) { + repository(owner: $owner, name: $repo) { + defaultBranchRef { + name + }, + viewerPermission + } + } +`; + +const REPOSITORY_RULESETS_QUERY = ` + query repositoryRulesets($owner: String!, $repo: String!, $cursor: String, $limit: Int = 100) { + repository(owner: $owner, name: $repo) { + rulesets(includeParents: true, first: $limit, after: $cursor) { + nodes { + name + enforcement + rules(type: PULL_REQUEST) { + totalCount + } + conditions { + refName { + include + exclude + } + } + target + }, + pageInfo { + endCursor, + hasNextPage + } + } + } + } +`; + +export class GithubBranchProtectionProviderManager { + + private readonly disposables = new DisposableStore(); + private readonly providerDisposables = new DisposableStore(); + + private _enabled = false; + private set enabled(enabled: boolean) { + if (this._enabled === enabled) { + return; + } + + if (enabled) { + for (const repository of this.gitAPI.repositories) { + this.providerDisposables.add(this.gitAPI.registerBranchProtectionProvider(repository.rootUri, new GithubBranchProtectionProvider(repository, this.globalState, this.logger))); + } + } else { + this.providerDisposables.dispose(); + } + + this._enabled = enabled; + } + + constructor( + private readonly gitAPI: API, + private readonly globalState: Memento, + private readonly logger: LogOutputChannel) { + this.disposables.add(this.gitAPI.onDidOpenRepository(repository => { + if (this._enabled) { + this.providerDisposables.add(gitAPI.registerBranchProtectionProvider(repository.rootUri, new GithubBranchProtectionProvider(repository, this.globalState, this.logger))); + } + })); + + this.disposables.add(workspace.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('github.branchProtection')) { + this.updateEnablement(); + } + })); + + this.updateEnablement(); + } + + private updateEnablement(): void { + const config = workspace.getConfiguration('github', null); + this.enabled = config.get('branchProtection', true) === true; + } + + dispose(): void { + this.enabled = false; + this.disposables.dispose(); + } + +} + +export class GithubBranchProtectionProvider implements BranchProtectionProvider { + private readonly _onDidChangeBranchProtection = new EventEmitter(); + onDidChangeBranchProtection = this._onDidChangeBranchProtection.event; + + private branchProtection: BranchProtection[]; + private readonly globalStateKey = `branchProtection:${this.repository.rootUri.toString()}`; + + constructor( + private readonly repository: Repository, + private readonly globalState: Memento, + private readonly logger: LogOutputChannel) { + // Restore branch protection from global state + this.branchProtection = this.globalState.get(this.globalStateKey, []); + + repository.status().then(() => { + authentication.onDidChangeSessions(e => { + if (e.provider.id === 'github') { + this.updateRepositoryBranchProtection(); + } + }); + this.updateRepositoryBranchProtection(); + }); + } + + provideBranchProtection(): BranchProtection[] { + return this.branchProtection; + } + + private async getRepositoryDetails(owner: string, repo: string): Promise { + const graphql = await getOctokitGraphql(); + const { repository } = await graphql<{ repository: GitHubRepository }>(REPOSITORY_QUERY, { owner, repo }); + + return repository; + } + + private async getRepositoryRulesets(owner: string, repo: string): Promise { + const rulesets: RepositoryRuleset[] = []; + + let cursor: string | undefined = undefined; + const graphql = await getOctokitGraphql(); + + while (true) { + const { repository } = await graphql<{ repository: GitHubRepository }>(REPOSITORY_RULESETS_QUERY, { owner, repo, cursor }); + + rulesets.push(...(repository.rulesets?.nodes ?? []) + // Active branch ruleset that contains the pull request required rule + .filter(node => node && node.target === 'BRANCH' && node.enforcement === 'ACTIVE' && (node.rules?.totalCount ?? 0) > 0) as RepositoryRuleset[]); + + if (repository.rulesets?.pageInfo.hasNextPage) { + cursor = repository.rulesets.pageInfo.endCursor as string | undefined; + } else { + break; + } + } + + return rulesets; + } + + private async updateRepositoryBranchProtection(): Promise { + const branchProtection: BranchProtection[] = []; + + try { + for (const remote of this.repository.state.remotes) { + const repository = getRepositoryFromUrl(remote.pushUrl ?? remote.fetchUrl ?? ''); + + if (!repository) { + continue; + } + + // Repository details + this.logger.trace(`Fetching repository details for "${repository.owner}/${repository.repo}".`); + const repositoryDetails = await this.getRepositoryDetails(repository.owner, repository.repo); + + // Check repository write permission + if (repositoryDetails.viewerPermission !== 'ADMIN' && repositoryDetails.viewerPermission !== 'MAINTAIN' && repositoryDetails.viewerPermission !== 'WRITE') { + this.logger.trace(`Skipping branch protection for "${repository.owner}/${repository.repo}" due to missing repository write permission.`); + continue; + } + + // Get repository rulesets + const branchProtectionRules: BranchProtectionRule[] = []; + const repositoryRulesets = await this.getRepositoryRulesets(repository.owner, repository.repo); + + for (const ruleset of repositoryRulesets) { + branchProtectionRules.push({ + include: (ruleset.conditions.refName?.include ?? []).map(r => this.parseRulesetRefName(repositoryDetails, r)), + exclude: (ruleset.conditions.refName?.exclude ?? []).map(r => this.parseRulesetRefName(repositoryDetails, r)) + }); + } + + branchProtection.push({ remote: remote.name, rules: branchProtectionRules }); + } + + this.branchProtection = branchProtection; + this._onDidChangeBranchProtection.fire(this.repository.rootUri); + + // Save branch protection to global state + await this.globalState.update(this.globalStateKey, branchProtection); + this.logger.trace(`Branch protection for "${this.repository.rootUri.toString()}": ${JSON.stringify(branchProtection)}.`); + } catch (err) { + this.logger.warn(`Failed to update repository branch protection: ${err.message}`); + + if (err instanceof AuthenticationError) { + // A GitHub authentication session could be missing if the user has not yet + // signed in with their GitHub account or they have signed out. In this case + // we have to clear the branch protection information. + this.branchProtection = branchProtection; + this._onDidChangeBranchProtection.fire(this.repository.rootUri); + + await this.globalState.update(this.globalStateKey, undefined); + } + } + } + + private parseRulesetRefName(repository: GitHubRepository, refName: string): string { + if (refName.startsWith('refs/heads/')) { + return refName.substring(11); + } + + switch (refName) { + case '~ALL': + return '**/*'; + case '~DEFAULT_BRANCH': + return repository.defaultBranchRef!.name; + default: + return refName; + } + } +} diff --git a/extensions/github/src/canonicalUriProvider.ts b/extensions/github/src/canonicalUriProvider.ts new file mode 100644 index 00000000000..09f5e243bc1 --- /dev/null +++ b/extensions/github/src/canonicalUriProvider.ts @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CancellationToken, CanonicalUriProvider, CanonicalUriRequestOptions, Disposable, ProviderResult, Uri, workspace } from 'vscode'; +import { API } from './typings/git'; + +const SUPPORTED_SCHEMES = ['ssh', 'https', 'file']; + +export class GitHubCanonicalUriProvider implements CanonicalUriProvider { + + private disposables: Disposable[] = []; + constructor(private gitApi: API) { + this.disposables.push(...SUPPORTED_SCHEMES.map((scheme) => workspace.registerCanonicalUriProvider(scheme, this))); + } + + dispose() { this.disposables.forEach((disposable) => disposable.dispose()); } + + provideCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, _token: CancellationToken): ProviderResult { + if (options.targetScheme !== 'https') { + return; + } + + switch (uri.scheme) { + case 'file': { + const repository = this.gitApi.getRepository(uri); + const remote = repository?.state.remotes.find((remote) => remote.name === repository.state.HEAD?.remote)?.pushUrl?.replace(/^(git@[^\/:]+)(:)/i, 'ssh://$1/'); + if (remote) { + return toHttpsGitHubRemote(uri); + } + } + default: + return toHttpsGitHubRemote(uri); + } + } +} + +function toHttpsGitHubRemote(uri: Uri) { + if (uri.scheme === 'ssh' && uri.authority === 'git@github.com') { + // if this is a git@github.com URI, return the HTTPS equivalent + const [owner, repo] = (uri.path.endsWith('.git') ? uri.path.slice(0, -4) : uri.path).split('/').filter((segment) => segment.length > 0); + return Uri.parse(`https://github.com/${owner}/${repo}`); + } + if (uri.scheme === 'https' && uri.authority === 'github.com') { + return uri; + } + return undefined; +} diff --git a/extensions/github/src/commands.ts b/extensions/github/src/commands.ts index d46bd50e454..1f1504521f8 100644 --- a/extensions/github/src/commands.ts +++ b/extensions/github/src/commands.ts @@ -7,29 +7,29 @@ import * as vscode from 'vscode'; import { API as GitAPI } from './typings/git'; import { publishRepository } from './publish'; import { DisposableStore } from './util'; -import { getLink } from './links'; +import { LinkContext, getLink, getVscodeDevHost } from './links'; -function getVscodeDevHost(): string { - return `https://${vscode.env.appName.toLowerCase().includes('insiders') ? 'insiders.' : ''}vscode.dev/github`; -} - -async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean) { +async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean, context: LinkContext, includeRange = true) { try { - const permalink = getLink(gitAPI, useSelection, getVscodeDevHost()); + const permalink = await getLink(gitAPI, useSelection, true, getVscodeDevHost(), 'headlink', context, includeRange); if (permalink) { return vscode.env.clipboard.writeText(permalink); } } catch (err) { - vscode.window.showErrorMessage(err.message); + if (!(err instanceof vscode.CancellationError)) { + vscode.window.showErrorMessage(err.message); + } } } async function openVscodeDevLink(gitAPI: GitAPI): Promise { try { - const headlink = getLink(gitAPI, true, getVscodeDevHost(), 'headlink'); + const headlink = await getLink(gitAPI, true, false, getVscodeDevHost(), 'headlink'); return headlink ? vscode.Uri.parse(headlink) : undefined; } catch (err) { - vscode.window.showErrorMessage(err.message); + if (!(err instanceof vscode.CancellationError)) { + vscode.window.showErrorMessage(err.message); + } return undefined; } } @@ -45,12 +45,16 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { } })); - disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLink', async () => { - return copyVscodeDevLink(gitAPI, true); + disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLink', async (context: LinkContext) => { + return copyVscodeDevLink(gitAPI, true, context); })); - disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkFile', async () => { - return copyVscodeDevLink(gitAPI, false); + disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkFile', async (context: LinkContext) => { + return copyVscodeDevLink(gitAPI, false, context); + })); + + disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkWithoutRange', async (context: LinkContext) => { + return copyVscodeDevLink(gitAPI, true, context, false); })); disposables.add(vscode.commands.registerCommand('github.openOnVscodeDev', async () => { diff --git a/extensions/github/src/extension.ts b/extensions/github/src/extension.ts index a3a84b033dd..e6a91970c61 100644 --- a/extensions/github/src/extension.ts +++ b/extensions/github/src/extension.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { commands, Disposable, ExtensionContext, extensions } from 'vscode'; +import { commands, Disposable, ExtensionContext, extensions, l10n, LogLevel, LogOutputChannel, window } from 'vscode'; +import TelemetryReporter from '@vscode/extension-telemetry'; import { GithubRemoteSourceProvider } from './remoteSourceProvider'; import { API, GitExtension } from './typings/git'; import { registerCommands } from './commands'; @@ -12,10 +13,29 @@ import { DisposableStore, repositoryHasGitHubRemote } from './util'; import { GithubPushErrorHandler } from './pushErrorHandler'; import { GitBaseExtension } from './typings/git-base'; import { GithubRemoteSourcePublisher } from './remoteSourcePublisher'; +import { GithubBranchProtectionProviderManager } from './branchProtection'; +import { GitHubCanonicalUriProvider } from './canonicalUriProvider'; +import { VscodeDevShareProvider } from './shareProviders'; export function activate(context: ExtensionContext): void { - context.subscriptions.push(initializeGitBaseExtension()); - context.subscriptions.push(initializeGitExtension()); + const disposables: Disposable[] = []; + context.subscriptions.push(new Disposable(() => Disposable.from(...disposables).dispose())); + + const logger = window.createOutputChannel('GitHub', { log: true }); + disposables.push(logger); + + const onDidChangeLogLevel = (logLevel: LogLevel) => { + logger.appendLine(l10n.t('Log level: {0}', LogLevel[logLevel])); + }; + disposables.push(logger.onDidChangeLogLevel(onDidChangeLogLevel)); + onDidChangeLogLevel(logger.logLevel); + + const { aiKey } = require('../package.json') as { aiKey: string }; + const telemetryReporter = new TelemetryReporter(aiKey); + disposables.push(telemetryReporter); + + disposables.push(initializeGitBaseExtension()); + disposables.push(initializeGitExtension(context, telemetryReporter, logger)); } function initializeGitBaseExtension(): Disposable { @@ -63,7 +83,7 @@ function setGitHubContext(gitAPI: API, disposables: DisposableStore) { } } -function initializeGitExtension(): Disposable { +function initializeGitExtension(context: ExtensionContext, telemetryReporter: TelemetryReporter, logger: LogOutputChannel): Disposable { const disposables = new DisposableStore(); let gitExtension = extensions.getExtension('vscode.git'); @@ -77,8 +97,11 @@ function initializeGitExtension(): Disposable { disposables.add(registerCommands(gitAPI)); disposables.add(new GithubCredentialProviderManager(gitAPI)); - disposables.add(gitAPI.registerPushErrorHandler(new GithubPushErrorHandler())); + disposables.add(new GithubBranchProtectionProviderManager(gitAPI, context.globalState, logger)); + disposables.add(gitAPI.registerPushErrorHandler(new GithubPushErrorHandler(telemetryReporter))); disposables.add(gitAPI.registerRemoteSourcePublisher(new GithubRemoteSourcePublisher(gitAPI))); + disposables.add(new GitHubCanonicalUriProvider(gitAPI)); + disposables.add(new VscodeDevShareProvider(gitAPI)); setGitHubContext(gitAPI, disposables); commands.executeCommand('setContext', 'git-base.gitEnabled', true); diff --git a/extensions/github/src/links.ts b/extensions/github/src/links.ts index 00a2354645b..b270792404f 100644 --- a/extensions/github/src/links.ts +++ b/extensions/github/src/links.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { API as GitAPI, Repository } from './typings/git'; -import { getRepositoryFromUrl } from './util'; +import { API as GitAPI, RefType, Repository } from './typings/git'; +import { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util'; export function isFileInRepo(repository: Repository, file: vscode.Uri): boolean { return file.path.toLowerCase() === repository.rootUri.path.toLowerCase() || @@ -40,22 +40,40 @@ interface INotebookPosition { range: vscode.Range | undefined; } -function getFileAndPosition(): IFilePosition | INotebookPosition | undefined { - let uri: vscode.Uri | undefined; - let range: vscode.Range | undefined; - if (vscode.window.activeTextEditor) { - uri = vscode.window.activeTextEditor.document.uri; +interface EditorLineNumberContext { + uri: vscode.Uri; + lineNumber: number; +} +export type LinkContext = vscode.Uri | EditorLineNumberContext | undefined; +function extractContext(context: LinkContext): { fileUri: vscode.Uri | undefined; lineNumber: number | undefined } { + if (context instanceof vscode.Uri) { + return { fileUri: context, lineNumber: undefined }; + } else if (context !== undefined && 'lineNumber' in context && 'uri' in context) { + return { fileUri: context.uri, lineNumber: context.lineNumber }; + } else { + return { fileUri: undefined, lineNumber: undefined }; + } +} + +function getFileAndPosition(context: LinkContext): IFilePosition | INotebookPosition | undefined { + let range: vscode.Range | undefined; + + const { fileUri, lineNumber } = extractContext(context); + const uri = fileUri ?? vscode.window.activeTextEditor?.document.uri; + + if (uri) { if (uri.scheme === 'vscode-notebook-cell' && vscode.window.activeNotebookEditor?.notebook.uri.fsPath === uri.fsPath) { // if the active editor is a notebook editor and the focus is inside any a cell text editor // generate deep link for text selection for the notebook cell. const cell = vscode.window.activeNotebookEditor.notebook.getCells().find(cell => cell.document.uri.fragment === uri?.fragment); const cellIndex = cell?.index ?? vscode.window.activeNotebookEditor.selection.start; - const range = cell !== undefined ? vscode.window.activeTextEditor.selection : undefined; + + const range = getRangeOrSelection(lineNumber); return { type: LinkType.Notebook, uri, cellIndex, range }; } else { // the active editor is a text editor - range = vscode.window.activeTextEditor.selection; + range = getRangeOrSelection(lineNumber); return { type: LinkType.File, uri, range }; } } @@ -68,7 +86,13 @@ function getFileAndPosition(): IFilePosition | INotebookPosition | undefined { return undefined; } -function rangeString(range: vscode.Range | undefined) { +function getRangeOrSelection(lineNumber: number | undefined) { + return lineNumber !== undefined && (!vscode.window.activeTextEditor || vscode.window.activeTextEditor.selection.isEmpty || !vscode.window.activeTextEditor.selection.contains(new vscode.Position(lineNumber - 1, 0))) + ? new vscode.Range(lineNumber - 1, 0, lineNumber - 1, 1) + : vscode.window.activeTextEditor?.selection; +} + +export function rangeString(range: vscode.Range | undefined) { if (!range) { return ''; } @@ -95,19 +119,32 @@ export function notebookCellRangeString(index: number | undefined, range: vscode return hash; } -export function getLink(gitAPI: GitAPI, useSelection: boolean, hostPrefix?: string, linkType: 'permalink' | 'headlink' = 'permalink'): string | undefined { +export function encodeURIComponentExceptSlashes(path: string) { + // There may be special characters like # and whitespace in the path. + // These characters are not escaped by encodeURI(), so it is not sufficient to + // feed the full URI to encodeURI(). + // Additonally, if we feed the full path into encodeURIComponent(), + // this will also encode the path separators, leading to an invalid path. + // Therefore, split on the path separator and encode each segment individually. + return path.split('/').map((segment) => encodeURIComponent(segment)).join('/'); +} + +export async function getLink(gitAPI: GitAPI, useSelection: boolean, shouldEnsurePublished: boolean, hostPrefix?: string, linkType: 'permalink' | 'headlink' = 'permalink', context?: LinkContext, useRange?: boolean): Promise { hostPrefix = hostPrefix ?? 'https://github.com'; - const fileAndPosition = getFileAndPosition(); - if (!fileAndPosition) { - return; - } - const uri = fileAndPosition.uri; + const fileAndPosition = getFileAndPosition(context); + const fileUri = fileAndPosition?.uri; // Use the first repo if we cannot determine a repo from the uri. - const gitRepo = (uri ? getRepositoryForFile(gitAPI, uri) : gitAPI.repositories[0]) ?? gitAPI.repositories[0]; + const githubRepository = gitAPI.repositories.find(repo => repositoryHasGitHubRemote(repo)); + const gitRepo = (fileUri ? getRepositoryForFile(gitAPI, fileUri) : githubRepository) ?? githubRepository; if (!gitRepo) { return; } + + if (shouldEnsurePublished && fileUri) { + await ensurePublished(gitRepo, fileUri); + } + let repo: { owner: string; repo: string } | undefined; gitRepo.state.remotes.find(remote => { if (remote.fetchUrl) { @@ -125,11 +162,93 @@ export function getLink(gitAPI: GitAPI, useSelection: boolean, hostPrefix?: stri return; } - const blobSegment = (gitRepo.state.HEAD?.ahead === 0) ? `/blob/${linkType === 'headlink' ? gitRepo.state.HEAD.name : gitRepo.state.HEAD?.commit}` : ''; - const fileSegments = fileAndPosition.type === LinkType.File - ? (useSelection ? `${uri.path.substring(gitRepo.rootUri.path.length)}${rangeString(fileAndPosition.range)}` : '') - : (useSelection ? `${uri.path.substring(gitRepo.rootUri.path.length)}${notebookCellRangeString(fileAndPosition.cellIndex, fileAndPosition.range)}` : ''); + const blobSegment = gitRepo.state.HEAD ? (`/blob/${linkType === 'headlink' && gitRepo.state.HEAD.name ? encodeURIComponentExceptSlashes(gitRepo.state.HEAD.name) : gitRepo.state.HEAD?.commit}`) : ''; + const uriWithoutFileSegments = `${hostPrefix}/${repo.owner}/${repo.repo}${blobSegment}`; + if (!fileUri) { + return uriWithoutFileSegments; + } - return `${hostPrefix}/${repo.owner}/${repo.repo}${blobSegment - }${fileSegments}`; + const encodedFilePath = encodeURIComponentExceptSlashes(fileUri.path.substring(gitRepo.rootUri.path.length)); + const fileSegments = fileAndPosition.type === LinkType.File + ? (useSelection ? `${encodedFilePath}${useRange ? rangeString(fileAndPosition.range) : ''}` : '') + : (useSelection ? `${encodedFilePath}${useRange ? notebookCellRangeString(fileAndPosition.cellIndex, fileAndPosition.range) : ''}` : ''); + + return `${uriWithoutFileSegments}${fileSegments}`; +} + +export function getBranchLink(url: string, branch: string, hostPrefix: string = 'https://github.com') { + const repo = getRepositoryFromUrl(url); + if (!repo) { + throw new Error('Invalid repository URL provided'); + } + + branch = encodeURIComponentExceptSlashes(branch); + return `${hostPrefix}/${repo.owner}/${repo.repo}/tree/${branch}`; +} + +export function getVscodeDevHost(): string { + return `https://${vscode.env.appName.toLowerCase().includes('insiders') ? 'insiders.' : ''}vscode.dev/github`; +} + +export async function ensurePublished(repository: Repository, file: vscode.Uri) { + if ((repository.state.HEAD?.type === RefType.Head || repository.state.HEAD?.type === RefType.Tag) + // If HEAD is not published, make sure it is + && !repository?.state.HEAD?.upstream + ) { + const publishBranch = vscode.l10n.t('Publish Branch & Copy Link'); + const selection = await vscode.window.showInformationMessage( + vscode.l10n.t('The current branch is not published to the remote. Would you like to publish your branch before copying a link?'), + { modal: true }, + publishBranch + ); + if (selection !== publishBranch) { + throw new vscode.CancellationError(); + } + + await vscode.commands.executeCommand('git.publish'); + } + + const uncommittedChanges = [...repository.state.workingTreeChanges, ...repository.state.indexChanges]; + if (uncommittedChanges.find((c) => c.uri.toString() === file.toString()) && !repository.state.HEAD?.ahead && !repository.state.HEAD?.behind) { + const commitChanges = vscode.l10n.t('Commit Changes'); + const copyAnyway = vscode.l10n.t('Copy Anyway'); + const selection = await vscode.window.showWarningMessage( + vscode.l10n.t('The current file has uncommitted changes. Please commit your changes before copying a link.'), + { modal: true }, + commitChanges, + copyAnyway + ); + + if (selection !== copyAnyway) { + // Focus the SCM view + vscode.commands.executeCommand('workbench.view.scm'); + throw new vscode.CancellationError(); + } + } else if (repository.state.HEAD?.ahead) { + const pushCommits = vscode.l10n.t('Push Commits & Copy Link'); + const selection = await vscode.window.showInformationMessage( + vscode.l10n.t('The current branch has unpublished commits. Would you like to push your commits before copying a link?'), + { modal: true }, + pushCommits + ); + if (selection !== pushCommits) { + throw new vscode.CancellationError(); + } + + await repository.push(); + } else if (repository.state.HEAD?.behind) { + const pull = vscode.l10n.t('Pull Changes & Copy Link'); + const selection = await vscode.window.showInformationMessage( + vscode.l10n.t('The current branch is not up to date. Would you like to pull before copying a link?'), + { modal: true }, + pull + ); + if (selection !== pull) { + throw new vscode.CancellationError(); + } + + await repository.pull(); + } + + await repository.status(); } diff --git a/extensions/github/src/publish.ts b/extensions/github/src/publish.ts index 3f24b1061cc..dee8898d348 100644 --- a/extensions/github/src/publish.ts +++ b/extensions/github/src/publish.ts @@ -190,7 +190,7 @@ export async function publishRepository(gitAPI: GitAPI, repository?: Repository) progress.report({ message: vscode.l10n.t('Creating first commit'), increment: 25 }); if (!repository) { - repository = await gitAPI.init(folder) || undefined; + repository = await gitAPI.init(folder, { defaultBranch: createdGithubRepository.default_branch }) || undefined; if (!repository) { return; diff --git a/extensions/github/src/pushErrorHandler.ts b/extensions/github/src/pushErrorHandler.ts index 6d4b4112811..f1702bf15dd 100644 --- a/extensions/github/src/pushErrorHandler.ts +++ b/extensions/github/src/pushErrorHandler.ts @@ -4,7 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { TextDecoder } from 'util'; -import { commands, env, ProgressLocation, Uri, window, workspace, QuickPickOptions, FileType, l10n } from 'vscode'; +import { commands, env, ProgressLocation, Uri, window, workspace, QuickPickOptions, FileType, l10n, Disposable, TextDocumentContentProvider } from 'vscode'; +import TelemetryReporter from '@vscode/extension-telemetry'; import { getOctokit } from './auth'; import { GitErrorCodes, PushErrorHandler, Remote, Repository } from './typings/git'; import * as path from 'path'; @@ -15,136 +16,6 @@ export function isInCodespaces(): boolean { return env.remoteName === 'codespaces'; } -async function handlePushError(repository: Repository, remote: Remote, refspec: string, owner: string, repo: string): Promise { - const yes = l10n.t('Create Fork'); - const no = l10n.t('No'); - const askFork = l10n.t('You don\'t have permissions to push to "{0}/{1}" on GitHub. Would you like to create a fork and push to it instead?', owner, repo); - - const answer = await window.showWarningMessage(askFork, { modal: true }, yes, no); - if (answer !== yes) { - return; - } - - const match = /^([^:]*):([^:]*)$/.exec(refspec); - const localName = match ? match[1] : refspec; - let remoteName = match ? match[2] : refspec; - - const [octokit, ghRepository] = await window.withProgress({ location: ProgressLocation.Notification, cancellable: false, title: l10n.t('Create GitHub fork') }, async progress => { - progress.report({ message: l10n.t('Forking "{0}/{1}"...', owner, repo), increment: 33 }); - - const octokit = await getOctokit(); - - type CreateForkResponseData = Awaited>['data']; - - // Issue: what if the repo already exists? - let ghRepository: CreateForkResponseData; - try { - if (isInCodespaces()) { - // Call into the codespaces extension to fork the repository - const resp = await commands.executeCommand<{ repository: CreateForkResponseData; ref: string }>('github.codespaces.forkRepository'); - if (!resp) { - throw new Error('Unable to fork respository'); - } - - ghRepository = resp.repository; - - if (resp.ref) { - let ref = resp.ref; - if (ref.startsWith('refs/heads/')) { - ref = ref.substr(11); - } - - remoteName = ref; - } - } else { - const resp = await octokit.repos.createFork({ owner, repo }); - ghRepository = resp.data; - } - } catch (ex) { - console.error(ex); - throw ex; - } - - progress.report({ message: l10n.t('Pushing changes...'), increment: 33 }); - - // Issue: what if there's already an `upstream` repo? - await repository.renameRemote(remote.name, 'upstream'); - - // Issue: what if there's already another `origin` repo? - const protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol'); - const remoteUrl = protocol === 'https' ? ghRepository.clone_url : ghRepository.ssh_url; - await repository.addRemote('origin', remoteUrl); - - try { - await repository.fetch('origin', remoteName); - await repository.setBranchUpstream(localName, `origin/${remoteName}`); - } catch { - // noop - } - - await repository.push('origin', localName, true); - - return [octokit, ghRepository] as const; - }); - - // yield - (async () => { - const openOnGitHub = l10n.t('Open on GitHub'); - const createPR = l10n.t('Create PR'); - const action = await window.showInformationMessage(l10n.t('The fork "{0}" was successfully created on GitHub.', ghRepository.full_name), openOnGitHub, createPR); - - if (action === openOnGitHub) { - await commands.executeCommand('vscode.open', Uri.parse(ghRepository.html_url)); - } else if (action === createPR) { - const pr = await window.withProgress({ location: ProgressLocation.Notification, cancellable: false, title: l10n.t('Creating GitHub Pull Request...') }, async _ => { - let title = `Update ${remoteName}`; - const head = repository.state.HEAD?.name; - - let body: string | undefined; - - if (head) { - const commit = await repository.getCommit(head); - title = commit.message.split('\n')[0]; - body = commit.message.slice(title.length + 1).trim(); - } - - const templates = await findPullRequestTemplates(repository.rootUri); - if (templates.length > 0) { - templates.sort((a, b) => a.path.localeCompare(b.path)); - - const template = await pickPullRequestTemplate(repository.rootUri, templates); - - if (template) { - body = new TextDecoder('utf-8').decode(await workspace.fs.readFile(template)); - } - } - - const { data: pr } = await octokit.pulls.create({ - owner, - repo, - title, - body, - head: `${ghRepository.owner.login}:${remoteName}`, - base: ghRepository.default_branch - }); - - await repository.setConfig(`branch.${localName}.remote`, 'upstream'); - await repository.setConfig(`branch.${localName}.merge`, `refs/heads/${remoteName}`); - await repository.setConfig(`branch.${localName}.github-pr-owner-number`, `${owner}#${repo}#${pr.number}`); - - return pr; - }); - - const openPR = l10n.t('Open PR'); - const action = await window.showInformationMessage(l10n.t('The PR "{0}/{1}#{2}" was successfully created on GitHub.', owner, repo, pr.number), openPR); - - if (action === openPR) { - await commands.executeCommand('vscode.open', Uri.parse(pr.html_url)); - } - } - })(); -} - const PR_TEMPLATE_FILES = [ { dir: '.', files: ['pull_request_template.md', 'PULL_REQUEST_TEMPLATE.md'] }, { dir: 'docs', files: ['pull_request_template.md', 'PULL_REQUEST_TEMPLATE.md'] }, @@ -207,10 +78,34 @@ export async function pickPullRequestTemplate(repositoryRootUri: Uri, templates: return pickedTemplate?.template; } +class CommandErrorOutputTextDocumentContentProvider implements TextDocumentContentProvider { + + private items = new Map(); + + set(uri: Uri, contents: string): void { + this.items.set(uri.path, contents); + } + + delete(uri: Uri): void { + this.items.delete(uri.path); + } + + provideTextDocumentContent(uri: Uri): string | undefined { + return this.items.get(uri.path); + } +} + export class GithubPushErrorHandler implements PushErrorHandler { - async handlePushError(repository: Repository, remote: Remote, refspec: string, error: Error & { gitErrorCode: GitErrorCodes }): Promise { - if (error.gitErrorCode !== GitErrorCodes.PermissionDenied) { + private disposables: Disposable[] = []; + private commandErrors = new CommandErrorOutputTextDocumentContentProvider(); + + constructor(private readonly telemetryReporter: TelemetryReporter) { + this.disposables.push(workspace.registerTextDocumentContentProvider('github-output', this.commandErrors)); + } + + async handlePushError(repository: Repository, remote: Remote, refspec: string, error: Error & { stderr: string; gitErrorCode: GitErrorCodes }): Promise { + if (error.gitErrorCode !== GitErrorCodes.PermissionDenied && error.gitErrorCode !== GitErrorCodes.PushRejected) { return false; } @@ -229,8 +124,201 @@ export class GithubPushErrorHandler implements PushErrorHandler { } const [, owner, repo] = match; - await handlePushError(repository, remote, refspec, owner, repo); - return true; + if (error.gitErrorCode === GitErrorCodes.PermissionDenied) { + await this.handlePermissionDeniedError(repository, remote, refspec, owner, repo); + + /* __GDPR__ + "pushErrorHandler" : { + "owner": "lszomoru", + "handler": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this.telemetryReporter.sendTelemetryEvent('pushErrorHandler', { handler: 'PermissionDenied' }); + + return true; + } + + // Push protection + if (/GH009: Secrets detected!/i.test(error.stderr)) { + await this.handlePushProtectionError(owner, repo, error.stderr); + + /* __GDPR__ + "pushErrorHandler" : { + "owner": "lszomoru", + "handler": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this.telemetryReporter.sendTelemetryEvent('pushErrorHandler', { handler: 'PushRejected.PushProtection' }); + + return true; + } + + /* __GDPR__ + "pushErrorHandler" : { + "owner": "lszomoru", + "handler": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this.telemetryReporter.sendTelemetryEvent('pushErrorHandler', { handler: 'None' }); + + return false; + } + + private async handlePermissionDeniedError(repository: Repository, remote: Remote, refspec: string, owner: string, repo: string): Promise { + const yes = l10n.t('Create Fork'); + const no = l10n.t('No'); + const askFork = l10n.t('You don\'t have permissions to push to "{0}/{1}" on GitHub. Would you like to create a fork and push to it instead?', owner, repo); + + const answer = await window.showWarningMessage(askFork, { modal: true }, yes, no); + if (answer !== yes) { + return; + } + + const match = /^([^:]*):([^:]*)$/.exec(refspec); + const localName = match ? match[1] : refspec; + let remoteName = match ? match[2] : refspec; + + const [octokit, ghRepository] = await window.withProgress({ location: ProgressLocation.Notification, cancellable: false, title: l10n.t('Create GitHub fork') }, async progress => { + progress.report({ message: l10n.t('Forking "{0}/{1}"...', owner, repo), increment: 33 }); + + const octokit = await getOctokit(); + + type CreateForkResponseData = Awaited>['data']; + + // Issue: what if the repo already exists? + let ghRepository: CreateForkResponseData; + try { + if (isInCodespaces()) { + // Call into the codespaces extension to fork the repository + const resp = await commands.executeCommand<{ repository: CreateForkResponseData; ref: string }>('github.codespaces.forkRepository'); + if (!resp) { + throw new Error('Unable to fork respository'); + } + + ghRepository = resp.repository; + + if (resp.ref) { + let ref = resp.ref; + if (ref.startsWith('refs/heads/')) { + ref = ref.substr(11); + } + + remoteName = ref; + } + } else { + const resp = await octokit.repos.createFork({ owner, repo }); + ghRepository = resp.data; + } + } catch (ex) { + console.error(ex); + throw ex; + } + + progress.report({ message: l10n.t('Pushing changes...'), increment: 33 }); + + // Issue: what if there's already an `upstream` repo? + await repository.renameRemote(remote.name, 'upstream'); + + // Issue: what if there's already another `origin` repo? + const protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol'); + const remoteUrl = protocol === 'https' ? ghRepository.clone_url : ghRepository.ssh_url; + await repository.addRemote('origin', remoteUrl); + + try { + await repository.fetch('origin', remoteName); + await repository.setBranchUpstream(localName, `origin/${remoteName}`); + } catch { + // noop + } + + await repository.push('origin', localName, true); + + return [octokit, ghRepository] as const; + }); + + // yield + (async () => { + const openOnGitHub = l10n.t('Open on GitHub'); + const createPR = l10n.t('Create PR'); + const action = await window.showInformationMessage(l10n.t('The fork "{0}" was successfully created on GitHub.', ghRepository.full_name), openOnGitHub, createPR); + + if (action === openOnGitHub) { + await commands.executeCommand('vscode.open', Uri.parse(ghRepository.html_url)); + } else if (action === createPR) { + const pr = await window.withProgress({ location: ProgressLocation.Notification, cancellable: false, title: l10n.t('Creating GitHub Pull Request...') }, async _ => { + let title = `Update ${remoteName}`; + const head = repository.state.HEAD?.name; + + let body: string | undefined; + + if (head) { + const commit = await repository.getCommit(head); + title = commit.message.split('\n')[0]; + body = commit.message.slice(title.length + 1).trim(); + } + + const templates = await findPullRequestTemplates(repository.rootUri); + if (templates.length > 0) { + templates.sort((a, b) => a.path.localeCompare(b.path)); + + const template = await pickPullRequestTemplate(repository.rootUri, templates); + + if (template) { + body = new TextDecoder('utf-8').decode(await workspace.fs.readFile(template)); + } + } + + const { data: pr } = await octokit.pulls.create({ + owner, + repo, + title, + body, + head: `${ghRepository.owner.login}:${remoteName}`, + base: ghRepository.default_branch + }); + + await repository.setConfig(`branch.${localName}.remote`, 'upstream'); + await repository.setConfig(`branch.${localName}.merge`, `refs/heads/${remoteName}`); + await repository.setConfig(`branch.${localName}.github-pr-owner-number`, `${owner}#${repo}#${pr.number}`); + + return pr; + }); + + const openPR = l10n.t('Open PR'); + const action = await window.showInformationMessage(l10n.t('The PR "{0}/{1}#{2}" was successfully created on GitHub.', owner, repo, pr.number), openPR); + + if (action === openPR) { + await commands.executeCommand('vscode.open', Uri.parse(pr.html_url)); + } + } + })(); + } + + private async handlePushProtectionError(owner: string, repo: string, stderr: string): Promise { + // Open command output in an editor + const timestamp = new Date().getTime(); + const uri = Uri.parse(`github-output:/github-error-${timestamp}`); + this.commandErrors.set(uri, stderr); + + try { + const doc = await workspace.openTextDocument(uri); + await window.showTextDocument(doc); + } + finally { + this.commandErrors.set(uri, stderr); + } + + // Show dialog + const learnMore = l10n.t('Learn More'); + const message = l10n.t('Your push to "{0}/{1}" was rejected by GitHub because push protection is enabled and one or more secrets were detected.', owner, repo); + const answer = await window.showWarningMessage(message, { modal: true }, learnMore); + if (answer === learnMore) { + commands.executeCommand('vscode.open', 'https://aka.ms/vscode-github-push-protection'); + } + } + + dispose() { + this.disposables.forEach(d => d.dispose()); } } diff --git a/extensions/github/src/remoteSourceProvider.ts b/extensions/github/src/remoteSourceProvider.ts index e8eeb851549..0d8b9340695 100644 --- a/extensions/github/src/remoteSourceProvider.ts +++ b/extensions/github/src/remoteSourceProvider.ts @@ -3,11 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { workspace } from 'vscode'; -import { RemoteSourceProvider, RemoteSource } from './typings/git-base'; +import { Uri, env, l10n, workspace } from 'vscode'; +import { RemoteSourceProvider, RemoteSource, RemoteSourceAction } from './typings/git-base'; import { getOctokit } from './auth'; import { Octokit } from '@octokit/rest'; import { getRepositoryFromQuery, getRepositoryFromUrl } from './util'; +import { getBranchLink, getVscodeDevHost } from './links'; function asRemoteSource(raw: any): RemoteSource { const protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol'); @@ -112,4 +113,27 @@ export class GithubRemoteSourceProvider implements RemoteSourceProvider { return branches.sort((a, b) => a === defaultBranch ? -1 : b === defaultBranch ? 1 : 0); } + + async getRemoteSourceActions(url: string): Promise { + const repository = getRepositoryFromUrl(url); + if (!repository) { + return []; + } + + return [{ + label: l10n.t('Open on GitHub'), + icon: 'github', + run(branch: string) { + const link = getBranchLink(url, branch); + env.openExternal(Uri.parse(link)); + } + }, { + label: l10n.t('Checkout on vscode.dev'), + icon: 'globe', + run(branch: string) { + const link = getBranchLink(url, branch, getVscodeDevHost()); + env.openExternal(Uri.parse(link)); + } + }]; + } } diff --git a/extensions/github/src/shareProviders.ts b/extensions/github/src/shareProviders.ts new file mode 100644 index 00000000000..7aea9c27b24 --- /dev/null +++ b/extensions/github/src/shareProviders.ts @@ -0,0 +1,113 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { API } from './typings/git'; +import { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util'; +import { encodeURIComponentExceptSlashes, ensurePublished, getRepositoryForFile, notebookCellRangeString, rangeString } from './links'; + +export class VscodeDevShareProvider implements vscode.ShareProvider, vscode.Disposable { + readonly id: string = 'copyVscodeDevLink'; + readonly label: string = vscode.l10n.t('Copy vscode.dev Link'); + readonly priority: number = 10; + + + private _hasGitHubRepositories: boolean = false; + private set hasGitHubRepositories(value: boolean) { + vscode.commands.executeCommand('setContext', 'github.hasGitHubRepo', value); + this._hasGitHubRepositories = value; + this.ensureShareProviderRegistration(); + } + + private shareProviderRegistration: vscode.Disposable | undefined; + private disposables: vscode.Disposable[] = []; + + constructor(private readonly gitAPI: API) { + this.initializeGitHubRepoContext(); + } + + dispose() { + this.disposables.forEach(d => d.dispose()); + } + + private initializeGitHubRepoContext() { + if (this.gitAPI.repositories.find(repo => repositoryHasGitHubRemote(repo))) { + this.hasGitHubRepositories = true; + vscode.commands.executeCommand('setContext', 'github.hasGitHubRepo', true); + } else { + this.disposables.push(this.gitAPI.onDidOpenRepository(async e => { + await e.status(); + if (repositoryHasGitHubRemote(e)) { + vscode.commands.executeCommand('setContext', 'github.hasGitHubRepo', true); + this.hasGitHubRepositories = true; + } + })); + } + this.disposables.push(this.gitAPI.onDidCloseRepository(() => { + if (!this.gitAPI.repositories.find(repo => repositoryHasGitHubRemote(repo))) { + this.hasGitHubRepositories = false; + } + })); + } + + private ensureShareProviderRegistration() { + if (vscode.env.appHost !== 'codespaces' && !this.shareProviderRegistration && this._hasGitHubRepositories) { + const shareProviderRegistration = vscode.window.registerShareProvider({ scheme: 'file' }, this); + this.shareProviderRegistration = shareProviderRegistration; + this.disposables.push(shareProviderRegistration); + } else if (this.shareProviderRegistration && !this._hasGitHubRepositories) { + this.shareProviderRegistration.dispose(); + this.shareProviderRegistration = undefined; + } + } + + async provideShare(item: vscode.ShareableItem, _token: vscode.CancellationToken): Promise { + const repository = getRepositoryForFile(this.gitAPI, item.resourceUri); + if (!repository) { + return; + } + + await ensurePublished(repository, item.resourceUri); + + let repo: { owner: string; repo: string } | undefined; + repository.state.remotes.find(remote => { + if (remote.fetchUrl) { + const foundRepo = getRepositoryFromUrl(remote.fetchUrl); + if (foundRepo && (remote.name === repository.state.HEAD?.upstream?.remote)) { + repo = foundRepo; + return; + } else if (foundRepo && !repo) { + repo = foundRepo; + } + } + return; + }); + + if (!repo) { + return; + } + + const blobSegment = repository?.state.HEAD?.name ? encodeURIComponentExceptSlashes(repository.state.HEAD?.name) : repository?.state.HEAD?.commit; + const filepathSegment = encodeURIComponentExceptSlashes(item.resourceUri.path.substring(repository?.rootUri.path.length)); + const rangeSegment = getRangeSegment(item); + return vscode.Uri.parse(`${this.getVscodeDevHost()}/${repo.owner}/${repo.repo}/blob/${blobSegment}${filepathSegment}${rangeSegment}`); + + } + + private getVscodeDevHost(): string { + return `https://${vscode.env.appName.toLowerCase().includes('insiders') ? 'insiders.' : ''}vscode.dev/github`; + } +} + +function getRangeSegment(item: vscode.ShareableItem) { + if (item.resourceUri.scheme === 'vscode-notebook-cell') { + const notebookEditor = vscode.window.visibleNotebookEditors.find(editor => editor.notebook.uri.fsPath === item.resourceUri.fsPath); + const cell = notebookEditor?.notebook.getCells().find(cell => cell.document.uri.fragment === item.resourceUri?.fragment); + const cellIndex = cell?.index ?? notebookEditor?.selection.start; + return notebookCellRangeString(cellIndex, item.selection); + } + + return rangeString(item.selection); +} diff --git a/extensions/github/src/typings/git-base.d.ts b/extensions/github/src/typings/git-base.d.ts index 8510df6d043..53cac4d5c70 100644 --- a/extensions/github/src/typings/git-base.d.ts +++ b/extensions/github/src/typings/git-base.d.ts @@ -44,6 +44,15 @@ export interface PickRemoteSourceResult { readonly branch?: string; } +export interface RemoteSourceAction { + readonly label: string; + /** + * Codicon name + */ + readonly icon: string; + run(branch: string): void; +} + export interface RemoteSource { readonly name: string; readonly description?: string; @@ -70,6 +79,7 @@ export interface RemoteSourceProvider { readonly supportsQuery?: boolean; getBranches?(url: string): ProviderResult; + getRemoteSourceActions?(url: string): ProviderResult; getRecentRemoteSources?(query?: string): ProviderResult; getRemoteSources(query?: string): ProviderResult; } diff --git a/extensions/github/src/typings/git.d.ts b/extensions/github/src/typings/git.d.ts index 2e10affa154..4b4acd66879 100644 --- a/extensions/github/src/typings/git.d.ts +++ b/extensions/github/src/typings/git.d.ts @@ -78,6 +78,7 @@ export const enum Status { UNTRACKED, IGNORED, INTENT_TO_ADD, + INTENT_TO_RENAME, ADDED_BY_US, ADDED_BY_THEM, @@ -156,6 +157,10 @@ export interface FetchOptions { depth?: number; } +export interface InitOptions { + defaultBranch?: string; +} + export interface BranchQuery { readonly remote?: boolean; readonly pattern?: string; @@ -268,6 +273,21 @@ export interface PushErrorHandler { handlePushError(repository: Repository, remote: Remote, refspec: string, error: Error & { gitErrorCode: GitErrorCodes }): Promise; } +export interface BranchProtection { + readonly remote: string; + readonly rules: BranchProtectionRule[]; +} + +export interface BranchProtectionRule { + readonly include?: string[]; + readonly exclude?: string[]; +} + +export interface BranchProtectionProvider { + onDidChangeBranchProtection: Event; + provideBranchProtection(): BranchProtection[]; +} + export type APIState = 'uninitialized' | 'initialized'; export interface PublishEvent { @@ -286,7 +306,7 @@ export interface API { toGitUri(uri: Uri, ref: string): Uri; getRepository(uri: Uri): Repository | null; - init(root: Uri): Promise; + init(root: Uri, options?: InitOptions): Promise; openRepository(root: Uri): Promise registerRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable; @@ -294,6 +314,7 @@ export interface API { registerCredentialsProvider(provider: CredentialsProvider): Disposable; registerPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable; registerPushErrorHandler(handler: PushErrorHandler): Disposable; + registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable; } export interface GitExtension { diff --git a/extensions/github/src/typings/vscode.proposed.canonicalUriProvider.d.ts b/extensions/github/src/typings/vscode.proposed.canonicalUriProvider.d.ts new file mode 100644 index 00000000000..84ee599797d --- /dev/null +++ b/extensions/github/src/typings/vscode.proposed.canonicalUriProvider.d.ts @@ -0,0 +1,47 @@ +/*--------------------------------------------------------------------------------------------- + * 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/180582 + + export namespace workspace { + /** + * + * @param scheme The URI scheme that this provider can provide canonical URIs for. + * A canonical URI represents the conversion of a resource's alias into a source of truth URI. + * Multiple aliases may convert to the same source of truth URI. + * @param provider A provider which can convert URIs of scheme @param scheme to + * a canonical URI which is stable across machines. + */ + export function registerCanonicalUriProvider(scheme: string, provider: CanonicalUriProvider): Disposable; + + /** + * + * @param uri The URI to provide a canonical URI for. + * @param token A cancellation token for the request. + */ + export function getCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, token: CancellationToken): ProviderResult; + } + + export interface CanonicalUriProvider { + /** + * + * @param uri The URI to provide a canonical URI for. + * @param options Options that the provider should honor in the URI it returns. + * @param token A cancellation token for the request. + * @returns The canonical URI for the requested URI or undefined if no canonical URI can be provided. + */ + provideCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, token: CancellationToken): ProviderResult; + } + + export interface CanonicalUriRequestOptions { + /** + * + * The desired scheme of the canonical URI. + */ + targetScheme: string; + } +} diff --git a/extensions/github/src/typings/vscode.proposed.shareProvider.d.ts b/extensions/github/src/typings/vscode.proposed.shareProvider.d.ts new file mode 100644 index 00000000000..6470557cac1 --- /dev/null +++ b/extensions/github/src/typings/vscode.proposed.shareProvider.d.ts @@ -0,0 +1,29 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// https://github.com/microsoft/vscode/issues/176316 + +declare module 'vscode' { + export interface TreeItem { + shareableItem?: ShareableItem; + } + + export interface ShareableItem { + resourceUri: Uri; + selection?: Range; + } + + export interface ShareProvider { + readonly id: string; + readonly label: string; + readonly priority: number; + + provideShare(item: ShareableItem, token: CancellationToken): ProviderResult; + } + + export namespace window { + export function registerShareProvider(selector: DocumentSelector, provider: ShareProvider): Disposable; + } +} diff --git a/extensions/github/yarn.lock b/extensions/github/yarn.lock index 775f3c139d3..c35f7727b52 100644 --- a/extensions/github/yarn.lock +++ b/extensions/github/yarn.lock @@ -2,6 +2,129 @@ # yarn lockfile v1 +"@azure/abort-controller@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" + integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== + dependencies: + tslib "^2.2.0" + +"@azure/core-auth@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.4.0.tgz#6fa9661c1705857820dbc216df5ba5665ac36a9e" + integrity sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/core-rest-pipeline@^1.10.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.11.0.tgz#fc0e8f56caac08a9d4ac91c07a6c5a360ea31c82" + integrity sha512-nB4KXl6qAyJmBVLWA7SakT4tzpYZTCk4pvRBeI+Ye0WYSOrlTqlMhc4MSS/8atD3ufeYWdkN380LLoXlUUzThw== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-auth" "^1.4.0" + "@azure/core-tracing" "^1.0.1" + "@azure/core-util" "^1.3.0" + "@azure/logger" "^1.0.0" + form-data "^4.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + tslib "^2.2.0" + +"@azure/core-tracing@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.1.tgz#352a38cbea438c4a83c86b314f48017d70ba9503" + integrity sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw== + dependencies: + tslib "^2.2.0" + +"@azure/core-util@^1.3.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.3.2.tgz#3f8cfda1e87fac0ce84f8c1a42fcd6d2a986632d" + integrity sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/logger@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.4.tgz#28bc6d0e5b3c38ef29296b32d35da4e483593fa1" + integrity sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg== + dependencies: + tslib "^2.2.0" + +"@microsoft/1ds-core-js@3.2.12", "@microsoft/1ds-core-js@^3.2.8": + version "3.2.12" + resolved "https://registry.yarnpkg.com/@microsoft/1ds-core-js/-/1ds-core-js-3.2.12.tgz#f5f56626bd0385a357fae6f730eea347be02ce64" + integrity sha512-cHpxZZ+pbtOyqFMFB/c1COpaOE3VPFU6phYVHVvOA9DvoeMZfI/Xrxaj7B/vfq4MmkiE7nOAPhv5ZRn+i6OogA== + dependencies: + "@microsoft/applicationinsights-core-js" "2.8.14" + "@microsoft/applicationinsights-shims" "^2.0.2" + "@microsoft/dynamicproto-js" "^1.1.7" + +"@microsoft/1ds-post-js@^3.2.8": + version "3.2.12" + resolved "https://registry.yarnpkg.com/@microsoft/1ds-post-js/-/1ds-post-js-3.2.12.tgz#60f6ff48ba48c88880c1bceb376711cdd34f87ea" + integrity sha512-vhIVYg4FzBfwtM8tBqDUq3xU+cFu6SQ7biuJHtQpd5PVjDgvAovVOMRF1khsZE/k2rttRRBpmBgNEqG3Ptoysw== + dependencies: + "@microsoft/1ds-core-js" "3.2.12" + "@microsoft/applicationinsights-shims" "^2.0.2" + "@microsoft/dynamicproto-js" "^1.1.7" + +"@microsoft/applicationinsights-channel-js@2.8.14": + version "2.8.14" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-2.8.14.tgz#daabd8a418d9b70a318c0126518e000dd6f67fa0" + integrity sha512-z1AG6lqV3ACtdUXnT0Ubj48BAZ8K01sFsYdWgroSXpw2lYUlXAzdx3tK8zpaqEXSEhok8CWTZki7aunHzkZHSw== + dependencies: + "@microsoft/applicationinsights-common" "2.8.14" + "@microsoft/applicationinsights-core-js" "2.8.14" + "@microsoft/applicationinsights-shims" "2.0.2" + "@microsoft/dynamicproto-js" "^1.1.9" + +"@microsoft/applicationinsights-common@2.8.14": + version "2.8.14" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-common/-/applicationinsights-common-2.8.14.tgz#7d082295f862a189c80aa98b3f4aaec926546051" + integrity sha512-1xjJvyyRN7tb5ahOTkEGGsvw8zvqmS714y3+1m7ooKHFfxO0wX+eYOU/kke74BCY0nJ/pocB/6hjWZOgwvbHig== + dependencies: + "@microsoft/applicationinsights-core-js" "2.8.14" + "@microsoft/applicationinsights-shims" "2.0.2" + "@microsoft/dynamicproto-js" "^1.1.9" + +"@microsoft/applicationinsights-core-js@2.8.14": + version "2.8.14" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.14.tgz#80e3d9d42102e741494726d78ac923098bad7132" + integrity sha512-XacWUHdjSHMUwdngMZBp0oiCBifD56CQK2Egu2PiBiF4xu2AO2yNCtWSXsQX2g5OkEhVwaEjfa/aH3WbpYxB1g== + dependencies: + "@microsoft/applicationinsights-shims" "2.0.2" + "@microsoft/dynamicproto-js" "^1.1.9" + +"@microsoft/applicationinsights-shims@2.0.2", "@microsoft/applicationinsights-shims@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz#92b36a09375e2d9cb2b4203383b05772be837085" + integrity sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg== + +"@microsoft/applicationinsights-web-basic@^2.8.9": + version "2.8.14" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-2.8.14.tgz#8c43bcad2e12f25eb00a9aaad0182371507b21b9" + integrity sha512-R2mzg5NmCtLloq3lPQFmnlvjrPIqm3mWNYVy5ELJuOPZ7S6j9y7s4yHOzfXynmOziiQd+0q1j9pTth9aP9vo0g== + dependencies: + "@microsoft/applicationinsights-channel-js" "2.8.14" + "@microsoft/applicationinsights-common" "2.8.14" + "@microsoft/applicationinsights-core-js" "2.8.14" + "@microsoft/applicationinsights-shims" "2.0.2" + "@microsoft/dynamicproto-js" "^1.1.9" + +"@microsoft/applicationinsights-web-snippet@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz#6bb788b2902e48bf5d460c38c6bb7fedd686ddd7" + integrity sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ== + +"@microsoft/dynamicproto-js@^1.1.7", "@microsoft/dynamicproto-js@^1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz#7437db7aa061162ee94e4131b69a62b8dad5dea6" + integrity sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ== + "@octokit/auth-token@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" @@ -31,6 +154,23 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" +"@octokit/graphql-schema@14.4.0": + version "14.4.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql-schema/-/graphql-schema-14.4.0.tgz#9336f64c3103a2e82ee3ce060c3ccf99d177d7f0" + integrity sha512-+O6/dsLlR6V9gv+t1lqsN+x73TLwyQWZpd3M8/eYnuny7VaznV9TAyUxf18tX8WBBS5IqtlLDk1nG+aSTPRZzQ== + dependencies: + graphql "^16.0.0" + graphql-tag "^2.10.3" + +"@octokit/graphql@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" + integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" + universal-user-agent "^6.0.0" + "@octokit/graphql@^5.0.0": version "5.0.1" resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" @@ -45,6 +185,11 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.6.0.tgz#381884008e23fd82fd444553f6b4dcd24a5c4a4d" integrity sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ== +"@octokit/openapi-types@^17.1.0": + version "17.1.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.1.0.tgz#9a712b5bb9d644940d8a1f24115c798c317a64a5" + integrity sha512-rnI26BAITDZTo5vqFOmA7oX4xRd18rO+gcK4MiTpJmsRMxAw0JmevNjPsjpry1bb9SVNo56P/0kbiyXXa4QluA== + "@octokit/plugin-paginate-rest@^4.0.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.2.0.tgz#41fc6ca312446a85a4275aca698b4d9c4c5e06ab" @@ -103,26 +248,236 @@ dependencies: "@octokit/openapi-types" "^13.6.0" +"@octokit/types@^9.0.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.0.tgz#0358e3de070b1d43c5a8af63b9951c88a09fc9ed" + integrity sha512-xySzJG4noWrIBFyMu4lg4tu9vAgNg9S0aoLRONhAEz6ueyi1evBzb40HitIosaYS4XOexphG305IVcLrIX/30g== + dependencies: + "@octokit/openapi-types" "^17.1.0" + +"@opentelemetry/api@^1.0.4": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f" + integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA== + +"@opentelemetry/core@1.14.0", "@opentelemetry/core@^1.0.1": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.14.0.tgz#64e876b29cb736c984d54164cd47433f513eafd3" + integrity sha512-MnMZ+sxsnlzloeuXL2nm5QcNczt/iO82UOeQQDHhV83F2fP3sgntW2evvtoxJki0MBLxEsh5ADD7PR/Hn5uzjw== + dependencies: + "@opentelemetry/semantic-conventions" "1.14.0" + +"@opentelemetry/resources@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.14.0.tgz#d6b0a4e71c2706d33c8c6ec7a7b8fea6ad27ddea" + integrity sha512-qRfWIgBxxl3z47E036Aey0Lj2ZjlFb27Q7Xnj1y1z/P293RXJZGLtcfn/w8JF7v1Q2hs3SDGxz7Wb9Dko1YUQA== + dependencies: + "@opentelemetry/core" "1.14.0" + "@opentelemetry/semantic-conventions" "1.14.0" + +"@opentelemetry/sdk-trace-base@^1.0.1": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.14.0.tgz#831af08f002228a11e577ff860eb6059c8b80fb7" + integrity sha512-NzRGt3PS+HPKfQYMb6Iy8YYc5OKA73qDwci/6ujOIvyW9vcqBJSWbjZ8FeLEAmuatUB5WrRhEKu9b0sIiIYTrQ== + dependencies: + "@opentelemetry/core" "1.14.0" + "@opentelemetry/resources" "1.14.0" + "@opentelemetry/semantic-conventions" "1.14.0" + +"@opentelemetry/semantic-conventions@1.14.0", "@opentelemetry/semantic-conventions@^1.0.1": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.14.0.tgz#6a729b7f372ce30f77a3f217c09bc216f863fccb" + integrity sha512-rJfCY8rCWz3cb4KI6pEofnytvMPuj3YLQwoscCCYZ5DkdiPjo15IQ0US7+mjcWy9H3fcZIzf2pbJZ7ck/h4tug== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@types/node@16.x": version "16.11.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== +"@vscode/extension-telemetry@0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@vscode/extension-telemetry/-/extension-telemetry-0.7.5.tgz#bf965731816e08c3f146f96d901ec67954fc913b" + integrity sha512-fJ5y3TcpqqkFYHneabYaoB4XAhDdVflVm+TDKshw9VOs77jkgNS4UA7LNXrWeO0eDne3Sh3JgURf+xzc1rk69w== + dependencies: + "@microsoft/1ds-core-js" "^3.2.8" + "@microsoft/1ds-post-js" "^3.2.8" + "@microsoft/applicationinsights-web-basic" "^2.8.9" + applicationinsights "2.4.1" + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +applicationinsights@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-2.4.1.tgz#4de4c4dd3c7c4a44445cfbf3d15808fc0dcc423d" + integrity sha512-0n0Ikd0gzSm460xm+M0UTWIwXrhrH/0bqfZatcJjYObWyefxfAxapGEyNnSGd1Tg90neHz+Yhf+Ff/zgvPiQYA== + dependencies: + "@azure/core-auth" "^1.4.0" + "@azure/core-rest-pipeline" "^1.10.0" + "@microsoft/applicationinsights-web-snippet" "^1.0.1" + "@opentelemetry/api" "^1.0.4" + "@opentelemetry/core" "^1.0.1" + "@opentelemetry/sdk-trace-base" "^1.0.1" + "@opentelemetry/semantic-conventions" "^1.0.1" + cls-hooked "^4.2.2" + continuation-local-storage "^3.2.1" + diagnostic-channel "1.1.0" + diagnostic-channel-publishers "1.0.5" + +async-hook-jl@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68" + integrity sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg== + dependencies: + stack-chain "^1.3.7" + +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + before-after-hook@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== +cls-hooked@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908" + integrity sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw== + dependencies: + async-hook-jl "^1.7.6" + emitter-listener "^1.0.1" + semver "^5.4.1" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +continuation-local-storage@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +diagnostic-channel-publishers@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.5.tgz#df8c317086c50f5727fdfb5d2fce214d2e4130ae" + integrity sha512-dJwUS0915pkjjimPJVDnS/QQHsH0aOYhnZsLJdnZIMOrB+csj8RnZhWTuwnm8R5v3Z7OZs+ksv5luC14DGB7eg== + +diagnostic-channel@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-1.1.0.tgz#6985e9dfedfbc072d91dc4388477e4087147756e" + integrity sha512-fwujyMe1gj6rk6dYi9hMZm0c8Mz8NDMVl2LB4iaYh3+LIAThZC8RKFGXWG0IML2OxAit/ZFRgZhMkhQ3d/bobQ== + dependencies: + semver "^5.3.0" + +emitter-listener@^1.0.1, emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== + dependencies: + shimmer "^1.2.0" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +graphql-tag@^2.10.3: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@^16.0.0: + version "16.6.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" + integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -137,11 +492,36 @@ once@^1.4.0: dependencies: wrappy "1" +semver@^5.3.0, semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +shimmer@^1.1.0, shimmer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + +stack-chain@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285" + integrity sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug== + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +tslib@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tslib@^2.2.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + tunnel@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" diff --git a/extensions/html-language-features/client/src/htmlClient.ts b/extensions/html-language-features/client/src/htmlClient.ts index 12c9f26c0e0..7b69c795f90 100644 --- a/extensions/html-language-features/client/src/htmlClient.ts +++ b/extensions/html-language-features/client/src/htmlClient.ts @@ -155,7 +155,7 @@ async function startClientWithParticipants(languageParticipants: LanguagePartici const clientOptions: LanguageClientOptions = { documentSelector, synchronize: { - configurationSection: ['html', 'css', 'javascript'], // the settings to synchronize + configurationSection: ['html', 'css', 'javascript', 'js/ts'], // the settings to synchronize }, initializationOptions: { embeddedLanguages, diff --git a/extensions/html-language-features/package.json b/extensions/html-language-features/package.json index ab8a7562758..972caba7fb3 100644 --- a/extensions/html-language-features/package.json +++ b/extensions/html-language-features/package.json @@ -7,7 +7,7 @@ "license": "MIT", "aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "engines": { - "vscode": "0.10.x" + "vscode": "^1.77.0" }, "icon": "icons/html.png", "activationEvents": [ @@ -259,7 +259,7 @@ }, "dependencies": { "@vscode/extension-telemetry": "^0.7.5", - "vscode-languageclient": "^8.1.0", + "vscode-languageclient": "^8.2.0-next.1", "vscode-uri": "^3.0.7" }, "devDependencies": { diff --git a/extensions/html-language-features/server/package.json b/extensions/html-language-features/server/package.json index 7fc2795e590..5c3e9e11623 100644 --- a/extensions/html-language-features/server/package.json +++ b/extensions/html-language-features/server/package.json @@ -9,10 +9,10 @@ }, "main": "./out/node/htmlServerMain", "dependencies": { - "@vscode/l10n": "^0.0.11", - "vscode-css-languageservice": "^6.2.4", - "vscode-html-languageservice": "^5.0.4", - "vscode-languageserver": "^8.1.0", + "@vscode/l10n": "^0.0.14", + "vscode-css-languageservice": "^6.2.6", + "vscode-html-languageservice": "^5.0.6", + "vscode-languageserver": "^8.2.0-next.1", "vscode-languageserver-textdocument": "^1.0.8", "vscode-uri": "^3.0.7" }, diff --git a/extensions/html-language-features/server/src/htmlServer.ts b/extensions/html-language-features/server/src/htmlServer.ts index 99e3cb75bcd..29aa041746c 100644 --- a/extensions/html-language-features/server/src/htmlServer.ts +++ b/extensions/html-language-features/server/src/htmlServer.ts @@ -120,8 +120,9 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment) let promise = documentSettings[textDocument.uri]; if (!promise) { const scopeUri = textDocument.uri; - const configRequestParam: ConfigurationParams = { items: [{ scopeUri, section: 'css' }, { scopeUri, section: 'html' }, { scopeUri, section: 'javascript' }] }; - promise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => ({ css: s[0], html: s[1], javascript: s[2] })); + const sections = ['css', 'html', 'javascript', 'js/ts']; + const configRequestParam: ConfigurationParams = { items: sections.map(section => ({ scopeUri, section })) }; + promise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => ({ css: s[0], html: s[1], javascript: s[2], 'js/ts': s[3] })); documentSettings[textDocument.uri] = promise; } return promise; diff --git a/extensions/html-language-features/server/src/modes/formatting.ts b/extensions/html-language-features/server/src/modes/formatting.ts index aca8ee3b3c2..6b8c669a6cb 100644 --- a/extensions/html-language-features/server/src/modes/formatting.ts +++ b/extensions/html-language-features/server/src/modes/formatting.ts @@ -54,7 +54,11 @@ export async function format(languageModes: LanguageModes, document: TextDocumen // perform a html format and apply changes to a new document const htmlMode = languageModes.getMode('html')!; const htmlEdits = await htmlMode.format!(document, formatRange, formattingOptions, settings); - const htmlFormattedContent = TextDocument.applyEdits(document, htmlEdits); + let htmlFormattedContent = TextDocument.applyEdits(document, htmlEdits); + if (formattingOptions.insertFinalNewline && endOffset === content.length && !htmlFormattedContent.endsWith('\n')) { + htmlFormattedContent = htmlFormattedContent + '\n'; + htmlEdits.push(TextEdit.insert(endPos, '\n')); + } const newDocument = TextDocument.create(document.uri + '.tmp', document.languageId, document.version, htmlFormattedContent); try { // run embedded formatters on html formatted content: - formatters see correct initial indent diff --git a/extensions/html-language-features/server/src/modes/htmlMode.ts b/extensions/html-language-features/server/src/modes/htmlMode.ts index baca7e0369f..58a3ded2bee 100644 --- a/extensions/html-language-features/server/src/modes/htmlMode.ts +++ b/extensions/html-language-features/server/src/modes/htmlMode.ts @@ -49,9 +49,6 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace: } else { formatSettings.contentUnformatted = 'script'; } - if (formatParams.insertFinalNewline) { - formatSettings.endWithNewline = true; - } merge(formatParams, formatSettings); return htmlLanguageService.format(document, range, formatSettings); }, diff --git a/extensions/html-language-features/server/src/modes/javascriptMode.ts b/extensions/html-language-features/server/src/modes/javascriptMode.ts index 0c199571dd7..a540745428c 100644 --- a/extensions/html-language-features/server/src/modes/javascriptMode.ts +++ b/extensions/html-language-features/server/src/modes/javascriptMode.ts @@ -103,12 +103,20 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache { - host.getCompilationSettings()['experimentalDecorators'] = settings && settings.javascript && settings.javascript.implicitProjectConfig.experimentalDecorators; + updateHostSettings(settings); + const jsDocument = jsDocuments.get(document); const languageService = await host.getLanguageService(jsDocument); const syntaxDiagnostics: ts.Diagnostic[] = languageService.getSyntacticDiagnostics(jsDocument.uri); diff --git a/extensions/html-language-features/server/src/modes/languageModes.ts b/extensions/html-language-features/server/src/modes/languageModes.ts index 620b0914b1b..4ab4a4a876e 100644 --- a/extensions/html-language-features/server/src/modes/languageModes.ts +++ b/extensions/html-language-features/server/src/modes/languageModes.ts @@ -37,9 +37,10 @@ export { ClientCapabilities, DocumentContext, LanguageService, HTMLDocument, HTM export { TextDocument } from 'vscode-languageserver-textdocument'; export interface Settings { - css?: any; - html?: any; - javascript?: any; + readonly css?: any; + readonly html?: any; + readonly javascript?: any; + readonly 'js/ts'?: any; } export interface Workspace { diff --git a/extensions/html-language-features/server/src/test/formatting.test.ts b/extensions/html-language-features/server/src/test/formatting.test.ts index ebc319d20b6..adf9b21e177 100644 --- a/extensions/html-language-features/server/src/test/formatting.test.ts +++ b/extensions/html-language-features/server/src/test/formatting.test.ts @@ -85,11 +85,12 @@ suite('HTML Embedded Formatting', () => { }); test('EndWithNewline', async () => { - const options : FormattingOptions = FormattingOptions.create(2, true); + const options: FormattingOptions = FormattingOptions.create(2, true); options.insertFinalNewline = true; - + await assertFormat('

Hello

', '\n\n\n

Hello

\n\n\n\n', {}, options); await assertFormat('|

Hello

|', '\n

Hello

\n', {}, options); + await assertFormat('|

Hello

|', '\n

Hello

\n\n\n\n', {}, options); await assertFormat('', '\n\n\n \n\n\n\n', {}, options); }); diff --git a/extensions/html-language-features/server/yarn.lock b/extensions/html-language-features/server/yarn.lock index 20056d64263..8bed471b29c 100644 --- a/extensions/html-language-features/server/yarn.lock +++ b/extensions/html-language-features/server/yarn.lock @@ -12,65 +12,65 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== -"@vscode/l10n@^0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@vscode/l10n/-/l10n-0.0.11.tgz#325d7beb2cfb87162bc624d16c4d546de6a73b72" - integrity sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA== +"@vscode/l10n@^0.0.14": + version "0.0.14" + resolved "https://registry.yarnpkg.com/@vscode/l10n/-/l10n-0.0.14.tgz#431e5814c35c3cb11ee21873bc70a4b0fbf90fcf" + integrity sha512-/yrv59IEnmh655z1oeDnGcvMYwnEzNzHLgeYcQCkhYX0xBvYWrAuefoiLcPBUkMpJsb46bqQ6Yv4pwTTQ4d3Qg== -vscode-css-languageservice@^6.2.4: - version "6.2.4" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-6.2.4.tgz#d03ca783ad922cb903602ca1478f5161e5e5de54" - integrity sha512-9UG0s3Ss8rbaaPZL1AkGzdjrGY8F+P+Ne9snsrvD9gxltDGhsn8C2dQpqQewHrMW37OvlqJoI8sUU2AWDb+qNw== +vscode-css-languageservice@^6.2.6: + version "6.2.6" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-6.2.6.tgz#bc26c2abaaa2eb117b143fdb9387ee1701d9661a" + integrity sha512-SA2WkeOecIpUiEbZnjOsP/fI5CRITZEiQGSHXKiDQDwLApfKcnLhZwMtOBbIifSzESVcQa7b/shX/nbnF4NoCg== dependencies: - "@vscode/l10n" "^0.0.11" + "@vscode/l10n" "^0.0.14" vscode-languageserver-textdocument "^1.0.8" vscode-languageserver-types "^3.17.3" vscode-uri "^3.0.7" -vscode-html-languageservice@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-5.0.4.tgz#f27a616a4058a2d4d00e4a68e48ad8ba5371aeec" - integrity sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA== +vscode-html-languageservice@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-5.0.6.tgz#e7a7f78e9f98d0f5341c5518dd9305e3cc438bb6" + integrity sha512-gCixNg6fjPO7+kwSMBAVXcwDRHdjz1WOyNfI0n5Wx0J7dfHG8ggb3zD1FI8E2daTZrwS1cooOiSoc1Xxph4qRQ== dependencies: - "@vscode/l10n" "^0.0.11" + "@vscode/l10n" "^0.0.14" vscode-languageserver-textdocument "^1.0.8" - vscode-languageserver-types "^3.17.2" + vscode-languageserver-types "^3.17.3" vscode-uri "^3.0.7" -vscode-jsonrpc@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94" - integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw== +vscode-jsonrpc@8.2.0-next.0: + version "8.2.0-next.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0-next.0.tgz#41409413c8cebf10f2f1b7cc87e330f0e292814c" + integrity sha512-13jYzaFQpTz5qQ2P+l5c/iTVsj1wUpflP0CR/v4XaEpM0oToLEXZBTcuuox1WaGIbu3Av3xxmGNU4Hydl1iNKg== -vscode-languageserver-protocol@3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57" - integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA== +vscode-languageserver-protocol@3.17.4-next.1: + version "3.17.4-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.4-next.1.tgz#a15480e1bc663853ae90ded226efafc5ab333616" + integrity sha512-qrK4BycgPR/+nkRN9PRVTblkLp+kUPUmAgF6rDhFzZIPXW4/MqWwFUT8uswIMGdlTPPgCEkFO/AYEZK1fDXODg== dependencies: - vscode-jsonrpc "8.1.0" - vscode-languageserver-types "3.17.3" + vscode-jsonrpc "8.2.0-next.0" + vscode-languageserver-types "3.17.4-next.0" vscode-languageserver-textdocument@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== -vscode-languageserver-types@3.17.3, vscode-languageserver-types@^3.17.3: +vscode-languageserver-types@3.17.4-next.0: + version "3.17.4-next.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.4-next.0.tgz#4b5238d21cceaeb836d36a05d23c61a8c0238de2" + integrity sha512-2FPKboHnT04xYjfM8JpJVBz4a/tryMw58jmzucaabZMZN5hzoFBrhc97jNG4n6edr9JUb9+QSwwcAcYpDTAoag== + +vscode-languageserver-types@^3.17.3: version "3.17.3" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== -vscode-languageserver-types@^3.17.2: - version "3.17.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" - integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== - -vscode-languageserver@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz#5024253718915d84576ce6662dd46a791498d827" - integrity sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw== +vscode-languageserver@^8.2.0-next.1: + version "8.2.0-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.2.0-next.1.tgz#ad2558d74392b1cfaccd427febe9a368fc328f8b" + integrity sha512-994AXMKBijzjlnpf8p9M+ntsNJDjR8pr55NJPYxKjy/nUhVkg962dAomelH6Z94401kBZmSbfP/K/20cB54aFA== dependencies: - vscode-languageserver-protocol "3.17.3" + vscode-languageserver-protocol "3.17.4-next.1" vscode-uri@^3.0.7: version "3.0.7" diff --git a/extensions/html-language-features/yarn.lock b/extensions/html-language-features/yarn.lock index 4b4415ab484..e4f74847429 100644 --- a/extensions/html-language-features/yarn.lock +++ b/extensions/html-language-features/yarn.lock @@ -354,9 +354,9 @@ semver@^5.3.0, semver@^5.4.1: integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -380,32 +380,32 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -vscode-jsonrpc@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94" - integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw== +vscode-jsonrpc@8.2.0-next.0: + version "8.2.0-next.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0-next.0.tgz#41409413c8cebf10f2f1b7cc87e330f0e292814c" + integrity sha512-13jYzaFQpTz5qQ2P+l5c/iTVsj1wUpflP0CR/v4XaEpM0oToLEXZBTcuuox1WaGIbu3Av3xxmGNU4Hydl1iNKg== -vscode-languageclient@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz#3e67d5d841481ac66ddbdaa55b4118742f6a9f3f" - integrity sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing== +vscode-languageclient@^8.2.0-next.1: + version "8.2.0-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.2.0-next.1.tgz#a3f98b80cfa3225fde0583aa6a5c9b20219fa37e" + integrity sha512-oITaqHQ10PM3zXCUu/104wriMeDutXMkQXMaRBWh1jKihcNcUBLC/os7RhqiVGypY0nl+F0pwStAf4Koc8inaw== dependencies: minimatch "^5.1.0" semver "^7.3.7" - vscode-languageserver-protocol "3.17.3" + vscode-languageserver-protocol "3.17.4-next.1" -vscode-languageserver-protocol@3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57" - integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA== +vscode-languageserver-protocol@3.17.4-next.1: + version "3.17.4-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.4-next.1.tgz#a15480e1bc663853ae90ded226efafc5ab333616" + integrity sha512-qrK4BycgPR/+nkRN9PRVTblkLp+kUPUmAgF6rDhFzZIPXW4/MqWwFUT8uswIMGdlTPPgCEkFO/AYEZK1fDXODg== dependencies: - vscode-jsonrpc "8.1.0" - vscode-languageserver-types "3.17.3" + vscode-jsonrpc "8.2.0-next.0" + vscode-languageserver-types "3.17.4-next.0" -vscode-languageserver-types@3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" - integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== +vscode-languageserver-types@3.17.4-next.0: + version "3.17.4-next.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.4-next.0.tgz#4b5238d21cceaeb836d36a05d23c61a8c0238de2" + integrity sha512-2FPKboHnT04xYjfM8JpJVBz4a/tryMw58jmzucaabZMZN5hzoFBrhc97jNG4n6edr9JUb9+QSwwcAcYpDTAoag== vscode-uri@^3.0.7: version "3.0.7" diff --git a/extensions/html/language-configuration.json b/extensions/html/language-configuration.json index 628396b0918..ea7a98a3d43 100644 --- a/extensions/html/language-configuration.json +++ b/extensions/html/language-configuration.json @@ -4,7 +4,6 @@ }, "brackets": [ [""], - ["<", ">"], ["{", "}"], ["(", ")"] ], diff --git a/extensions/ipynb/esbuild.js b/extensions/ipynb/esbuild.js index 28000f1ebf9..64b58109fec 100644 --- a/extensions/ipynb/esbuild.js +++ b/extensions/ipynb/esbuild.js @@ -5,47 +5,14 @@ //@ts-check const path = require('path'); -const fse = require('fs-extra'); -const esbuild = require('esbuild'); - -const args = process.argv.slice(2); - -const isWatch = args.indexOf('--watch') >= 0; - -let outputRoot = __dirname; -const outputRootIndex = args.indexOf('--outputRoot'); -if (outputRootIndex >= 0) { - outputRoot = args[outputRootIndex + 1]; -} const srcDir = path.join(__dirname, 'notebook-src'); -const outDir = path.join(outputRoot, 'notebook-out'); +const outDir = path.join(__dirname, 'notebook-out'); -async function build() { - await esbuild.build({ - entryPoints: [ - path.join(srcDir, 'cellAttachmentRenderer.ts'), - ], - bundle: true, - minify: false, - sourcemap: false, - format: 'esm', - outdir: outDir, - platform: 'browser', - target: ['es2020'], - }); -} - - -build().catch(() => process.exit(1)); - -if (isWatch) { - const watcher = require('@parcel/watcher'); - watcher.subscribe(srcDir, async () => { - try { - await build(); - } catch (e) { - console.error(e); - } - }); -} +require('../esbuild-webview-common').run({ + entryPoints: [ + path.join(srcDir, 'cellAttachmentRenderer.ts'), + ], + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/ipynb/notebook-src/cellAttachmentRenderer.ts b/extensions/ipynb/notebook-src/cellAttachmentRenderer.ts index 5ae4c13fcb6..02166f7d7cd 100644 --- a/extensions/ipynb/notebook-src/cellAttachmentRenderer.ts +++ b/extensions/ipynb/notebook-src/cellAttachmentRenderer.ts @@ -23,8 +23,8 @@ export async function activate(ctx: RendererContext) { const token = tokens[idx]; const src = token.attrGet('src'); const attachments: Record> | undefined = env.outputItem.metadata?.attachments; - if (attachments && src) { - const imageAttachment = attachments[src.replace('attachment:', '')]; + if (attachments && src && src.startsWith('attachment:')) { + const imageAttachment = attachments[tryDecodeURIComponent(src.replace('attachment:', ''))]; if (imageAttachment) { // objEntries will always be length 1, with objEntries[0] holding [0]=mime,[1]=b64 // if length = 0, something is wrong with the attachment, mime/b64 weren't copied over @@ -45,3 +45,11 @@ export async function activate(ctx: RendererContext) { }; }); } + +function tryDecodeURIComponent(uri: string) { + try { + return decodeURIComponent(uri); + } catch { + return uri; + } +} diff --git a/extensions/ipynb/package.json b/extensions/ipynb/package.json index 2963e0295aa..ce667a5d277 100644 --- a/extensions/ipynb/package.json +++ b/extensions/ipynb/package.json @@ -10,10 +10,12 @@ }, "enabledApiProposals": [ "documentPaste", - "diffContentOptions" + "diffContentOptions", + "dropMetadata" ], "activationEvents": [ - "onNotebook:jupyter-notebook" + "onNotebook:jupyter-notebook", + "onNotebookSerializer:interactive" ], "extensionKind": [ "workspace", diff --git a/extensions/ipynb/package.nls.json b/extensions/ipynb/package.nls.json index 5fead32a38b..bd8e0ab1da0 100644 --- a/extensions/ipynb/package.nls.json +++ b/extensions/ipynb/package.nls.json @@ -6,5 +6,10 @@ "newUntitledIpynb.shortTitle": "Jupyter Notebook", "openIpynbInNotebookEditor.title": "Open IPYNB File In Notebook Editor", "cleanInvalidImageAttachment.title": "Clean Invalid Image Attachment Reference", - "markdownAttachmentRenderer.displayName": "Markdown it ipynb Cell Attachment renderer" + "markdownAttachmentRenderer.displayName": { + "message": "Markdown-It ipynb Cell Attachment renderer", + "comment": [ + "Markdown-It is a product name and should not be translated" + ] + } } diff --git a/extensions/ipynb/src/helper.ts b/extensions/ipynb/src/helper.ts index 5fa03514640..fd81250885d 100644 --- a/extensions/ipynb/src/helper.ts +++ b/extensions/ipynb/src/helper.ts @@ -77,61 +77,66 @@ export function objectEquals(one: any, other: any) { return true; } -interface Options { - callback: (value: T) => void; +/** + * A helper to delay/debounce execution of a task, includes cancellation/disposal support. + * Pulled from https://github.com/microsoft/vscode/blob/3059063b805ed0ac10a6d9539e213386bfcfb852/extensions/markdown-language-features/src/util/async.ts + */ +export class Delayer { - merge?: (input: T[]) => T; - delay?: number; -} + public defaultDelay: number; + private _timeout: any; // Timer + private _cancelTimeout: Promise | null; + private _onSuccess: ((value: T | PromiseLike | undefined) => void) | null; + private _task: ITask | null; - -export class DebounceTrigger { - - private _isPaused = 0; - protected _queue: T[] = []; - private _callbackFn: (value: T) => void; - private _mergeFn?: (input: T[]) => T; - private readonly _delay: number; - private _handle: any | undefined; - - constructor(options: Options) { - this._callbackFn = options.callback; - this._mergeFn = options.merge; - this._delay = options.delay ?? 100; + constructor(defaultDelay: number) { + this.defaultDelay = defaultDelay; + this._timeout = null; + this._cancelTimeout = null; + this._onSuccess = null; + this._task = null; } - private pause(): void { - this._isPaused++; + dispose() { + this._doCancelTimeout(); } - private resume(): void { - if (this._isPaused !== 0 && --this._isPaused === 0) { - if (this._mergeFn) { - const items = Array.from(this._queue); - this._queue = []; - this._callbackFn(this._mergeFn(items)); - - } else { - while (!this._isPaused && this._queue.length !== 0) { - this._callbackFn(this._queue.shift()!); - } - } - } - } - - trigger(item: T): void { - if (!this._handle) { - this.pause(); - this._handle = setTimeout(() => { - this._handle = undefined; - this.resume(); - }, this._delay); + public trigger(task: ITask, delay: number = this.defaultDelay): Promise { + this._task = task; + if (delay >= 0) { + this._doCancelTimeout(); } - if (this._isPaused !== 0) { - this._queue.push(item); - } else { - this._callbackFn(item); + if (!this._cancelTimeout) { + this._cancelTimeout = new Promise((resolve) => { + this._onSuccess = resolve; + }).then(() => { + this._cancelTimeout = null; + this._onSuccess = null; + const result = this._task && this._task?.(); + this._task = null; + return result; + }); + } + + if (delay >= 0 || this._timeout === null) { + this._timeout = setTimeout(() => { + this._timeout = null; + this._onSuccess?.(undefined); + }, delay >= 0 ? delay : this.defaultDelay); + } + + return this._cancelTimeout; + } + + private _doCancelTimeout(): void { + if (this._timeout !== null) { + clearTimeout(this._timeout); + this._timeout = null; } } } + +export interface ITask { + (): T; +} diff --git a/extensions/ipynb/src/ipynbMain.ts b/extensions/ipynb/src/ipynbMain.ts index ca8e2b3ce4a..1d61f8a1cae 100644 --- a/extensions/ipynb/src/ipynbMain.ts +++ b/extensions/ipynb/src/ipynbMain.ts @@ -43,6 +43,18 @@ export function activate(context: vscode.ExtensionContext) { } } as vscode.NotebookDocumentContentOptions)); + context.subscriptions.push(vscode.workspace.registerNotebookSerializer('interactive', serializer, { + transientOutputs: false, + transientCellMetadata: { + breakpointMargin: true, + custom: false, + attachments: false + }, + cellContentMetadata: { + attachments: true + } + } as vscode.NotebookDocumentContentOptions)); + vscode.languages.registerCodeLensProvider({ pattern: '**/*.ipynb' }, { provideCodeLenses: (document) => { if ( diff --git a/extensions/ipynb/src/notebookAttachmentCleaner.ts b/extensions/ipynb/src/notebookAttachmentCleaner.ts index c7af81492da..cad19f07b29 100644 --- a/extensions/ipynb/src/notebookAttachmentCleaner.ts +++ b/extensions/ipynb/src/notebookAttachmentCleaner.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; import { ATTACHMENT_CLEANUP_COMMANDID, JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR } from './constants'; -import { DebounceTrigger, deepClone, objectEquals } from './helper'; +import { deepClone, objectEquals, Delayer } from './helper'; interface AttachmentCleanRequest { notebook: vscode.NotebookDocument; @@ -32,15 +32,10 @@ export class AttachmentCleaner implements vscode.CodeActionProvider { private _disposables: vscode.Disposable[]; private _imageDiagnosticCollection: vscode.DiagnosticCollection; + private readonly _delayer = new Delayer(750); + constructor() { this._disposables = []; - const debounceTrigger = new DebounceTrigger({ - callback: (change: AttachmentCleanRequest) => { - this.cleanNotebookAttachments(change); - }, - delay: 500 - }); - this._imageDiagnosticCollection = vscode.languages.createDiagnosticCollection('Notebook Image Attachment'); this._disposables.push(this._imageDiagnosticCollection); @@ -57,23 +52,66 @@ export class AttachmentCleaner implements vscode.CodeActionProvider { })); this._disposables.push(vscode.workspace.onDidChangeNotebookDocument(e => { - e.cellChanges.forEach(change => { - if (!change.document) { - return; - } + this._delayer.trigger(() => { - if (change.cell.kind !== vscode.NotebookCellKind.Markup) { - return; - } + e.cellChanges.forEach(change => { + if (!change.document) { + return; + } - debounceTrigger.trigger({ - notebook: e.notebook, - cell: change.cell, - document: change.document + if (change.cell.kind !== vscode.NotebookCellKind.Markup) { + return; + } + + const metadataEdit = this.cleanNotebookAttachments({ + notebook: e.notebook, + cell: change.cell, + document: change.document + }); + if (metadataEdit) { + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(e.notebook.uri, [metadataEdit]); + vscode.workspace.applyEdit(workspaceEdit); + } }); }); })); + + this._disposables.push(vscode.workspace.onWillSaveNotebookDocument(e => { + if (e.reason === vscode.TextDocumentSaveReason.Manual) { + this._delayer.dispose(); + + e.waitUntil(new Promise((resolve) => { + if (e.notebook.getCells().length === 0) { + return; + } + + const notebookEdits: vscode.NotebookEdit[] = []; + for (const cell of e.notebook.getCells()) { + if (cell.kind !== vscode.NotebookCellKind.Markup) { + continue; + } + + const metadataEdit = this.cleanNotebookAttachments({ + notebook: e.notebook, + cell: cell, + document: cell.document + }); + + if (metadataEdit) { + notebookEdits.push(metadataEdit); + } + } + + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(e.notebook.uri, notebookEdits); + + resolve(workspaceEdit); + })); + } + })); + this._disposables.push(vscode.workspace.onDidCloseNotebookDocument(e => { this._attachmentCache.delete(e.uri.toString()); })); @@ -134,8 +172,10 @@ export class AttachmentCleaner implements vscode.CodeActionProvider { /** * take in a NotebookDocumentChangeEvent, and clean the attachment data for the cell(s) that have had their markdown source code changed * @param e NotebookDocumentChangeEvent from the onDidChangeNotebookDocument listener + * @returns vscode.NotebookEdit, the metadata alteration performed on the json behind the ipynb */ - private cleanNotebookAttachments(e: AttachmentCleanRequest) { + private cleanNotebookAttachments(e: AttachmentCleanRequest): vscode.NotebookEdit | undefined { + if (e.notebook.isClosed) { return; } @@ -187,16 +227,19 @@ export class AttachmentCleaner implements vscode.CodeActionProvider { } } + this.updateDiagnostics(cell.document.uri, diagnostics); + if (cell.index > -1 && !objectEquals(markdownAttachmentsInUse, cell.metadata.attachments)) { const updateMetadata: { [key: string]: any } = deepClone(cell.metadata); - updateMetadata.attachments = markdownAttachmentsInUse; + if (Object.keys(markdownAttachmentsInUse).length === 0) { + updateMetadata.attachments = undefined; + } else { + updateMetadata.attachments = markdownAttachmentsInUse; + } const metadataEdit = vscode.NotebookEdit.updateCellMetadata(cell.index, updateMetadata); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.set(e.notebook.uri, [metadataEdit]); - vscode.workspace.applyEdit(workspaceEdit); + return metadataEdit; } - - this.updateDiagnostics(cell.document.uri, diagnostics); + return; } private analyzeMissingAttachments(document: vscode.TextDocument): void { @@ -325,7 +368,7 @@ export class AttachmentCleaner implements vscode.CodeActionProvider { private getAttachmentNames(document: vscode.TextDocument) { const source = document.getText(); const filenames: Map = new Map(); - const re = /!\[.*?\]\(attachment:(?.*?)\)/gm; + const re = /!\[.*?\]\(.*?)>?\)/gm; let match; while ((match = re.exec(source))) { @@ -345,6 +388,7 @@ export class AttachmentCleaner implements vscode.CodeActionProvider { dispose() { this._disposables.forEach(d => d.dispose()); + this._delayer.dispose(); } } diff --git a/extensions/ipynb/src/notebookImagePaste.ts b/extensions/ipynb/src/notebookImagePaste.ts index 24608480218..5a164643a15 100644 --- a/extensions/ipynb/src/notebookImagePaste.ts +++ b/extensions/ipynb/src/notebookImagePaste.ts @@ -5,81 +5,215 @@ import * as vscode from 'vscode'; import { JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR } from './constants'; +import { basename, extname } from 'path'; -class CopyPasteEditProvider implements vscode.DocumentPasteEditProvider { +enum MimeType { + bmp = 'image/bmp', + gif = 'image/gif', + ico = 'image/ico', + jpeg = 'image/jpeg', + png = 'image/png', + tiff = 'image/tiff', + webp = 'image/webp', + uriList = 'text/uri-list', +} + +const imageMimeTypes: ReadonlySet = new Set([ + MimeType.bmp, + MimeType.gif, + MimeType.ico, + MimeType.jpeg, + MimeType.png, + MimeType.tiff, + MimeType.webp, +]); + +const imageExtToMime: ReadonlyMap = new Map([ + ['.bmp', MimeType.bmp], + ['.gif', MimeType.gif], + ['.ico', MimeType.ico], + ['.jpe', MimeType.jpeg], + ['.jpeg', MimeType.jpeg], + ['.jpg', MimeType.jpeg], + ['.png', MimeType.png], + ['.tif', MimeType.tiff], + ['.tiff', MimeType.tiff], + ['.webp', MimeType.webp], +]); + +function getImageMimeType(uri: vscode.Uri): string | undefined { + return imageExtToMime.get(extname(uri.fsPath).toLowerCase()); +} + +class DropOrPasteEditProvider implements vscode.DocumentPasteEditProvider, vscode.DocumentDropEditProvider { + + private readonly id = 'insertAttachment'; + + private readonly defaultPriority = 5; async provideDocumentPasteEdits( document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, - _token: vscode.CancellationToken + token: vscode.CancellationToken, ): Promise { - - const enabled = vscode.workspace.getConfiguration('ipynb', document).get('pasteImagesAsAttachments.enabled', false); + const enabled = vscode.workspace.getConfiguration('ipynb', document).get('pasteImagesAsAttachments.enabled', true); if (!enabled) { - return undefined; + return; } - // get b64 data from paste - // TODO: dataTransfer.get() limits to one image pasted - const dataItem = dataTransfer.get('image/png'); - if (!dataItem) { - return undefined; - } - const fileDataAsUint8 = await dataItem.asFile()?.data(); - if (!fileDataAsUint8) { - return undefined; + const insert = await this.createInsertImageAttachmentEdit(document, dataTransfer, token); + if (!insert) { + return; } - // get filename data from paste - const clipboardFilename = dataItem.asFile()?.name; - if (!clipboardFilename) { - return undefined; - } - const separatorIndex = clipboardFilename?.lastIndexOf('.'); - const filename = clipboardFilename?.slice(0, separatorIndex); - const filetype = clipboardFilename?.slice(separatorIndex); - if (!filename || !filetype) { - return undefined; + const pasteEdit = new vscode.DocumentPasteEdit(insert.insertText, this.id, vscode.l10n.t('Insert Image as Attachment')); + pasteEdit.priority = this.getPastePriority(dataTransfer); + pasteEdit.additionalEdit = insert.additionalEdit; + return pasteEdit; + } + + async provideDocumentDropEdits( + document: vscode.TextDocument, + _position: vscode.Position, + dataTransfer: vscode.DataTransfer, + token: vscode.CancellationToken, + ): Promise { + const insert = await this.createInsertImageAttachmentEdit(document, dataTransfer, token); + if (!insert) { + return; } - const currentCell = this.getCellFromCellDocument(document); + const dropEdit = new vscode.DocumentDropEdit(insert.insertText); + dropEdit.id = this.id; + dropEdit.priority = this.defaultPriority; + dropEdit.additionalEdit = insert.additionalEdit; + dropEdit.label = vscode.l10n.t('Insert Image as Attachment'); + return dropEdit; + } + + private getPastePriority(dataTransfer: vscode.DataTransfer): number { + if (dataTransfer.get('text/plain')) { + // Deprioritize in favor of normal text content + return -5; + } + + // Otherwise boost priority so attachments are preferred + return this.defaultPriority; + } + + private async createInsertImageAttachmentEdit( + document: vscode.TextDocument, + dataTransfer: vscode.DataTransfer, + token: vscode.CancellationToken, + ): Promise<{ insertText: vscode.SnippetString; additionalEdit: vscode.WorkspaceEdit } | undefined> { + const imageData = await getDroppedImageData(dataTransfer, token); + if (!imageData.length || token.isCancellationRequested) { + return; + } + + const currentCell = getCellFromCellDocument(document); if (!currentCell) { return undefined; } - const notebookUri = currentCell.notebook.uri; // create updated metadata for cell (prep for WorkspaceEdit) - const b64string = encodeBase64(fileDataAsUint8); - const startingAttachments = currentCell.metadata.attachments; - const newAttachment = buildAttachment(b64string, currentCell, filename, filetype, startingAttachments); + const newAttachment = buildAttachment(currentCell, imageData); + if (!newAttachment) { + return; + } // build edits + const additionalEdit = new vscode.WorkspaceEdit(); const nbEdit = vscode.NotebookEdit.updateCellMetadata(currentCell.index, newAttachment.metadata); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.set(notebookUri, [nbEdit]); + const notebookUri = currentCell.notebook.uri; + additionalEdit.set(notebookUri, [nbEdit]); // create a snippet for paste - const pasteSnippet = new vscode.SnippetString(); - pasteSnippet.appendText('!['); - pasteSnippet.appendPlaceholder(`${clipboardFilename}`); - pasteSnippet.appendText(`](attachment:${newAttachment.filename})`); + const insertText = new vscode.SnippetString(); + newAttachment.filenames.forEach((filename, i) => { + insertText.appendText('!['); + insertText.appendPlaceholder(`${filename}`); + insertText.appendText(`](${/\s/.test(filename) ? `` : `attachment:${filename}`})`); + if (i !== newAttachment.filenames.length - 1) { + insertText.appendText(' '); + } + }); - return { insertText: pasteSnippet, additionalEdit: workspaceEdit }; + return { insertText, additionalEdit }; + } +} + +async function getDroppedImageData( + dataTransfer: vscode.DataTransfer, + token: vscode.CancellationToken, +): Promise { + + // Prefer using image data in the clipboard + const files = coalesce(await Promise.all(Array.from(dataTransfer, async ([mimeType, item]): Promise => { + if (!imageMimeTypes.has(mimeType)) { + return; + } + + const file = item.asFile(); + if (!file) { + return; + } + + const data = await file.data(); + return { fileName: file.name, mimeType, data }; + }))); + if (files.length) { + return files; } - private getCellFromCellDocument(cellDocument: vscode.TextDocument): vscode.NotebookCell | undefined { - for (const notebook of vscode.workspace.notebookDocuments) { - if (notebook.uri.path === cellDocument.uri.path) { - for (const cell of notebook.getCells()) { - if (cell.document === cellDocument) { - return cell; - } + // Then fallback to image files in the uri-list + const urlList = await dataTransfer.get('text/uri-list')?.asString(); + if (token.isCancellationRequested) { + return []; + } + + if (urlList) { + const uris: vscode.Uri[] = []; + for (const resource of urlList.split(/\r?\n/g)) { + try { + uris.push(vscode.Uri.parse(resource)); + } catch { + // noop + } + } + + const entries = await Promise.all(uris.map(async (uri) => { + const mimeType = getImageMimeType(uri); + if (!mimeType) { + return; + } + + const data = await vscode.workspace.fs.readFile(uri); + return { fileName: basename(uri.fsPath), mimeType, data }; + })); + + return coalesce(entries); + } + + return []; +} + +function coalesce(array: ReadonlyArray): T[] { + return array.filter(e => !!e); +} + +function getCellFromCellDocument(cellDocument: vscode.TextDocument): vscode.NotebookCell | undefined { + for (const notebook of vscode.workspace.notebookDocuments) { + if (notebook.uri.path === cellDocument.uri.path) { + for (const cell of notebook.getCells()) { + if (cell.document === cellDocument) { + return cell; } } } - return undefined; } + return undefined; } /** @@ -123,35 +257,70 @@ function encodeBase64(buffer: Uint8Array, padded = true, urlSafe = false) { return output; } -function buildAttachment(b64: string, cell: vscode.NotebookCell, filename: string, filetype: string, startingAttachments: any): { metadata: { [key: string]: any }; filename: string } { + +interface ImageAttachmentData { + readonly fileName: string; + readonly data: Uint8Array; + readonly mimeType: string; +} + +function buildAttachment( + cell: vscode.NotebookCell, + attachments: readonly ImageAttachmentData[], +): { metadata: { [key: string]: any }; filenames: string[] } | undefined { const cellMetadata = { ...cell.metadata }; - let tempFilename = filename + filetype; + const tempFilenames: string[] = []; + if (!attachments.length) { + return undefined; + } if (!cellMetadata.attachments) { - cellMetadata['attachments'] = { [tempFilename]: { 'image/png': b64 } }; - } else { - for (let appendValue = 2; tempFilename in startingAttachments; appendValue++) { - const objEntries = Object.entries(startingAttachments[tempFilename]); + cellMetadata.attachments = {}; + } + + for (const attachment of attachments) { + const b64 = encodeBase64(attachment.data); + + const fileExt = extname(attachment.fileName); + const filenameWithoutExt = basename(attachment.fileName, fileExt); + + let tempFilename = filenameWithoutExt + fileExt; + for (let appendValue = 2; tempFilename in cellMetadata.attachments; appendValue++) { + const objEntries = Object.entries(cellMetadata.attachments[tempFilename]); if (objEntries.length) { // check that mime:b64 are present - const [, attachmentb64] = objEntries[0]; - if (attachmentb64 === b64) { // checking if filename can be reused, based on camparison of image data + const [mime, attachmentb64] = objEntries[0]; + if (mime === attachment.mimeType && attachmentb64 === b64) { // checking if filename can be reused, based on comparison of image data break; } else { - tempFilename = filename.concat(`-${appendValue}`) + filetype; + tempFilename = filenameWithoutExt.concat(`-${appendValue}`) + fileExt; } } } - cellMetadata.attachments[tempFilename] = { 'image/png': b64 }; + + tempFilenames.push(tempFilename); + cellMetadata.attachments[tempFilename] = { [attachment.mimeType]: b64 }; } return { metadata: cellMetadata, - filename: tempFilename + filenames: tempFilenames, }; } -export function notebookImagePasteSetup() { - return vscode.languages.registerDocumentPasteEditProvider(JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR, new CopyPasteEditProvider(), { - pasteMimeTypes: ['image/png'], - }); +export function notebookImagePasteSetup(): vscode.Disposable { + const provider = new DropOrPasteEditProvider(); + return vscode.Disposable.from( + vscode.languages.registerDocumentPasteEditProvider(JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR, provider, { + pasteMimeTypes: [ + MimeType.png, + MimeType.uriList, + ], + }), + vscode.languages.registerDocumentDropEditProvider(JUPYTER_NOTEBOOK_MARKDOWN_SELECTOR, provider, { + dropMimeTypes: [ + ...Object.values(imageExtToMime), + MimeType.uriList, + ], + }) + ); } diff --git a/extensions/ipynb/src/notebookSerializer.ts b/extensions/ipynb/src/notebookSerializer.ts index 0c3ccd09723..968c2738ed4 100644 --- a/extensions/ipynb/src/notebookSerializer.ts +++ b/extensions/ipynb/src/notebookSerializer.ts @@ -84,7 +84,7 @@ export class NotebookSerializer implements vscode.NotebookSerializer { public serializeNotebookToString(data: vscode.NotebookData): string { const notebookContent = getNotebookMetadata(data); // use the preferred language from document metadata or the first cell language as the notebook preferred cell language - const preferredCellLanguage = notebookContent.metadata?.language_info?.name ?? data.cells[0].languageId; + const preferredCellLanguage = notebookContent.metadata?.language_info?.name ?? data.cells.find(cell => cell.kind === vscode.NotebookCellKind.Code)?.languageId; notebookContent.cells = data.cells .map(cell => createJupyterCellFromNotebookCell(cell, preferredCellLanguage)) @@ -93,7 +93,7 @@ export class NotebookSerializer implements vscode.NotebookSerializer { const indentAmount = data.metadata && 'indentAmount' in data.metadata && typeof data.metadata.indentAmount === 'string' ? data.metadata.indentAmount : ' '; - // ipynb always ends with a trailing new line (we add this so that SCMs do not show unnecesary changes, resulting from a missing trailing new line). + // ipynb always ends with a trailing new line (we add this so that SCMs do not show unnecessary changes, resulting from a missing trailing new line). return JSON.stringify(sortObjectPropertiesRecursively(notebookContent), undefined, indentAmount) + '\n'; } } diff --git a/extensions/ipynb/src/serializers.ts b/extensions/ipynb/src/serializers.ts index 96da8f2c617..27c45bce918 100644 --- a/extensions/ipynb/src/serializers.ts +++ b/extensions/ipynb/src/serializers.ts @@ -332,9 +332,10 @@ function convertOutputMimeToJupyterOutput(mime: string, value: Uint8Array) { } else if (mime.toLowerCase().includes('json')) { const stringValue = textDecoder.decode(value); return stringValue.length > 0 ? JSON.parse(stringValue) : stringValue; + } else if (mime === 'image/svg+xml') { + return splitMultilineString(textDecoder.decode(value)); } else { - const stringValue = textDecoder.decode(value); - return stringValue; + return textDecoder.decode(value); } } catch (ex) { return ''; diff --git a/extensions/ipynb/tsconfig.json b/extensions/ipynb/tsconfig.json index f440ed24bea..189a4848f56 100644 --- a/extensions/ipynb/tsconfig.json +++ b/extensions/ipynb/tsconfig.json @@ -2,13 +2,13 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "./out", - "lib": [ - "dom" - ] + "lib": ["dom"] }, "include": [ "src/**/*", "../../src/vscode-dts/vscode.d.ts", - "../../src/vscode-dts/vscode.proposed.documentPaste.d.ts" + "../../src/vscode-dts/vscode.proposed.documentPaste.d.ts", + "../../src/vscode-dts/vscode.proposed.dropMetadata.d.ts" + ] } diff --git a/extensions/java/language-configuration.json b/extensions/java/language-configuration.json index e19d2d749f8..610adc686b4 100644 --- a/extensions/java/language-configuration.json +++ b/extensions/java/language-configuration.json @@ -29,5 +29,74 @@ "start": "^\\s*//\\s*(?:(?:#?region\\b)|(?:))" } - } + }, + "onEnterRules": [ + { + // e.g. /** | */ + "beforeText": { + "pattern": "^\\s*/\\*\\*(?!/)([^\\*]|\\*(?!/))*$" + }, + "afterText": { + "pattern": "^\\s*\\*/$" + }, + "action": { + "indent": "indentOutdent", + "appendText": " * " + } + }, + { + // e.g. /** ...| + "beforeText": { + "pattern": "^\\s*/\\*\\*(?!/)([^\\*]|\\*(?!/))*$" + }, + "action": { + "indent": "none", + "appendText": " * " + } + }, + { + // e.g. * ...| + "beforeText": { + "pattern": "^(\\t|[ ])*[ ]\\*([ ]([^\\*]|\\*(?!/))*)?$" + }, + "previousLineText": { + "pattern": "(?=^(\\s*(/\\*\\*|\\*)).*)(?=(?!(\\s*\\*/)))" + }, + "action": { + "indent": "none", + "appendText": "* " + } + }, + { + // e.g. */| + "beforeText": { + "pattern": "^(\\t|[ ])*[ ]\\*/\\s*$" + }, + "action": { + "indent": "none", + "removeText": 1 + } + }, + { + // e.g. *-----*/| + "beforeText": { + "pattern": "^(\\t|[ ])*[ ]\\*[^/]*\\*/\\s*$" + }, + "action": { + "indent": "none", + "removeText": 1 + } + }, + { + "beforeText": { + "pattern": "^\\s*(\\bcase\\s.+:|\\bdefault:)$" + }, + "afterText": { + "pattern": "^(?!\\s*(\\bcase\\b|\\bdefault\\b))" + }, + "action": { + "indent": "indent" + } + } + ] } diff --git a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json index 43d5c8553b2..4fe09e087aa 100644 --- a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json +++ b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/0d73d1117e0a9b1d6635ebbe9aa37d615171b02d", + "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/8c7482b94b548eab56da64dbfb30b82589b3f747", "name": "JavaScript (with React support)", "scopeName": "source.js", "patterns": [ @@ -134,7 +134,7 @@ "name": "keyword.control.flow.js" } }, - "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -299,7 +299,7 @@ { "name": "meta.var.expr.js", "begin": "(?=(?|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#comment" @@ -1808,7 +1876,7 @@ }, { "begin": "(?<=:)\\s*", - "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -1969,7 +2037,7 @@ "name": "storage.type.namespace.js" } }, - "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2006,7 +2074,7 @@ "name": "entity.name.type.alias.js" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2024,7 +2092,7 @@ "name": "keyword.control.intrinsic.js" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2038,7 +2106,7 @@ "name": "keyword.operator.assignment.js" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2229,7 +2297,7 @@ "name": "keyword.control.default.js" } }, - "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#interface-declaration" @@ -2241,7 +2309,7 @@ }, { "name": "meta.export.js", - "begin": "(?:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[,);}\\]=>:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type-arguments" @@ -3904,7 +3972,7 @@ "name": "keyword.operator.type.annotation.js" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#arrow-return-type-body" @@ -3918,7 +3986,7 @@ "name": "meta.arrow.js meta.return.type.arrow.js keyword.operator.type.annotation.js" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "contentName": "meta.arrow.js meta.return.type.arrow.js", "patterns": [ { diff --git a/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json b/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json index 299e33321a4..b9869694bdd 100644 --- a/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json +++ b/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/0d73d1117e0a9b1d6635ebbe9aa37d615171b02d", + "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/8c7482b94b548eab56da64dbfb30b82589b3f747", "name": "JavaScript (with React support)", "scopeName": "source.js.jsx", "patterns": [ @@ -134,7 +134,7 @@ "name": "keyword.control.flow.js.jsx" } }, - "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -299,7 +299,7 @@ { "name": "meta.var.expr.js.jsx", "begin": "(?=(?|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#comment" @@ -1808,7 +1876,7 @@ }, { "begin": "(?<=:)\\s*", - "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -1969,7 +2037,7 @@ "name": "storage.type.namespace.js.jsx" } }, - "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2006,7 +2074,7 @@ "name": "entity.name.type.alias.js.jsx" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2024,7 +2092,7 @@ "name": "keyword.control.intrinsic.js.jsx" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2038,7 +2106,7 @@ "name": "keyword.operator.assignment.js.jsx" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2229,7 +2297,7 @@ "name": "keyword.control.default.js.jsx" } }, - "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#interface-declaration" @@ -2241,7 +2309,7 @@ }, { "name": "meta.export.js.jsx", - "begin": "(?:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[,);}\\]=>:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type-arguments" @@ -3904,7 +3972,7 @@ "name": "keyword.operator.type.annotation.js.jsx" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#arrow-return-type-body" @@ -3918,7 +3986,7 @@ "name": "meta.arrow.js.jsx meta.return.type.arrow.js.jsx keyword.operator.type.annotation.js.jsx" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "contentName": "meta.arrow.js.jsx meta.return.type.arrow.js.jsx", "patterns": [ { diff --git a/extensions/json-language-features/client/src/jsonClient.ts b/extensions/json-language-features/client/src/jsonClient.ts index f208747da94..d6e1404a7ac 100644 --- a/extensions/json-language-features/client/src/jsonClient.ts +++ b/extensions/json-language-features/client/src/jsonClient.ts @@ -545,35 +545,45 @@ function getSettings(): Settings { } }; - const collectSchemaSettings = (schemaSettings: JSONSchemaSettings[] | undefined, folderUri: Uri | undefined = undefined, settingsLocation = folderUri) => { + /* + * Add schemas from the settings + * folderUri to which folder the setting is scoped to. `undefined` means global (also external files) + * settingsLocation against which path relative schema URLs are resolved + */ + const collectSchemaSettings = (schemaSettings: JSONSchemaSettings[] | undefined, folderUri: string | undefined, settingsLocation: Uri | undefined) => { if (schemaSettings) { for (const setting of schemaSettings) { const url = getSchemaId(setting, settingsLocation); if (url) { - const schemaSetting: JSONSchemaSettings = { url, fileMatch: setting.fileMatch, folderUri: folderUri?.toString(false), schema: setting.schema }; + const schemaSetting: JSONSchemaSettings = { url, fileMatch: setting.fileMatch, folderUri, schema: setting.schema }; schemas.push(schemaSetting); } } } }; - const folders = workspace.workspaceFolders; + const folders = workspace.workspaceFolders ?? []; const schemaConfigInfo = workspace.getConfiguration('json', null).inspect('schemas'); if (schemaConfigInfo) { - if (schemaConfigInfo.workspaceValue && workspace.workspaceFile && folders && folders.length) { - const settingsLocation = Uri.joinPath(workspace.workspaceFile, '..'); + // settings in user config + collectSchemaSettings(schemaConfigInfo.globalValue, undefined, undefined); + if (workspace.workspaceFile) { + if (schemaConfigInfo.workspaceValue) { + const settingsLocation = Uri.joinPath(workspace.workspaceFile, '..'); + // settings in the workspace configuration file apply to all files (also external files) + collectSchemaSettings(schemaConfigInfo.workspaceValue, undefined, settingsLocation); + } for (const folder of folders) { - collectSchemaSettings(schemaConfigInfo.workspaceValue, folder.uri, settingsLocation); + const folderUri = folder.uri; + const folderSchemaConfigInfo = workspace.getConfiguration('json', folderUri).inspect('schemas'); + collectSchemaSettings(folderSchemaConfigInfo?.workspaceFolderValue, folderUri.toString(false), folderUri); + } + } else { + if (schemaConfigInfo.workspaceValue && folders.length === 1) { + // single folder workspace: settings apply to all files (also external files) + collectSchemaSettings(schemaConfigInfo.workspaceValue, undefined, folders[0].uri); } - } - collectSchemaSettings(schemaConfigInfo.globalValue); - } - - if (folders) { - for (const folder of folders) { - const schemaConfigInfo = workspace.getConfiguration('json', folder.uri).inspect('schemas'); - collectSchemaSettings(schemaConfigInfo?.workspaceFolderValue, folder.uri); } } return settings; diff --git a/extensions/json-language-features/package.json b/extensions/json-language-features/package.json index 46b1b5564ff..2b43041ff05 100644 --- a/extensions/json-language-features/package.json +++ b/extensions/json-language-features/package.json @@ -7,7 +7,7 @@ "license": "MIT", "aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "engines": { - "vscode": "0.10.x" + "vscode": "^1.77.0" }, "enabledApiProposals": [], "icon": "icons/json.png", @@ -160,7 +160,7 @@ "dependencies": { "@vscode/extension-telemetry": "^0.7.5", "request-light": "^0.7.0", - "vscode-languageclient": "^8.1.0" + "vscode-languageclient": "^8.2.0-next.1" }, "devDependencies": { "@types/node": "16.x" diff --git a/extensions/json-language-features/server/package.json b/extensions/json-language-features/server/package.json index c6eb7bed2e5..72e707a58e6 100644 --- a/extensions/json-language-features/server/package.json +++ b/extensions/json-language-features/server/package.json @@ -12,11 +12,11 @@ }, "main": "./out/node/jsonServerMain", "dependencies": { - "@vscode/l10n": "^0.0.11", + "@vscode/l10n": "^0.0.14", "jsonc-parser": "^3.2.0", "request-light": "^0.7.0", - "vscode-json-languageservice": "^5.3.1", - "vscode-languageserver": "^8.1.0", + "vscode-json-languageservice": "^5.3.5", + "vscode-languageserver": "^8.2.0-next.1", "vscode-uri": "^3.0.7" }, "devDependencies": { diff --git a/extensions/json-language-features/server/yarn.lock b/extensions/json-language-features/server/yarn.lock index 3d079ff3b38..c8fabcbc15c 100644 --- a/extensions/json-language-features/server/yarn.lock +++ b/extensions/json-language-features/server/yarn.lock @@ -12,10 +12,15 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== -"@vscode/l10n@^0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@vscode/l10n/-/l10n-0.0.11.tgz#325d7beb2cfb87162bc624d16c4d546de6a73b72" - integrity sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA== +"@vscode/l10n@^0.0.13": + version "0.0.13" + resolved "https://registry.yarnpkg.com/@vscode/l10n/-/l10n-0.0.13.tgz#f51ff130b8c98f189476c5f812d214b8efb09590" + integrity sha512-A3uY356uOU9nGa+TQIT/i3ziWUgJjVMUrGGXSrtRiTwklyCFjGVWIOHoEIHbJpiyhDkJd9kvIWUOfXK1IkK8XQ== + +"@vscode/l10n@^0.0.14": + version "0.0.14" + resolved "https://registry.yarnpkg.com/@vscode/l10n/-/l10n-0.0.14.tgz#431e5814c35c3cb11ee21873bc70a4b0fbf90fcf" + integrity sha512-/yrv59IEnmh655z1oeDnGcvMYwnEzNzHLgeYcQCkhYX0xBvYWrAuefoiLcPBUkMpJsb46bqQ6Yv4pwTTQ4d3Qg== jsonc-parser@^3.2.0: version "3.2.0" @@ -27,46 +32,51 @@ request-light@^0.7.0: resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.7.0.tgz#885628bb2f8040c26401ebf258ec51c4ae98ac2a" integrity sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q== -vscode-json-languageservice@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-5.3.1.tgz#c36175d05f425fbd8f47dcee6f2a72096bdda36f" - integrity sha512-tPRf/2LOBS6uFflFLABdj8T3ol2/QgZ0kpzZHFCs+cbxpnjBNiCo+rfh3th0dtdytq5dSnWo5iFJj99zF6jZWQ== +vscode-json-languageservice@^5.3.5: + version "5.3.5" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-5.3.5.tgz#20acd827e13ea4bdeb9976df84ec2bfbb2452c73" + integrity sha512-DasT+bKtpaS2rTPEB4VMROnvO1WES2KD8RZZxXbumnk9sk5wco10VdB6sJgTlsKQN14tHQLZDXuHnSoSAlE8LQ== dependencies: - "@vscode/l10n" "^0.0.11" + "@vscode/l10n" "^0.0.13" jsonc-parser "^3.2.0" vscode-languageserver-textdocument "^1.0.8" vscode-languageserver-types "^3.17.3" vscode-uri "^3.0.7" -vscode-jsonrpc@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94" - integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw== +vscode-jsonrpc@8.2.0-next.0: + version "8.2.0-next.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0-next.0.tgz#41409413c8cebf10f2f1b7cc87e330f0e292814c" + integrity sha512-13jYzaFQpTz5qQ2P+l5c/iTVsj1wUpflP0CR/v4XaEpM0oToLEXZBTcuuox1WaGIbu3Av3xxmGNU4Hydl1iNKg== -vscode-languageserver-protocol@3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57" - integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA== +vscode-languageserver-protocol@3.17.4-next.1: + version "3.17.4-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.4-next.1.tgz#a15480e1bc663853ae90ded226efafc5ab333616" + integrity sha512-qrK4BycgPR/+nkRN9PRVTblkLp+kUPUmAgF6rDhFzZIPXW4/MqWwFUT8uswIMGdlTPPgCEkFO/AYEZK1fDXODg== dependencies: - vscode-jsonrpc "8.1.0" - vscode-languageserver-types "3.17.3" + vscode-jsonrpc "8.2.0-next.0" + vscode-languageserver-types "3.17.4-next.0" vscode-languageserver-textdocument@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== -vscode-languageserver-types@3.17.3, vscode-languageserver-types@^3.17.3: +vscode-languageserver-types@3.17.4-next.0: + version "3.17.4-next.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.4-next.0.tgz#4b5238d21cceaeb836d36a05d23c61a8c0238de2" + integrity sha512-2FPKboHnT04xYjfM8JpJVBz4a/tryMw58jmzucaabZMZN5hzoFBrhc97jNG4n6edr9JUb9+QSwwcAcYpDTAoag== + +vscode-languageserver-types@^3.17.3: version "3.17.3" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== -vscode-languageserver@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz#5024253718915d84576ce6662dd46a791498d827" - integrity sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw== +vscode-languageserver@^8.2.0-next.1: + version "8.2.0-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.2.0-next.1.tgz#ad2558d74392b1cfaccd427febe9a368fc328f8b" + integrity sha512-994AXMKBijzjlnpf8p9M+ntsNJDjR8pr55NJPYxKjy/nUhVkg962dAomelH6Z94401kBZmSbfP/K/20cB54aFA== dependencies: - vscode-languageserver-protocol "3.17.3" + vscode-languageserver-protocol "3.17.4-next.1" vscode-uri@^3.0.7: version "3.0.7" diff --git a/extensions/json-language-features/yarn.lock b/extensions/json-language-features/yarn.lock index afa4409e718..dcf55538c9a 100644 --- a/extensions/json-language-features/yarn.lock +++ b/extensions/json-language-features/yarn.lock @@ -359,9 +359,9 @@ semver@^5.3.0, semver@^5.4.1: integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -385,32 +385,32 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -vscode-jsonrpc@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94" - integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw== +vscode-jsonrpc@8.2.0-next.0: + version "8.2.0-next.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0-next.0.tgz#41409413c8cebf10f2f1b7cc87e330f0e292814c" + integrity sha512-13jYzaFQpTz5qQ2P+l5c/iTVsj1wUpflP0CR/v4XaEpM0oToLEXZBTcuuox1WaGIbu3Av3xxmGNU4Hydl1iNKg== -vscode-languageclient@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz#3e67d5d841481ac66ddbdaa55b4118742f6a9f3f" - integrity sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing== +vscode-languageclient@^8.2.0-next.1: + version "8.2.0-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.2.0-next.1.tgz#a3f98b80cfa3225fde0583aa6a5c9b20219fa37e" + integrity sha512-oITaqHQ10PM3zXCUu/104wriMeDutXMkQXMaRBWh1jKihcNcUBLC/os7RhqiVGypY0nl+F0pwStAf4Koc8inaw== dependencies: minimatch "^5.1.0" semver "^7.3.7" - vscode-languageserver-protocol "3.17.3" + vscode-languageserver-protocol "3.17.4-next.1" -vscode-languageserver-protocol@3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57" - integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA== +vscode-languageserver-protocol@3.17.4-next.1: + version "3.17.4-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.4-next.1.tgz#a15480e1bc663853ae90ded226efafc5ab333616" + integrity sha512-qrK4BycgPR/+nkRN9PRVTblkLp+kUPUmAgF6rDhFzZIPXW4/MqWwFUT8uswIMGdlTPPgCEkFO/AYEZK1fDXODg== dependencies: - vscode-jsonrpc "8.1.0" - vscode-languageserver-types "3.17.3" + vscode-jsonrpc "8.2.0-next.0" + vscode-languageserver-types "3.17.4-next.0" -vscode-languageserver-types@3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" - integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== +vscode-languageserver-types@3.17.4-next.0: + version "3.17.4-next.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.4-next.0.tgz#4b5238d21cceaeb836d36a05d23c61a8c0238de2" + integrity sha512-2FPKboHnT04xYjfM8JpJVBz4a/tryMw58jmzucaabZMZN5hzoFBrhc97jNG4n6edr9JUb9+QSwwcAcYpDTAoag== yallist@^4.0.0: version "4.0.0" diff --git a/extensions/json/build/update-grammars.js b/extensions/json/build/update-grammars.js index 3fb40c86623..ff00951e126 100644 --- a/extensions/json/build/update-grammars.js +++ b/extensions/json/build/update-grammars.js @@ -6,8 +6,8 @@ var updateGrammar = require('vscode-grammar-updater'); -function adaptJSON(grammar, replacementScope) { - grammar.name = 'JSON with comments'; +function adaptJSON(grammar, name, replacementScope) { + grammar.name = name; grammar.scopeName = `source${replacementScope}`; var fixScopeNames = function (rule) { @@ -33,9 +33,5 @@ function adaptJSON(grammar, replacementScope) { var tsGrammarRepo = 'microsoft/vscode-JSON.tmLanguage'; updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSON.tmLanguage.json'); -updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONC.tmLanguage.json', grammar => adaptJSON(grammar, '.json.comments')); - - - - - +updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONC.tmLanguage.json', grammar => adaptJSON(grammar, 'JSON with Comments', '.json.comments')); +updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONL.tmLanguage.json', grammar => adaptJSON(grammar, 'JSON Lines', '.json.lines')); diff --git a/extensions/json/package.json b/extensions/json/package.json index ba3b94b8c78..57290e9d1dd 100644 --- a/extensions/json/package.json +++ b/extensions/json/package.json @@ -31,7 +31,8 @@ ".jslintrc", ".jsonld", ".geojson", - ".ipynb" + ".ipynb", + ".vuerc" ], "filenames": [ "composer.lock", @@ -65,6 +66,17 @@ "typedoc.json" ], "configuration": "./language-configuration.json" + }, + { + "id": "jsonl", + "aliases": [ + "JSON Lines" + ], + "extensions": [ + ".jsonl" + ], + "filenames": [], + "configuration": "./language-configuration.json" } ], "grammars": [ @@ -77,6 +89,11 @@ "language": "jsonc", "scopeName": "source.json.comments", "path": "./syntaxes/JSONC.tmLanguage.json" + }, + { + "language": "jsonl", + "scopeName": "source.json.lines", + "path": "./syntaxes/JSONL.tmLanguage.json" } ] }, diff --git a/extensions/json/syntaxes/JSONC.tmLanguage.json b/extensions/json/syntaxes/JSONC.tmLanguage.json index 31828ba65bb..ae5430630f6 100644 --- a/extensions/json/syntaxes/JSONC.tmLanguage.json +++ b/extensions/json/syntaxes/JSONC.tmLanguage.json @@ -5,7 +5,7 @@ "Once accepted there, we are happy to receive an update request." ], "version": "https://github.com/microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70", - "name": "JSON with comments", + "name": "JSON with Comments", "scopeName": "source.json.comments", "patterns": [ { diff --git a/extensions/json/syntaxes/JSONL.tmLanguage.json b/extensions/json/syntaxes/JSONL.tmLanguage.json new file mode 100644 index 00000000000..26de8d856f8 --- /dev/null +++ b/extensions/json/syntaxes/JSONL.tmLanguage.json @@ -0,0 +1,213 @@ +{ + "information_for_contributors": [ + "This file has been converted from https://github.com/microsoft/vscode-JSON.tmLanguage/blob/master/JSON.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/microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70", + "name": "JSON Lines", + "scopeName": "source.json.lines", + "patterns": [ + { + "include": "#value" + } + ], + "repository": { + "array": { + "begin": "\\[", + "beginCaptures": { + "0": { + "name": "punctuation.definition.array.begin.json.lines" + } + }, + "end": "\\]", + "endCaptures": { + "0": { + "name": "punctuation.definition.array.end.json.lines" + } + }, + "name": "meta.structure.array.json.lines", + "patterns": [ + { + "include": "#value" + }, + { + "match": ",", + "name": "punctuation.separator.array.json.lines" + }, + { + "match": "[^\\s\\]]", + "name": "invalid.illegal.expected-array-separator.json.lines" + } + ] + }, + "comments": { + "patterns": [ + { + "begin": "/\\*\\*(?!/)", + "captures": { + "0": { + "name": "punctuation.definition.comment.json.lines" + } + }, + "end": "\\*/", + "name": "comment.block.documentation.json.lines" + }, + { + "begin": "/\\*", + "captures": { + "0": { + "name": "punctuation.definition.comment.json.lines" + } + }, + "end": "\\*/", + "name": "comment.block.json.lines" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.comment.json.lines" + } + }, + "match": "(//).*$\\n?", + "name": "comment.line.double-slash.js" + } + ] + }, + "constant": { + "match": "\\b(?:true|false|null)\\b", + "name": "constant.language.json.lines" + }, + "number": { + "match": "(?x) # turn on extended mode\n -? # an optional minus\n (?:\n 0 # a zero\n | # ...or...\n [1-9] # a 1-9 character\n \\d* # followed by zero or more digits\n )\n (?:\n (?:\n \\. # a period\n \\d+ # followed by one or more digits\n )?\n (?:\n [eE] # an e character\n [+-]? # followed by an option +/-\n \\d+ # followed by one or more digits\n )? # make exponent optional\n )? # make decimal portion optional", + "name": "constant.numeric.json.lines" + }, + "object": { + "begin": "\\{", + "beginCaptures": { + "0": { + "name": "punctuation.definition.dictionary.begin.json.lines" + } + }, + "end": "\\}", + "endCaptures": { + "0": { + "name": "punctuation.definition.dictionary.end.json.lines" + } + }, + "name": "meta.structure.dictionary.json.lines", + "patterns": [ + { + "comment": "the JSON object key", + "include": "#objectkey" + }, + { + "include": "#comments" + }, + { + "begin": ":", + "beginCaptures": { + "0": { + "name": "punctuation.separator.dictionary.key-value.json.lines" + } + }, + "end": "(,)|(?=\\})", + "endCaptures": { + "1": { + "name": "punctuation.separator.dictionary.pair.json.lines" + } + }, + "name": "meta.structure.dictionary.value.json.lines", + "patterns": [ + { + "comment": "the JSON object value", + "include": "#value" + }, + { + "match": "[^\\s,]", + "name": "invalid.illegal.expected-dictionary-separator.json.lines" + } + ] + }, + { + "match": "[^\\s\\}]", + "name": "invalid.illegal.expected-dictionary-separator.json.lines" + } + ] + }, + "string": { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.json.lines" + } + }, + "end": "\"", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.json.lines" + } + }, + "name": "string.quoted.double.json.lines", + "patterns": [ + { + "include": "#stringcontent" + } + ] + }, + "objectkey": { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.support.type.property-name.begin.json.lines" + } + }, + "end": "\"", + "endCaptures": { + "0": { + "name": "punctuation.support.type.property-name.end.json.lines" + } + }, + "name": "string.json.lines support.type.property-name.json.lines", + "patterns": [ + { + "include": "#stringcontent" + } + ] + }, + "stringcontent": { + "patterns": [ + { + "match": "(?x) # turn on extended mode\n \\\\ # a literal backslash\n (?: # ...followed by...\n [\"\\\\/bfnrt] # one of these characters\n | # ...or...\n u # a u\n [0-9a-fA-F]{4}) # and four hex digits", + "name": "constant.character.escape.json.lines" + }, + { + "match": "\\\\.", + "name": "invalid.illegal.unrecognized-string-escape.json.lines" + } + ] + }, + "value": { + "patterns": [ + { + "include": "#constant" + }, + { + "include": "#number" + }, + { + "include": "#string" + }, + { + "include": "#array" + }, + { + "include": "#object" + }, + { + "include": "#comments" + } + ] + } + } +} \ No newline at end of file diff --git a/extensions/julia/cgmanifest.json b/extensions/julia/cgmanifest.json index c6cc3e5c1f7..0dac126a5ae 100644 --- a/extensions/julia/cgmanifest.json +++ b/extensions/julia/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "JuliaEditorSupport/atom-language-julia", "repositoryUrl": "https://github.com/JuliaEditorSupport/atom-language-julia", - "commitHash": "7b7801f41ce4ac1303bd17e057dbe677e24f597f" + "commitHash": "ccc0277c9ee9af34a0b50e5fa27a6f5191601b8c" } }, "license": "MIT", diff --git a/extensions/julia/syntaxes/julia.tmLanguage.json b/extensions/julia/syntaxes/julia.tmLanguage.json index bd3acb8d6bb..c4e146ee5e7 100644 --- a/extensions/julia/syntaxes/julia.tmLanguage.json +++ b/extensions/julia/syntaxes/julia.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/JuliaEditorSupport/atom-language-julia/commit/7b7801f41ce4ac1303bd17e057dbe677e24f597f", + "version": "https://github.com/JuliaEditorSupport/atom-language-julia/commit/ccc0277c9ee9af34a0b50e5fa27a6f5191601b8c", "name": "Julia", "scopeName": "source.julia", "comment": "This grammar is used by Atom (Oniguruma), GitHub (PCRE), and VSCode (Oniguruma),\nso all regexps must be compatible with both engines.\n\nSpecs:\n- https://github.com/kkos/oniguruma/blob/master/doc/RE\n- https://www.pcre.org/current/doc/html/", @@ -120,6 +120,26 @@ } ] }, + "comment_tags": { + "patterns": [ + { + "match": "\\bTODO\\b", + "name": "keyword.other.comment-annotation.julia" + }, + { + "match": "\\bFIXME\\b", + "name": "keyword.other.comment-annotation.julia" + }, + { + "match": "\\bCHANGED\\b", + "name": "keyword.other.comment-annotation.julia" + }, + { + "match": "\\bXXX\\b", + "name": "keyword.other.comment-annotation.julia" + } + ] + }, "comment": { "patterns": [ { @@ -133,7 +153,12 @@ } }, "end": "\\n", - "name": "comment.line.number-sign.julia" + "name": "comment.line.number-sign.julia", + "patterns": [ + { + "include": "#comment_tags" + } + ] } ] }, @@ -154,6 +179,9 @@ }, "name": "comment.block.number-sign-equals.julia", "patterns": [ + { + "include": "#comment_tags" + }, { "include": "#comment_block" } @@ -852,6 +880,9 @@ "patterns": [ { "include": "#string_escaped_char" + }, + { + "include": "#string_dollar_sign_interpolate" } ] }, @@ -878,6 +909,9 @@ "patterns": [ { "include": "#string_escaped_char" + }, + { + "include": "#string_dollar_sign_interpolate" } ] } @@ -903,6 +937,10 @@ "name": "variable.interpolation.julia", "comment": "`punctuation.section.embedded`, `constant.escape`,\n& `meta.embedded.line` were considered but appear to have even spottier\nsupport among popular syntaxes.", "patterns": [ + { + "match": "\\bfor\\b", + "name": "keyword.control.julia" + }, { "include": "#parentheses" }, diff --git a/extensions/latex/cgmanifest.json b/extensions/latex/cgmanifest.json index 1765e5f63c2..e63e475ecdd 100644 --- a/extensions/latex/cgmanifest.json +++ b/extensions/latex/cgmanifest.json @@ -6,11 +6,11 @@ "git": { "name": "jlelong/vscode-latex-basics", "repositoryUrl": "https://github.com/jlelong/vscode-latex-basics", - "commitHash": "eed5b817b757aab3695af437409fcbfdd37bbc59" + "commitHash": "30adbfae9dcb0a6477584247ac477f13845d1f5f" } }, "license": "MIT", - "version": "1.5.1", + "version": "1.5.3", "description": "The files in syntaxes/ were originally part of https://github.com/James-Yu/LaTeX-Workshop. They have been extracted in the hope that they can useful outside of the LaTeX-Workshop extension.", "licenseDetail": [ "Copyright (c) vscode-latex-basics authors", diff --git a/extensions/latex/syntaxes/Bibtex.tmLanguage.json b/extensions/latex/syntaxes/Bibtex.tmLanguage.json index 3fe919168e8..169136df5f2 100644 --- a/extensions/latex/syntaxes/Bibtex.tmLanguage.json +++ b/extensions/latex/syntaxes/Bibtex.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/jlelong/vscode-latex-basics/commit/b98c2d4911652824fc990f4b26c9c30be59b78a2", + "version": "https://github.com/jlelong/vscode-latex-basics/commit/7adad0868ecafbb1df978f1e052d6c3c85c38732", "name": "BibTeX", "scopeName": "text.bibtex", "comment": "Grammar based on description from http://artis.imag.fr/~Xavier.Decoret/resources/xdkbibtex/bibtex_summary.html#comment\n\t\n\tTODO: Does not support @preamble\n\t", @@ -20,7 +20,14 @@ "name": "comment.line.at-sign.bibtex" }, { - "begin": "((@)(?i:string))\\s*(\\{)\\s*([a-zA-Z]*)", + "patterns": [ + { + "include": "#percentage_comment" + } + ] + }, + { + "begin": "((@)(?i:string))\\s*(\\{)\\s*([a-zA-Z0-9\\!\\$\\&\\*\\+\\-\\.\\/\\:\\;\\<\\>\\?\\[\\]\\^\\_\\`\\|]+)", "beginCaptures": { "1": { "name": "keyword.other.string-constant.bibtex" @@ -49,7 +56,7 @@ ] }, { - "begin": "((@)i(?i::string))\\s*(\\()\\s*([a-zA-Z]*)", + "begin": "((@)(?i:string))\\s*(\\()\\s*([a-zA-Z0-9\\!\\$\\&\\*\\+\\-\\.\\/\\:\\;\\<\\>\\?\\[\\]\\^\\_\\`\\|]+)", "beginCaptures": { "1": { "name": "keyword.other.string-constant.bibtex" @@ -101,6 +108,12 @@ }, "name": "meta.entry.braces.bibtex", "patterns": [ + { + "include": "#percentage_comment" + }, + { + "include": "#url_field" + }, { "begin": "([a-zA-Z0-9\\!\\$\\&\\*\\+\\-\\.\\/\\:\\;\\<\\>\\?\\[\\]\\^\\_\\`\\|]+)\\s*(\\=)", "beginCaptures": { @@ -115,13 +128,16 @@ "name": "meta.key-assignment.bibtex", "patterns": [ { - "include": "#string_var" + "include": "#percentage_comment" + }, + { + "include": "#integer" }, { "include": "#string_content" }, { - "include": "#integer" + "include": "#string_var" } ] } @@ -151,6 +167,12 @@ }, "name": "meta.entry.parenthesis.bibtex", "patterns": [ + { + "include": "#percentage_comment" + }, + { + "include": "#url_field" + }, { "begin": "([a-zA-Z0-9\\!\\$\\&\\*\\+\\-\\.\\/\\:\\;\\<\\>\\?\\[\\]\\^\\_\\`\\|]+)\\s*(\\=)", "beginCaptures": { @@ -165,13 +187,16 @@ "name": "meta.key-assignment.bibtex", "patterns": [ { - "include": "#string_var" + "include": "#percentage_comment" + }, + { + "include": "#integer" }, { "include": "#string_content" }, { - "include": "#integer" + "include": "#string_var" } ] } @@ -185,8 +210,12 @@ ], "repository": { "integer": { - "match": "\\d+", - "name": "constant.numeric.bibtex" + "match": "\\s*(\\d+)\\s*", + "captures": { + "1": { + "name": "constant.numeric.bibtex" + } + } }, "nested_braces": { "begin": "(?\\?\\[\\]\\^\\_\\`\\|]+)\\s*(#)?", "captures": { "1": { "name": "keyword.operator.bibtex" @@ -237,6 +266,12 @@ } }, "patterns": [ + { + "include": "#url_cmd" + }, + { + "include": "#percentage_comment" + }, { "match": "@", "name": "invalid.illegal.at-sign.bibtex" @@ -260,6 +295,12 @@ } }, "patterns": [ + { + "include": "#url_cmd" + }, + { + "include": "#percentage_comment" + }, { "match": "@", "name": "invalid.illegal.at-sign.bibtex" @@ -267,6 +308,94 @@ ] } ] + }, + "string_url": { + "patterns": [ + { + "begin": "\\{|\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.bibtex" + } + }, + "end": "(\\}|\")(?=(?:,?\\s*\\}?\\s*\\n)|(?:\\s*#))", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.bibtex" + } + }, + "contentName": "meta.url.bibtex", + "patterns": [ + { + "include": "#url_cmd" + } + ] + } + ] + }, + "percentage_comment": { + "patterns": [ + { + "begin": "(^[ \\t]+)?(?=%)", + "beginCaptures": { + "1": { + "name": "punctuation.whitespace.comment.leading.bibtex" + } + }, + "end": "(?!\\G)", + "patterns": [ + { + "begin": "(?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.class.cpp" @@ -634,7 +640,7 @@ "11": { "patterns": [ { - "match": "((?|\\?\\?>)|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { @@ -1395,41 +1401,25 @@ "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, "10": { - "patterns": [ - { - "include": "#inline_comment" - } - ] - }, - "11": { - "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" - }, - "12": { - "name": "comment.block.cpp" - }, - "13": { - "name": "comment.block.cpp punctuation.definition.comment.end.cpp" - }, - "14": { "name": "storage.type.modifier.calling-convention.cpp" }, - "15": { + "11": { "patterns": [ { "include": "#inline_comment" } ] }, - "16": { + "12": { "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" }, - "17": { + "13": { "name": "comment.block.cpp" }, - "18": { + "14": { "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, - "19": { + "15": { "name": "entity.name.function.constructor.cpp entity.name.function.definition.special.constructor.cpp" } }, @@ -1451,7 +1441,7 @@ "include": "#ever_present_context" }, { - "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(default)|(delete))", + "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(default)|(delete))", "captures": { "1": { "name": "keyword.operator.assignment.cpp" @@ -1494,7 +1484,7 @@ "endCaptures": {}, "patterns": [ { - "begin": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(\\()", + "begin": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(\\()", "end": "\\)|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { @@ -1628,48 +1618,32 @@ ] }, "constructor_root": { - "begin": "\\s*+((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)(((?>(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)(((?>(?|\\?\\?>)|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.function.definition.special.constructor.cpp" }, "1": { - "patterns": [ - { - "include": "#inline_comment" - } - ] - }, - "2": { - "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" - }, - "3": { - "name": "comment.block.cpp" - }, - "4": { - "name": "comment.block.cpp punctuation.definition.comment.end.cpp" - }, - "5": { "name": "storage.type.modifier.calling-convention.cpp" }, - "6": { + "2": { "patterns": [ { "include": "#inline_comment" } ] }, - "7": { + "3": { "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" }, - "8": { + "4": { "name": "comment.block.cpp" }, - "9": { + "5": { "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, - "10": { + "6": { "patterns": [ { "match": "::", @@ -1684,15 +1658,15 @@ } ] }, - "11": { + "7": { "patterns": [ { "include": "#template_call_range" } ] }, - "12": {}, - "13": { + "8": {}, + "9": { "patterns": [ { "match": "(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?=:)", @@ -1708,7 +1682,23 @@ } ] }, - "14": {}, + "10": {}, + "11": { + "patterns": [ + { + "include": "#inline_comment" + } + ] + }, + "12": { + "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" + }, + "13": { + "name": "comment.block.cpp" + }, + "14": { + "name": "comment.block.cpp punctuation.definition.comment.end.cpp" + }, "15": { "patterns": [ { @@ -1740,22 +1730,6 @@ }, "22": { "name": "comment.block.cpp punctuation.definition.comment.end.cpp" - }, - "23": { - "patterns": [ - { - "include": "#inline_comment" - } - ] - }, - "24": { - "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" - }, - "25": { - "name": "comment.block.cpp" - }, - "26": { - "name": "comment.block.cpp punctuation.definition.comment.end.cpp" } }, "endCaptures": {}, @@ -1776,7 +1750,7 @@ "include": "#ever_present_context" }, { - "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(default)|(delete))", + "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(default)|(delete))", "captures": { "1": { "name": "keyword.operator.assignment.cpp" @@ -1819,7 +1793,7 @@ "endCaptures": {}, "patterns": [ { - "begin": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(\\()", + "begin": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(\\()", "end": "\\)|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { @@ -1953,7 +1927,7 @@ ] }, "control_flow_keywords": { - "match": "((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(\\{)", + "begin": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(\\{)", "end": "\\}|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { @@ -2226,7 +2206,7 @@ ] }, "d9bc4796b0b_module_import": { - "match": "^((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((import))(?:(?:\\s)+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=\\/\\/)))|((\\\")[^\\\"]*((?:\\\")?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=\\/\\/))))|(((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:\\.(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=(?:\\/\\/|;)))))|((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=(?:\\/\\/|;))))(?:(?:\\s)+)?(;?)", + "match": "^((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((import))(?:\\s+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=\\/\\/)))|((\\\")[^\\\"]*(\\\"?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=\\/\\/))))|(((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:\\.(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=(?:\\/\\/|;)))))|((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=(?:\\/\\/|;))))(?:\\s+)?(;?)", "captures": { "1": { "patterns": [ @@ -2420,7 +2400,7 @@ "endCaptures": {}, "patterns": [ { - "match": "(\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\.|\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?(?:(?|\\?\\?>)|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { @@ -2801,64 +2781,48 @@ "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, "5": { - "patterns": [ - { - "include": "#inline_comment" - } - ] - }, - "6": { - "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" - }, - "7": { - "name": "comment.block.cpp" - }, - "8": { - "name": "comment.block.cpp punctuation.definition.comment.end.cpp" - }, - "9": { "name": "storage.type.modifier.calling-convention.cpp" }, - "10": { + "6": { "patterns": [ { "include": "#inline_comment" } ] }, - "11": { + "7": { "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" }, - "12": { + "8": { "name": "comment.block.cpp" }, - "13": { + "9": { "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, - "14": { + "10": { "patterns": [ { "include": "#functional_specifiers_pre_parameters" } ] }, - "15": { + "11": { "patterns": [ { "include": "#inline_comment" } ] }, - "16": { + "12": { "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" }, - "17": { + "13": { "name": "comment.block.cpp" }, - "18": { + "14": { "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, - "19": { + "15": { "name": "entity.name.function.destructor.cpp entity.name.function.definition.special.member.destructor.cpp" } }, @@ -2880,7 +2844,7 @@ "include": "#ever_present_context" }, { - "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(default)|(delete))", + "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(default)|(delete))", "captures": { "1": { "name": "keyword.operator.assignment.cpp" @@ -2964,7 +2928,7 @@ ] }, "destructor_root": { - "begin": "((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)(((?>(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)(((?>(?|\\?\\?>)|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { @@ -3112,7 +3076,7 @@ "include": "#ever_present_context" }, { - "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(default)|(delete))", + "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(default)|(delete))", "captures": { "1": { "name": "keyword.operator.assignment.cpp" @@ -3196,7 +3160,7 @@ ] }, "diagnostic": { - "begin": "(^((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(#)(?:(?:\\s)+)?((?:error|warning)))\\b(?:(?:\\s)+)?", + "begin": "(^((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(#)(?:\\s+)?((?:error|warning)))\\b(?:\\s+)?", "end": "(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::))?(?:(?:\\s)+)?((?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::))?(?:\\s+)?((?|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.enum.cpp" @@ -3463,7 +3427,7 @@ ] }, "enum_declare": { - "match": "((?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(extern)(?=\\s*\\\")", + "end": "(?:(?:(?<=\\}|%>|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.extern.cpp" @@ -3992,7 +3956,7 @@ ] }, "function_call": { - "begin": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)\\b(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(\\()", + "begin": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)\\b(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(\\()", "end": "\\)|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { @@ -4066,7 +4030,7 @@ ] }, "function_definition": { - "begin": "(?:(?:^|\\G|(?<=;|\\}))|(?<=>|\\*\\/))\\s*+(?:((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))?(?:(?:&|(?:\\*))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:&|(?:\\*)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)\\b(?|\\*\\/))\\s*+(?:((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))?(?:(?:&|\\*)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:&|\\*))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)\\b(?|\\?\\?>)|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { @@ -4104,7 +4068,7 @@ "7": { "patterns": [ { - "match": "((?)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))", + "match": "(?<=^|\\))(?:\\s+)?(->)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))", "captures": { "1": { "name": "punctuation.definition.function.return-type.cpp" @@ -4696,8 +4644,8 @@ ] }, "function_pointer": { - "begin": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))?(?:(?:&|(?:\\*))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:&|(?:\\*)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(\\()(\\*)(?:(?:\\s)+)?((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:(?:\\s)+)?(?:(\\[)(\\w*)(\\])(?:(?:\\s)+)?)*(\\))(?:(?:\\s)+)?(\\()", - "end": "(\\))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?=[{=,);>]|\\n)(?!\\()|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))?(?:(?:&|\\*)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:&|\\*))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(\\()(\\*)(?:\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:\\s+)?(?:(\\[)(\\w*)(\\])(?:\\s+)?)*(\\))(?:\\s+)?(\\()", + "end": "(\\))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?=[{=,);>]|\\n)(?!\\()|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { "name": "meta.qualified_type.cpp", @@ -4843,7 +4791,7 @@ "name": "storage.modifier.pointer.cpp" }, { - "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))){2,}\\&", + "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))){2,}\\&", "captures": { "1": { "patterns": [ @@ -4975,8 +4923,8 @@ ] }, "function_pointer_parameter": { - "begin": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))?(?:(?:&|(?:\\*))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:&|(?:\\*)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(\\()(\\*)(?:(?:\\s)+)?((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:(?:\\s)+)?(?:(\\[)(\\w*)(\\])(?:(?:\\s)+)?)*(\\))(?:(?:\\s)+)?(\\()", - "end": "(\\))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?=[{=,);>]|\\n)(?!\\()|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))?(?:(?:&|\\*)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:&|\\*))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(\\()(\\*)(?:\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:\\s+)?(?:(\\[)(\\w*)(\\])(?:\\s+)?)*(\\))(?:\\s+)?(\\()", + "end": "(\\))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?=[{=,);>]|\\n)(?!\\()|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { "name": "meta.qualified_type.cpp", @@ -5122,7 +5070,7 @@ "name": "storage.modifier.pointer.cpp" }, { - "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))){2,}\\&", + "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))){2,}\\&", "captures": { "1": { "patterns": [ @@ -5286,11 +5234,14 @@ }, { "include": "#string_context" + }, + { + "include": "#ever_present_context" } ] }, { - "match": "(using)(?:\\s)+((?]*(>?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=\\/\\/)))|((\\\")[^\\\"]*((?:\\\")?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=\\/\\/))))|(((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:\\.(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=(?:\\/\\/|;)))))|((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:\\n)|$)|(?=(?:\\/\\/|;))))", + "match": "^((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((#)(?:\\s+)?((?:include|include_next))\\b)(?:\\s+)?(?:(?:(?:((<)[^>]*(>?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=\\/\\/)))|((\\\")[^\\\"]*(\\\"?)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=\\/\\/))))|(((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:\\.(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)*((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=(?:\\/\\/|;)))))|((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:\\n|$)|(?=(?:\\/\\/|;))))", "captures": { "1": { "patterns": [ @@ -5586,7 +5540,7 @@ "name": "storage.type.modifier.virtual.cpp" }, { - "match": "(?<=protected|virtual|private|public|,|:)(?:(?:\\s)+)?(?!(?:(?:(?:protected)|(?:private)|(?:public))|virtual))(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))", + "match": "(?<=protected|virtual|private|public|,|:)(?:\\s+)?(?!(?:(?:(?:protected)|(?:private)|(?:public))|virtual))(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))", "captures": { "1": { "name": "meta.qualified_type.cpp", @@ -5757,7 +5711,7 @@ ] }, "inline_builtin_storage_type": { - "match": "(?:\\s)*+(?])|(?<=\\Wreturn|^return))(?:(?:\\s)+)?(\\[(?!\\[| *+\"| *+\\d))((?:[^\\[\\]]|((??)++\\]))*+)(\\](?!((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))[\\[\\];]))", + "begin": "(?:(?<=[^\\s]|^)(?])|(?<=\\Wreturn|^return))(?:\\s+)?(\\[(?!\\[| *+\"| *+\\d))((?:[^\\[\\]]|((??)++\\]))*+)(\\](?!((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))[\\[\\];=]))", "end": "(?<=[;}])|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { @@ -5866,7 +5820,7 @@ "include": "#the_this_keyword" }, { - "match": "((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?=\\]|\\z|$)|(,))|(\\=))", + "match": "((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?=\\]|\\z|$)|(,))|(\\=))", "captures": { "1": { "name": "variable.parameter.capture.cpp" @@ -5993,7 +5947,7 @@ "name": "constant.language.$0.cpp" }, "line": { - "begin": "^((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(#)(?:(?:\\s)+)?line\\b", + "begin": "^((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(#)(?:\\s+)?line\\b", "end": "(?\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:(?:\\s)+)?(?:(?:\\.\\*|\\.)|(?:->\\*|->))(?:(?:\\s)+)?)*)(?:(?:\\s)+)?(\\b(?!uint_least32_t[^\\w]|uint_least16_t[^\\w]|uint_least64_t[^\\w]|int_least32_t[^\\w]|int_least64_t[^\\w]|uint_fast32_t[^\\w]|uint_fast64_t[^\\w]|uint_least8_t[^\\w]|uint_fast16_t[^\\w]|int_least16_t[^\\w]|int_fast16_t[^\\w]|int_least8_t[^\\w]|uint_fast8_t[^\\w]|int_fast64_t[^\\w]|int_fast32_t[^\\w]|int_fast8_t[^\\w]|suseconds_t[^\\w]|useconds_t[^\\w]|in_addr_t[^\\w]|uintmax_t[^\\w]|uintmax_t[^\\w]|uintmax_t[^\\w]|in_port_t[^\\w]|uintptr_t[^\\w]|blksize_t[^\\w]|uint32_t[^\\w]|uint64_t[^\\w]|u_quad_t[^\\w]|intmax_t[^\\w]|intmax_t[^\\w]|unsigned[^\\w]|blkcnt_t[^\\w]|uint16_t[^\\w]|intptr_t[^\\w]|swblk_t[^\\w]|wchar_t[^\\w]|u_short[^\\w]|qaddr_t[^\\w]|caddr_t[^\\w]|daddr_t[^\\w]|fixpt_t[^\\w]|nlink_t[^\\w]|segsz_t[^\\w]|clock_t[^\\w]|ssize_t[^\\w]|int16_t[^\\w]|int32_t[^\\w]|int64_t[^\\w]|uint8_t[^\\w]|int8_t[^\\w]|mode_t[^\\w]|quad_t[^\\w]|ushort[^\\w]|u_long[^\\w]|u_char[^\\w]|double[^\\w]|signed[^\\w]|time_t[^\\w]|size_t[^\\w]|key_t[^\\w]|div_t[^\\w]|ino_t[^\\w]|uid_t[^\\w]|gid_t[^\\w]|off_t[^\\w]|pid_t[^\\w]|float[^\\w]|dev_t[^\\w]|u_int[^\\w]|short[^\\w]|bool[^\\w]|id_t[^\\w]|uint[^\\w]|long[^\\w]|char[^\\w]|void[^\\w]|auto[^\\w]|id_t[^\\w]|int[^\\w])(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b(?!\\())", + "match": "(?:((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:\\s+)?(?:(?:\\.\\*|\\.)|(?:->\\*|->))(?:\\s+)?)*)(?:\\s+)?(\\b(?!uint_least32_t[^\\w]|uint_least16_t[^\\w]|uint_least64_t[^\\w]|int_least32_t[^\\w]|int_least64_t[^\\w]|uint_fast32_t[^\\w]|uint_fast64_t[^\\w]|uint_least8_t[^\\w]|uint_fast16_t[^\\w]|int_least16_t[^\\w]|int_fast16_t[^\\w]|int_least8_t[^\\w]|uint_fast8_t[^\\w]|int_fast64_t[^\\w]|int_fast32_t[^\\w]|int_fast8_t[^\\w]|suseconds_t[^\\w]|useconds_t[^\\w]|in_addr_t[^\\w]|uintmax_t[^\\w]|uintmax_t[^\\w]|uintmax_t[^\\w]|in_port_t[^\\w]|uintptr_t[^\\w]|blksize_t[^\\w]|uint32_t[^\\w]|uint64_t[^\\w]|u_quad_t[^\\w]|intmax_t[^\\w]|intmax_t[^\\w]|unsigned[^\\w]|blkcnt_t[^\\w]|uint16_t[^\\w]|intptr_t[^\\w]|swblk_t[^\\w]|wchar_t[^\\w]|u_short[^\\w]|qaddr_t[^\\w]|caddr_t[^\\w]|daddr_t[^\\w]|fixpt_t[^\\w]|nlink_t[^\\w]|segsz_t[^\\w]|clock_t[^\\w]|ssize_t[^\\w]|int16_t[^\\w]|int32_t[^\\w]|int64_t[^\\w]|uint8_t[^\\w]|int8_t[^\\w]|mode_t[^\\w]|quad_t[^\\w]|ushort[^\\w]|u_long[^\\w]|u_char[^\\w]|double[^\\w]|signed[^\\w]|time_t[^\\w]|size_t[^\\w]|key_t[^\\w]|div_t[^\\w]|ino_t[^\\w]|uid_t[^\\w]|gid_t[^\\w]|off_t[^\\w]|pid_t[^\\w]|float[^\\w]|dev_t[^\\w]|u_int[^\\w]|short[^\\w]|bool[^\\w]|id_t[^\\w]|uint[^\\w]|long[^\\w]|char[^\\w]|void[^\\w]|auto[^\\w]|id_t[^\\w]|int[^\\w])(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b(?!\\())", "captures": { "1": { "patterns": [ @@ -6184,7 +6138,7 @@ "7": { "patterns": [ { - "match": "(?<=(?:\\.\\*|\\.|->|->\\*))(?:(?:\\s)+)?(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?\\*|->)))", + "match": "(?<=(?:\\.\\*|\\.|->|->\\*))(?:\\s+)?(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?\\*|->)))", "captures": { "1": { "patterns": [ @@ -6217,7 +6171,7 @@ } }, { - "match": "(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?\\*|->)))", + "match": "(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?\\*|->)))", "captures": { "1": { "patterns": [ @@ -6263,7 +6217,7 @@ } }, "memory_operators": { - "match": "((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:(?:(delete)(?:(?:\\s)+)?(\\[\\])|(delete))|(new))(?!\\w))", + "match": "((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?:(?:(delete)(?:\\s+)?(\\[\\])|(delete))|(new))(?!\\w))", "captures": { "1": { "patterns": [ @@ -6308,7 +6262,7 @@ } }, "method_access": { - "begin": "(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:(?:\\s)+)?(?:(?:\\.\\*|\\.)|(?:->\\*|->))(?:(?:\\s)+)?)*)(?:(?:\\s)+)?(~?(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)(?:(?:\\s)+)?(\\()", + "begin": "(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?\\*|->)))((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:\\s+)?(?:(?:\\.\\*|\\.)|(?:->\\*|->))(?:\\s+)?)*)(?:\\s+)?(~?(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)(?:\\s+)?(\\()", "end": "\\)|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { @@ -6342,7 +6296,7 @@ "9": { "patterns": [ { - "match": "(?<=(?:\\.\\*|\\.|->|->\\*))(?:(?:\\s)+)?(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?\\*|->)))", + "match": "(?<=(?:\\.\\*|\\.|->|->\\*))(?:\\s+)?(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?\\*|->)))", "captures": { "1": { "patterns": [ @@ -6375,7 +6329,7 @@ } }, { - "match": "(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?\\*|->)))", + "match": "(?:((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?\\*|->)))", "captures": { "1": { "patterns": [ @@ -6434,7 +6388,7 @@ ] }, "misc_keywords": { - "match": "((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)(?:(?:\\s)+)?((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)(?:\\s+)?((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)(?:(?:\\s)+)?((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)(?:\\s+)?((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))?(?:(?:&|(?:\\*))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:&|(?:\\*)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)(operator)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)(?:(?:((?:(?:delete\\[\\])|(?:delete)|(?:new\\[\\])|(?:<=>)|(?:<<=)|(?:new)|(?:>>=)|(?:\\->\\*)|(?:\\/=)|(?:%=)|(?:&=)|(?:>=)|(?:\\|=)|(?:\\+\\+)|(?:\\-\\-)|(?:\\(\\))|(?:\\[\\])|(?:\\->)|(?:\\+\\+)|(?:<<)|(?:>>)|(?:\\-\\-)|(?:<=)|(?:\\^=)|(?:==)|(?:!=)|(?:&&)|(?:\\|\\|)|(?:\\+=)|(?:\\-=)|(?:\\*=)|,|(?:\\+)|(?:\\-)|!|~|(?:\\*)|&|(?:\\*)|(?:\\/)|%|(?:\\+)|(?:\\-)|<|>|&|(?:\\^)|(?:\\|)|=))|((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))?(?:(?:&|\\*)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:&|\\*))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?((?:__cdecl|__clrcall|__stdcall|__fastcall|__thiscall|__vectorcall)?)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)(operator)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)(?:(?:((?:(?:delete\\[\\])|(?:delete)|(?:new\\[\\])|(?:<=>)|(?:<<=)|(?:new)|(?:>>=)|(?:\\->\\*)|(?:\\/=)|(?:%=)|(?:&=)|(?:>=)|(?:\\|=)|(?:\\+\\+)|(?:\\-\\-)|(?:\\(\\))|(?:\\[\\])|(?:\\->)|(?:\\+\\+)|(?:<<)|(?:>>)|(?:\\-\\-)|(?:<=)|(?:\\^=)|(?:==)|(?:!=)|(?:&&)|(?:\\|\\|)|(?:\\+=)|(?:\\-=)|(?:\\*=)|,|\\+|\\-|!|~|\\*|&|\\*|\\/|%|\\+|\\-|<|>|&|\\^|\\||=))|((?|\\?\\?>)|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.function.definition.special.operator-overload.cpp" }, "1": { + "patterns": [ + { + "include": "#inline_comment" + } + ] + }, + "2": { + "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" + }, + "3": { + "name": "comment.block.cpp" + }, + "4": { + "name": "comment.block.cpp punctuation.definition.comment.end.cpp" + }, + "5": { "name": "meta.qualified_type.cpp", "patterns": [ { @@ -7040,7 +7016,7 @@ } ] }, - "2": { + "6": { "patterns": [ { "include": "#attributes_context" @@ -7050,22 +7026,6 @@ } ] }, - "3": { - "patterns": [ - { - "include": "#inline_comment" - } - ] - }, - "4": { - "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" - }, - "5": { - "name": "comment.block.cpp" - }, - "6": { - "name": "comment.block.cpp punctuation.definition.comment.end.cpp" - }, "7": { "patterns": [ { @@ -7083,6 +7043,22 @@ "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, "11": { + "patterns": [ + { + "include": "#inline_comment" + } + ] + }, + "12": { + "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" + }, + "13": { + "name": "comment.block.cpp" + }, + "14": { + "name": "comment.block.cpp punctuation.definition.comment.end.cpp" + }, + "15": { "patterns": [ { "match": "::", @@ -7097,39 +7073,39 @@ } ] }, - "12": { + "16": { "patterns": [ { "include": "#template_call_range" } ] }, - "13": {}, - "14": { + "17": {}, + "18": { "patterns": [ { "include": "#inline_comment" } ] }, - "15": { + "19": { "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" }, - "16": { + "20": { "name": "comment.block.cpp" }, - "17": { + "21": { "name": "comment.block.cpp punctuation.definition.comment.end.cpp" }, - "18": {}, - "19": { + "22": {}, + "23": { "patterns": [ { "match": "\\*", "name": "storage.modifier.pointer.cpp" }, { - "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))){2,}\\&", + "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))){2,}\\&", "captures": { "1": { "patterns": [ @@ -7156,22 +7132,6 @@ } ] }, - "20": { - "patterns": [ - { - "include": "#inline_comment" - } - ] - }, - "21": { - "name": "comment.block.cpp punctuation.definition.comment.begin.cpp" - }, - "22": { - "name": "comment.block.cpp" - }, - "23": { - "name": "comment.block.cpp punctuation.definition.comment.end.cpp" - }, "24": { "patterns": [ { @@ -7333,7 +7293,7 @@ "name": "entity.name.operator.type.pointer.cpp" }, { - "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))){2,}\\&", + "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))){2,}\\&", "captures": { "1": { "patterns": [ @@ -7497,7 +7457,7 @@ "include": "#qualifiers_and_specifiers_post_parameters" }, { - "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(default)|(delete))", + "match": "(\\=)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(default)|(delete))", "captures": { "1": { "name": "keyword.operator.assignment.cpp" @@ -7564,7 +7524,7 @@ "operators": { "patterns": [ { - "begin": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.])", + "match": "\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.])", "captures": { "0": { "patterns": [ @@ -10897,12 +10863,12 @@ "name": "meta.qualified_type.cpp" }, "qualifiers_and_specifiers_post_parameters": { - "match": "((?:(?:(?:(?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -10952,7 +10918,7 @@ } }, "scope_resolution_function_call": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -10974,7 +10940,7 @@ } }, "scope_resolution_function_call_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11021,7 +10987,7 @@ } }, "scope_resolution_function_definition": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11043,7 +11009,7 @@ } }, "scope_resolution_function_definition_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11090,7 +11056,7 @@ } }, "scope_resolution_function_definition_operator_overload": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11112,7 +11078,7 @@ } }, "scope_resolution_function_definition_operator_overload_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11159,7 +11125,7 @@ } }, "scope_resolution_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11206,7 +11172,7 @@ } }, "scope_resolution_namespace_alias": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11228,7 +11194,7 @@ } }, "scope_resolution_namespace_alias_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11275,7 +11241,7 @@ } }, "scope_resolution_namespace_block": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11297,7 +11263,7 @@ } }, "scope_resolution_namespace_block_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11344,7 +11310,7 @@ } }, "scope_resolution_namespace_using": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11366,7 +11332,7 @@ } }, "scope_resolution_namespace_using_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11413,7 +11379,7 @@ } }, "scope_resolution_parameter": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11435,7 +11401,7 @@ } }, "scope_resolution_parameter_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11482,7 +11448,7 @@ } }, "scope_resolution_template_call": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11504,7 +11470,7 @@ } }, "scope_resolution_template_call_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11551,7 +11517,7 @@ } }, "scope_resolution_template_definition": { - "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+", + "match": "(::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+", "captures": { "0": { "patterns": [ @@ -11573,7 +11539,7 @@ } }, "scope_resolution_template_definition_inner_generated": { - "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?(::)", + "match": "((::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)((?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?(::)", "captures": { "1": { "patterns": [ @@ -11624,7 +11590,7 @@ "name": "punctuation.terminator.statement.cpp" }, "simple_type": { - "match": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))?(?:(?:&|(?:\\*))((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:&|(?:\\*)))?", + "match": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))?(?:(?:&|\\*)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:&|\\*))?", "captures": { "1": { "name": "meta.qualified_type.cpp", @@ -11797,7 +11763,7 @@ "name": "storage.modifier.pointer.cpp" }, { - "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))){2,}\\&", + "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))){2,}\\&", "captures": { "1": { "patterns": [ @@ -11877,7 +11843,7 @@ } }, "single_line_macro": { - "match": "^((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))#define.*(?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.struct.cpp" @@ -13131,7 +13097,7 @@ "11": { "patterns": [ { - "match": "((?|\\?\\?>)|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { @@ -13612,7 +13578,7 @@ ] }, "template_argument_defaulted": { - "match": "(?<=<|,)(?:(?:\\s)+)?((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)(?:\\s)+((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:(?:\\s)+)?(\\=)", + "match": "(?<=<|,)(?:\\s+)?((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)\\s+((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:\\s+)?(\\=)", "captures": { "1": { "name": "storage.type.template.argument.$1.cpp" @@ -13660,7 +13626,7 @@ ] }, "template_call_innards": { - "match": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+", + "match": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+", "captures": { "0": { "patterns": [ @@ -13702,7 +13668,7 @@ ] }, "template_definition": { - "begin": "(?|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { @@ -13720,7 +13686,7 @@ "name": "meta.template.definition.cpp", "patterns": [ { - "begin": "(?<=\\w)(?:(?:\\s)+)?<", + "begin": "(?<=\\w)(?:\\s+)?<", "end": ">|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { @@ -13744,7 +13710,7 @@ ] }, "template_definition_argument": { - "match": "((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?:(?:(?:((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)|((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*(?:\\s)+)+)((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*))|((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)(?:(?:\\s)+)?(\\.\\.\\.)(?:(?:\\s)+)?((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*))|(?)(?:(?:\\s)+)?(class|typename)(?:(?:\\s)+((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*))?)(?:(?:\\s)+)?(?:(\\=)(?:(?:\\s)+)?(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?(?:(,)|(?=>|$))", + "match": "((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)|((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\s+)+)((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*))|((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)(?:\\s+)?(\\.\\.\\.)(?:\\s+)?((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*))|(?)(?:\\s+)?(class|typename)(?:\\s+((?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*))?)(?:\\s+)?(?:(\\=)(?:\\s+)?(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?(?:(,)|(?=>|$))", "captures": { "1": { "patterns": [ @@ -13843,7 +13809,7 @@ ] }, "template_explicit_instantiation": { - "match": "(?)(?:(?:\\s)+)?$", + "match": "(?)(?:\\s+)?$", "captures": { "1": { "name": "storage.type.template.cpp" @@ -13972,7 +13938,7 @@ "applyEndPatternLast": 1 }, "the_this_keyword": { - "match": "((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))|(.*(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))|(.*(?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.class.cpp" @@ -14450,7 +14416,7 @@ "11": { "patterns": [ { - "match": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))?(?:(?:&|(?:\\*))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))*(?:&|(?:\\*)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(\\()(\\*)(?:(?:\\s)+)?((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:(?:\\s)+)?(?:(\\[)(\\w*)(\\])(?:(?:\\s)+)?)*(\\))(?:(?:\\s)+)?(\\()", - "end": "(\\))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(?=[{=,);>]|\\n)(?!\\()|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "(\\s*+((?:(?:(?:\\[\\[.*?\\]\\]|__attribute(?:__)?\\s*\\(\\s*\\(.*?\\)\\s*\\))|__declspec\\(.*?\\))|alignas\\(.*?\\))(?!\\)))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?:(?:(?:(?:unsigned)|(?:signed)|(?:short)|(?:long))|(?:(?:struct)|(?:class)|(?:union)|(?:enum)))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:((?:::)?(?:(?!\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\b)(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))(((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))?(?:(?:&|\\*)((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))*(?:&|\\*))?((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(\\()(\\*)(?:\\s+)?((?:(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*)?)(?:\\s+)?(?:(\\[)(\\w*)(\\])(?:\\s+)?)*(\\))(?:\\s+)?(\\()", + "end": "(\\))((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?=[{=,);>]|\\n)(?!\\()|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "1": { "name": "meta.qualified_type.cpp", @@ -14886,7 +14852,7 @@ "name": "storage.modifier.pointer.cpp" }, { - "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))){2,}\\&", + "match": "(?:\\&((?:(?:(?:\\s*+(\\/\\*)((?:[^\\*]++|\\*+(?!\\/))*+(\\*\\/))\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))){2,}\\&", "captures": { "1": { "patterns": [ @@ -15020,7 +14986,7 @@ ] }, "typedef_struct": { - "begin": "((?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.struct.cpp" @@ -15084,7 +15050,7 @@ "11": { "patterns": [ { - "match": "((?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.union.cpp" @@ -15427,7 +15393,7 @@ "11": { "patterns": [ { - "match": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z))))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))", + "match": "(((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z))(?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*+)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|\\A|\\Z)))?(?!(?:(?:transaction_safe_dynamic)|(?:__has_cpp_attribute)|(?:reinterpret_cast)|(?:transaction_safe)|(?:atomic_noexcept)|(?:atomic_commit)|(?:__has_include)|(?:atomic_cancel)|(?:synchronized)|(?:thread_local)|(?:dynamic_cast)|(?:static_cast)|(?:const_cast)|(?:constexpr)|(?:co_return)|(?:constinit)|(?:namespace)|(?:protected)|(?:consteval)|(?:constexpr)|(?:constexpr)|(?:co_return)|(?:consteval)|(?:co_await)|(?:continue)|(?:template)|(?:reflexpr)|(?:volatile)|(?:register)|(?:co_await)|(?:co_yield)|(?:restrict)|(?:noexcept)|(?:volatile)|(?:override)|(?:explicit)|(?:decltype)|(?:operator)|(?:noexcept)|(?:noexcept)|(?:typename)|(?:requires)|(?:co_yield)|(?:nullptr)|(?:alignof)|(?:alignas)|(?:default)|(?:mutable)|(?:virtual)|(?:mutable)|(?:private)|(?:include)|(?:warning)|(?:_Pragma)|(?:defined)|(?:typedef)|(?:__asm__)|(?:concept)|(?:define)|(?:module)|(?:sizeof)|(?:switch)|(?:delete)|(?:pragma)|(?:and_eq)|(?:inline)|(?:xor_eq)|(?:typeid)|(?:import)|(?:extern)|(?:public)|(?:bitand)|(?:static)|(?:export)|(?:return)|(?:friend)|(?:ifndef)|(?:not_eq)|(?:false)|(?:final)|(?:break)|(?:const)|(?:catch)|(?:endif)|(?:ifdef)|(?:undef)|(?:error)|(?:audit)|(?:while)|(?:using)|(?:axiom)|(?:or_eq)|(?:compl)|(?:throw)|(?:bitor)|(?:const)|(?:line)|(?:case)|(?:else)|(?:this)|(?:true)|(?:goto)|(?:else)|(?:NULL)|(?:elif)|(?:new)|(?:asm)|(?:xor)|(?:and)|(?:try)|(?:not)|(?:for)|(?:do)|(?:if)|(?:or)|(?:if))\\b)(?:[a-zA-Z_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))(?:[a-zA-Z0-9_]|(?:\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}))*\\b((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)?(?![\\w<:.]))", "captures": { "1": { "name": "storage.modifier.cpp" @@ -15967,7 +15933,7 @@ } }, "undef": { - "match": "(^((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))(#)(?:(?:\\s)+)?undef\\b)((?:((?:\\s*+\\/\\*(?:[^\\*]++|\\*+(?!\\/))*+\\*\\/\\s*+)+)|(?:\\s++)|(?<=\\W)|(?=\\W)|^|(?:\\n?$)|(?:\\A)|(?:\\Z)))((?|\\?\\?>)(?:(?:\\s)+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", + "begin": "((?|\\?\\?>)(?:\\s+)?(;)|(;))|(?=[;>\\[\\]=]))|(?=\\\\end\\{(?:minted|cppcode)\\})", "beginCaptures": { "0": { "name": "meta.head.union.cpp" @@ -16086,7 +16052,7 @@ "11": { "patterns": [ { - "match": "((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)(?:\\s)*+)?::)*\\s*+)?((?|(?:(?:[^'\"<>\\/]|\\/[^*])++))*>)\\s*+)?::)*\\s*+)?((?) ?" }, "fenced_code_block_css": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(css|css.erb)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(css|css.erb)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -99,7 +99,7 @@ ] }, "fenced_code_block_basic": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(html|htm|shtml|xhtml|inc|tmpl|tpl)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(html|htm|shtml|xhtml|inc|tmpl|tpl)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -132,7 +132,7 @@ ] }, "fenced_code_block_ini": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(ini|conf)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(ini|conf)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -165,7 +165,7 @@ ] }, "fenced_code_block_java": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(java|bsh)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(java|bsh)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -198,7 +198,7 @@ ] }, "fenced_code_block_lua": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(lua)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(lua)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -231,7 +231,7 @@ ] }, "fenced_code_block_makefile": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(Makefile|makefile|GNUmakefile|OCamlMakefile)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(Makefile|makefile|GNUmakefile|OCamlMakefile)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -264,7 +264,7 @@ ] }, "fenced_code_block_perl": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(perl|pl|pm|pod|t|PL|psgi|vcl)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(perl|pl|pm|pod|t|PL|psgi|vcl)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -297,7 +297,7 @@ ] }, "fenced_code_block_r": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(R|r|s|S|Rprofile|\\{\\.r.+?\\})((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(R|r|s|S|Rprofile|\\{\\.r.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -330,7 +330,7 @@ ] }, "fenced_code_block_ruby": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(ruby|rb|rbx|rjs|Rakefile|rake|cgi|fcgi|gemspec|irbrc|Capfile|ru|prawn|Cheffile|Gemfile|Guardfile|Hobofile|Vagrantfile|Appraisals|Rantfile|Berksfile|Berksfile.lock|Thorfile|Puppetfile)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(ruby|rb|rbx|rjs|Rakefile|rake|cgi|fcgi|gemspec|irbrc|Capfile|ru|prawn|Cheffile|Gemfile|Guardfile|Hobofile|Vagrantfile|Appraisals|Rantfile|Berksfile|Berksfile.lock|Thorfile|Puppetfile)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -363,7 +363,7 @@ ] }, "fenced_code_block_php": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(php|php3|php4|php5|phpt|phtml|aw|ctp)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(php|php3|php4|php5|phpt|phtml|aw|ctp)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -399,7 +399,7 @@ ] }, "fenced_code_block_sql": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(sql|ddl|dml)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(sql|ddl|dml)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -432,7 +432,7 @@ ] }, "fenced_code_block_vs_net": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(vb)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(vb)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -465,7 +465,7 @@ ] }, "fenced_code_block_xml": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(xml|xsd|tld|jsp|pt|cpt|dtml|rss|opml)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(xml|xsd|tld|jsp|pt|cpt|dtml|rss|opml)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -498,7 +498,7 @@ ] }, "fenced_code_block_xsl": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(xsl|xslt)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(xsl|xslt)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -531,7 +531,7 @@ ] }, "fenced_code_block_yaml": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(yaml|yml)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(yaml|yml)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -564,7 +564,7 @@ ] }, "fenced_code_block_dosbatch": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(bat|batch)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(bat|batch)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -597,7 +597,7 @@ ] }, "fenced_code_block_clojure": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(clj|cljs|clojure)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(clj|cljs|clojure)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -630,7 +630,7 @@ ] }, "fenced_code_block_coffee": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(coffee|Cakefile|coffee.erb)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(coffee|Cakefile|coffee.erb)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -663,7 +663,7 @@ ] }, "fenced_code_block_c": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(c|h)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(c|h)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -696,7 +696,7 @@ ] }, "fenced_code_block_cpp": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(cpp|c\\+\\+|cxx)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(cpp|c\\+\\+|cxx)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -729,7 +729,7 @@ ] }, "fenced_code_block_diff": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(patch|diff|rej)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(patch|diff|rej)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -762,7 +762,7 @@ ] }, "fenced_code_block_dockerfile": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(dockerfile|Dockerfile)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(dockerfile|Dockerfile)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -795,7 +795,7 @@ ] }, "fenced_code_block_git_commit": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(COMMIT_EDITMSG|MERGE_MSG)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(COMMIT_EDITMSG|MERGE_MSG)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -828,7 +828,7 @@ ] }, "fenced_code_block_git_rebase": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(git-rebase-todo)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(git-rebase-todo)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -861,7 +861,7 @@ ] }, "fenced_code_block_go": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(go|golang)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(go|golang)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -894,7 +894,7 @@ ] }, "fenced_code_block_groovy": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(groovy|gvy)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(groovy|gvy)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -927,7 +927,7 @@ ] }, "fenced_code_block_pug": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(jade|pug)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(jade|pug)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -960,7 +960,7 @@ ] }, "fenced_code_block_js": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\{\\.js.+?\\})((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\{\\.js.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -993,7 +993,7 @@ ] }, "fenced_code_block_js_regexp": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(regexp)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(regexp)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1026,7 +1026,7 @@ ] }, "fenced_code_block_json": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1059,7 +1059,7 @@ ] }, "fenced_code_block_jsonc": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(jsonc)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(jsonc)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1092,7 +1092,7 @@ ] }, "fenced_code_block_less": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(less)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(less)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1125,7 +1125,7 @@ ] }, "fenced_code_block_objc": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(objectivec|objective-c|mm|objc|obj-c|m|h)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(objectivec|objective-c|mm|objc|obj-c|m|h)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1158,7 +1158,7 @@ ] }, "fenced_code_block_swift": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(swift)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(swift)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1191,7 +1191,7 @@ ] }, "fenced_code_block_scss": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(scss)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(scss)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1224,7 +1224,7 @@ ] }, "fenced_code_block_perl6": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(perl6|p6|pl6|pm6|nqp)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(perl6|p6|pl6|pm6|nqp)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1257,7 +1257,7 @@ ] }, "fenced_code_block_powershell": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(powershell|ps1|psm1|psd1)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(powershell|ps1|psm1|psd1)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1290,7 +1290,7 @@ ] }, "fenced_code_block_python": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\{\\.python.+?\\})((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\{\\.python.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1323,7 +1323,7 @@ ] }, "fenced_code_block_julia": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(julia|\\{\\.julia.+?\\})((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(julia|\\{\\.julia.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1356,7 +1356,7 @@ ] }, "fenced_code_block_regexp_python": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(re)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(re)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1389,7 +1389,7 @@ ] }, "fenced_code_block_rust": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(rust|rs|\\{\\.rust.+?\\})((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(rust|rs|\\{\\.rust.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1422,7 +1422,7 @@ ] }, "fenced_code_block_scala": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(scala|sbt)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(scala|sbt)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1455,7 +1455,7 @@ ] }, "fenced_code_block_shell": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\{\\.bash.+?\\})((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\{\\.bash.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1488,7 +1488,7 @@ ] }, "fenced_code_block_ts": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(typescript|ts)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(typescript|ts)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1521,7 +1521,7 @@ ] }, "fenced_code_block_tsx": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(tsx)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(tsx)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1554,7 +1554,7 @@ ] }, "fenced_code_block_csharp": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(cs|csharp|c#)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(cs|csharp|c#)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1587,7 +1587,7 @@ ] }, "fenced_code_block_fsharp": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(fs|fsharp|f#)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(fs|fsharp|f#)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1620,7 +1620,7 @@ ] }, "fenced_code_block_dart": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(dart)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(dart)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1653,7 +1653,7 @@ ] }, "fenced_code_block_handlebars": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(handlebars|hbs)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(handlebars|hbs)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1686,7 +1686,7 @@ ] }, "fenced_code_block_markdown": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(markdown|md)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(markdown|md)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1719,7 +1719,7 @@ ] }, "fenced_code_block_log": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(log)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(log)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1752,7 +1752,7 @@ ] }, "fenced_code_block_erlang": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(erlang)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(erlang)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1785,7 +1785,7 @@ ] }, "fenced_code_block_elixir": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(elixir)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(elixir)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1818,7 +1818,7 @@ ] }, "fenced_code_block_latex": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(latex|tex)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(latex|tex)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1851,7 +1851,7 @@ ] }, "fenced_code_block_bibtex": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(bibtex)((\\s+|:|,|\\{|\\?)[^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(bibtex)((\\s+|:|,|\\{|\\?)[^`]*)?$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", "beginCaptures": { @@ -1883,6 +1883,39 @@ } ] }, + "fenced_code_block_twig": { + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(twig)((\\s+|:|,|\\{|\\?)[^`]*)?$)", + "name": "markup.fenced_code.block.markdown", + "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", + "beginCaptures": { + "3": { + "name": "punctuation.definition.markdown" + }, + "4": { + "name": "fenced_code.block.language.markdown" + }, + "5": { + "name": "fenced_code.block.language.attributes.markdown" + } + }, + "endCaptures": { + "3": { + "name": "punctuation.definition.markdown" + } + }, + "patterns": [ + { + "begin": "(^|\\G)(\\s*)(.*)", + "while": "(^|\\G)(?!\\s*([`~]{3,})\\s*$)", + "contentName": "meta.embedded.block.twig", + "patterns": [ + { + "include": "source.twig" + } + ] + } + ] + }, "fenced_code_block": { "patterns": [ { @@ -2050,13 +2083,16 @@ { "include": "#fenced_code_block_bibtex" }, + { + "include": "#fenced_code_block_twig" + }, { "include": "#fenced_code_block_unknown" } ] }, "fenced_code_block_unknown": { - "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?=([^`~]*)?$)", + "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?=([^`]*)?$)", "beginCaptures": { "3": { "name": "punctuation.definition.markdown" @@ -2363,7 +2399,7 @@ "name": "punctuation.definition.string.end.markdown" } }, - "match": "(?x)\n \\s* # Leading whitespace\n (\\[)([^]]+?)(\\])(:) # Reference name\n [ \\t]* # Optional whitespace\n (?:(<)([^\\>]+?)(>)|(\\S+?)) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n $\n", + "match": "(?x)\n \\s* # Leading whitespace\n (\\[)([^]]+?)(\\])(:) # Reference name\n [ \\t]* # Optional whitespace\n (?:(<)((?:\\\\[<>]|[^<>\\n])*)(>)|(\\S+?)) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n $\n", "name": "meta.link.reference.def.markdown" }, "list_paragraph": { @@ -2605,47 +2641,50 @@ "5": { "name": "punctuation.definition.metadata.markdown" }, - "6": { - "name": "punctuation.definition.link.markdown" - }, "7": { - "name": "markup.underline.link.image.markdown" + "name": "punctuation.definition.link.markdown" }, "8": { - "name": "punctuation.definition.link.markdown" + "name": "markup.underline.link.image.markdown" }, "9": { - "name": "string.other.link.description.title.markdown" + "name": "punctuation.definition.link.markdown" }, "10": { - "name": "punctuation.definition.string.markdown" - }, - "11": { - "name": "punctuation.definition.string.markdown" + "name": "markup.underline.link.image.markdown" }, "12": { "name": "string.other.link.description.title.markdown" }, "13": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.begin.markdown" }, "14": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.end.markdown" }, "15": { "name": "string.other.link.description.title.markdown" }, "16": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.begin.markdown" }, "17": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.end.markdown" }, "18": { + "name": "string.other.link.description.title.markdown" + }, + "19": { + "name": "punctuation.definition.string.begin.markdown" + }, + "20": { + "name": "punctuation.definition.string.end.markdown" + }, + "21": { "name": "punctuation.definition.metadata.markdown" } }, - "match": "(?x)\n (\\!\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n (?) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", + "match": "(?x)\n (\\!\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n # The url\n [ \\t]*\n (\n (<)((?:\\\\[<>]|[^<>\\n])*)(>)\n | ((?(?>[^\\s()]+)|\\(\\g*\\))*)\n )\n [ \\t]*\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", "name": "meta.image.inline.markdown" }, "image-ref": { @@ -2840,7 +2879,7 @@ "name": "punctuation.definition.metadata.markdown" } }, - "match": "(?x)\n (\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n # The url\n [ \\t]*\n (\n (<)([^<>\\n]*)(>)\n | ((?(?>[^\\s()]+)|\\(\\g*\\))*)\n )\n [ \\t]*\n # The title \n (?:\n ((\\()[^()]*(\\))) # Match title in parens…\n | ((\")[^\"]*(\")) # or in double quotes…\n | ((')[^']*(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", + "match": "(?x)\n (\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n # The url\n [ \\t]*\n (\n (<)((?:\\\\[<>]|[^<>\\n])*)(>)\n | ((?(?>[^\\s()]+)|\\(\\g*\\))*)\n )\n [ \\t]*\n # The title \n (?:\n ((\\()[^()]*(\\))) # Match title in parens…\n | ((\")[^\"]*(\")) # or in double quotes…\n | ((')[^']*(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", "name": "meta.link.inline.markdown" }, "link-ref": { diff --git a/extensions/lua/cgmanifest.json b/extensions/lua/cgmanifest.json index c1b98909447..0721cb91ace 100644 --- a/extensions/lua/cgmanifest.json +++ b/extensions/lua/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "sumneko/lua.tmbundle", "repositoryUrl": "https://github.com/sumneko/lua.tmbundle", - "commitHash": "57be7c5cf8fa173f5f39806822725e503932ab45" + "commitHash": "3a18700941737c3ab66ac5964696f141aee61800" } }, "licenseDetail": [ diff --git a/extensions/lua/syntaxes/lua.tmLanguage.json b/extensions/lua/syntaxes/lua.tmLanguage.json index ac3de0811b3..c28465b5ce6 100644 --- a/extensions/lua/syntaxes/lua.tmLanguage.json +++ b/extensions/lua/syntaxes/lua.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/sumneko/lua.tmbundle/commit/57be7c5cf8fa173f5f39806822725e503932ab45", + "version": "https://github.com/sumneko/lua.tmbundle/commit/3a18700941737c3ab66ac5964696f141aee61800", "name": "Lua", "scopeName": "source.lua", "patterns": [ @@ -60,7 +60,7 @@ "end": "(?=[\\),])", "patterns": [ { - "include": "#luadoc.type" + "include": "#emmydoc.type" } ] } @@ -77,7 +77,11 @@ ] }, { - "match": "(?>} + * @type {Map>>} */ const mangleMap = new Map(); @@ -25,7 +25,7 @@ function getMangledFileContents(projectPath) { if (!entry) { const log = (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data); log(`Mangling ${projectPath}`); - const ts2tsMangler = new Mangler(projectPath, log); + const ts2tsMangler = new Mangler(projectPath, log, { mangleExports: true, manglePrivateFields: true }); entry = ts2tsMangler.computeNewFileContents(); mangleMap.set(projectPath, entry); } @@ -41,6 +41,11 @@ module.exports = async function (source, sourceMap, meta) { // Only enable mangling in production builds return source; } + const options = this.getOptions(); + if (options.disabled) { + // Dynamically disabled + return source; + } if (source !== fs.readFileSync(this.resourcePath).toString()) { // File content has changed by previous webpack steps. @@ -48,10 +53,9 @@ module.exports = async function (source, sourceMap, meta) { return source; } - const options = this.getOptions(); const callback = this.async(); - const fileContentsMap = getMangledFileContents(options.configFile); + const fileContentsMap = await getMangledFileContents(options.configFile); const newContents = fileContentsMap.get(this.resourcePath); callback(null, newContents?.out ?? source, sourceMap, meta); diff --git a/extensions/markdown-basics/cgmanifest.json b/extensions/markdown-basics/cgmanifest.json index d914bf08dcb..7e2d20a1b32 100644 --- a/extensions/markdown-basics/cgmanifest.json +++ b/extensions/markdown-basics/cgmanifest.json @@ -33,7 +33,7 @@ "git": { "name": "microsoft/vscode-markdown-tm-grammar", "repositoryUrl": "https://github.com/microsoft/vscode-markdown-tm-grammar", - "commitHash": "ca2caf2157d0674be3d641f71499b84d514e4e5e" + "commitHash": "e2af2e59c84c47b7b3c3ea690d74e7001bab96a1" } }, "license": "MIT", diff --git a/extensions/markdown-basics/language-configuration.json b/extensions/markdown-basics/language-configuration.json index 6d59777e02e..40f4be77c1d 100644 --- a/extensions/markdown-basics/language-configuration.json +++ b/extensions/markdown-basics/language-configuration.json @@ -8,12 +8,20 @@ }, // symbols used as brackets "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - "colorizedBracketPairs": [ + [ + "{", + "}" + ], + [ + "[", + "]" + ], + [ + "(", + ")" + ] ], + "colorizedBracketPairs": [], "autoClosingPairs": [ { "open": "{", @@ -33,17 +41,49 @@ "notIn": [ "string" ] - } + }, + { + "open": "`", + "close": "`" + }, + { + "open": "```", + "close": "```" + }, ], "surroundingPairs": [ - ["(", ")"], - ["[", "]"], - ["`", "`"], - ["_", "_"], - ["*", "*"], - ["{", "}"], - ["'", "'"], - ["\"", "\""] + [ + "(", + ")" + ], + [ + "[", + "]" + ], + [ + "`", + "`" + ], + [ + "_", + "_" + ], + [ + "*", + "*" + ], + [ + "{", + "}" + ], + [ + "'", + "'" + ], + [ + "\"", + "\"" + ] ], "folding": { "offSide": true, @@ -52,5 +92,8 @@ "end": "^\\s*" } }, - "wordPattern": { "pattern": "(\\p{Alphabetic}|\\p{Number}|\\p{Nonspacing_Mark})(((\\p{Alphabetic}|\\p{Number}|\\p{Nonspacing_Mark})|[_])?(\\p{Alphabetic}|\\p{Number}|\\p{Nonspacing_Mark}))*", "flags": "ug" }, + "wordPattern": { + "pattern": "(\\p{Alphabetic}|\\p{Number}|\\p{Nonspacing_Mark})(((\\p{Alphabetic}|\\p{Number}|\\p{Nonspacing_Mark})|[_])?(\\p{Alphabetic}|\\p{Number}|\\p{Nonspacing_Mark}))*", + "flags": "ug" + }, } diff --git a/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json b/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json index 57e14e862a5..c31f66d8404 100644 --- a/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json +++ b/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/ca2caf2157d0674be3d641f71499b84d514e4e5e", + "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/e2af2e59c84c47b7b3c3ea690d74e7001bab96a1", "name": "Markdown", "scopeName": "text.html.markdown", "patterns": [ @@ -2396,7 +2396,7 @@ "name": "punctuation.definition.string.end.markdown" } }, - "match": "(?x)\n \\s* # Leading whitespace\n (\\[)([^]]+?)(\\])(:) # Reference name\n [ \\t]* # Optional whitespace\n (?:(<)([^\\>]+?)(>)|(\\S+?)) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n $\n", + "match": "(?x)\n \\s* # Leading whitespace\n (\\[)([^]]+?)(\\])(:) # Reference name\n [ \\t]* # Optional whitespace\n (?:(<)((?:\\\\[<>]|[^<>\\n])*)(>)|(\\S+?)) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n $\n", "name": "meta.link.reference.def.markdown" }, "list_paragraph": { @@ -2635,47 +2635,50 @@ "5": { "name": "punctuation.definition.metadata.markdown" }, - "6": { - "name": "punctuation.definition.link.markdown" - }, "7": { - "name": "markup.underline.link.image.markdown" + "name": "punctuation.definition.link.markdown" }, "8": { - "name": "punctuation.definition.link.markdown" + "name": "markup.underline.link.image.markdown" }, "9": { - "name": "string.other.link.description.title.markdown" + "name": "punctuation.definition.link.markdown" }, "10": { - "name": "punctuation.definition.string.markdown" - }, - "11": { - "name": "punctuation.definition.string.markdown" + "name": "markup.underline.link.image.markdown" }, "12": { "name": "string.other.link.description.title.markdown" }, "13": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.begin.markdown" }, "14": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.end.markdown" }, "15": { "name": "string.other.link.description.title.markdown" }, "16": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.begin.markdown" }, "17": { - "name": "punctuation.definition.string.markdown" + "name": "punctuation.definition.string.end.markdown" }, "18": { + "name": "string.other.link.description.title.markdown" + }, + "19": { + "name": "punctuation.definition.string.begin.markdown" + }, + "20": { + "name": "punctuation.definition.string.end.markdown" + }, + "21": { "name": "punctuation.definition.metadata.markdown" } }, - "match": "(?x)\n (\\!\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n (?) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", + "match": "(?x)\n (\\!\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n # The url\n [ \\t]*\n (\n (<)((?:\\\\[<>]|[^<>\\n])*)(>)\n | ((?(?>[^\\s()]+)|\\(\\g*\\))*)\n )\n [ \\t]*\n (?:\n ((\\().+?(\\))) # Match title in parens…\n | ((\").+?(\")) # or in double quotes…\n | ((').+?(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", "name": "meta.image.inline.markdown" }, "image-ref": { @@ -2870,7 +2873,7 @@ "name": "punctuation.definition.metadata.markdown" } }, - "match": "(?x)\n (\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n # The url\n [ \\t]*\n (\n (<)([^<>\\n]*)(>)\n | ((?(?>[^\\s()]+)|\\(\\g*\\))*)\n )\n [ \\t]*\n # The title \n (?:\n ((\\()[^()]*(\\))) # Match title in parens…\n | ((\")[^\"]*(\")) # or in double quotes…\n | ((')[^']*(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", + "match": "(?x)\n (\\[)((?[^\\[\\]\\\\]|\\\\.|\\[\\g*+\\])*+)(\\])\n # Match the link text.\n (\\() # Opening paren for url\n # The url\n [ \\t]*\n (\n (<)((?:\\\\[<>]|[^<>\\n])*)(>)\n | ((?(?>[^\\s()]+)|\\(\\g*\\))*)\n )\n [ \\t]*\n # The title \n (?:\n ((\\()[^()]*(\\))) # Match title in parens…\n | ((\")[^\"]*(\")) # or in double quotes…\n | ((')[^']*(')) # or in single quotes.\n )? # Title is optional\n \\s* # Optional whitespace\n (\\))\n", "name": "meta.link.inline.markdown" }, "link-ref": { diff --git a/extensions/markdown-language-features/.eslintignore b/extensions/markdown-language-features/.eslintignore new file mode 100644 index 00000000000..ab39cbce5a3 --- /dev/null +++ b/extensions/markdown-language-features/.eslintignore @@ -0,0 +1 @@ +server/ diff --git a/extensions/markdown-language-features/esbuild-notebook.js b/extensions/markdown-language-features/esbuild-notebook.js index fb32a3e986e..87275940f4c 100644 --- a/extensions/markdown-language-features/esbuild-notebook.js +++ b/extensions/markdown-language-features/esbuild-notebook.js @@ -4,42 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check const path = require('path'); -const esbuild = require('esbuild'); - -const args = process.argv.slice(2); - -const isWatch = args.indexOf('--watch') >= 0; - -let outputRoot = __dirname; -const outputRootIndex = args.indexOf('--outputRoot'); -if (outputRootIndex >= 0) { - outputRoot = args[outputRootIndex + 1]; -} const srcDir = path.join(__dirname, 'notebook'); -const outDir = path.join(outputRoot, 'notebook-out'); +const outDir = path.join(__dirname, 'notebook-out'); -function build() { - return esbuild.build({ - entryPoints: [ - path.join(__dirname, 'notebook', 'index.ts'), - ], - bundle: true, - minify: true, - sourcemap: false, - format: 'esm', - outdir: outDir, - platform: 'browser', - target: ['es2020'], - }); -} - - -build().catch(() => process.exit(1)); - -if (isWatch) { - const watcher = require('@parcel/watcher'); - watcher.subscribe(srcDir, () => { - return build(); - }); -} +require('../esbuild-webview-common').run({ + entryPoints: [ + path.join(srcDir, 'index.ts'), + ], + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/markdown-language-features/esbuild-preview.js b/extensions/markdown-language-features/esbuild-preview.js index c25dab4dbae..5a2e51cca09 100644 --- a/extensions/markdown-language-features/esbuild-preview.js +++ b/extensions/markdown-language-features/esbuild-preview.js @@ -4,42 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check const path = require('path'); -const esbuild = require('esbuild'); - -const args = process.argv.slice(2); - -const isWatch = args.indexOf('--watch') >= 0; - -let outputRoot = __dirname; -const outputRootIndex = args.indexOf('--outputRoot'); -if (outputRootIndex >= 0) { - outputRoot = args[outputRootIndex + 1]; -} const srcDir = path.join(__dirname, 'preview-src'); -const outDir = path.join(outputRoot, 'media'); +const outDir = path.join(__dirname, 'media'); -function build() { - return esbuild.build({ - entryPoints: [ - path.join(srcDir, 'index.ts'), - path.join(srcDir, 'pre'), - ], - bundle: true, - minify: true, - sourcemap: false, - format: 'iife', - outdir: outDir, - platform: 'browser', - target: ['es2020'], - }); -} - -build().catch(() => process.exit(1)); - -if (isWatch) { - const watcher = require('@parcel/watcher'); - watcher.subscribe(srcDir, () => { - return build(); - }); -} +require('../esbuild-webview-common').run({ + entryPoints: [ + path.join(srcDir, 'index.ts'), + path.join(srcDir, 'pre'), + ], + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/markdown-language-features/media/markdown.css b/extensions/markdown-language-features/media/markdown.css index 2fa4b030b0c..896531fdcc8 100644 --- a/extensions/markdown-language-features/media/markdown.css +++ b/extensions/markdown-language-features/media/markdown.css @@ -21,9 +21,11 @@ p, ol, ul, pre { margin-top: 0; } -h2, h3, h4, h5, h6 { - font-weight: normal; - margin-bottom: 0.2em; +h1, h2, h3, h4, h5, h6 { + font-weight: 600; + margin-top: 24px; + margin-bottom: 16px; + line-height: 1.25; } #code-csp-warning { @@ -98,6 +100,11 @@ body.showEditorSelection li.code-line:hover:before { border-left: 3px solid rgba(255, 160, 0, 1); } +/* Prevent `sub` and `sup` elements from affecting line height */ +sub, +sup { + line-height: 0; +} ul ul, ul ol, @@ -128,7 +135,7 @@ textarea:focus { } p { - margin-bottom: 0.7em; + margin-bottom: 16px; } ul, @@ -138,16 +145,39 @@ ol { hr { border: 0; - height: 2px; - border-bottom: 2px solid; + height: 1px; + border-bottom: 1px solid; } h1 { + font-size: 2em; + margin-top: 0; padding-bottom: 0.3em; - line-height: 1.2; border-bottom-width: 1px; border-bottom-style: solid; - font-weight: normal; +} + +h2 { + font-size: 1.5em; + padding-bottom: 0.3em; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +h3 { + font-size: 1.25em; +} + +h4 { + font-size: 1em; +} + +h5 { + font-size: 0.875em; +} + +h6 { + font-size: 0.85em; } table { @@ -200,15 +230,7 @@ pre code { /** Theming */ -.vscode-light pre { - background-color: rgba(220, 220, 220, 0.4); -} - -.vscode-dark pre { - background-color: rgba(10, 10, 10, 0.4); -} - -.vscode-high-contrast pre { +pre { background-color: var(--vscode-textCodeBlock-background); } @@ -225,12 +247,14 @@ pre code { } .vscode-light h1, +.vscode-light h2, .vscode-light hr, .vscode-light td { border-color: rgba(0, 0, 0, 0.18); } .vscode-dark h1, +.vscode-dark h2, .vscode-dark hr, .vscode-dark td { border-color: rgba(255, 255, 255, 0.18); diff --git a/extensions/markdown-language-features/package.json b/extensions/markdown-language-features/package.json index 42d4749692c..1f4fcbc6034 100644 --- a/extensions/markdown-language-features/package.json +++ b/extensions/markdown-language-features/package.json @@ -16,7 +16,8 @@ "Programming Languages" ], "enabledApiProposals": [ - "documentPaste" + "documentPaste", + "dropMetadata" ], "activationEvents": [ "onLanguage:markdown", @@ -120,6 +121,10 @@ } ], "commands": [ + { + "command": "_markdown.copyImage", + "title": "%markdown.copyImage.title%" + }, { "command": "markdown.showPreview", "title": "%markdown.preview.title%", @@ -181,6 +186,12 @@ } ], "menus": { + "webview/context": [ + { + "command": "_markdown.copyImage", + "when": "webviewId == 'markdown.preview' && webviewSection == 'image'" + } + ], "editor/title": [ { "command": "markdown.showPreviewToSide", @@ -438,21 +449,61 @@ "default": "off", "description": "%markdown.trace.server.desc%" }, + "markdown.server.log": { + "type": "string", + "scope": "window", + "enum": [ + "off", + "debug", + "trace" + ], + "default": "off", + "description": "%markdown.server.log.desc%" + }, "markdown.editor.drop.enabled": { "type": "boolean", "default": true, "markdownDescription": "%configuration.markdown.editor.drop.enabled%", "scope": "resource" }, - "markdown.experimental.editor.pasteLinks.enabled": { + "markdown.editor.drop.copyIntoWorkspace": { + "type": "string", + "markdownDescription": "%configuration.markdown.editor.drop.copyIntoWorkspace%", + "default": "mediaFiles", + "enum": [ + "mediaFiles", + "never" + ], + "markdownEnumDescriptions": [ + "%configuration.copyIntoWorkspace.mediaFiles%", + "%configuration.copyIntoWorkspace.never%" + ] + }, + "markdown.editor.filePaste.enabled": { "type": "boolean", "scope": "resource", - "markdownDescription": "%configuration.markdown.editor.pasteLinks.enabled%", - "default": true, - "tags": [ - "experimental" + "markdownDescription": "%configuration.markdown.editor.filePaste.enabled%", + "default": true + }, + "markdown.editor.filePaste.copyIntoWorkspace": { + "type": "string", + "markdownDescription": "%configuration.markdown.editor.filePaste.copyIntoWorkspace%", + "default": "mediaFiles", + "enum": [ + "mediaFiles", + "never" + ], + "markdownEnumDescriptions": [ + "%configuration.copyIntoWorkspace.mediaFiles%", + "%configuration.copyIntoWorkspace.never%" ] }, + "markdown.editor.pasteUrlAsFormattedLink.enabled": { + "type": "boolean", + "scope": "resource", + "markdownDescription": "%configuration.markdown.editor.pasteUrlAsFormattedLink.enabled%", + "default": true + }, "markdown.validate.enabled": { "type": "boolean", "scope": "resource", @@ -576,13 +627,26 @@ "description": "%configuration.markdown.occurrencesHighlight.enabled%", "scope": "resource" }, - "markdown.experimental.copyFiles.destination": { + "markdown.copyFiles.destination": { "type": "object", "markdownDescription": "%configuration.markdown.copyFiles.destination%", "additionalProperties": { "type": "string" } }, + "markdown.copyFiles.overwriteBehavior": { + "type": "string", + "markdownDescription": "%configuration.markdown.copyFiles.overwriteBehavior%", + "default": "nameIncrementally", + "enum": [ + "nameIncrementally", + "overwrite" + ], + "markdownEnumDescriptions": [ + "%configuration.markdown.copyFiles.overwriteBehavior.nameIncrementally%", + "%configuration.markdown.copyFiles.overwriteBehavior.overwrite%" + ] + }, "markdown.preferredMdPathExtensionStyle": { "type": "string", "default": "auto", diff --git a/extensions/markdown-language-features/package.nls.json b/extensions/markdown-language-features/package.nls.json index fcdc094117d..e39e597b02f 100644 --- a/extensions/markdown-language-features/package.nls.json +++ b/extensions/markdown-language-features/package.nls.json @@ -1,6 +1,7 @@ { "displayName": "Markdown Language Features", "description": "Provides rich language support for Markdown.", + "markdown.copyImage.title": "Copy Image", "markdown.preview.breaks.desc": "Sets how line-breaks are rendered in the Markdown preview. Setting it to 'true' creates a
for newlines inside paragraphs.", "markdown.preview.linkify": "Convert URL-like text to links in the Markdown preview.", "markdown.preview.typographer": "Enable some language-neutral replacement and quotes beautification in the Markdown preview.", @@ -19,6 +20,7 @@ "markdown.showPreviewSecuritySelector.title": "Change Preview Security Settings", "markdown.trace.extension.desc": "Enable debug logging for the Markdown extension.", "markdown.trace.server.desc": "Traces the communication between VS Code and the Markdown language server.", + "markdown.server.log.desc": "Controls the logging level of the Markdown language server.", "markdown.preview.refresh.title": "Refresh Preview", "markdown.preview.toggleLock.title": "Toggle Preview Locking", "markdown.findAllFileReferences": "Find File References", @@ -31,17 +33,22 @@ "configuration.markdown.links.openLocation.currentGroup": "Open links in the active editor group.", "configuration.markdown.links.openLocation.beside": "Open links beside the active editor.", "configuration.markdown.suggest.paths.enabled.description": "Enable path suggestions while writing links in Markdown files.", - "configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions": "Enable suggestions for headers in other Markdown files in the current workspace. Accepting one of these suggestions inserts the full path to header in that file, for example `[link text](/path/to/file.md#header)`.", + "configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions": "Enable suggestions for headers in other Markdown files in the current workspace. Accepting one of these suggestions inserts the full path to header in that file, for example: `[link text](/path/to/file.md#header)`.", "configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.never": "Disable workspace header suggestions.", - "configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onDoubleHash": "Enable workspace header suggestions after typing `##` in a path, for example `[link text](##`.", - "configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onSingleOrDoubleHash": "Enable workspace header suggestions after typing either `##` or `#` in a path, for example `[link text](#` or `[link text](##`.", + "configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onDoubleHash": "Enable workspace header suggestions after typing `##` in a path, for example: `[link text](##`.", + "configuration.markdown.suggest.paths.includeWorkspaceHeaderCompletions.onSingleOrDoubleHash": "Enable workspace header suggestions after typing either `##` or `#` in a path, for example: `[link text](#` or `[link text](##`.", "configuration.markdown.editor.drop.enabled": "Enable dropping files into a Markdown editor while holding Shift. Requires enabling `#editor.dropIntoEditor.enabled#`.", - "configuration.markdown.editor.pasteLinks.enabled": "Enable pasting files into a Markdown editor inserts Markdown links. Requires enabling `#editor.experimental.pasteActions.enabled#`.", + "configuration.markdown.editor.drop.copyIntoWorkspace": "Controls if files outside of the workspace that are dropped into a Markdown editor should be copied into the workspace.\n\nUse `#markdown.copyFiles.destination#` to configure where copied dropped files should be created", + "configuration.markdown.editor.filePaste.enabled": "Enable pasting files into a Markdown editor to create Markdown links. Requires enabling `#editor.pasteAs.enabled#`.", + "configuration.markdown.editor.filePaste.copyIntoWorkspace": "Controls if files outside of the workspace that are pasted into a Markdown editor should be copied into the workspace.\n\nUse `#markdown.copyFiles.destination#` to configure where copied files should be created.", + "configuration.markdown.editor.pasteUrlAsFormattedLink.enabled": "Controls if a Markdown link is created when a URL is pasted into the Markdown editor. Requires enabling `#editor.pasteAs.enabled#`.", + "configuration.copyIntoWorkspace.mediaFiles": "Try to copy external image and video files into the workspace.", + "configuration.copyIntoWorkspace.never": "Do not copy external files into the workspace.", "configuration.markdown.validate.enabled.description": "Enable all error reporting in Markdown files.", - "configuration.markdown.validate.referenceLinks.enabled.description": "Validate reference links in Markdown files, for example `[link][ref]`. Requires enabling `#markdown.validate.enabled#`.", - "configuration.markdown.validate.fragmentLinks.enabled.description": "Validate fragment links to headers in the current Markdown file, for example `[link](#header)`. Requires enabling `#markdown.validate.enabled#`.", + "configuration.markdown.validate.referenceLinks.enabled.description": "Validate reference links in Markdown files, for example: `[link][ref]`. Requires enabling `#markdown.validate.enabled#`.", + "configuration.markdown.validate.fragmentLinks.enabled.description": "Validate fragment links to headers in the current Markdown file, for example: `[link](#header)`. Requires enabling `#markdown.validate.enabled#`.", "configuration.markdown.validate.fileLinks.enabled.description": "Validate links to other files in Markdown files, for example `[link](/path/to/file.md)`. This checks that the target files exists. Requires enabling `#markdown.validate.enabled#`.", - "configuration.markdown.validate.fileLinks.markdownFragmentLinks.description": "Validate the fragment part of links to headers in other files in Markdown files, for example `[link](/path/to/file.md#header)`. Inherits the setting value from `#markdown.validate.fragmentLinks.enabled#` by default.", + "configuration.markdown.validate.fileLinks.markdownFragmentLinks.description": "Validate the fragment part of links to headers in other files in Markdown files, for example: `[link](/path/to/file.md#header)`. Inherits the setting value from `#markdown.validate.fragmentLinks.enabled#` by default.", "configuration.markdown.validate.ignoredLinks.description": "Configure links that should not be validated. For example adding `/about` would not validate the link `[about](/about)`, while the glob `/assets/**/*.svg` would let you skip validation for any link to `.svg` files under the `assets` directory.", "configuration.markdown.validate.unusedLinkDefinitions.description": "Validate link definitions that are unused in the current file.", "configuration.markdown.validate.duplicateLinkDefinitions.description": "Validate duplicated definitions in the current file.", @@ -53,7 +60,10 @@ "configuration.markdown.updateLinksOnFileMove.include.property": "The glob pattern to match file paths against. Set to true to enable the pattern.", "configuration.markdown.updateLinksOnFileMove.enableForDirectories": "Enable updating links when a directory is moved or renamed in the workspace.", "configuration.markdown.occurrencesHighlight.enabled": "Enable highlighting link occurrences in the current document.", - "configuration.markdown.copyFiles.destination": "Defines where files copied into a Markdown document should be created. This is a map from globs that match on the Markdown document to destinations.\n\nThe destinations may use the following variables:\n\n- `${documentFileName}` — The full filename of the Markdown document, for example `readme.md`.\n- `${documentBaseName}` — The basename of Markdown document, for example `readme`.\n- `${documentExtName}` — The extension of the Markdown document, for example `md`.\n- `${documentDirName}` — The name of the Markdown document's parent directory.\n- `${documentWorkspaceFolder}` — The workspace folder for the Markdown document, for examples, `/Users/me/myProject`. This is the same as `${documentDirName}` if the file is not part of in a workspace.\n- `${fileName}` — The file name of the dropped file, for example `image.png`.", + "configuration.markdown.copyFiles.destination": "Defines where files copied created by drop or paste should be created. This is a map from globs that match on the Markdown document to destinations.\n\nThe destinations may use the following variables:\n\n- `${documentFileName}` — The full filename of the Markdown document, for example: `readme.md`.\n- `${documentBaseName}` — The basename of Markdown document, for example: `readme`.\n- `${documentExtName}` — The extension of the Markdown document, for example: `md`.\n- `${documentDirName}` — The name of the Markdown document's parent directory.\n- `${documentWorkspaceFolder}` — The workspace folder for the Markdown document, for example: `/Users/me/myProject`. This is the same as `${documentDirName}` if the file is not part of a workspace.\n- `${fileName}` — The file name of the dropped file, for example: `image.png`.", + "configuration.markdown.copyFiles.overwriteBehavior": "Controls if files created by drop or paste should overwrite existing files.", + "configuration.markdown.copyFiles.overwriteBehavior.nameIncrementally": "If a file with the same name already exists, append a number to the file name, for example: `image.png` becomes `image-1.png`.", + "configuration.markdown.copyFiles.overwriteBehavior.overwrite": "If a file with the same name already exists, overwrite it.", "configuration.markdown.preferredMdPathExtensionStyle": "Controls if file extensions (e.g. `.md`) are added or not for links to Markdown files. This setting is used when file paths are added by tooling such as path completions or file renames.", "configuration.markdown.preferredMdPathExtensionStyle.auto": "For existing paths, try to maintain the file extension style. For new paths, add file extensions.", "configuration.markdown.preferredMdPathExtensionStyle.includeExtension": "Prefer including the file extension. For example, path completions to a file named `file.md` will insert `file.md`.", diff --git a/extensions/markdown-language-features/preview-src/index.ts b/extensions/markdown-language-features/preview-src/index.ts index 174a7d35692..b54b09ef7c9 100644 --- a/extensions/markdown-language-features/preview-src/index.ts +++ b/extensions/markdown-language-features/preview-src/index.ts @@ -10,6 +10,7 @@ import { getEditorLineNumberForPageOffset, scrollToRevealSourceLine, getLineElem import { SettingsManager, getData } from './settings'; import throttle = require('lodash.throttle'); import morphdom from 'morphdom'; +import type { ToWebviewMessage } from '../types/previewMessaging'; let scrollDisabledCount = 0; @@ -21,13 +22,16 @@ let documentResource = settings.settings.source; const vscode = acquireVsCodeApi(); -const originalState = vscode.getState(); - +const originalState = vscode.getState() ?? {} as any; const state = { - ...(typeof originalState === 'object' ? originalState : {}), + ...originalState, ...getData('data-state') }; +if (typeof originalState.scrollProgress !== 'undefined' && originalState?.resource !== state.resource) { + state.scrollProgress = 0; +} + // Make sure to sync VS Code state here vscode.setState(state); @@ -59,10 +63,13 @@ function doAfterImagesLoaded(cb: () => void) { onceDocumentLoaded(() => { const scrollProgress = state.scrollProgress; + addImageContexts(); if (typeof scrollProgress === 'number' && !settings.settings.fragment) { doAfterImagesLoaded(() => { scrollDisabledCount += 1; - window.scrollTo(0, scrollProgress * document.body.clientHeight); + // Always set scroll of at least 1 to prevent VS Code's webview code from auto scrolling us + const scrollToY = Math.max(1, scrollProgress * document.body.clientHeight); + window.scrollTo(0, scrollToY); }); return; } @@ -71,10 +78,16 @@ onceDocumentLoaded(() => { doAfterImagesLoaded(() => { // Try to scroll to fragment if available if (settings.settings.fragment) { + let fragment: string; + try { + fragment = encodeURIComponent(settings.settings.fragment); + } catch { + fragment = settings.settings.fragment; + } state.fragment = undefined; vscode.setState(state); - const element = getLineElementForFragment(settings.settings.fragment, documentVersion); + const element = getLineElementForFragment(fragment, documentVersion); if (element) { scrollDisabledCount += 1; scrollToRevealSourceLine(element.line, documentVersion, settings); @@ -113,17 +126,67 @@ window.addEventListener('resize', () => { updateScrollProgress(); }, true); +function addImageContexts() { + const images = document.getElementsByTagName('img'); + let idNumber = 0; + for (const img of images) { + img.id = 'image-' + idNumber; + idNumber += 1; + img.setAttribute('data-vscode-context', JSON.stringify({ webviewSection: 'image', id: img.id, 'preventDefaultContextMenuItems': true, resource: documentResource })); + } +} + +async function copyImage(image: HTMLImageElement, retries = 5) { + if (!document.hasFocus() && retries > 0) { + // copyImage is called at the same time as webview.reveal, which means this function is running whilst the webview is gaining focus. + // Since navigator.clipboard.write requires the document to be focused, we need to wait for focus. + // We cannot use a listener, as there is a high chance the focus is gained during the setup of the listener resulting in us missing it. + setTimeout(() => { copyImage(image, retries - 1); }, 20); + return; + } + + try { + await navigator.clipboard.write([new ClipboardItem({ + 'image/png': new Promise((resolve) => { + const canvas = document.createElement('canvas'); + if (canvas !== null) { + canvas.width = image.naturalWidth; + canvas.height = image.naturalHeight; + const context = canvas.getContext('2d'); + context?.drawImage(image, 0, 0); + } + canvas.toBlob((blob) => { + if (blob) { + resolve(blob); + } + canvas.remove(); + }, 'image/png'); + }) + })]); + } catch (e) { + console.error(e); + } +} + window.addEventListener('message', async event => { - switch (event.data.type) { + const data = event.data as ToWebviewMessage.Type; + switch (data.type) { + case 'copyImage': { + const img = document.getElementById(data.id); + if (img instanceof HTMLImageElement) { + copyImage(img); + } + return; + } case 'onDidChangeTextEditorSelection': - if (event.data.source === documentResource) { - marker.onDidChangeTextEditorSelection(event.data.line, documentVersion); + if (data.source === documentResource) { + marker.onDidChangeTextEditorSelection(data.line, documentVersion); } return; case 'updateView': - if (event.data.source === documentResource) { - onUpdateView(event.data.line); + if (data.source === documentResource) { + onUpdateView(data.line); } return; @@ -131,7 +194,7 @@ window.addEventListener('message', async event => { const root = document.querySelector('.markdown-body')!; const parser = new DOMParser(); - const newContent = parser.parseFromString(event.data.content, 'text/html'); + const newContent = parser.parseFromString(data.content, 'text/html'); // CodeQL [SM03712] This renderers content from the workspace into the Markdown preview. Webviews (and the markdown preview) have many other security measures in place to make this safe // Strip out meta http-equiv tags for (const metaElement of Array.from(newContent.querySelectorAll('meta'))) { @@ -140,11 +203,15 @@ window.addEventListener('message', async event => { } } - if (event.data.source !== documentResource) { + if (data.source !== documentResource) { root.replaceWith(newContent.querySelector('.markdown-body')!); - documentResource = event.data.source; + documentResource = data.source; } else { - // Compare two elements but skip `data-line` + const skippedAttrs = [ + 'open', // for details + ]; + + // Compare two elements but some elements const areEqual = (a: Element, b: Element): boolean => { if (a.isEqualNode(b)) { return true; @@ -154,8 +221,8 @@ window.addEventListener('message', async event => { return false; } - const aAttrs = a.attributes; - const bAttrs = b.attributes; + const aAttrs = [...a.attributes].filter(attr => !skippedAttrs.includes(attr.name)); + const bAttrs = [...b.attributes].filter(attr => !skippedAttrs.includes(attr.name)); if (aAttrs.length !== bAttrs.length) { return false; } @@ -186,15 +253,13 @@ window.addEventListener('message', async event => { style.remove(); } newRoot.prepend(...styles); - morphdom(root, newRoot, { childrenOnly: true, onBeforeElUpdated: (fromEl, toEl) => { if (areEqual(fromEl, toEl)) { - // areEqual doesn't look at `data-line` so copy those over - + // areEqual doesn't look at `data-line` so copy those over manually const fromLines = fromEl.querySelectorAll('[data-line]'); - const toLines = fromEl.querySelectorAll('[data-line]'); + const toLines = toEl.querySelectorAll('[data-line]'); if (fromLines.length !== toLines.length) { console.log('unexpected line number change'); } @@ -210,6 +275,12 @@ window.addEventListener('message', async event => { return false; } + if (fromEl.tagName === 'DETAILS' && toEl.tagName === 'DETAILS') { + if (fromEl.hasAttribute('open')) { + toEl.setAttribute('open', ''); + } + } + return true; } }); @@ -218,6 +289,7 @@ window.addEventListener('message', async event => { ++documentVersion; window.dispatchEvent(new CustomEvent('vscode.markdown.updateContent')); + addImageContexts(); break; } } diff --git a/extensions/markdown-language-features/preview-src/messaging.ts b/extensions/markdown-language-features/preview-src/messaging.ts index 6452ae6c3c8..1fb29f0b55b 100644 --- a/extensions/markdown-language-features/preview-src/messaging.ts +++ b/extensions/markdown-language-features/preview-src/messaging.ts @@ -4,21 +4,28 @@ *--------------------------------------------------------------------------------------------*/ import { SettingsManager } from './settings'; +import type { FromWebviewMessage } from '../types/previewMessaging'; export interface MessagePoster { /** * Post a message to the markdown extension */ - postMessage(type: string, body: object): void; + postMessage( + type: T['type'], + body: Omit + ): void; } -export const createPosterForVsCode = (vscode: any, settingsManager: SettingsManager) => { - return new class implements MessagePoster { - postMessage(type: string, body: object): void { +export const createPosterForVsCode = (vscode: any, settingsManager: SettingsManager): MessagePoster => { + return { + postMessage( + type: T['type'], + body: Omit + ): void { vscode.postMessage({ type, source: settingsManager.settings!.source, - body + ...body }); } }; diff --git a/extensions/markdown-language-features/preview-src/scroll-sync.ts b/extensions/markdown-language-features/preview-src/scroll-sync.ts index 54921b45894..a884730a152 100644 --- a/extensions/markdown-language-features/preview-src/scroll-sync.ts +++ b/extensions/markdown-language-features/preview-src/scroll-sync.ts @@ -8,10 +8,20 @@ import { SettingsManager } from './settings'; const codeLineClass = 'code-line'; -export interface CodeLineElement { - element: HTMLElement; - line: number; - codeElement?: HTMLElement; +export class CodeLineElement { + private readonly _detailParentElements: readonly HTMLDetailsElement[]; + + constructor( + readonly element: HTMLElement, + readonly line: number, + readonly codeElement?: HTMLElement, + ) { + this._detailParentElements = Array.from(getParentsWithTagName(element, 'DETAILS')); + } + + get isVisible(): boolean { + return !this._detailParentElements.some(x => !x.open); + } } const getCodeLineElements = (() => { @@ -20,21 +30,26 @@ const getCodeLineElements = (() => { return (documentVersion: number) => { if (!cachedElements || documentVersion !== cachedVersion) { cachedVersion = documentVersion; - cachedElements = [{ element: document.body, line: -1 }]; + cachedElements = [new CodeLineElement(document.body, -1)]; for (const element of document.getElementsByClassName(codeLineClass)) { + if (!(element instanceof HTMLElement)) { + continue; + } + const line = +element.getAttribute('data-line')!; if (isNaN(line)) { continue; } + if (element.tagName === 'CODE' && element.parentElement && element.parentElement.tagName === 'PRE') { // Fenced code blocks are a special case since the `code-line` can only be marked on // the `` element and not the parent `
` element.
-					cachedElements.push({ element: element.parentElement as HTMLElement, line: line, codeElement: element as HTMLElement });
+					cachedElements.push(new CodeLineElement(element.parentElement, line, element));
 				} else if (element.tagName === 'UL' || element.tagName === 'OL') {
 					// Skip adding list elements since the first child has the same code line (and should be preferred)
 				} else {
-					cachedElements.push({ element: element as HTMLElement, line });
+					cachedElements.push(new CodeLineElement(element, line));
 				}
 			}
 		}
@@ -67,7 +82,7 @@ export function getElementsForSourceLine(targetLine: number, documentVersion: nu
  * Find the html elements that are at a specific pixel offset on the page.
  */
 export function getLineElementsAtPageOffset(offset: number, documentVersion: number): { previous: CodeLineElement; next?: CodeLineElement } {
-	const lines = getCodeLineElements(documentVersion);
+	const lines = getCodeLineElements(documentVersion).filter(x => x.isVisible);
 	const position = offset - window.scrollY;
 	let lo = -1;
 	let hi = lines.length - 1;
@@ -145,9 +160,12 @@ export function scrollToRevealSourceLine(line: number, documentVersion: number,
 	window.scroll(window.scrollX, Math.max(1, window.scrollY + scrollTo));
 }
 
-export function getEditorLineNumberForPageOffset(offset: number, documentVersion: number) {
+export function getEditorLineNumberForPageOffset(offset: number, documentVersion: number): number | null {
 	const { previous, next } = getLineElementsAtPageOffset(offset, documentVersion);
 	if (previous) {
+		if (previous.line < 0) {
+			return 0;
+		}
 		const previousBounds = getElementBounds(previous);
 		const offsetFromPrevious = (offset - window.scrollY - previousBounds.top);
 		if (next) {
@@ -169,3 +187,11 @@ export function getLineElementForFragment(fragment: string, documentVersion: num
 		return element.element.id === fragment;
 	});
 }
+
+function* getParentsWithTagName(element: HTMLElement, tagName: string): Iterable {
+	for (let parent = element.parentElement; parent; parent = parent.parentElement) {
+		if (parent.tagName === tagName) {
+			yield parent as T;
+		}
+	}
+}
diff --git a/extensions/markdown-language-features/server/CHANGELOG.md b/extensions/markdown-language-features/server/CHANGELOG.md
new file mode 100644
index 00000000000..a5cc9d15cf1
--- /dev/null
+++ b/extensions/markdown-language-features/server/CHANGELOG.md
@@ -0,0 +1,7 @@
+# Changelog
+
+# 0.4.0-alpha.3 — June 2, 2023
+- Pick up [Markdown Language Service](https://github.com/microsoft/vscode-markdown-languageservice) 0.4.0-alpha.3. See [CHANGELOG](https://github.com/microsoft/vscode-markdown-languageservice/blob/main/CHANGELOG.md#040-alpha3--may-30-2023) for details.
+
+## 0.3.0 - March 28, 2023
+- Pick up [Markdown Language Service](https://github.com/microsoft/vscode-markdown-languageservice) 0.3.0. See [CHANGELOG](https://github.com/microsoft/vscode-markdown-languageservice/blob/main/CHANGELOG.md#030--march-16-2023) for details.
diff --git a/extensions/markdown-language-features/server/build/pipeline.yml b/extensions/markdown-language-features/server/build/pipeline.yml
new file mode 100644
index 00000000000..c229f78cfbf
--- /dev/null
+++ b/extensions/markdown-language-features/server/build/pipeline.yml
@@ -0,0 +1,34 @@
+name: $(Date:yyyyMMdd)$(Rev:.r)
+
+trigger: none
+pr: none
+
+resources:
+  repositories:
+    - repository: templates
+      type: github
+      name: microsoft/vscode-engineering
+      ref: main
+      endpoint: Monaco
+
+parameters:
+  - name: publishPackage
+    displayName: Publish vscode-markdown-languageserver
+    type: boolean
+    default: false
+
+extends:
+  template: azure-pipelines/npm-package/pipeline.yml@templates
+  parameters:
+    npmPackages:
+      - name: vscode-markdown-languageserver
+        workingDirectory: extensions/markdown-language-features/server
+
+        buildSteps:
+          - script: yarn install
+            displayName: Install dependencies
+
+          - script: gulp compile-extension:markdown-language-features-server
+            displayName: Compile
+
+        publishPackage: ${{ parameters.publishPackage }}
diff --git a/extensions/markdown-language-features/server/package.json b/extensions/markdown-language-features/server/package.json
index 52fc6208219..87ddad6aef1 100644
--- a/extensions/markdown-language-features/server/package.json
+++ b/extensions/markdown-language-features/server/package.json
@@ -1,7 +1,7 @@
 {
   "name": "vscode-markdown-languageserver",
   "description": "Markdown language server",
-  "version": "0.3.0-alpha.4",
+  "version": "0.4.0-alpha.5",
   "author": "Microsoft Corporation",
   "license": "MIT",
   "engines": {
@@ -15,11 +15,11 @@
   ],
   "dependencies": {
     "@vscode/l10n": "^0.0.11",
-    "vscode-languageserver": "^8.0.2",
-    "vscode-languageserver-textdocument": "^1.0.5",
-    "vscode-languageserver-types": "^3.17.1",
-    "vscode-markdown-languageservice": "^0.3.0-alpha.5",
-    "vscode-uri": "^3.0.3"
+    "vscode-languageserver": "^8.1.0",
+    "vscode-languageserver-textdocument": "^1.0.8",
+    "vscode-languageserver-types": "^3.17.3",
+    "vscode-markdown-languageservice": "^0.4.0-alpha.5",
+    "vscode-uri": "^3.0.7"
   },
   "devDependencies": {
     "@types/node": "16.x"
diff --git a/extensions/markdown-language-features/server/src/configuration.ts b/extensions/markdown-language-features/server/src/configuration.ts
index 676947163a1..949573cfaf5 100644
--- a/extensions/markdown-language-features/server/src/configuration.ts
+++ b/extensions/markdown-language-features/server/src/configuration.ts
@@ -10,6 +10,10 @@ export type ValidateEnabled = 'ignore' | 'warning' | 'error' | 'hint';
 
 export interface Settings {
 	readonly markdown: {
+		readonly server: {
+			readonly log: 'off' | 'debug' | 'trace';
+		};
+
 		readonly preferredMdPathExtensionStyle: 'auto' | 'includeExtension' | 'removeExtension';
 
 		readonly occurrencesHighlight: {
diff --git a/extensions/markdown-language-features/server/src/languageFeatures/diagnostics.ts b/extensions/markdown-language-features/server/src/languageFeatures/diagnostics.ts
index 0f7e6954dbc..d21a6fdbfb6 100644
--- a/extensions/markdown-language-features/server/src/languageFeatures/diagnostics.ts
+++ b/extensions/markdown-language-features/server/src/languageFeatures/diagnostics.ts
@@ -73,7 +73,7 @@ export function registerValidateSupport(
 	const emptyDiagnosticsResponse = Object.freeze({ kind: 'full', items: [] });
 
 	connection.languages.diagnostics.on(async (params, token): Promise => {
-		logger.log(md.LogLevel.Trace, 'Server: connection.languages.diagnostics.on', params.textDocument.uri);
+		logger.log(md.LogLevel.Debug, 'connection.languages.diagnostics.on', { document: params.textDocument.uri });
 
 		if (!config.getSettings()?.markdown.validate.enabled) {
 			return emptyDiagnosticsResponse;
diff --git a/extensions/markdown-language-features/server/src/logging.ts b/extensions/markdown-language-features/server/src/logging.ts
index 2fc08c25b7a..0df6b8e0cc5 100644
--- a/extensions/markdown-language-features/server/src/logging.ts
+++ b/extensions/markdown-language-features/server/src/logging.ts
@@ -3,9 +3,11 @@
  *  Licensed under the MIT License. See License.txt in the project root for license information.
  *--------------------------------------------------------------------------------------------*/
 
-import { ILogger, LogLevel } from 'vscode-markdown-languageservice';
+import * as md from 'vscode-markdown-languageservice';
+import { ConfigurationManager } from './configuration';
+import { Disposable } from './util/dispose';
 
-export class LogFunctionLogger implements ILogger {
+export class LogFunctionLogger extends Disposable implements md.ILogger {
 
 	private static now(): string {
 		const now = new Date();
@@ -27,21 +29,53 @@ export class LogFunctionLogger implements ILogger {
 		return JSON.stringify(data, undefined, 2);
 	}
 
+	private _logLevel: md.LogLevel;
+
 	constructor(
-		private readonly _logFn: typeof console.log
-	) { }
+		private readonly _logFn: typeof console.log,
+		private readonly _config: ConfigurationManager,
+	) {
+		super();
 
+		this._register(this._config.onDidChangeConfiguration(() => {
+			this._logLevel = LogFunctionLogger.readLogLevel(this._config);
+		}));
 
-	public log(level: LogLevel, title: string, message: string, data?: any): void {
-		this.appendLine(`[${level} ${LogFunctionLogger.now()}] ${title}: ${message}`);
+		this._logLevel = LogFunctionLogger.readLogLevel(this._config);
+	}
+
+	private static readLogLevel(config: ConfigurationManager): md.LogLevel {
+		switch (config.getSettings()?.markdown.server.log) {
+			case 'trace': return md.LogLevel.Trace;
+			case 'debug': return md.LogLevel.Debug;
+			case 'off':
+			default:
+				return md.LogLevel.Off;
+		}
+	}
+
+	get level(): md.LogLevel { return this._logLevel; }
+
+	public log(level: md.LogLevel, message: string, data?: any): void {
+		if (this.level < level) {
+			return;
+		}
+
+		this.appendLine(`[${this.toLevelLabel(level)} ${LogFunctionLogger.now()}] ${message}`);
 		if (data) {
 			this.appendLine(LogFunctionLogger.data2String(data));
 		}
 	}
 
+	private toLevelLabel(level: md.LogLevel): string {
+		switch (level) {
+			case md.LogLevel.Off: return 'Off';
+			case md.LogLevel.Debug: return 'Debug';
+			case md.LogLevel.Trace: return 'Trace';
+		}
+	}
+
 	private appendLine(value: string): void {
 		this._logFn(value);
 	}
 }
-
-export const consoleLogger = new LogFunctionLogger(console.log);
diff --git a/extensions/markdown-language-features/server/src/server.ts b/extensions/markdown-language-features/server/src/server.ts
index 6f609c122f3..807d171681a 100644
--- a/extensions/markdown-language-features/server/src/server.ts
+++ b/extensions/markdown-language-features/server/src/server.ts
@@ -22,7 +22,8 @@ interface MdServerInitializationOptions extends LsConfiguration { }
 const organizeLinkDefKind = 'source.organizeLinkDefinitions';
 
 export async function startVsCodeServer(connection: Connection) {
-	const logger = new LogFunctionLogger(connection.console.log.bind(connection.console));
+	const configurationManager = new ConfigurationManager(connection);
+	const logger = new LogFunctionLogger(connection.console.log.bind(connection.console), configurationManager);
 
 	const parser = new class implements md.IMdParser {
 		slugifier = md.githubSlugifier;
@@ -41,7 +42,7 @@ export async function startVsCodeServer(connection: Connection) {
 		return workspace;
 	};
 
-	return startServer(connection, { documents, notebooks, logger, parser, workspaceFactory });
+	return startServer(connection, { documents, notebooks, configurationManager, logger, parser, workspaceFactory });
 }
 
 type WorkspaceFactory = (config: {
@@ -53,6 +54,7 @@ type WorkspaceFactory = (config: {
 export async function startServer(connection: Connection, serverConfig: {
 	documents: TextDocuments;
 	notebooks?: NotebookDocuments;
+	configurationManager: ConfigurationManager;
 	logger: md.ILogger;
 	parser: md.IMdParser;
 	workspaceFactory: WorkspaceFactory;
@@ -62,7 +64,6 @@ export async function startServer(connection: Connection, serverConfig: {
 	let mdLs: md.IMdLanguageService | undefined;
 
 	connection.onInitialize((params: InitializeParams): InitializeResult => {
-		const configurationManager = new ConfigurationManager(connection);
 		const initOptions = params.initializationOptions as MdServerInitializationOptions | undefined;
 
 		const mdConfig = getLsConfiguration(initOptions ?? {});
@@ -74,7 +75,7 @@ export async function startServer(connection: Connection, serverConfig: {
 			logger: serverConfig.logger,
 			...mdConfig,
 			get preferredMdPathExtensionStyle() {
-				switch (configurationManager.getSettings()?.markdown.preferredMdPathExtensionStyle) {
+				switch (serverConfig.configurationManager.getSettings()?.markdown.preferredMdPathExtensionStyle) {
 					case 'includeExtension': return md.PreferredMdPathExtensionStyle.includeExtension;
 					case 'removeExtension': return md.PreferredMdPathExtensionStyle.removeExtension;
 					case 'auto':
@@ -84,9 +85,9 @@ export async function startServer(connection: Connection, serverConfig: {
 			}
 		});
 
-		registerCompletionsSupport(connection, documents, mdLs, configurationManager);
-		registerDocumentHighlightSupport(connection, documents, mdLs, configurationManager);
-		registerValidateSupport(connection, workspace, documents, mdLs, configurationManager, serverConfig.logger);
+		registerCompletionsSupport(connection, documents, mdLs, serverConfig.configurationManager);
+		registerDocumentHighlightSupport(connection, documents, mdLs, serverConfig.configurationManager);
+		registerValidateSupport(connection, workspace, documents, mdLs, serverConfig.configurationManager, serverConfig.logger);
 
 		return {
 			capabilities: {
@@ -96,7 +97,14 @@ export async function startServer(connection: Connection, serverConfig: {
 					interFileDependencies: true,
 					workspaceDiagnostics: false,
 				},
-				codeActionProvider: { resolveProvider: true },
+				codeActionProvider: {
+					resolveProvider: true,
+					codeActionKinds: [
+						organizeLinkDefKind,
+						'quickfix',
+						'refactor',
+					]
+				},
 				definitionProvider: true,
 				documentLinkProvider: { resolveProvider: true },
 				documentSymbolProvider: true,
diff --git a/extensions/markdown-language-features/server/src/workspace.ts b/extensions/markdown-language-features/server/src/workspace.ts
index 17a66cc7f60..b1bf87c3020 100644
--- a/extensions/markdown-language-features/server/src/workspace.ts
+++ b/extensions/markdown-language-features/server/src/workspace.ts
@@ -116,7 +116,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 				return;
 			}
 
-			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: TextDocument.onDidOpen', `${e.document.uri}`);
+			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.TextDocument.onDidOpen', { document: e.document.uri });
 
 			const uri = URI.parse(e.document.uri);
 			const doc = this._documentCache.get(uri);
@@ -141,7 +141,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 				return;
 			}
 
-			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: TextDocument.onDidChanceContent', `${e.document.uri}`);
+			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.TextDocument.onDidChanceContent', { document: e.document.uri });
 
 			const uri = URI.parse(e.document.uri);
 			const entry = this._documentCache.get(uri);
@@ -156,7 +156,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 				return;
 			}
 
-			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: TextDocument.onDidClose', `${e.document.uri}`);
+			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.TextDocument.onDidClose', { document: e.document.uri });
 
 			const uri = URI.parse(e.document.uri);
 			const doc = this._documentCache.get(uri);
@@ -191,7 +191,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 		connection.onDidChangeWatchedFiles(async ({ changes }) => {
 			for (const change of changes) {
 				const resource = URI.parse(change.uri);
-				this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: onDidChangeWatchedFiles', `${change.type}: ${resource}`);
+				this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.onDidChangeWatchedFiles', { type: change.type, resource: resource.toString() });
 				switch (change.type) {
 					case FileChangeType.Changed: {
 						const entry = this._documentCache.get(resource);
@@ -230,7 +230,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 		});
 
 		connection.onRequest(protocol.fs_watcher_onChange, params => {
-			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: fs_watcher_onChange', `${params.kind}: ${params.uri}`);
+			this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.fs_watcher_onChange', { kind: params.kind, uri: params.uri });
 
 			const watcher = this._watchers.get(params.id);
 			if (!watcher) {
@@ -342,7 +342,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 	}
 
 	async stat(resource: URI): Promise {
-		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: stat', `${resource}`);
+		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.stat', { resource: resource.toString() });
 		if (this._documentCache.has(resource)) {
 			return { isDirectory: false };
 		}
@@ -359,7 +359,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 	}
 
 	async readDirectory(resource: URI): Promise<[string, md.FileStat][]> {
-		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: readDir', `${resource}`);
+		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.readDir', { resource: resource.toString() });
 		return this.connection.sendRequest(protocol.fs_readDirectory, { uri: resource.toString() });
 	}
 
@@ -378,7 +378,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 
 	watchFile(resource: URI, options: md.FileWatcherOptions): md.IFileSystemWatcher {
 		const id = this._watcherPool++;
-		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: watchFile', `(${id}) ${resource}`);
+		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.watchFile', { id, resource: resource.toString() });
 
 		const entry = {
 			resource,
@@ -401,7 +401,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 			onDidChange: entry.onDidChange.event,
 			onDidDelete: entry.onDidDelete.event,
 			dispose: () => {
-				this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: disposeWatcher', `(${id}) ${resource}`);
+				this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.disposeWatcher', { id, resource: resource.toString() });
 				this.connection.sendRequest(protocol.fs_watcher_delete, { id });
 				this._watchers.delete(id);
 			}
@@ -413,7 +413,7 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
 	}
 
 	private doDeleteDocument(uri: URI) {
-		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace: deleteDocument', `${uri}`);
+		this.logger.log(md.LogLevel.Trace, 'VsCodeClientWorkspace.deleteDocument', { document: uri.toString() });
 
 		this._documentCache.delete(uri);
 		this._onDidDeleteMarkdownDocument.fire(uri);
diff --git a/extensions/markdown-language-features/server/yarn.lock b/extensions/markdown-language-features/server/yarn.lock
index 0f8c0deefbe..6c6560ec7ea 100644
--- a/extensions/markdown-language-features/server/yarn.lock
+++ b/extensions/markdown-language-features/server/yarn.lock
@@ -17,53 +17,130 @@
   resolved "https://registry.yarnpkg.com/@vscode/l10n/-/l10n-0.0.11.tgz#325d7beb2cfb87162bc624d16c4d546de6a73b72"
   integrity sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==
 
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+css-select@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+  integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.1.0"
+    domhandler "^5.0.2"
+    domutils "^3.0.1"
+    nth-check "^2.0.1"
+
+css-what@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+dom-serializer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.2"
+    entities "^4.2.0"
+
+domelementtype@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^5.0.2, domhandler@^5.0.3:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+  dependencies:
+    domelementtype "^2.3.0"
+
+domutils@^3.0.1:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+  integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+  dependencies:
+    dom-serializer "^2.0.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.3"
+
+entities@^4.2.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+he@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+node-html-parser@^6.1.5:
+  version "6.1.5"
+  resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.5.tgz#c819dceb13a10a7642ff92f94f870b4f77968097"
+  integrity sha512-fAaM511feX++/Chnhe475a0NHD8M7AxDInsqQpz6x63GRF7xYNdS8Vo5dKsIVPgsOvG7eioRRTZQnWBrhDHBSg==
+  dependencies:
+    css-select "^5.1.0"
+    he "1.2.0"
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
 picomatch@^2.3.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
 
-vscode-jsonrpc@8.0.2:
-  version "8.0.2"
-  resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9"
-  integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==
+vscode-jsonrpc@8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94"
+  integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==
 
-vscode-languageserver-protocol@3.17.2:
-  version "3.17.2"
-  resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378"
-  integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==
+vscode-languageserver-protocol@3.17.3:
+  version "3.17.3"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57"
+  integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==
   dependencies:
-    vscode-jsonrpc "8.0.2"
-    vscode-languageserver-types "3.17.2"
+    vscode-jsonrpc "8.1.0"
+    vscode-languageserver-types "3.17.3"
 
-vscode-languageserver-textdocument@^1.0.5:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz#16df468d5c2606103c90554ae05f9f3d335b771b"
-  integrity sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==
+vscode-languageserver-textdocument@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0"
+  integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==
 
-vscode-languageserver-types@3.17.2, vscode-languageserver-types@^3.17.1:
-  version "3.17.2"
-  resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2"
-  integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==
+vscode-languageserver-types@3.17.3, vscode-languageserver-types@^3.17.3:
+  version "3.17.3"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64"
+  integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==
 
-vscode-languageserver@^8.0.2:
-  version "8.0.2"
-  resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz#cfe2f0996d9dfd40d3854e786b2821604dfec06d"
-  integrity sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==
+vscode-languageserver@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz#5024253718915d84576ce6662dd46a791498d827"
+  integrity sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==
   dependencies:
-    vscode-languageserver-protocol "3.17.2"
+    vscode-languageserver-protocol "3.17.3"
 
-vscode-markdown-languageservice@^0.3.0-alpha.5:
-  version "0.3.0-alpha.5"
-  resolved "https://registry.yarnpkg.com/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.3.0-alpha.5.tgz#fce18193c16186eacdd322f49775fd43d659fc25"
-  integrity sha512-5SEn8hr999N/K8IaY25fdZoW7JPJT4pOm53AQvimGNYiCntb0TWJhMJD1Izbc2DvbyrWAksVkLqzbGKV/zW+Sg==
+vscode-markdown-languageservice@^0.4.0-alpha.5:
+  version "0.4.0-alpha.5"
+  resolved "https://registry.yarnpkg.com/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.4.0-alpha.5.tgz#5a50dab354d07a4fb93b16cea43968f7a578c2b9"
+  integrity sha512-Pf183mpyAQ5WlsqXKlzSzPUACRlXxcEFGpn+vYsAx5m7r26hqtBTYHpTKzidIPqh6Xy797VGbtrOkvuwBmcCTg==
   dependencies:
     "@vscode/l10n" "^0.0.10"
+    node-html-parser "^6.1.5"
     picomatch "^2.3.1"
-    vscode-languageserver-textdocument "^1.0.5"
-    vscode-languageserver-types "^3.17.1"
-    vscode-uri "^3.0.3"
+    vscode-languageserver-textdocument "^1.0.8"
+    vscode-languageserver-types "^3.17.3"
+    vscode-uri "^3.0.7"
 
-vscode-uri@^3.0.3:
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.6.tgz#5e6e2e1a4170543af30151b561a41f71db1d6f91"
-  integrity sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==
+vscode-uri@^3.0.7:
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8"
+  integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==
diff --git a/extensions/markdown-language-features/src/commands/copyImage.ts b/extensions/markdown-language-features/src/commands/copyImage.ts
new file mode 100644
index 00000000000..86fd349c730
--- /dev/null
+++ b/extensions/markdown-language-features/src/commands/copyImage.ts
@@ -0,0 +1,21 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import { Command } from '../commandManager';
+import { MarkdownPreviewManager } from '../preview/previewManager';
+
+export class CopyImageCommand implements Command {
+	public readonly id = '_markdown.copyImage';
+
+	public constructor(
+		private readonly _webviewManager: MarkdownPreviewManager,
+	) { }
+
+	public execute(args: { id: string; resource: string }) {
+		const source = vscode.Uri.parse(args.resource);
+		this._webviewManager.findPreview(source)?.copyImage(args.id);
+	}
+}
diff --git a/extensions/markdown-language-features/src/commands/index.ts b/extensions/markdown-language-features/src/commands/index.ts
index 8904d4a547c..e1a4f2b41ff 100644
--- a/extensions/markdown-language-features/src/commands/index.ts
+++ b/extensions/markdown-language-features/src/commands/index.ts
@@ -14,6 +14,7 @@ import { RefreshPreviewCommand } from './refreshPreview';
 import { ReloadPlugins } from './reloadPlugins';
 import { RenderDocument } from './renderDocument';
 import { ShowLockedPreviewToSideCommand, ShowPreviewCommand, ShowPreviewToSideCommand } from './showPreview';
+import { CopyImageCommand } from './copyImage';
 import { ShowPreviewSecuritySelectorCommand } from './showPreviewSecuritySelector';
 import { ShowSourceCommand } from './showSource';
 import { ToggleLockCommand } from './toggleLock';
@@ -27,6 +28,7 @@ export function registerMarkdownCommands(
 ): vscode.Disposable {
 	const previewSecuritySelector = new PreviewSecuritySelector(cspArbiter, previewManager);
 
+	commandManager.register(new CopyImageCommand(previewManager));
 	commandManager.register(new ShowPreviewCommand(previewManager, telemetryReporter));
 	commandManager.register(new ShowPreviewToSideCommand(previewManager, telemetryReporter));
 	commandManager.register(new ShowLockedPreviewToSideCommand(previewManager, telemetryReporter));
diff --git a/extensions/markdown-language-features/src/commands/insertResource.ts b/extensions/markdown-language-features/src/commands/insertResource.ts
index 7cdd861cb5b..2e7b97c3048 100644
--- a/extensions/markdown-language-features/src/commands/insertResource.ts
+++ b/extensions/markdown-language-features/src/commands/insertResource.ts
@@ -6,8 +6,9 @@
 import * as vscode from 'vscode';
 import { Utils } from 'vscode-uri';
 import { Command } from '../commandManager';
-import { createUriListSnippet, getParentDocumentUri, imageFileExtensions } from '../languageFeatures/copyFiles/dropIntoEditor';
+import { createUriListSnippet, mediaFileExtensions } from '../languageFeatures/copyFiles/shared';
 import { coalesce } from '../util/arrays';
+import { getParentDocumentUri } from '../util/document';
 import { Schemes } from '../util/schemes';
 
 
@@ -47,7 +48,7 @@ export class InsertImageFromWorkspace implements Command {
 			canSelectFolders: false,
 			canSelectMany: true,
 			filters: {
-				[vscode.l10n.t("Images")]: Array.from(imageFileExtensions)
+				[vscode.l10n.t("Media")]: Array.from(mediaFileExtensions.keys())
 			},
 			openLabel: vscode.l10n.t("Insert image"),
 			title: vscode.l10n.t("Insert image"),
@@ -75,17 +76,17 @@ async function insertLink(activeEditor: vscode.TextEditor, selectedFiles: vscode
 	await vscode.workspace.applyEdit(edit);
 }
 
-function createInsertLinkEdit(activeEditor: vscode.TextEditor, selectedFiles: vscode.Uri[], insertAsImage: boolean) {
+function createInsertLinkEdit(activeEditor: vscode.TextEditor, selectedFiles: vscode.Uri[], insertAsMedia: boolean, title = '', placeholderValue = 0) {
 	const snippetEdits = coalesce(activeEditor.selections.map((selection, i): vscode.SnippetTextEdit | undefined => {
 		const selectionText = activeEditor.document.getText(selection);
-		const snippet = createUriListSnippet(activeEditor.document, selectedFiles, {
-			insertAsImage: insertAsImage,
+		const snippet = createUriListSnippet(activeEditor.document, selectedFiles, title, placeholderValue, {
+			insertAsMedia,
 			placeholderText: selectionText,
 			placeholderStartIndex: (i + 1) * selectedFiles.length,
-			separator: insertAsImage ? '\n' : ' ',
+			separator: insertAsMedia ? '\n' : ' ',
 		});
 
-		return snippet ? new vscode.SnippetTextEdit(selection, snippet) : undefined;
+		return snippet ? new vscode.SnippetTextEdit(selection, snippet.snippet) : undefined;
 	}));
 
 	const edit = new vscode.WorkspaceEdit();
diff --git a/extensions/markdown-language-features/src/extension.shared.ts b/extensions/markdown-language-features/src/extension.shared.ts
index ce709783d0b..79242573136 100644
--- a/extensions/markdown-language-features/src/extension.shared.ts
+++ b/extensions/markdown-language-features/src/extension.shared.ts
@@ -8,6 +8,7 @@ import { MdLanguageClient } from './client/client';
 import { CommandManager } from './commandManager';
 import { registerMarkdownCommands } from './commands/index';
 import { registerPasteSupport } from './languageFeatures/copyFiles/copyPaste';
+import { registerLinkPasteSupport } from './languageFeatures/copyFiles/copyPasteLinks';
 import { registerDiagnosticSupport } from './languageFeatures/diagnostics';
 import { registerDropIntoEditorSupport } from './languageFeatures/copyFiles/dropIntoEditor';
 import { registerFindFileReferenceSupport } from './languageFeatures/fileReferences';
@@ -59,6 +60,7 @@ function registerMarkdownLanguageFeatures(
 		registerDropIntoEditorSupport(selector),
 		registerFindFileReferenceSupport(commandManager, client),
 		registerPasteSupport(selector),
+		registerLinkPasteSupport(selector),
 		registerUpdateLinksOnRename(client),
 	);
 }
diff --git a/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyFiles.ts b/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyFiles.ts
index dc1e5924829..cb6a77e8c8d 100644
--- a/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyFiles.ts
+++ b/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyFiles.ts
@@ -2,37 +2,89 @@
  *  Copyright (c) Microsoft Corporation. All rights reserved.
  *  Licensed under the MIT License. See License.txt in the project root for license information.
  *--------------------------------------------------------------------------------------------*/
-import * as path from 'path';
 import * as picomatch from 'picomatch';
 import * as vscode from 'vscode';
 import { Utils } from 'vscode-uri';
-import { getParentDocumentUri } from './dropIntoEditor';
+import { getParentDocumentUri } from '../../util/document';
 
+type OverwriteBehavior = 'overwrite' | 'nameIncrementally';
 
-export async function getNewFileName(document: vscode.TextDocument, file: vscode.DataTransferFile): Promise {
-	const desiredPath = getDesiredNewFilePath(document, file);
+interface CopyFileConfiguration {
+	readonly destination: Record;
+	readonly overwriteBehavior: OverwriteBehavior;
+}
 
-	const root = Utils.dirname(desiredPath);
-	const ext = path.extname(file.name);
-	const baseName = path.basename(file.name, ext);
-	for (let i = 0; ; ++i) {
-		const name = i === 0 ? baseName : `${baseName}-${i}`;
-		const uri = vscode.Uri.joinPath(root, `${name}${ext}`);
-		try {
-			await vscode.workspace.fs.stat(uri);
-		} catch {
-			// Does not exist
-			return uri;
-		}
+function getCopyFileConfiguration(document: vscode.TextDocument): CopyFileConfiguration {
+	const config = vscode.workspace.getConfiguration('markdown', document);
+	return {
+		destination: config.get>('copyFiles.destination') ?? {},
+		overwriteBehavior: readOverwriteBehavior(config),
+	};
+}
+
+function readOverwriteBehavior(config: vscode.WorkspaceConfiguration): OverwriteBehavior {
+	switch (config.get('copyFiles.overwriteBehavior')) {
+		case 'overwrite': return 'overwrite';
+		default: return 'nameIncrementally';
 	}
 }
 
-function getDesiredNewFilePath(document: vscode.TextDocument, file: vscode.DataTransferFile): vscode.Uri {
+export class NewFilePathGenerator {
+
+	private readonly _usedPaths = new Set();
+
+	async getNewFilePath(
+		document: vscode.TextDocument,
+		file: vscode.DataTransferFile,
+		token: vscode.CancellationToken,
+	): Promise<{ readonly uri: vscode.Uri; readonly overwrite: boolean } | undefined> {
+		const config = getCopyFileConfiguration(document);
+		const desiredPath = getDesiredNewFilePath(config, document, file);
+
+		const root = Utils.dirname(desiredPath);
+		const ext = Utils.extname(desiredPath);
+		let baseName = Utils.basename(desiredPath);
+		baseName = baseName.slice(0, baseName.length - ext.length);
+		for (let i = 0; ; ++i) {
+			if (token.isCancellationRequested) {
+				return undefined;
+			}
+
+			const name = i === 0 ? baseName : `${baseName}-${i}`;
+			const uri = vscode.Uri.joinPath(root, name + ext);
+			if (this._wasPathAlreadyUsed(uri)) {
+				continue;
+			}
+
+			// Try overwriting if it already exists
+			if (config.overwriteBehavior === 'overwrite') {
+				this._usedPaths.add(uri.toString());
+				return { uri, overwrite: true };
+			}
+
+			// Otherwise we need to check the fs to see if it exists
+			try {
+				await vscode.workspace.fs.stat(uri);
+			} catch {
+				if (!this._wasPathAlreadyUsed(uri)) {
+					// Does not exist
+					this._usedPaths.add(uri.toString());
+					return { uri, overwrite: false };
+				}
+			}
+		}
+	}
+
+	private _wasPathAlreadyUsed(uri: vscode.Uri) {
+		return this._usedPaths.has(uri.toString());
+	}
+}
+
+function getDesiredNewFilePath(config: CopyFileConfiguration, document: vscode.TextDocument, file: vscode.DataTransferFile): vscode.Uri {
 	const docUri = getParentDocumentUri(document);
-	const config = vscode.workspace.getConfiguration('markdown').get>('experimental.copyFiles.destination') ?? {};
-	for (const [rawGlob, rawDest] of Object.entries(config)) {
+	for (const [rawGlob, rawDest] of Object.entries(config.destination)) {
 		for (const glob of parseGlob(rawGlob)) {
-			if (picomatch.isMatch(docUri.path, glob)) {
+			if (picomatch.isMatch(docUri.path, glob, { dot: true })) {
 				return resolveCopyDestination(docUri, file.name, rawDest, uri => vscode.workspace.getWorkspaceFolder(uri)?.uri);
 			}
 		}
@@ -73,7 +125,10 @@ export function resolveCopyDestination(documentUri: vscode.Uri, fileName: string
 
 
 function resolveCopyDestinationSetting(documentUri: vscode.Uri, fileName: string, dest: string, getWorkspaceFolder: GetWorkspaceFolder): string {
-	let outDest = dest;
+	let outDest = dest.trim();
+	if (!outDest) {
+		outDest = '${fileName}';
+	}
 
 	// Destination that start with `/` implicitly means go to workspace root
 	if (outDest.startsWith('/')) {
diff --git a/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyPaste.ts b/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyPaste.ts
index 1babe16107d..24e23758d25 100644
--- a/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyPaste.ts
+++ b/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyPaste.ts
@@ -5,84 +5,79 @@
 
 import * as vscode from 'vscode';
 import { Schemes } from '../../util/schemes';
-import { getNewFileName } from './copyFiles';
-import { createUriListSnippet, tryGetUriListSnippet } from './dropIntoEditor';
-
-const supportedImageMimes = new Set([
-	'image/png',
-	'image/jpg',
-]);
+import { createEditForMediaFiles, getMarkdownLink, mediaMimes } from './shared';
 
 class PasteEditProvider implements vscode.DocumentPasteEditProvider {
 
+	private readonly _id = 'insertLink';
+
 	async provideDocumentPasteEdits(
 		document: vscode.TextDocument,
-		_ranges: readonly vscode.Range[],
+		ranges: readonly vscode.Range[],
 		dataTransfer: vscode.DataTransfer,
 		token: vscode.CancellationToken,
 	): Promise {
-		const enabled = vscode.workspace.getConfiguration('markdown', document).get('experimental.editor.pasteLinks.enabled', true);
+		const enabled = vscode.workspace.getConfiguration('markdown', document).get('editor.filePaste.enabled', true);
 		if (!enabled) {
 			return;
 		}
 
-		if (document.uri.scheme === Schemes.notebookCell) {
+		const createEdit = await this._getMediaFilesEdit(document, dataTransfer, token);
+		if (createEdit) {
+			return createEdit;
+		}
+
+		const uriEdit = new vscode.DocumentPasteEdit('', this._id, '');
+		const urlList = await dataTransfer.get('text/uri-list')?.asString();
+		if (!urlList) {
+			return;
+		}
+		const pasteEdit = await getMarkdownLink(document, ranges, urlList, token);
+		if (!pasteEdit) {
 			return;
 		}
 
-		for (const imageMime of supportedImageMimes) {
-			const file = dataTransfer.get(imageMime)?.asFile();
-			if (file) {
-				const edit = await this._makeCreateImagePasteEdit(document, file, token);
-				if (token.isCancellationRequested) {
-					return;
-				}
-
-				if (edit) {
-					return edit;
-				}
-			}
-		}
-
-		const snippet = await tryGetUriListSnippet(document, dataTransfer, token);
-		return snippet ? new vscode.DocumentPasteEdit(snippet) : undefined;
+		uriEdit.label = pasteEdit.label;
+		uriEdit.additionalEdit = pasteEdit.additionalEdits;
+		uriEdit.priority = this._getPriority(dataTransfer);
+		return uriEdit;
 	}
 
-	private async _makeCreateImagePasteEdit(document: vscode.TextDocument, file: vscode.DataTransferFile, token: vscode.CancellationToken): Promise {
-		if (file.uri) {
-			// If file is already in workspace, we don't want to create a copy of it
-			const workspaceFolder = vscode.workspace.getWorkspaceFolder(file.uri);
-			if (workspaceFolder) {
-				const snippet = createUriListSnippet(document, [file.uri]);
-				return snippet ? new vscode.DocumentPasteEdit(snippet) : undefined;
-			}
-		}
-
-		const uri = await getNewFileName(document, file);
-		if (token.isCancellationRequested) {
+	private async _getMediaFilesEdit(document: vscode.TextDocument, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise {
+		if (document.uri.scheme === Schemes.untitled) {
 			return;
 		}
 
-		const snippet = createUriListSnippet(document, [uri]);
-		if (!snippet) {
+		const copyFilesIntoWorkspace = vscode.workspace.getConfiguration('markdown', document).get<'mediaFiles' | 'never'>('editor.filePaste.copyIntoWorkspace', 'mediaFiles');
+		if (copyFilesIntoWorkspace === 'never') {
 			return;
 		}
 
-		// Note that there is currently no way to undo the file creation :/
-		const workspaceEdit = new vscode.WorkspaceEdit();
-		workspaceEdit.createFile(uri, { contents: await file.data() });
+		const edit = await createEditForMediaFiles(document, dataTransfer, token);
+		if (!edit) {
+			return;
+		}
 
-		const pasteEdit = new vscode.DocumentPasteEdit(snippet);
-		pasteEdit.additionalEdit = workspaceEdit;
+		const pasteEdit = new vscode.DocumentPasteEdit(edit.snippet, this._id, edit.label);
+		pasteEdit.additionalEdit = edit.additionalEdits;
+		pasteEdit.priority = this._getPriority(dataTransfer);
 		return pasteEdit;
 	}
+
+	private _getPriority(dataTransfer: vscode.DataTransfer): number {
+		if (dataTransfer.get('text/plain')) {
+			// Deprioritize in favor of normal text content
+			return -10;
+		}
+		return 0;
+	}
 }
 
 export function registerPasteSupport(selector: vscode.DocumentSelector,) {
 	return vscode.languages.registerDocumentPasteEditProvider(selector, new PasteEditProvider(), {
 		pasteMimeTypes: [
 			'text/uri-list',
-			...supportedImageMimes,
+			...mediaMimes,
 		]
 	});
 }
diff --git a/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyPasteLinks.ts b/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyPasteLinks.ts
new file mode 100644
index 00000000000..313a3916688
--- /dev/null
+++ b/extensions/markdown-language-features/src/languageFeatures/copyFiles/copyPasteLinks.ts
@@ -0,0 +1,53 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import { getMarkdownLink } from './shared';
+
+class PasteLinkEditProvider implements vscode.DocumentPasteEditProvider {
+
+	readonly id = 'insertMarkdownLink';
+	async provideDocumentPasteEdits(
+		document: vscode.TextDocument,
+		ranges: readonly vscode.Range[],
+		dataTransfer: vscode.DataTransfer,
+		token: vscode.CancellationToken,
+	): Promise {
+		const enabled = vscode.workspace.getConfiguration('markdown', document).get('editor.pasteUrlAsFormattedLink.enabled', true);
+		if (!enabled) {
+			return;
+		}
+
+		// Check if dataTransfer contains a URL
+		const item = dataTransfer.get('text/plain');
+		try {
+			new URL(await item?.value);
+		} catch (error) {
+			return;
+		}
+
+		const uriEdit = new vscode.DocumentPasteEdit('', this.id, '');
+		const urlList = await item?.asString();
+		if (!urlList) {
+			return undefined;
+		}
+		const pasteEdit = await getMarkdownLink(document, ranges, urlList, token);
+		if (!pasteEdit) {
+			return;
+		}
+
+		uriEdit.label = pasteEdit.label;
+		uriEdit.additionalEdit = pasteEdit.additionalEdits;
+		return uriEdit;
+	}
+}
+
+export function registerLinkPasteSupport(selector: vscode.DocumentSelector,) {
+	return vscode.languages.registerDocumentPasteEditProvider(selector, new PasteLinkEditProvider(), {
+		pasteMimeTypes: [
+			'text/plain',
+		]
+	});
+}
diff --git a/extensions/markdown-language-features/src/languageFeatures/copyFiles/dropIntoEditor.ts b/extensions/markdown-language-features/src/languageFeatures/copyFiles/dropIntoEditor.ts
index 5c7e04711ae..95c8455e307 100644
--- a/extensions/markdown-language-features/src/languageFeatures/copyFiles/dropIntoEditor.ts
+++ b/extensions/markdown-language-features/src/languageFeatures/copyFiles/dropIntoEditor.ts
@@ -3,137 +3,76 @@
  *  Licensed under the MIT License. See License.txt in the project root for license information.
  *--------------------------------------------------------------------------------------------*/
 
-import * as path from 'path';
 import * as vscode from 'vscode';
-import * as URI from 'vscode-uri';
+import { createEditForMediaFiles as createEditForMediaFiles, mediaMimes, tryGetUriListSnippet } from './shared';
 import { Schemes } from '../../util/schemes';
 
-export const imageFileExtensions = new Set([
-	'bmp',
-	'gif',
-	'ico',
-	'jpe',
-	'jpeg',
-	'jpg',
-	'png',
-	'psd',
-	'svg',
-	'tga',
-	'tif',
-	'tiff',
-	'webp',
-]);
+
+class MarkdownImageDropProvider implements vscode.DocumentDropEditProvider {
+	private readonly _id = 'insertLink';
+
+	async provideDocumentDropEdits(document: vscode.TextDocument, _position: vscode.Position, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise {
+		const enabled = vscode.workspace.getConfiguration('markdown', document).get('editor.drop.enabled', true);
+		if (!enabled) {
+			return;
+		}
+
+		const filesEdit = await this._getMediaFilesEdit(document, dataTransfer, token);
+		if (filesEdit) {
+			return filesEdit;
+		}
+
+		if (token.isCancellationRequested) {
+			return;
+		}
+
+		return this._getUriListEdit(document, dataTransfer, token);
+	}
+
+	private async _getUriListEdit(document: vscode.TextDocument, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise {
+		const urlList = await dataTransfer.get('text/uri-list')?.asString();
+		if (!urlList) {
+			return undefined;
+		}
+		const snippet = await tryGetUriListSnippet(document, urlList, token);
+		if (!snippet) {
+			return undefined;
+		}
+
+		const edit = new vscode.DocumentDropEdit(snippet.snippet);
+		edit.id = this._id;
+		edit.label = snippet.label;
+		return edit;
+	}
+
+	private async _getMediaFilesEdit(document: vscode.TextDocument, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise {
+		if (document.uri.scheme === Schemes.untitled) {
+			return;
+		}
+
+		const copyIntoWorkspace = vscode.workspace.getConfiguration('markdown', document).get<'mediaFiles' | 'never'>('editor.drop.copyIntoWorkspace', 'mediaFiles');
+		if (copyIntoWorkspace !== 'mediaFiles') {
+			return;
+		}
+
+		const filesEdit = await createEditForMediaFiles(document, dataTransfer, token);
+		if (!filesEdit) {
+			return;
+		}
+
+		const edit = new vscode.DocumentDropEdit(filesEdit.snippet);
+		edit.id = this._id;
+		edit.label = filesEdit.label;
+		edit.additionalEdit = filesEdit.additionalEdits;
+		return edit;
+	}
+}
 
 export function registerDropIntoEditorSupport(selector: vscode.DocumentSelector) {
-	return vscode.languages.registerDocumentDropEditProvider(selector, new class implements vscode.DocumentDropEditProvider {
-		async provideDocumentDropEdits(document: vscode.TextDocument, _position: vscode.Position, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise {
-			const enabled = vscode.workspace.getConfiguration('markdown', document).get('editor.drop.enabled', true);
-			if (!enabled) {
-				return undefined;
-			}
-
-			const snippet = await tryGetUriListSnippet(document, dataTransfer, token);
-			return snippet ? new vscode.DocumentDropEdit(snippet) : undefined;
-		}
+	return vscode.languages.registerDocumentDropEditProvider(selector, new MarkdownImageDropProvider(), {
+		dropMimeTypes: [
+			'text/uri-list',
+			...mediaMimes,
+		]
 	});
 }
-
-export async function tryGetUriListSnippet(document: vscode.TextDocument, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise {
-	const urlList = await dataTransfer.get('text/uri-list')?.asString();
-	if (!urlList || token.isCancellationRequested) {
-		return undefined;
-	}
-
-	const uris: vscode.Uri[] = [];
-	for (const resource of urlList.split(/\r?\n/g)) {
-		try {
-			uris.push(vscode.Uri.parse(resource));
-		} catch {
-			// noop
-		}
-	}
-
-	return createUriListSnippet(document, uris);
-}
-
-interface UriListSnippetOptions {
-	readonly placeholderText?: string;
-
-	readonly placeholderStartIndex?: number;
-
-	/**
-	 * Should the snippet be for an image?
-	 *
-	 * If `undefined`, tries to infer this from the uri.
-	 */
-	readonly insertAsImage?: boolean;
-
-	readonly separator?: string;
-}
-
-export function createUriListSnippet(document: vscode.TextDocument, uris: readonly vscode.Uri[], options?: UriListSnippetOptions): vscode.SnippetString | undefined {
-	if (!uris.length) {
-		return undefined;
-	}
-
-	const dir = getDocumentDir(document);
-
-	const snippet = new vscode.SnippetString();
-	uris.forEach((uri, i) => {
-		const mdPath = getMdPath(dir, uri);
-
-		const ext = URI.Utils.extname(uri).toLowerCase().replace('.', '');
-		const insertAsImage = typeof options?.insertAsImage === 'undefined' ? imageFileExtensions.has(ext) : !!options.insertAsImage;
-
-		snippet.appendText(insertAsImage ? '![' : '[');
-
-		const placeholderText = options?.placeholderText ?? (insertAsImage ? 'Alt text' : 'label');
-		const placeholderIndex = typeof options?.placeholderStartIndex !== 'undefined' ? options?.placeholderStartIndex + i : undefined;
-		snippet.appendPlaceholder(placeholderText, placeholderIndex);
-
-		snippet.appendText(`](${mdPath})`);
-
-		if (i < uris.length - 1 && uris.length > 1) {
-			snippet.appendText(options?.separator ?? ' ');
-		}
-	});
-	return snippet;
-}
-
-function getMdPath(dir: vscode.Uri | undefined, file: vscode.Uri) {
-	if (dir && dir.scheme === file.scheme && dir.authority === file.authority) {
-		if (file.scheme === Schemes.file) {
-			// On windows, we must use the native `path.relative` to generate the relative path
-			// so that drive-letters are resolved cast insensitively. However we then want to
-			// convert back to a posix path to insert in to the document.
-			const relativePath = path.relative(dir.fsPath, file.fsPath);
-			return encodeURI(path.posix.normalize(relativePath.split(path.sep).join(path.posix.sep)));
-		}
-
-		return encodeURI(path.posix.relative(dir.path, file.path));
-	}
-
-	return file.toString(false);
-}
-
-function getDocumentDir(document: vscode.TextDocument): vscode.Uri | undefined {
-	const docUri = getParentDocumentUri(document);
-	if (docUri.scheme === Schemes.untitled) {
-		return vscode.workspace.workspaceFolders?.[0]?.uri;
-	}
-	return URI.Utils.dirname(docUri);
-}
-
-export function getParentDocumentUri(document: vscode.TextDocument): vscode.Uri {
-	if (document.uri.scheme === Schemes.notebookCell) {
-		for (const notebook of vscode.workspace.notebookDocuments) {
-			for (const cell of notebook.getCells()) {
-				if (cell.document === document) {
-					return notebook.uri;
-				}
-			}
-		}
-	}
-
-	return document.uri;
-}
diff --git a/extensions/markdown-language-features/src/languageFeatures/copyFiles/shared.ts b/extensions/markdown-language-features/src/languageFeatures/copyFiles/shared.ts
new file mode 100644
index 00000000000..28a86a22d70
--- /dev/null
+++ b/extensions/markdown-language-features/src/languageFeatures/copyFiles/shared.ts
@@ -0,0 +1,336 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as path from 'path';
+import * as vscode from 'vscode';
+import * as URI from 'vscode-uri';
+import { Schemes } from '../../util/schemes';
+import { NewFilePathGenerator } from './copyFiles';
+import { coalesce } from '../../util/arrays';
+import { getDocumentDir } from '../../util/document';
+
+enum MediaKind {
+	Image,
+	Video,
+	Audio,
+}
+
+const externalUriSchemes = [
+	'http',
+	'https',
+];
+
+export const mediaFileExtensions = new Map([
+	// Images
+	['bmp', MediaKind.Image],
+	['gif', MediaKind.Image],
+	['ico', MediaKind.Image],
+	['jpe', MediaKind.Image],
+	['jpeg', MediaKind.Image],
+	['jpg', MediaKind.Image],
+	['png', MediaKind.Image],
+	['psd', MediaKind.Image],
+	['svg', MediaKind.Image],
+	['tga', MediaKind.Image],
+	['tif', MediaKind.Image],
+	['tiff', MediaKind.Image],
+	['webp', MediaKind.Image],
+
+	// Videos
+	['ogg', MediaKind.Video],
+	['mp4', MediaKind.Video],
+
+	// Audio Files
+	['mp3', MediaKind.Audio],
+	['aac', MediaKind.Audio],
+	['wav', MediaKind.Audio],
+]);
+
+export const mediaMimes = new Set([
+	'image/bmp',
+	'image/gif',
+	'image/jpeg',
+	'image/png',
+	'image/webp',
+	'video/mp4',
+	'video/ogg',
+	'audio/mpeg',
+	'audio/aac',
+	'audio/x-wav',
+]);
+
+export async function getMarkdownLink(document: vscode.TextDocument, ranges: readonly vscode.Range[], urlList: string, token: vscode.CancellationToken): Promise<{ additionalEdits: vscode.WorkspaceEdit; label: string } | undefined> {
+	if (ranges.length === 0) {
+		return;
+	}
+
+	const edits: vscode.SnippetTextEdit[] = [];
+	let placeHolderValue: number = ranges.length;
+	let label: string = '';
+	for (let i = 0; i < ranges.length; i++) {
+		const snippet = await tryGetUriListSnippet(document, urlList, token, document.getText(ranges[i]), placeHolderValue);
+		if (!snippet) {
+			return;
+		}
+		placeHolderValue--;
+		edits.push(new vscode.SnippetTextEdit(ranges[i], snippet.snippet));
+		label = snippet.label;
+	}
+
+	const additionalEdits = new vscode.WorkspaceEdit();
+	additionalEdits.set(document.uri, edits);
+
+	return { additionalEdits, label };
+}
+
+export async function tryGetUriListSnippet(document: vscode.TextDocument, urlList: String, token: vscode.CancellationToken, title = '', placeHolderValue = 0): Promise<{ snippet: vscode.SnippetString; label: string } | undefined> {
+	if (token.isCancellationRequested) {
+		return undefined;
+	}
+
+	const uris: vscode.Uri[] = [];
+	for (const resource of urlList.split(/\r?\n/g)) {
+		try {
+			uris.push(vscode.Uri.parse(resource));
+		} catch {
+			// noop
+		}
+	}
+
+	return createUriListSnippet(document, uris, title, placeHolderValue);
+}
+
+interface UriListSnippetOptions {
+	readonly placeholderText?: string;
+
+	readonly placeholderStartIndex?: number;
+
+	/**
+	 * Should the snippet be for an image link or video?
+	 *
+	 * If `undefined`, tries to infer this from the uri.
+	 */
+	readonly insertAsMedia?: boolean;
+
+	readonly separator?: string;
+}
+
+export function createUriListSnippet(
+	document: vscode.TextDocument,
+	uris: readonly vscode.Uri[],
+	title = '',
+	placeholderValue = 0,
+	options?: UriListSnippetOptions,
+): { snippet: vscode.SnippetString; label: string } | undefined {
+	if (!uris.length) {
+		return;
+	}
+
+	const dir = getDocumentDir(document);
+
+	const snippet = new vscode.SnippetString();
+
+	let insertedLinkCount = 0;
+	let insertedImageCount = 0;
+	let insertedAudioVideoCount = 0;
+
+	uris.forEach((uri, i) => {
+		const mdPath = getMdPath(dir, uri);
+
+		const ext = URI.Utils.extname(uri).toLowerCase().replace('.', '');
+		const insertAsMedia = typeof options?.insertAsMedia === 'undefined' ? mediaFileExtensions.has(ext) : !!options.insertAsMedia;
+		const insertAsVideo = mediaFileExtensions.get(ext) === MediaKind.Video;
+		const insertAsAudio = mediaFileExtensions.get(ext) === MediaKind.Audio;
+
+		if (insertAsVideo) {
+			insertedAudioVideoCount++;
+			snippet.appendText(`');
+		} else if (insertAsAudio) {
+			insertedAudioVideoCount++;
+			snippet.appendText(`');
+		} else {
+			if (insertAsMedia) {
+				insertedImageCount++;
+				snippet.appendText('![');
+				const placeholderText = escapeBrackets(title) || options?.placeholderText || 'Alt text';
+				const placeholderIndex = typeof options?.placeholderStartIndex !== 'undefined' ? options?.placeholderStartIndex + i : (placeholderValue === 0 ? undefined : placeholderValue);
+				snippet.appendPlaceholder(placeholderText, placeholderIndex);
+				snippet.appendText(`](${escapeMarkdownLinkPath(mdPath)})`);
+			} else {
+				insertedLinkCount++;
+				snippet.appendText('[');
+				snippet.appendPlaceholder(escapeBrackets(title) || 'Title', placeholderValue);
+				if (externalUriSchemes.includes(uri.scheme)) {
+					const uriString = uri.toString(true);
+					snippet.appendText(`](${uriString})`);
+				} else {
+					snippet.appendText(`](${escapeMarkdownLinkPath(mdPath)})`);
+				}
+			}
+		}
+
+		if (i < uris.length - 1 && uris.length > 1) {
+			snippet.appendText(options?.separator ?? ' ');
+		}
+	});
+
+	let label: string;
+	if (insertedAudioVideoCount > 0) {
+		if (insertedLinkCount > 0) {
+			label = vscode.l10n.t('Insert Markdown Media and Links');
+		} else {
+			label = vscode.l10n.t('Insert Markdown Media');
+		}
+	} else if (insertedImageCount > 0 && insertedLinkCount > 0) {
+		label = vscode.l10n.t('Insert Markdown Images and Links');
+	} else if (insertedImageCount > 0) {
+		label = insertedImageCount > 1
+			? vscode.l10n.t('Insert Markdown Images')
+			: vscode.l10n.t('Insert Markdown Image');
+	} else {
+		label = insertedLinkCount > 1
+			? vscode.l10n.t('Insert Markdown Links')
+			: vscode.l10n.t('Insert Markdown Link');
+	}
+
+	return { snippet, label };
+}
+
+/**
+ * Create a new edit from the image files in a data transfer.
+ *
+ * This tries copying files outside of the workspace into the workspace.
+ */
+export async function createEditForMediaFiles(
+	document: vscode.TextDocument,
+	dataTransfer: vscode.DataTransfer,
+	token: vscode.CancellationToken
+): Promise<{ snippet: vscode.SnippetString; label: string; additionalEdits: vscode.WorkspaceEdit } | undefined> {
+	if (document.uri.scheme === Schemes.untitled) {
+		return;
+	}
+
+	interface FileEntry {
+		readonly uri: vscode.Uri;
+		readonly newFile?: { readonly contents: vscode.DataTransferFile; readonly overwrite: boolean };
+	}
+
+	const pathGenerator = new NewFilePathGenerator();
+	const fileEntries = coalesce(await Promise.all(Array.from(dataTransfer, async ([mime, item]): Promise => {
+		if (!mediaMimes.has(mime)) {
+			return;
+		}
+
+		const file = item?.asFile();
+		if (!file) {
+			return;
+		}
+
+		if (file.uri) {
+			// If the file is already in a workspace, we don't want to create a copy of it
+			const workspaceFolder = vscode.workspace.getWorkspaceFolder(file.uri);
+			if (workspaceFolder) {
+				return { uri: file.uri };
+			}
+		}
+
+		const newFile = await pathGenerator.getNewFilePath(document, file, token);
+		if (!newFile) {
+			return;
+		}
+		return { uri: newFile.uri, newFile: { contents: file, overwrite: newFile.overwrite } };
+	})));
+	if (!fileEntries.length) {
+		return;
+	}
+
+	const workspaceEdit = new vscode.WorkspaceEdit();
+	for (const entry of fileEntries) {
+		if (entry.newFile) {
+			workspaceEdit.createFile(entry.uri, {
+				contents: entry.newFile.contents,
+				overwrite: entry.newFile.overwrite,
+			});
+		}
+	}
+
+	const snippet = createUriListSnippet(document, fileEntries.map(entry => entry.uri));
+	if (!snippet) {
+		return;
+	}
+
+	return {
+		snippet: snippet.snippet,
+		label: snippet.label,
+		additionalEdits: workspaceEdit,
+	};
+}
+
+function getMdPath(dir: vscode.Uri | undefined, file: vscode.Uri) {
+	if (dir && dir.scheme === file.scheme && dir.authority === file.authority) {
+		if (file.scheme === Schemes.file) {
+			// On windows, we must use the native `path.relative` to generate the relative path
+			// so that drive-letters are resolved cast insensitively. However we then want to
+			// convert back to a posix path to insert in to the document.
+			const relativePath = path.relative(dir.fsPath, file.fsPath);
+			return path.posix.normalize(relativePath.split(path.sep).join(path.posix.sep));
+		}
+
+		return path.posix.relative(dir.path, file.path);
+	}
+
+	return file.toString(false);
+}
+
+function escapeHtmlAttribute(attr: string): string {
+	return encodeURI(attr).replaceAll('"', '"');
+}
+
+function escapeMarkdownLinkPath(mdPath: string): string {
+	if (needsBracketLink(mdPath)) {
+		return '<' + mdPath.replaceAll('<', '\\<').replaceAll('>', '\\>') + '>';
+	}
+
+	return encodeURI(mdPath);
+}
+
+function escapeBrackets(value: string): string {
+	value = value.replace(/[\[\]]/g, '\\$&');
+	return value;
+}
+
+function needsBracketLink(mdPath: string) {
+	// Links with whitespace or control characters must be enclosed in brackets
+	if (mdPath.startsWith('<') || /\s|[\u007F\u0000-\u001f]/.test(mdPath)) {
+		return true;
+	}
+
+	// Check if the link has mis-matched parens
+	if (!/[\(\)]/.test(mdPath)) {
+		return false;
+	}
+
+	let previousChar = '';
+	let nestingCount = 0;
+	for (const char of mdPath) {
+		if (char === '(' && previousChar !== '\\') {
+			nestingCount++;
+		} else if (char === ')' && previousChar !== '\\') {
+			nestingCount--;
+		}
+
+		if (nestingCount < 0) {
+			return true;
+		}
+		previousChar = char;
+	}
+
+	return nestingCount > 0;
+}
+
diff --git a/extensions/markdown-language-features/src/preview/documentRenderer.ts b/extensions/markdown-language-features/src/preview/documentRenderer.ts
index e7b965aa8e4..57ec4ee0051 100644
--- a/extensions/markdown-language-features/src/preview/documentRenderer.ts
+++ b/extensions/markdown-language-features/src/preview/documentRenderer.ts
@@ -33,6 +33,11 @@ export interface MarkdownContentProviderOutput {
 	containingImages: Set;
 }
 
+export interface ImageInfo {
+	readonly id: string;
+	readonly width: number;
+	readonly height: number;
+}
 
 export class MdDocumentRenderer {
 	constructor(
@@ -57,6 +62,7 @@ export class MdDocumentRenderer {
 		initialLine: number | undefined,
 		selectedLine: number | undefined,
 		state: any | undefined,
+		imageInfo: readonly ImageInfo[],
 		token: vscode.CancellationToken
 	): Promise {
 		const sourceUri = markdownDocument.uri;
@@ -94,10 +100,10 @@ export class MdDocumentRenderer {
 					data-strings="${escapeAttribute(JSON.stringify(previewStrings))}"
 					data-state="${escapeAttribute(JSON.stringify(state || {}))}">
 				
-				${this._getStyles(resourceProvider, sourceUri, config, state)}
+				${this._getStyles(resourceProvider, sourceUri, config, imageInfo)}
 				
 			
-			
+			
 				${body.html}
 				${this._getScripts(resourceProvider, nonce)}
 			
@@ -180,22 +186,24 @@ export class MdDocumentRenderer {
 		].join(' ');
 	}
 
-	private _getImageStabilizerStyles(state?: any) {
+	private _getImageStabilizerStyles(imageInfo: readonly ImageInfo[]): string {
+		if (!imageInfo.length) {
+			return '';
+		}
+
 		let ret = '\n';
 
 		return ret;
 	}
 
-	private _getStyles(resourceProvider: WebviewResourceProvider, resource: vscode.Uri, config: MarkdownPreviewConfiguration, state?: any): string {
+	private _getStyles(resourceProvider: WebviewResourceProvider, resource: vscode.Uri, config: MarkdownPreviewConfiguration, imageInfo: readonly ImageInfo[]): string {
 		const baseStyles: string[] = [];
 		for (const resource of this._contributionProvider.contributions.previewStyles) {
 			baseStyles.push(``);
@@ -203,7 +211,7 @@ export class MdDocumentRenderer {
 
 		return `${baseStyles.join('\n')}
 			${this._computeCustomStyleSheetIncludes(resourceProvider, resource, config)}
-			${this._getImageStabilizerStyles(state)}`;
+			${this._getImageStabilizerStyles(imageInfo)}`;
 	}
 
 	private _getScripts(resourceProvider: WebviewResourceProvider, nonce: string): string {
diff --git a/extensions/markdown-language-features/src/preview/preview.ts b/extensions/markdown-language-features/src/preview/preview.ts
index 3d04c6db309..de58e54784a 100644
--- a/extensions/markdown-language-features/src/preview/preview.ts
+++ b/extensions/markdown-language-features/src/preview/preview.ts
@@ -12,52 +12,11 @@ import { isMarkdownFile } from '../util/file';
 import { MdLinkOpener } from '../util/openDocumentLink';
 import { WebviewResourceProvider } from '../util/resources';
 import { urlToUri } from '../util/url';
-import { MdDocumentRenderer } from './documentRenderer';
+import { ImageInfo, MdDocumentRenderer } from './documentRenderer';
 import { MarkdownPreviewConfigurationManager } from './previewConfig';
 import { scrollEditorToLine, StartingScrollFragment, StartingScrollLine, StartingScrollLocation } from './scrolling';
 import { getVisibleLine, LastScrollLocation, TopmostLineMonitor } from './topmostLineMonitor';
-
-
-interface WebviewMessage {
-	readonly source: string;
-}
-
-interface CacheImageSizesMessage extends WebviewMessage {
-	readonly type: 'cacheImageSizes';
-	readonly body: { id: string; width: number; height: number }[];
-}
-
-interface RevealLineMessage extends WebviewMessage {
-	readonly type: 'revealLine';
-	readonly body: {
-		readonly line: number;
-	};
-}
-
-interface DidClickMessage extends WebviewMessage {
-	readonly type: 'didClick';
-	readonly body: {
-		readonly line: number;
-	};
-}
-
-interface ClickLinkMessage extends WebviewMessage {
-	readonly type: 'openLink';
-	readonly body: {
-		readonly href: string;
-	};
-}
-
-interface ShowPreviewSecuritySelectorMessage extends WebviewMessage {
-	readonly type: 'showPreviewSecuritySelector';
-}
-
-interface PreviewStyleLoadErrorMessage extends WebviewMessage {
-	readonly type: 'previewStyleLoadError';
-	readonly body: {
-		readonly unloadedStyles: string[];
-	};
-}
+import type { FromWebviewMessage, ToWebviewMessage } from '../../types/previewMessaging';
 
 export class PreviewDocumentVersion {
 
@@ -78,10 +37,9 @@ export class PreviewDocumentVersion {
 interface MarkdownPreviewDelegate {
 	getTitle?(resource: vscode.Uri): string;
 	getAdditionalState(): {};
-	openPreviewLinkToMarkdownFile(markdownLink: vscode.Uri, fragment: string): void;
+	openPreviewLinkToMarkdownFile(markdownLink: vscode.Uri, fragment: string | undefined): void;
 }
 
-
 class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 
 	private static readonly _unwatchedImageSchemes = new Set(['https', 'http', 'data']);
@@ -100,7 +58,7 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 	private _currentVersion?: PreviewDocumentVersion;
 	private _isScrolling = false;
 
-	private _imageInfo: { readonly id: string; readonly width: number; readonly height: number }[] = [];
+	private _imageInfo: readonly ImageInfo[] = [];
 	private readonly _fileWatchersBySrc = new Map();
 
 	private readonly _onScrollEmitter = this._register(new vscode.EventEmitter());
@@ -162,26 +120,26 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 			}
 		}));
 
-		this._register(this._webviewPanel.webview.onDidReceiveMessage((e: CacheImageSizesMessage | RevealLineMessage | DidClickMessage | ClickLinkMessage | ShowPreviewSecuritySelectorMessage | PreviewStyleLoadErrorMessage) => {
+		this._register(this._webviewPanel.webview.onDidReceiveMessage((e: FromWebviewMessage.Type) => {
 			if (e.source !== this._resource.toString()) {
 				return;
 			}
 
 			switch (e.type) {
 				case 'cacheImageSizes':
-					this._imageInfo = e.body;
+					this._imageInfo = e.imageData;
 					break;
 
 				case 'revealLine':
-					this._onDidScrollPreview(e.body.line);
+					this._onDidScrollPreview(e.line);
 					break;
 
 				case 'didClick':
-					this._onDidClickPreview(e.body.line);
+					this._onDidClickPreview(e.line);
 					break;
 
 				case 'openLink':
-					this._onDidClickPreviewLink(e.body.href);
+					this._onDidClickPreviewLink(e.href);
 					break;
 
 				case 'showPreviewSecuritySelector':
@@ -190,7 +148,7 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 
 				case 'previewStyleLoadError':
 					vscode.window.showWarningMessage(
-						vscode.l10n.t("Could not load 'markdown.styles': {0}", e.body.unloadedStyles.join(', ')));
+						vscode.l10n.t("Could not load 'markdown.styles': {0}", e.unloadedStyles.join(', ')));
 					break;
 			}
 		}));
@@ -220,7 +178,6 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 		return {
 			resource: this._resource.toString(),
 			line: this._line,
-			imageInfo: this._imageInfo,
 			fragment: this._scrollToFragment,
 			...this._delegate.getAdditionalState(),
 		};
@@ -248,7 +205,7 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 		return this._resource.fsPath === resource.fsPath;
 	}
 
-	public postMessage(msg: any) {
+	public postMessage(msg: ToWebviewMessage.Type) {
 		if (!this._disposed) {
 			this._webviewPanel.webview.postMessage(msg);
 		}
@@ -315,7 +272,7 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 		}
 
 		const content = await (shouldReloadPage
-			? this._contentProvider.renderDocument(document, this, this._previewConfigurations, this._line, selectedLine, this.state, this._disposeCts.token)
+			? this._contentProvider.renderDocument(document, this, this._previewConfigurations, this._line, selectedLine, this.state, this._imageInfo, this._disposeCts.token)
 			: this._contentProvider.renderBody(document, this));
 
 		// Another call to `doUpdate` may have happened.
@@ -389,7 +346,7 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 		if (reloadPage) {
 			this._webviewPanel.webview.html = html;
 		} else {
-			this._webviewPanel.webview.postMessage({
+			this.postMessage({
 				type: 'updateContent',
 				content: html,
 				source: this._resource.toString(),
@@ -453,7 +410,7 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider {
 				try {
 					const doc = await vscode.workspace.openTextDocument(vscode.Uri.from(resolved.uri));
 					if (isMarkdownFile(doc)) {
-						return this._delegate.openPreviewLinkToMarkdownFile(doc.uri, resolved.fragment ?? '');
+						return this._delegate.openPreviewLinkToMarkdownFile(doc.uri, resolved.fragment ? decodeURIComponent(resolved.fragment) : undefined);
 					}
 				} catch {
 					// Noop
@@ -485,8 +442,8 @@ export interface IManagedMarkdownPreview {
 	readonly onDispose: vscode.Event;
 	readonly onDidChangeViewState: vscode.Event;
 
+	copyImage(id: string): void;
 	dispose(): void;
-
 	refresh(): void;
 	updateConfiguration(): void;
 
@@ -558,6 +515,15 @@ export class StaticMarkdownPreview extends Disposable implements IManagedMarkdow
 		}));
 	}
 
+	copyImage(id: string) {
+		this._webviewPanel.reveal();
+		this._preview.postMessage({
+			type: 'copyImage',
+			source: this.resource.toString(),
+			id: id
+		});
+	}
+
 	private readonly _onDispose = this._register(new vscode.EventEmitter());
 	public readonly onDispose = this._onDispose.event;
 
@@ -704,6 +670,15 @@ export class DynamicMarkdownPreview extends Disposable implements IManagedMarkdo
 		}));
 	}
 
+	copyImage(id: string) {
+		this._webviewPanel.reveal();
+		this._preview.postMessage({
+			type: 'copyImage',
+			source: this.resource.toString(),
+			id: id
+		});
+	}
+
 	private readonly _onDisposeEmitter = this._register(new vscode.EventEmitter());
 	public readonly onDispose = this._onDisposeEmitter.event;
 
diff --git a/extensions/markdown-language-features/src/preview/previewManager.ts b/extensions/markdown-language-features/src/preview/previewManager.ts
index 7f6de5023b3..3b46c2a4322 100644
--- a/extensions/markdown-language-features/src/preview/previewManager.ts
+++ b/extensions/markdown-language-features/src/preview/previewManager.ts
@@ -147,6 +147,15 @@ export class MarkdownPreviewManager extends Disposable implements vscode.Webview
 		return this._activePreview?.resourceColumn;
 	}
 
+	public findPreview(resource: vscode.Uri): IManagedMarkdownPreview | undefined {
+		for (const preview of [...this._dynamicPreviews, ...this._staticPreviews]) {
+			if (preview.resource.fsPath === resource.fsPath) {
+				return preview;
+			}
+		}
+		return undefined;
+	}
+
 	public toggleLock() {
 		const preview = this._activePreview;
 		if (preview instanceof DynamicMarkdownPreview) {
diff --git a/extensions/markdown-language-features/src/preview/scrolling.ts b/extensions/markdown-language-features/src/preview/scrolling.ts
index cb807893266..aa0798fb747 100644
--- a/extensions/markdown-language-features/src/preview/scrolling.ts
+++ b/extensions/markdown-language-features/src/preview/scrolling.ts
@@ -16,6 +16,7 @@ export function scrollEditorToLine(
 }
 
 function toRevealRange(line: number, editor: vscode.TextEditor): vscode.Range {
+	line = Math.max(0, line);
 	const sourceLine = Math.floor(line);
 	if (sourceLine >= editor.document.lineCount) {
 		return new vscode.Range(editor.document.lineCount - 1, 0, editor.document.lineCount - 1, 0);
diff --git a/extensions/markdown-language-features/src/util/document.ts b/extensions/markdown-language-features/src/util/document.ts
new file mode 100644
index 00000000000..9c192227ee3
--- /dev/null
+++ b/extensions/markdown-language-features/src/util/document.ts
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import { Schemes } from './schemes';
+import { Utils } from 'vscode-uri';
+
+export function getDocumentDir(document: vscode.TextDocument): vscode.Uri | undefined {
+	const docUri = getParentDocumentUri(document);
+	if (docUri.scheme === Schemes.untitled) {
+		return vscode.workspace.workspaceFolders?.[0]?.uri;
+	}
+	return Utils.dirname(docUri);
+}
+
+export function getParentDocumentUri(document: vscode.TextDocument): vscode.Uri {
+	if (document.uri.scheme === Schemes.notebookCell) {
+		for (const notebook of vscode.workspace.notebookDocuments) {
+			for (const cell of notebook.getCells()) {
+				if (cell.document === document) {
+					return notebook.uri;
+				}
+			}
+		}
+	}
+
+	return document.uri;
+}
diff --git a/extensions/markdown-language-features/src/util/openDocumentLink.ts b/extensions/markdown-language-features/src/util/openDocumentLink.ts
index f29661571a5..4fc423d3675 100644
--- a/extensions/markdown-language-features/src/util/openDocumentLink.ts
+++ b/extensions/markdown-language-features/src/util/openDocumentLink.ts
@@ -37,6 +37,18 @@ export class MdLinkOpener {
 				return vscode.commands.executeCommand('revealInExplorer', uri);
 
 			case 'file': {
+				// If no explicit viewColumn is given, check if the editor is already open in a tab
+				if (typeof viewColumn === 'undefined') {
+					for (const tab of vscode.window.tabGroups.all.flatMap(x => x.tabs)) {
+						if (tab.input instanceof vscode.TabInputText) {
+							if (tab.input.uri.fsPath === uri.fsPath) {
+								viewColumn = tab.group.viewColumn;
+								break;
+							}
+						}
+					}
+				}
+
 				return vscode.commands.executeCommand('vscode.open', uri, {
 					selection: resolved.position ? new vscode.Range(resolved.position.line, resolved.position.character, resolved.position.line, resolved.position.character) : undefined,
 					viewColumn: viewColumn ?? getViewColumn(fromResource),
diff --git a/extensions/markdown-language-features/tsconfig.json b/extensions/markdown-language-features/tsconfig.json
index 75edc8fdacf..6bbe1c80767 100644
--- a/extensions/markdown-language-features/tsconfig.json
+++ b/extensions/markdown-language-features/tsconfig.json
@@ -6,6 +6,7 @@
 	"include": [
 		"src/**/*",
 		"../../src/vscode-dts/vscode.d.ts",
-		"../../src/vscode-dts/vscode.proposed.documentPaste.d.ts"
+		"../../src/vscode-dts/vscode.proposed.documentPaste.d.ts",
+		"../../src/vscode-dts/vscode.proposed.dropMetadata.d.ts"
 	]
 }
diff --git a/extensions/markdown-language-features/types/previewMessaging.d.ts b/extensions/markdown-language-features/types/previewMessaging.d.ts
new file mode 100644
index 00000000000..05d10af6597
--- /dev/null
+++ b/extensions/markdown-language-features/types/previewMessaging.d.ts
@@ -0,0 +1,80 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+interface BaseMessage {
+	readonly source: string;
+}
+
+export namespace FromWebviewMessage {
+
+	export interface CacheImageSizes extends BaseMessage {
+		readonly type: 'cacheImageSizes';
+		readonly imageData: ReadonlyArray<{ id: string; width: number; height: number }>;
+	}
+
+	export interface RevealLine extends BaseMessage {
+		readonly type: 'revealLine';
+		readonly line: number;
+	}
+
+	export interface DidClick extends BaseMessage {
+		readonly type: 'didClick';
+		readonly line: number;
+	}
+
+	export interface ClickLink extends BaseMessage {
+		readonly type: 'openLink';
+		readonly href: string;
+	}
+
+	export interface ShowPreviewSecuritySelector extends BaseMessage {
+		readonly type: 'showPreviewSecuritySelector';
+	}
+
+	export interface PreviewStyleLoadError extends BaseMessage {
+		readonly type: 'previewStyleLoadError';
+		readonly unloadedStyles: readonly string[];
+	}
+
+	export type Type =
+		| CacheImageSizes
+		| RevealLine
+		| DidClick
+		| ClickLink
+		| ShowPreviewSecuritySelector
+		| PreviewStyleLoadError
+		;
+}
+
+export namespace ToWebviewMessage {
+	export interface OnDidChangeTextEditorSelection extends BaseMessage {
+		readonly type: 'onDidChangeTextEditorSelection';
+		readonly line: number;
+	}
+
+	export interface UpdateView extends BaseMessage {
+		readonly type: 'updateView';
+		readonly line: number;
+		readonly source: string;
+	}
+
+	export interface UpdateContent extends BaseMessage {
+		readonly type: 'updateContent';
+		readonly content: string;
+	}
+
+	export interface CopyImageContent extends BaseMessage {
+		readonly type: 'copyImage';
+		readonly source: string;
+		readonly id: string;
+	}
+
+	export type Type =
+		| OnDidChangeTextEditorSelection
+		| UpdateView
+		| UpdateContent
+		| CopyImageContent
+		;
+}
diff --git a/extensions/markdown-language-features/yarn.lock b/extensions/markdown-language-features/yarn.lock
index e796e655bae..46f769556aa 100644
--- a/extensions/markdown-language-features/yarn.lock
+++ b/extensions/markdown-language-features/yarn.lock
@@ -480,9 +480,9 @@ semver@^5.3.0, semver@^5.4.1:
   integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
 
 semver@^7.3.5:
-  version "7.3.7"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
-  integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+  version "7.5.3"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
+  integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
   dependencies:
     lru-cache "^6.0.0"
 
diff --git a/extensions/markdown-math/esbuild.js b/extensions/markdown-math/esbuild.js
index 88475257524..f8196075a69 100644
--- a/extensions/markdown-math/esbuild.js
+++ b/extensions/markdown-math/esbuild.js
@@ -6,35 +6,13 @@
 
 const path = require('path');
 const fse = require('fs-extra');
-const esbuild = require('esbuild');
 
 const args = process.argv.slice(2);
 
-const isWatch = args.indexOf('--watch') >= 0;
-
-let outputRoot = __dirname;
-const outputRootIndex = args.indexOf('--outputRoot');
-if (outputRootIndex >= 0) {
-	outputRoot = args[outputRootIndex + 1];
-}
-
 const srcDir = path.join(__dirname, 'notebook');
-const outDir = path.join(outputRoot, 'notebook-out');
-
-async function build() {
-	await esbuild.build({
-		entryPoints: [
-			path.join(srcDir, 'katex.ts'),
-		],
-		bundle: true,
-		minify: true,
-		sourcemap: false,
-		format: 'esm',
-		outdir: outDir,
-		platform: 'browser',
-		target: ['es2020'],
-	});
+const outDir = path.join(__dirname, 'notebook-out');
 
+function postBuild(outDir) {
 	fse.copySync(
 		path.join(__dirname, 'node_modules', 'katex', 'dist', 'katex.min.css'),
 		path.join(outDir, 'katex.min.css'));
@@ -51,16 +29,10 @@ async function build() {
 	}
 }
 
-
-build().catch(() => process.exit(1));
-
-if (isWatch) {
-	const watcher = require('@parcel/watcher');
-	watcher.subscribe(srcDir, async () => {
-		try {
-			await build();
-		} catch (e) {
-			console.error(e);
-		}
-	});
-}
+require('../esbuild-webview-common').run({
+	entryPoints: [
+		path.join(srcDir, 'katex.ts'),
+	],
+	srcDir,
+	outdir: outDir,
+}, process.argv, postBuild);
diff --git a/extensions/markdown-math/package.json b/extensions/markdown-math/package.json
index 077c90d9686..71cb1028e6f 100644
--- a/extensions/markdown-math/package.json
+++ b/extensions/markdown-math/package.json
@@ -80,6 +80,13 @@
             "type": "boolean",
             "default": true,
             "description": "%config.markdown.math.enabled%"
+          },
+          "markdown.math.macros": {
+            "type": "object",
+            "additionalProperties": { "type": "string" },
+            "default": {},
+            "description": "%config.markdown.math.macros%",
+            "scope": "resource"
           }
         }
       }
diff --git a/extensions/markdown-math/package.nls.json b/extensions/markdown-math/package.nls.json
index fe869a996d0..8e95dac52bb 100644
--- a/extensions/markdown-math/package.nls.json
+++ b/extensions/markdown-math/package.nls.json
@@ -1,5 +1,6 @@
 {
 	"displayName": "Markdown Math",
 	"description": "Adds math support to Markdown in notebooks.",
-	"config.markdown.math.enabled": "Enable/disable rendering math in the built-in Markdown preview."
+	"config.markdown.math.enabled": "Enable/disable rendering math in the built-in Markdown preview.",
+	"config.markdown.math.macros": "A collection of custom macros. Each macro is a key-value pair where the key is a new command name and the value is the expansion of the macro."
 }
diff --git a/extensions/markdown-math/src/extension.ts b/extensions/markdown-math/src/extension.ts
index cccd656f924..38fe52b3203 100644
--- a/extensions/markdown-math/src/extension.ts
+++ b/extensions/markdown-math/src/extension.ts
@@ -6,7 +6,7 @@ import * as vscode from 'vscode';
 
 declare function require(path: string): any;
 
-const enabledSetting = 'markdown.math.enabled';
+const markdownMathSetting = 'markdown.math';
 
 export function activate(context: vscode.ExtensionContext) {
 	function isEnabled(): boolean {
@@ -14,8 +14,13 @@ export function activate(context: vscode.ExtensionContext) {
 		return config.get('math.enabled', true);
 	}
 
+	function getMacros(): { [key: string]: string } {
+		const config = vscode.workspace.getConfiguration('markdown');
+		return config.get<{ [key: string]: string }>('math.macros', {});
+	}
+
 	vscode.workspace.onDidChangeConfiguration(e => {
-		if (e.affectsConfiguration(enabledSetting)) {
+		if (e.affectsConfiguration(markdownMathSetting)) {
 			vscode.commands.executeCommand('markdown.api.reloadPlugins');
 		}
 	}, undefined, context.subscriptions);
@@ -24,8 +29,11 @@ export function activate(context: vscode.ExtensionContext) {
 		extendMarkdownIt(md: any) {
 			if (isEnabled()) {
 				const katex = require('@vscode/markdown-it-katex');
-				const options = { globalGroup: true, macros: {} };
-				md.core.ruler.push('reset-katex-macros', () => { options.macros = {}; });
+				const settingsMacros = getMacros();
+				const options = { globalGroup: true, macros: { ...settingsMacros } };
+				md.core.ruler.push('reset-katex-macros', () => {
+					options.macros = { ...settingsMacros };
+				});
 				return md.use(katex, options);
 			}
 			return md;
diff --git a/extensions/media-preview/media/imagePreview.js b/extensions/media-preview/media/imagePreview.js
index 92a77fb3f85..ab8ad542a2d 100644
--- a/extensions/media-preview/media/imagePreview.js
+++ b/extensions/media-preview/media/imagePreview.js
@@ -327,21 +327,57 @@
 		}
 
 		switch (e.data.type) {
-			case 'setScale':
+			case 'setScale': {
 				updateScale(e.data.scale);
 				break;
-
-			case 'setActive':
+			}
+			case 'setActive': {
 				setActive(e.data.value);
 				break;
-
-			case 'zoomIn':
+			}
+			case 'zoomIn': {
 				zoomIn();
 				break;
-
-			case 'zoomOut':
+			}
+			case 'zoomOut': {
 				zoomOut();
 				break;
+			}
+			case 'copyImage': {
+				copyImage();
+				break;
+			}
 		}
 	});
+
+	document.addEventListener('copy', () => {
+		copyImage();
+	});
+
+	async function copyImage(retries = 5) {
+		if (!document.hasFocus() && retries > 0) {
+			// copyImage is called at the same time as webview.reveal, which means this function is running whilst the webview is gaining focus.
+			// Since navigator.clipboard.write requires the document to be focused, we need to wait for focus.
+			// We cannot use a listener, as there is a high chance the focus is gained during the setup of the listener resulting in us missing it.
+			setTimeout(() => { copyImage(retries - 1); }, 20);
+			return;
+		}
+
+		try {
+			await navigator.clipboard.write([new ClipboardItem({
+				'image/png': new Promise((resolve, reject) => {
+					const canvas = document.createElement('canvas');
+					canvas.width = image.naturalWidth;
+					canvas.height = image.naturalHeight;
+					canvas.getContext('2d').drawImage(image, 0, 0);
+					canvas.toBlob((blob) => {
+						resolve(blob);
+						canvas.remove();
+					}, 'image/png');
+				})
+			})]);
+		} catch (e) {
+			console.error(e);
+		}
+	}
 }());
diff --git a/extensions/media-preview/media/videoPreview.js b/extensions/media-preview/media/videoPreview.js
index 4cf22d3b446..eeed26972a3 100644
--- a/extensions/media-preview/media/videoPreview.js
+++ b/extensions/media-preview/media/videoPreview.js
@@ -33,6 +33,9 @@
 	}
 	video.playsInline = true;
 	video.controls = true;
+	video.autoplay = settings.autoplay;
+	video.muted = settings.autoplay;
+	video.loop = settings.loop;
 
 	function onLoaded() {
 		if (hasLoadedMedia) {
diff --git a/extensions/media-preview/package.json b/extensions/media-preview/package.json
index 8c54d78d769..3107d9d60bf 100644
--- a/extensions/media-preview/package.json
+++ b/extensions/media-preview/package.json
@@ -27,6 +27,22 @@
     }
   },
   "contributes": {
+    "configuration": {
+      "type": "object",
+      "title": "Media Previewer",
+      "properties": {
+        "mediaPreview.video.autoPlay": {
+          "type": "boolean",
+          "default": false,
+          "markdownDescription": "%videoPreviewerAutoPlay%"
+        },
+        "mediaPreview.video.loop": {
+          "type": "boolean",
+          "default": false,
+          "markdownDescription": "%videoPreviewerLoop%"
+        }
+      }
+    },
     "customEditors": [
       {
         "viewType": "imagePreview.previewEditor",
@@ -69,6 +85,11 @@
         "command": "imagePreview.zoomOut",
         "title": "%command.zoomOut%",
         "category": "Image Preview"
+      },
+      {
+        "command": "imagePreview.copyImage",
+        "title": "%command.copyImage%",
+        "category": "Image Preview"
       }
     ],
     "menus": {
@@ -82,6 +103,16 @@
           "command": "imagePreview.zoomOut",
           "when": "activeCustomEditorId == 'imagePreview.previewEditor'",
           "group": "1_imagePreview"
+        },
+        {
+          "command": "imagePreview.copyImage",
+          "when": "false"
+        }
+      ],
+      "webview/context": [
+        {
+          "command": "imagePreview.copyImage",
+          "when": "webviewId == 'imagePreview.previewEditor'"
         }
       ]
     }
diff --git a/extensions/media-preview/package.nls.json b/extensions/media-preview/package.nls.json
index 3e45e4d0d2e..c45e1e2613b 100644
--- a/extensions/media-preview/package.nls.json
+++ b/extensions/media-preview/package.nls.json
@@ -4,6 +4,9 @@
 	"customEditor.audioPreview.displayName": "Audio Preview",
 	"customEditor.imagePreview.displayName": "Image Preview",
 	"customEditor.videoPreview.displayName": "Video Preview",
+	"videoPreviewerAutoPlay": "Start playing videos on mute automatically.",
+	"videoPreviewerLoop": "Loop videos over again automatically.",
 	"command.zoomIn": "Zoom in",
-	"command.zoomOut": "Zoom out"
+	"command.zoomOut": "Zoom out",
+	"command.copyImage": "Copy"
 }
diff --git a/extensions/media-preview/src/audioPreview.ts b/extensions/media-preview/src/audioPreview.ts
index 9e2670cddad..e21a4189d7b 100644
--- a/extensions/media-preview/src/audioPreview.ts
+++ b/extensions/media-preview/src/audioPreview.ts
@@ -76,7 +76,7 @@ class AudioPreview extends MediaPreview {
 	
 	
 
-
+
 	

${vscode.l10n.t("An error occurred while loading the audio file.")}

diff --git a/extensions/media-preview/src/imagePreview/index.ts b/extensions/media-preview/src/imagePreview/index.ts index f62f6699a2a..007e466d99f 100644 --- a/extensions/media-preview/src/imagePreview/index.ts +++ b/extensions/media-preview/src/imagePreview/index.ts @@ -135,6 +135,13 @@ class ImagePreview extends MediaPreview { } } + public copyImage() { + if (this.previewState === PreviewState.Active) { + this.webviewEditor.reveal(); + this.webviewEditor.webview.postMessage({ type: 'copyImage' }); + } + } + protected override updateState() { super.updateState(); @@ -173,10 +180,10 @@ class ImagePreview extends MediaPreview { - + - +

${vscode.l10n.t("An error occurred while loading the image.")}

@@ -231,5 +238,9 @@ export function registerImagePreviewSupport(context: vscode.ExtensionContext, bi previewManager.activePreview?.zoomOut(); })); + disposables.push(vscode.commands.registerCommand('imagePreview.copyImage', () => { + previewManager.activePreview?.copyImage(); + })); + return vscode.Disposable.from(...disposables); } diff --git a/extensions/media-preview/src/videoPreview.ts b/extensions/media-preview/src/videoPreview.ts index 092d9b96751..efc6be76a4f 100644 --- a/extensions/media-preview/src/videoPreview.ts +++ b/extensions/media-preview/src/videoPreview.ts @@ -54,8 +54,11 @@ class VideoPreview extends MediaPreview { protected async getWebviewContents(): Promise { const version = Date.now().toString(); + const configurations = vscode.workspace.getConfiguration('mediaPreview.video'); const settings = { src: await this.getResourcePath(this.webviewEditor, this.resource, version), + autoplay: configurations.get('autoPlay'), + loop: configurations.get('loop'), }; const nonce = getNonce(); @@ -77,7 +80,7 @@ class VideoPreview extends MediaPreview { - +

${vscode.l10n.t("An error occurred while loading the video file.")}

diff --git a/extensions/microsoft-authentication/README.md b/extensions/microsoft-authentication/README.md index 8d914b0e39d..2462c2b3bcb 100644 --- a/extensions/microsoft-authentication/README.md +++ b/extensions/microsoft-authentication/README.md @@ -5,3 +5,5 @@ ## Features This extension provides support for authenticating to Microsoft. It registers the `microsoft` Authentication Provider that can be leveraged by other extensions. This also provides the Microsoft authentication used by Settings Sync. + +Additionally, it provides the `microsoft-sovereign-cloud` Authentication Provider that can be used to sign in to other Azure clouds like Azure for US Government or Azure China. Use the setting `microsoft-sovereign-cloud.endpoint` to select the authentication endpoint the provider should use. Please note that different scopes may also be required in different environments. diff --git a/extensions/microsoft-authentication/extension-browser.webpack.config.js b/extensions/microsoft-authentication/extension-browser.webpack.config.js index 4d0866c793f..c32a44124a2 100644 --- a/extensions/microsoft-authentication/extension-browser.webpack.config.js +++ b/extensions/microsoft-authentication/extension-browser.webpack.config.js @@ -21,7 +21,7 @@ module.exports = withBrowserDefaults({ extension: './src/extension.ts', }, externals: { - 'keytar': 'commonjs keytar' + 'keytar': 'commonjs keytar', }, resolve: { alias: { diff --git a/extensions/microsoft-authentication/package.json b/extensions/microsoft-authentication/package.json index 4369ed0c006..ecd2573ebf6 100644 --- a/extensions/microsoft-authentication/package.json +++ b/extensions/microsoft-authentication/package.json @@ -31,6 +31,70 @@ { "label": "Microsoft", "id": "microsoft" + }, + { + "label": "Microsoft Sovereign Cloud", + "id": "microsoft-sovereign-cloud" + } + ], + "configuration": [ + { + "title": "Microsoft Sovereign Cloud", + "properties": { + "microsoft-sovereign-cloud.environment": { + "type": "string", + "markdownDescription": "%microsoft-sovereign-cloud.environment.description%", + "enum": [ + "ChinaCloud", + "USGovernment", + "custom" + ], + "enumDescriptions": [ + "%microsoft-sovereign-cloud.environment.enumDescriptions.AzureChinaCloud%", + "%microsoft-sovereign-cloud.environment.enumDescriptions.AzureUSGovernment%", + "%microsoft-sovereign-cloud.environment.enumDescriptions.custom%" + ] + }, + "microsoft-sovereign-cloud.customEnvironment": { + "type": "object", + "additionalProperties": true, + "markdownDescription": "%microsoft-sovereign-cloud.customEnvironment.description%", + "properties": { + "name": { + "type": "string", + "description": "%microsoft-sovereign-cloud.customEnvironment.name.description%" + }, + "portalUrl": { + "type": "string", + "description": "%microsoft-sovereign-cloud.customEnvironment.portalUrl.description%" + }, + "managementEndpointUrl": { + "type": "string", + "description": "%microsoft-sovereign-cloud.customEnvironment.managementEndpointUrl.description%" + }, + "resourceManagerEndpointUrl": { + "type": "string", + "description": "%microsoft-sovereign-cloud.customEnvironment.resourceManagerEndpointUrl.description%" + }, + "activeDirectoryEndpointUrl": { + "type": "string", + "description": "%microsoft-sovereign-cloud.customEnvironment.activeDirectoryEndpointUrl.description%" + }, + "activeDirectoryResourceId": { + "type": "string", + "description": "%microsoft-sovereign-cloud.customEnvironment.activeDirectoryResourceId.description%" + } + }, + "required": [ + "name", + "portalUrl", + "managementEndpointUrl", + "resourceManagerEndpointUrl", + "activeDirectoryEndpointUrl", + "activeDirectoryResourceId" + ] + } + } } ] }, @@ -53,6 +117,7 @@ }, "dependencies": { "node-fetch": "2.6.7", + "@azure/ms-rest-azure-env": "^2.0.0", "@vscode/extension-telemetry": "0.7.5" }, "repository": { diff --git a/extensions/microsoft-authentication/package.nls.json b/extensions/microsoft-authentication/package.nls.json index c0bb4c4a6a0..14c625dc762 100644 --- a/extensions/microsoft-authentication/package.nls.json +++ b/extensions/microsoft-authentication/package.nls.json @@ -2,5 +2,28 @@ "displayName": "Microsoft Account", "description": "Microsoft authentication provider", "signIn": "Sign In", - "signOut": "Sign Out" + "signOut": "Sign Out", + "microsoft-sovereign-cloud.environment.description": { + "message": "The Sovereign Cloud to use for authentication. If you select `custom`, you must also set the `#microsoft-sovereign-cloud.customEnvironment#` setting.", + "comment": [ + "{Locked='`#microsoft-sovereign-cloud.customEnvironment#`'}", + "The `#microsoft-sovereign-cloud.customEnvironment#` syntax will turn into a link. Do not translate it." + ] + }, + "microsoft-sovereign-cloud.environment.enumDescriptions.AzureChinaCloud": "Azure China", + "microsoft-sovereign-cloud.environment.enumDescriptions.AzureUSGovernment": "Azure US Government", + "microsoft-sovereign-cloud.environment.enumDescriptions.custom": "A custom Microsoft Sovereign Cloud", + "microsoft-sovereign-cloud.customEnvironment.description": { + "message": "The custom configuration for the Sovereign Cloud to use with the Microsoft Sovereign Cloud authentication provider. This along with setting `#microsoft-sovereign-cloud.environment#` to `custom` is required to use this feature.", + "comment": [ + "{Locked='`#microsoft-sovereign-cloud.environment#`'}", + "The `#microsoft-sovereign-cloud.environment#` syntax will turn into a link. Do not translate it." + ] + }, + "microsoft-sovereign-cloud.customEnvironment.name.description": "The name of the custom Sovereign Cloud.", + "microsoft-sovereign-cloud.customEnvironment.portalUrl.description": "The portal URL for the custom Sovereign Cloud.", + "microsoft-sovereign-cloud.customEnvironment.managementEndpointUrl.description": "The management endpoint for the custom Sovereign Cloud.", + "microsoft-sovereign-cloud.customEnvironment.resourceManagerEndpointUrl.description": "The resource manager endpoint for the custom Sovereign Cloud.", + "microsoft-sovereign-cloud.customEnvironment.activeDirectoryEndpointUrl.description": "The Active Directory endpoint for the custom Sovereign Cloud.", + "microsoft-sovereign-cloud.customEnvironment.activeDirectoryResourceId.description": "The Active Directory resource ID for the custom Sovereign Cloud." } diff --git a/extensions/microsoft-authentication/src/AADHelper.ts b/extensions/microsoft-authentication/src/AADHelper.ts index c49c708e14c..187cbf21a48 100644 --- a/extensions/microsoft-authentication/src/AADHelper.ts +++ b/extensions/microsoft-authentication/src/AADHelper.ts @@ -4,20 +4,29 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as querystring from 'querystring'; import * as path from 'path'; -import Logger from './logger'; import { isSupportedEnvironment } from './utils'; import { generateCodeChallenge, generateCodeVerifier, randomUUID } from './cryptoUtils'; import { BetterTokenStorage, IDidChangeInOtherWindowEvent } from './betterSecretStorage'; import { LoopbackAuthServer } from './node/authServer'; import { base64Decode } from './node/buffer'; import { fetching } from './node/fetch'; +import { UriEventHandler } from './UriEventHandler'; +import TelemetryReporter from '@vscode/extension-telemetry'; +import { Environment } from '@azure/ms-rest-azure-env'; const redirectUrl = 'https://vscode.dev/redirect'; -const loginEndpointUrl = 'https://login.microsoftonline.com/'; +const defaultActiveDirectoryEndpointUrl = Environment.AzureCloud.activeDirectoryEndpointUrl; const DEFAULT_CLIENT_ID = 'aebc6443-996d-45c2-90f0-388ff96faa56'; const DEFAULT_TENANT = 'organizations'; +const MSA_TID = '9188040d-6c67-4c5b-b112-36a304b66dad'; +const MSA_PASSTHRU_TID = 'f8cdef31-a31e-4b4a-93e4-5f571e91255a'; + +const enum MicrosoftAccountType { + AAD = 'aad', + MSA = 'msa', + Unknown = 'unknown' +} interface IToken { accessToken?: string; // When unable to refresh due to network problems, the access token becomes undefined @@ -30,20 +39,21 @@ interface IToken { account: { label: string; id: string; + type: MicrosoftAccountType; }; scope: string; sessionId: string; // The account id + the scope } -interface IStoredSession { +export interface IStoredSession { id: string; refreshToken: string; scope: string; // Scopes are alphabetized and joined with a space account: { - label?: string; - displayName?: string; + label: string; id: string; }; + endpoint: string | undefined; } export interface ITokenResponse { @@ -70,16 +80,8 @@ interface IScopeData { tenant: string; } -export const onDidChangeSessions = new vscode.EventEmitter(); - export const REFRESH_NETWORK_FAILURE = 'Network failure'; -class UriEventHandler extends vscode.EventEmitter implements vscode.UriHandler { - public handleUri(uri: vscode.Uri) { - this.fire(uri); - } -} - export class AzureActiveDirectoryService { // For details on why this is set to 2/3... see https://github.com/microsoft/vscode/issues/133201#issuecomment-966668197 private static REFRESH_TIMEOUT_MODIFIER = 1000 * 2 / 3; @@ -87,29 +89,31 @@ export class AzureActiveDirectoryService { private _tokens: IToken[] = []; private _refreshTimeouts: Map = new Map(); private _refreshingPromise: Promise | undefined; - private _uriHandler: UriEventHandler; + private _sessionChangeEmitter: vscode.EventEmitter = new vscode.EventEmitter(); // Used to keep track of current requests when not using the local server approach. private _pendingNonces = new Map(); private _codeExchangePromises = new Map>(); private _codeVerfifiers = new Map(); - private readonly _tokenStorage: BetterTokenStorage; - - constructor(private _context: vscode.ExtensionContext) { - this._tokenStorage = new BetterTokenStorage('microsoft.login.keylist', _context); - this._uriHandler = new UriEventHandler(); - _context.subscriptions.push(vscode.window.registerUriHandler(this._uriHandler)); + constructor( + private readonly _logger: vscode.LogOutputChannel, + _context: vscode.ExtensionContext, + private readonly _uriHandler: UriEventHandler, + private readonly _tokenStorage: BetterTokenStorage, + private readonly _telemetryReporter: TelemetryReporter, + private readonly _env: Environment + ) { _context.subscriptions.push(this._tokenStorage.onDidChangeInOtherWindow((e) => this.checkForUpdates(e))); } public async initialize(): Promise { - Logger.info('Reading sessions from secret storage...'); - const sessions = await this._tokenStorage.getAll(); - Logger.info(`Got ${sessions.length} stored sessions`); + this._logger.info('Reading sessions from secret storage...'); + const sessions = await this._tokenStorage.getAll(item => this.sessionMatchesEndpoint(item)); + this._logger.info(`Got ${sessions.length} stored sessions`); const refreshes = sessions.map(async session => { - Logger.trace(`Read the following stored session with scopes: ${session.scope}`); + this._logger.trace(`Read the following stored session with scopes: ${session.scope}`); const scopes = session.scope.split(' '); const scopeData: IScopeData = { scopes, @@ -128,21 +132,21 @@ export class AzureActiveDirectoryService { accessToken: undefined, refreshToken: session.refreshToken, account: { - label: session.account.label ?? session.account.displayName!, - id: session.account.id + ...session.account, + type: MicrosoftAccountType.Unknown }, scope: session.scope, sessionId: session.id }); } else { vscode.window.showErrorMessage(vscode.l10n.t('You have been signed out because reading stored authentication information failed.')); - Logger.error(e); + this._logger.error(e); await this.removeSessionByIToken({ accessToken: undefined, refreshToken: session.refreshToken, account: { - label: session.account.label ?? session.account.displayName!, - id: session.account.id + ...session.account, + type: MicrosoftAccountType.Unknown }, scope: session.scope, sessionId: session.id @@ -154,19 +158,40 @@ export class AzureActiveDirectoryService { const result = await Promise.allSettled(refreshes); for (const res of result) { if (res.status === 'rejected') { - Logger.error(`Failed to initialize stored data: ${res.reason}`); + this._logger.error(`Failed to initialize stored data: ${res.reason}`); this.clearSessions(); + break; } } + + for (const token of this._tokens) { + /* __GDPR__ + "login" : { + "owner": "TylerLeonhardt", + "comment": "Used to determine the usage of the Microsoft Auth Provider.", + "scopes": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight", "comment": "Used to determine what scope combinations are being requested." }, + "accountType": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight", "comment": "Used to determine what account types are being used." } + } + */ + this._telemetryReporter.sendTelemetryEvent('account', { + // Get rid of guids from telemetry. + scopes: JSON.stringify(token.scope.replace(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/i, '{guid}').split(' ')), + accountType: token.account.type + }); + } } //#region session operations + public get onDidChangeSessions(): vscode.Event { + return this._sessionChangeEmitter.event; + } + async getSessions(scopes?: string[]): Promise { if (!scopes) { - Logger.info('Getting sessions for all scopes...'); + this._logger.info('Getting sessions for all scopes...'); const sessions = this._tokens.map(token => this.convertToSessionSync(token)); - Logger.info(`Got ${sessions.length} sessions for all scopes...`); + this._logger.info(`Got ${sessions.length} sessions for all scopes...`); return sessions; } @@ -186,10 +211,10 @@ export class AzureActiveDirectoryService { modifiedScopes = modifiedScopes.sort(); let modifiedScopesStr = modifiedScopes.join(' '); - Logger.info(`Getting sessions for the following scopes: ${modifiedScopesStr}`); + this._logger.info(`Getting sessions for the following scopes: ${modifiedScopesStr}`); if (this._refreshingPromise) { - Logger.info('Refreshing in progress. Waiting for completion before continuing.'); + this._logger.info('Refreshing in progress. Waiting for completion before continuing.'); try { await this._refreshingPromise; } catch (e) { @@ -204,7 +229,7 @@ export class AzureActiveDirectoryService { // without an idtoken. if (!matchingTokens.length) { const fallbackOrderedScopes = scopes.sort().join(' '); - Logger.trace(`No session found with idtoken scopes... Using fallback scope list of: ${fallbackOrderedScopes}`); + this._logger.trace(`No session found with idtoken scopes... Using fallback scope list of: ${fallbackOrderedScopes}`); matchingTokens = this._tokens.filter(token => token.scope === fallbackOrderedScopes); if (matchingTokens.length) { modifiedScopesStr = fallbackOrderedScopes; @@ -237,16 +262,16 @@ export class AzureActiveDirectoryService { const itoken = await this.refreshToken(token.refreshToken, scopeData); matchingTokens.push(itoken); } catch (err) { - Logger.error(`Attempted to get a new session for scopes '${scopeData.scopeStr}' using the existing session with scopes '${token.scope}' but it failed due to: ${err.message ?? err}`); + this._logger.error(`Attempted to get a new session for scopes '${scopeData.scopeStr}' using the existing session with scopes '${token.scope}' but it failed due to: ${err.message ?? err}`); } } } - Logger.info(`Got ${matchingTokens.length} sessions for scopes: ${modifiedScopesStr}`); + this._logger.info(`Got ${matchingTokens.length} sessions for scopes: ${modifiedScopesStr}`); return Promise.all(matchingTokens.map(token => this.convertToSession(token, scopeData))); } - public createSession(scopes: string[]): Promise { + public async createSession(scopes: string[]): Promise { let modifiedScopes = [...scopes]; if (!modifiedScopes.includes('openid')) { modifiedScopes.push('openid'); @@ -271,18 +296,25 @@ export class AzureActiveDirectoryService { tenant: this.getTenantId(scopes), }; - Logger.info(`Logging in for the following scopes: ${scopeData.scopeStr}`); + this._logger.info(`Logging in for the following scopes: ${scopeData.scopeStr}`); const runsRemote = vscode.env.remoteName !== undefined; const runsServerless = vscode.env.remoteName === undefined && vscode.env.uiKind === vscode.UIKind.Web; + + if (runsServerless && this._env.activeDirectoryEndpointUrl !== defaultActiveDirectoryEndpointUrl) { + throw new Error('Sign in to non-public clouds is not supported on the web.'); + } + if (runsRemote || runsServerless) { return this.createSessionWithoutLocalServer(scopeData); } try { - return this.createSessionWithLocalServer(scopeData); + const session = await this.createSessionWithLocalServer(scopeData); + this._sessionChangeEmitter.fire({ added: [session], removed: [], changed: [] }); + return session; } catch (e) { - Logger.error(`Error creating session for scopes: ${scopeData.scopeStr} Error: ${e}`); + this._logger.error(`Error creating session for scopes: ${scopeData.scopeStr} Error: ${e}`); // If the error was about starting the server, try directly hitting the login endpoint instead if (e.message === 'Error listening to server' || e.message === 'Closed' || e.message === 'Timeout waiting for port') { @@ -306,7 +338,7 @@ export class AzureActiveDirectoryService { code_challenge_method: 'S256', code_challenge: codeChallenge, }).toString(); - const loginUrl = `${loginEndpointUrl}${scopeData.tenant}/oauth2/v2.0/authorize?${qs}`; + const loginUrl = new URL(`${scopeData.tenant}/oauth2/v2.0/authorize?${qs}`, this._env.activeDirectoryEndpointUrl).toString(); const server = new LoopbackAuthServer(path.join(__dirname, '../media'), loginUrl); await server.start(); @@ -336,8 +368,8 @@ export class AzureActiveDirectoryService { const state = encodeURIComponent(callbackUri.toString(true)); const codeVerifier = generateCodeVerifier(); const codeChallenge = await generateCodeChallenge(codeVerifier); - const signInUrl = `${loginEndpointUrl}${scopeData.tenant}/oauth2/v2.0/authorize`; - const oauthStartQuery = new URLSearchParams({ + const signInUrl = new URL(`${scopeData.tenant}/oauth2/v2.0/authorize`, this._env.activeDirectoryEndpointUrl); + signInUrl.search = new URLSearchParams({ response_type: 'code', client_id: encodeURIComponent(scopeData.clientId), response_mode: 'query', @@ -347,8 +379,8 @@ export class AzureActiveDirectoryService { prompt: 'select_account', code_challenge_method: 'S256', code_challenge: codeChallenge, - }); - const uri = vscode.Uri.parse(`${signInUrl}?${oauthStartQuery.toString()}`); + }).toString(); + const uri = vscode.Uri.parse(signInUrl.toString()); vscode.env.openExternal(uri); let inputBox: vscode.InputBox | undefined; @@ -386,22 +418,28 @@ export class AzureActiveDirectoryService { }); } - public removeSessionById(sessionId: string, writeToDisk: boolean = true): Promise { - Logger.info(`Logging out of session '${sessionId}'`); + public async removeSessionById(sessionId: string, writeToDisk: boolean = true): Promise { + this._logger.info(`Logging out of session '${sessionId}'`); const tokenIndex = this._tokens.findIndex(token => token.sessionId === sessionId); if (tokenIndex === -1) { - Logger.info(`Session not found '${sessionId}'`); + this._logger.info(`Session not found '${sessionId}'`); return Promise.resolve(undefined); } const token = this._tokens.splice(tokenIndex, 1)[0]; - return this.removeSessionByIToken(token, writeToDisk); + const session = await this.removeSessionByIToken(token, writeToDisk); + + if (session) { + this._sessionChangeEmitter.fire({ added: [], removed: [session], changed: [] }); + } + + return session; } public async clearSessions() { - Logger.info('Logging out of all sessions'); + this._logger.info('Logging out of all sessions'); this._tokens = []; - await this._tokenStorage.deleteAll(); + await this._tokenStorage.deleteAll(item => this.sessionMatchesEndpoint(item)); this._refreshTimeouts.forEach(timeout => { clearTimeout(timeout); @@ -423,9 +461,9 @@ export class AzureActiveDirectoryService { } const session = this.convertToSessionSync(token); - Logger.info(`Sending change event for session that was removed with scopes: ${token.scope}`); - onDidChangeSessions.fire({ added: [], removed: [session], changed: [] }); - Logger.info(`Logged out of session '${token.sessionId}' with scopes: ${token.scope}`); + this._logger.info(`Sending change event for session that was removed with scopes: ${token.scope}`); + this._sessionChangeEmitter.fire({ added: [], removed: [session], changed: [] }); + this._logger.info(`Logged out of session '${token.sessionId}' with scopes: ${token.scope}`); return session; } @@ -438,8 +476,8 @@ export class AzureActiveDirectoryService { this._refreshTimeouts.set(sessionId, setTimeout(async () => { try { const refreshedToken = await this.refreshToken(refreshToken, scopeData, sessionId); - Logger.info('Triggering change session event...'); - onDidChangeSessions.fire({ added: [], removed: [], changed: [this.convertToSessionSync(refreshedToken)] }); + this._logger.info('Triggering change session event...'); + this._sessionChangeEmitter.fire({ added: [], removed: [], changed: [this.convertToSessionSync(refreshedToken)] }); } catch (e) { if (e.message !== REFRESH_NETWORK_FAILURE) { vscode.window.showErrorMessage(vscode.l10n.t('You have been signed out because reading stored authentication information failed.')); @@ -468,7 +506,7 @@ export class AzureActiveDirectoryService { if (json.id_token) { claims = JSON.parse(base64Decode(json.id_token.split('.')[1])); } else { - Logger.info('Attempting to parse access_token instead since no id_token was included in the response.'); + this._logger.info('Attempting to parse access_token instead since no id_token was included in the response.'); claims = JSON.parse(base64Decode(json.access_token.split('.')[1])); } } catch (e) { @@ -493,7 +531,8 @@ export class AzureActiveDirectoryService { sessionId: existingId || `${id}/${randomUUID()}`, account: { label, - id + id, + type: claims.tid === MSA_TID || claims.tid === MSA_PASSTHRU_TID ? MicrosoftAccountType.MSA : MicrosoftAccountType.AAD } }; } @@ -515,8 +554,8 @@ export class AzureActiveDirectoryService { private async convertToSession(token: IToken, scopeData: IScopeData): Promise { if (token.accessToken && (!token.expiresAt || token.expiresAt > Date.now())) { token.expiresAt - ? Logger.info(`Token available from cache (for scopes ${token.scope}), expires in ${token.expiresAt - Date.now()} milliseconds`) - : Logger.info('Token available from cache (for scopes ${token.scope})'); + ? this._logger.info(`Token available from cache (for scopes ${token.scope}), expires in ${token.expiresAt - Date.now()} milliseconds`) + : this._logger.info('Token available from cache (for scopes ${token.scope})'); return { id: token.sessionId, accessToken: token.accessToken, @@ -527,7 +566,7 @@ export class AzureActiveDirectoryService { } try { - Logger.info(`Token expired or unavailable (for scopes ${token.scope}), trying refresh`); + this._logger.info(`Token expired or unavailable (for scopes ${token.scope}), trying refresh`); const refreshedToken = await this.refreshToken(token.refreshToken, scopeData, token.sessionId); if (refreshedToken.accessToken) { return { @@ -561,26 +600,22 @@ export class AzureActiveDirectoryService { } private async doRefreshToken(refreshToken: string, scopeData: IScopeData, sessionId?: string): Promise { - Logger.info(`Refreshing token for scopes: ${scopeData.scopeStr}`); - const postData = querystring.stringify({ + this._logger.info(`Refreshing token for scopes: ${scopeData.scopeStr}`); + const postData = new URLSearchParams({ refresh_token: refreshToken, client_id: scopeData.clientId, grant_type: 'refresh_token', scope: scopeData.scopesToSend - }); - - const proxyEndpoints: { [providerId: string]: string } | undefined = await vscode.commands.executeCommand('workbench.getCodeExchangeProxyEndpoints'); - const endpointUrl = proxyEndpoints?.microsoft || loginEndpointUrl; - const endpoint = `${endpointUrl}${scopeData.tenant}/oauth2/v2.0/token`; + }).toString(); try { - const json = await this.fetchTokenResponse(endpoint, postData, scopeData); + const json = await this.fetchTokenResponse(postData, scopeData); const token = this.convertToTokenSync(json, scopeData, sessionId); if (token.expiresIn) { this.setSessionTimeout(token.sessionId, token.refreshToken, scopeData, token.expiresIn * AzureActiveDirectoryService.REFRESH_TIMEOUT_MODIFIER); } this.setToken(token, scopeData); - Logger.info(`Token refresh success for scopes: ${token.scope}`); + this._logger.info(`Token refresh success for scopes: ${token.scope}`); return token; } catch (e) { if (e.message === REFRESH_NETWORK_FAILURE) { @@ -591,7 +626,7 @@ export class AzureActiveDirectoryService { } throw e; } - Logger.error(`Refreshing token failed (for scopes: ${scopeData.scopeStr}): ${e.message}`); + this._logger.error(`Refreshing token failed (for scopes: ${scopeData.scopeStr}): ${e.message}`); throw e; } } @@ -627,8 +662,9 @@ export class AzureActiveDirectoryService { return new Promise((resolve: (value: vscode.AuthenticationSession) => void, reject) => { uriEventListener = this._uriHandler.event(async (uri: vscode.Uri) => { try { - const query = querystring.parse(uri.query); - let { code, nonce } = query; + const query = new URLSearchParams(uri.query); + let code = query.get('code'); + let nonce = query.get('nonce'); if (Array.isArray(code)) { code = code[0]; } @@ -693,27 +729,23 @@ export class AzureActiveDirectoryService { } private async exchangeCodeForSession(code: string, codeVerifier: string, scopeData: IScopeData): Promise { - Logger.info(`Exchanging login code for token for scopes: ${scopeData.scopeStr}`); + this._logger.info(`Exchanging login code for token for scopes: ${scopeData.scopeStr}`); let token: IToken | undefined; try { - const postData = querystring.stringify({ + const postData = new URLSearchParams({ grant_type: 'authorization_code', code: code, client_id: scopeData.clientId, scope: scopeData.scopesToSend, code_verifier: codeVerifier, redirect_uri: redirectUrl - }); + }).toString(); - const proxyEndpoints: { [providerId: string]: string } | undefined = await vscode.commands.executeCommand('workbench.getCodeExchangeProxyEndpoints'); - const endpointUrl = proxyEndpoints?.microsoft || loginEndpointUrl; - const endpoint = `${endpointUrl}${scopeData.tenant}/oauth2/v2.0/token`; - - const json = await this.fetchTokenResponse(endpoint, postData, scopeData); - Logger.info(`Exchanging login code for token (for scopes: ${scopeData.scopeStr}) succeeded!`); + const json = await this.fetchTokenResponse(postData, scopeData); + this._logger.info(`Exchanging login code for token (for scopes: ${scopeData.scopeStr}) succeeded!`); token = this.convertToTokenSync(json, scopeData); } catch (e) { - Logger.error(`Error exchanging code for token (for scopes ${scopeData.scopeStr}): ${e}`); + this._logger.error(`Error exchanging code for token (for scopes ${scopeData.scopeStr}): ${e}`); throw e; } @@ -721,11 +753,21 @@ export class AzureActiveDirectoryService { this.setSessionTimeout(token.sessionId, token.refreshToken, scopeData, token.expiresIn * AzureActiveDirectoryService.REFRESH_TIMEOUT_MODIFIER); } this.setToken(token, scopeData); - Logger.info(`Login successful for scopes: ${scopeData.scopeStr}`); + this._logger.info(`Login successful for scopes: ${scopeData.scopeStr}`); return await this.convertToSession(token, scopeData); } - private async fetchTokenResponse(endpoint: string, postData: string, scopeData: IScopeData): Promise { + private async fetchTokenResponse(postData: string, scopeData: IScopeData): Promise { + let endpointUrl: string; + if (this._env.activeDirectoryEndpointUrl !== defaultActiveDirectoryEndpointUrl) { + // If this is for sovereign clouds, don't try using the proxy endpoint, which supports only public cloud + endpointUrl = this._env.activeDirectoryEndpointUrl; + } else { + const proxyEndpoints: { [providerId: string]: string } | undefined = await vscode.commands.executeCommand('workbench.getCodeExchangeProxyEndpoints'); + endpointUrl = proxyEndpoints?.microsoft || this._env.activeDirectoryEndpointUrl; + } + const endpoint = new URL(`${scopeData.tenant}/oauth2/v2.0/token`, endpointUrl); + let attempts = 0; while (attempts <= 3) { attempts++; @@ -746,7 +788,7 @@ export class AzureActiveDirectoryService { if (!result || result.status > 499) { if (attempts > 3) { - Logger.error(`Fetching token failed for scopes (${scopeData.scopeStr}): ${result ? await result.text() : errorMessage}`); + this._logger.error(`Fetching token failed for scopes (${scopeData.scopeStr}): ${result ? await result.text() : errorMessage}`); break; } // Exponential backoff @@ -770,7 +812,7 @@ export class AzureActiveDirectoryService { //#region storage operations private setToken(token: IToken, scopeData: IScopeData): void { - Logger.info(`Setting token for scopes: ${scopeData.scopeStr}`); + this._logger.info(`Setting token for scopes: ${scopeData.scopeStr}`); const existingTokenIndex = this._tokens.findIndex(t => t.sessionId === token.sessionId); if (existingTokenIndex > -1) { @@ -812,7 +854,7 @@ export class AzureActiveDirectoryService { }); if (!shouldStore) { - Logger.info(`Not storing token for scopes ${scopeData.scopeStr} because it was added in another window`); + this._logger.info(`Not storing token for scopes ${scopeData.scopeStr} because it was added in another window`); return; } } @@ -821,18 +863,25 @@ export class AzureActiveDirectoryService { id: token.sessionId, refreshToken: token.refreshToken, scope: token.scope, - account: token.account + account: token.account, + endpoint: this._env.activeDirectoryEndpointUrl, }); - Logger.info(`Stored token for scopes: ${scopeData.scopeStr}`); + this._logger.info(`Stored token for scopes: ${scopeData.scopeStr}`); } private async checkForUpdates(e: IDidChangeInOtherWindowEvent): Promise { for (const key of e.added) { const session = await this._tokenStorage.get(key); if (!session) { - Logger.error('session not found that was apparently just added'); + this._logger.error('session not found that was apparently just added'); return; } + + if (!this.sessionMatchesEndpoint(session)) { + // If the session wasn't made for this login endpoint, ignore this update + continue; + } + const matchesExisting = this._tokens.some(token => token.scope === session.scope && token.sessionId === session.id); if (!matchesExisting && session.refreshToken) { try { @@ -845,10 +894,10 @@ export class AzureActiveDirectoryService { clientId: this.getClientId(scopes), tenant: this.getTenantId(scopes), }; - Logger.info(`Session added in another window with scopes: ${session.scope}`); + this._logger.info(`Session added in another window with scopes: ${session.scope}`); const token = await this.refreshToken(session.refreshToken, scopeData, session.id); - Logger.info(`Sending change event for session that was added with scopes: ${scopeData.scopeStr}`); - onDidChangeSessions.fire({ added: [this.convertToSessionSync(token)], removed: [], changed: [] }); + this._logger.info(`Sending change event for session that was added with scopes: ${scopeData.scopeStr}`); + this._sessionChangeEmitter.fire({ added: [this.convertToSessionSync(token)], removed: [], changed: [] }); return; } catch (e) { // Network failures will automatically retry on next poll. @@ -862,7 +911,12 @@ export class AzureActiveDirectoryService { } for (const { value } of e.removed) { - Logger.info(`Session removed in another window with scopes: ${value.scope}`); + if (!this.sessionMatchesEndpoint(value)) { + // If the session wasn't made for this login endpoint, ignore this update + continue; + } + + this._logger.info(`Session removed in another window with scopes: ${value.scope}`); await this.removeSessionById(value.id, false); } @@ -872,25 +926,11 @@ export class AzureActiveDirectoryService { // are already managing (see usages of `setSessionTimeout`). } - //#endregion + private sessionMatchesEndpoint(session: IStoredSession): boolean { + // For older sessions with no endpoint set, it can be assumed to be the default endpoint + session.endpoint ||= defaultActiveDirectoryEndpointUrl; - //#region static methods - - private static getCallbackEnvironment(callbackUri: vscode.Uri): string { - if (callbackUri.scheme !== 'https' && callbackUri.scheme !== 'http') { - return callbackUri.scheme; - } - - switch (callbackUri.authority) { - case 'online.visualstudio.com': - return 'vso'; - case 'online-ppe.core.vsengsaas.visualstudio.com': - return 'vsoppe'; - case 'online.dev.core.vsengsaas.visualstudio.com': - return 'vsodev'; - default: - return callbackUri.authority; - } + return session.endpoint === this._env.activeDirectoryEndpointUrl; } //#endregion diff --git a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.css b/extensions/microsoft-authentication/src/UriEventHandler.ts similarity index 53% rename from src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.css rename to extensions/microsoft-authentication/src/UriEventHandler.ts index 56be1c3b003..3dc753af835 100644 --- a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.css +++ b/extensions/microsoft-authentication/src/UriEventHandler.ts @@ -3,12 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -.monaco-editor .accessibilityHelpWidget { - padding: 10px; - vertical-align: middle; - overflow: scroll; - color: var(--vscode-editorWidget-foreground); - background-color: var(--vscode-editorWidget-background); - box-shadow: 0 2px 8px var(--vscode-widget-shadow); - border: 2px solid var(--vscode-contrastBorder); +import * as vscode from 'vscode'; + +export class UriEventHandler extends vscode.EventEmitter implements vscode.UriHandler { + public handleUri(uri: vscode.Uri) { + this.fire(uri); + } } diff --git a/extensions/microsoft-authentication/src/betterSecretStorage.ts b/extensions/microsoft-authentication/src/betterSecretStorage.ts index 001b12d003d..14c885a7022 100644 --- a/extensions/microsoft-authentication/src/betterSecretStorage.ts +++ b/extensions/microsoft-authentication/src/betterSecretStorage.ts @@ -81,11 +81,13 @@ export class BetterTokenStorage { return tokens.get(key); } - async getAll(): Promise { + async getAll(predicate?: (item: T) => boolean): Promise { const tokens = await this.getTokens(); const values = new Array(); for (const [_, value] of tokens) { - values.push(value); + if (!predicate || predicate(value)) { + values.push(value); + } } return values; } @@ -141,11 +143,13 @@ export class BetterTokenStorage { this._operationInProgress = false; } - async deleteAll(): Promise { + async deleteAll(predicate?: (item: T) => boolean): Promise { const tokens = await this.getTokens(); const promises = []; - for (const [key] of tokens) { - promises.push(this.delete(key)); + for (const [key, value] of tokens) { + if (!predicate || predicate(value)) { + promises.push(this.delete(key)); + } } await Promise.all(promises); } diff --git a/extensions/microsoft-authentication/src/extension.ts b/extensions/microsoft-authentication/src/extension.ts index a775679d6fd..767c0a17963 100644 --- a/extensions/microsoft-authentication/src/extension.ts +++ b/extensions/microsoft-authentication/src/extension.ts @@ -4,18 +4,125 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { AzureActiveDirectoryService, onDidChangeSessions } from './AADHelper'; +import { Environment, EnvironmentParameters } from '@azure/ms-rest-azure-env'; +import { AzureActiveDirectoryService, IStoredSession } from './AADHelper'; +import { BetterTokenStorage } from './betterSecretStorage'; +import { UriEventHandler } from './UriEventHandler'; import TelemetryReporter from '@vscode/extension-telemetry'; +async function initMicrosoftSovereignCloudAuthProvider(context: vscode.ExtensionContext, telemetryReporter: TelemetryReporter, uriHandler: UriEventHandler, tokenStorage: BetterTokenStorage): Promise { + const environment = vscode.workspace.getConfiguration('microsoft-sovereign-cloud').get('environment'); + let authProviderName: string | undefined; + if (!environment) { + return undefined; + } + + if (environment === 'custom') { + const customEnv = vscode.workspace.getConfiguration('microsoft-sovereign-cloud').get('customEnvironment'); + if (!customEnv) { + const res = await vscode.window.showErrorMessage(vscode.l10n.t('You must also specify a custom environment in order to use the custom environment auth provider.'), vscode.l10n.t('Open settings')); + if (res) { + await vscode.commands.executeCommand('workbench.action.openSettingsJson', 'microsoft-sovereign-cloud.customEnvironment'); + } + return undefined; + } + try { + Environment.add(customEnv); + } catch (e) { + const res = await vscode.window.showErrorMessage(vscode.l10n.t('Error validating custom environment setting: {0}', e.message), vscode.l10n.t('Open settings')); + if (res) { + await vscode.commands.executeCommand('workbench.action.openSettings', 'microsoft-sovereign-cloud.customEnvironment'); + } + return undefined; + } + authProviderName = customEnv.name; + } else { + authProviderName = environment; + } + + const env = Environment.get(authProviderName); + if (!env) { + const res = await vscode.window.showErrorMessage(vscode.l10n.t('The environment `{0}` is not a valid environment.', authProviderName), vscode.l10n.t('Open settings')); + return undefined; + } + + const aadService = new AzureActiveDirectoryService( + vscode.window.createOutputChannel(vscode.l10n.t('Microsoft Sovereign Cloud Authentication'), { log: true }), + context, + uriHandler, + tokenStorage, + telemetryReporter, + env); + await aadService.initialize(); + + const disposable = vscode.authentication.registerAuthenticationProvider('microsoft-sovereign-cloud', authProviderName, { + onDidChangeSessions: aadService.onDidChangeSessions, + getSessions: (scopes: string[]) => aadService.getSessions(scopes), + createSession: async (scopes: string[]) => { + try { + /* __GDPR__ + "login" : { + "owner": "TylerLeonhardt", + "comment": "Used to determine the usage of the Microsoft Sovereign Cloud Auth Provider.", + "scopes": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight", "comment": "Used to determine what scope combinations are being requested." } + } + */ + telemetryReporter.sendTelemetryEvent('loginMicrosoftSovereignCloud', { + // Get rid of guids from telemetry. + scopes: JSON.stringify(scopes.map(s => s.replace(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/i, '{guid}'))), + }); + + return await aadService.createSession(scopes.sort()); + } catch (e) { + /* __GDPR__ + "loginFailed" : { "owner": "TylerLeonhardt", "comment": "Used to determine how often users run into issues with the login flow." } + */ + telemetryReporter.sendTelemetryEvent('loginMicrosoftSovereignCloudFailed'); + + throw e; + } + }, + removeSession: async (id: string) => { + try { + /* __GDPR__ + "logout" : { "owner": "TylerLeonhardt", "comment": "Used to determine how often users log out." } + */ + telemetryReporter.sendTelemetryEvent('logoutMicrosoftSovereignCloud'); + + await aadService.removeSessionById(id); + } catch (e) { + /* __GDPR__ + "logoutFailed" : { "owner": "TylerLeonhardt", "comment": "Used to determine how often fail to log out." } + */ + telemetryReporter.sendTelemetryEvent('logoutMicrosoftSovereignCloudFailed'); + } + } + }, { supportsMultipleAccounts: true }); + + context.subscriptions.push(disposable); + return disposable; +} + export async function activate(context: vscode.ExtensionContext) { - const { name, version, aiKey } = context.extension.packageJSON as { name: string; version: string; aiKey: string }; + const aiKey: string = context.extension.packageJSON.aiKey; const telemetryReporter = new TelemetryReporter(aiKey); - const loginService = new AzureActiveDirectoryService(context); + const uriHandler = new UriEventHandler(); + context.subscriptions.push(uriHandler); + context.subscriptions.push(vscode.window.registerUriHandler(uriHandler)); + const betterSecretStorage = new BetterTokenStorage('microsoft.login.keylist', context); + + const loginService = new AzureActiveDirectoryService( + vscode.window.createOutputChannel(vscode.l10n.t('Microsoft Authentication'), { log: true }), + context, + uriHandler, + betterSecretStorage, + telemetryReporter, + Environment.AzureCloud); await loginService.initialize(); context.subscriptions.push(vscode.authentication.registerAuthenticationProvider('microsoft', 'Microsoft', { - onDidChangeSessions: onDidChangeSessions.event, + onDidChangeSessions: loginService.onDidChangeSessions, getSessions: (scopes: string[]) => loginService.getSessions(scopes), createSession: async (scopes: string[]) => { try { @@ -31,9 +138,7 @@ export async function activate(context: vscode.ExtensionContext) { scopes: JSON.stringify(scopes.map(s => s.replace(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/i, '{guid}'))), }); - const session = await loginService.createSession(scopes.sort()); - onDidChangeSessions.fire({ added: [session], removed: [], changed: [] }); - return session; + return await loginService.createSession(scopes.sort()); } catch (e) { /* __GDPR__ "loginFailed" : { "owner": "TylerLeonhardt", "comment": "Used to determine how often users run into issues with the login flow." } @@ -50,10 +155,7 @@ export async function activate(context: vscode.ExtensionContext) { */ telemetryReporter.sendTelemetryEvent('logout'); - const session = await loginService.removeSessionById(id); - if (session) { - onDidChangeSessions.fire({ added: [], removed: [session], changed: [] }); - } + await loginService.removeSessionById(id); } catch (e) { /* __GDPR__ "logoutFailed" : { "owner": "TylerLeonhardt", "comment": "Used to determine how often fail to log out." } @@ -63,6 +165,15 @@ export async function activate(context: vscode.ExtensionContext) { } }, { supportsMultipleAccounts: true })); + let microsoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, telemetryReporter, uriHandler, betterSecretStorage); + + context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(async e => { + if (e.affectsConfiguration('microsoft-sovereign-cloud')) { + microsoftSovereignCloudAuthProviderDisposable?.dispose(); + microsoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, telemetryReporter, uriHandler, betterSecretStorage); + } + })); + return; } diff --git a/extensions/microsoft-authentication/yarn.lock b/extensions/microsoft-authentication/yarn.lock index fbc077f1509..5c62a11cfa4 100644 --- a/extensions/microsoft-authentication/yarn.lock +++ b/extensions/microsoft-authentication/yarn.lock @@ -55,6 +55,11 @@ dependencies: tslib "^2.2.0" +"@azure/ms-rest-azure-env@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@azure/ms-rest-azure-env/-/ms-rest-azure-env-2.0.0.tgz#45809f89763a480924e21d3c620cd40866771625" + integrity sha512-dG76W7ElfLi+fbTjnZVGj+M9e0BIEJmRxU6fHaUQ12bZBe8EJKYb2GV50YWNaP2uJiVQ5+7nXEVj1VN1UQtaEw== + "@microsoft/1ds-core-js@3.2.8", "@microsoft/1ds-core-js@^3.2.8": version "3.2.8" resolved "https://registry.yarnpkg.com/@microsoft/1ds-core-js/-/1ds-core-js-3.2.8.tgz#1b6b7d9bb858238c818ccf4e4b58ece7aeae5760" diff --git a/extensions/notebook-renderers/esbuild.js b/extensions/notebook-renderers/esbuild.js index c374cc5fc1c..55d462f8bc3 100644 --- a/extensions/notebook-renderers/esbuild.js +++ b/extensions/notebook-renderers/esbuild.js @@ -4,41 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check const path = require('path'); -const esbuild = require('esbuild'); - -const args = process.argv.slice(2); - -const isWatch = args.indexOf('--watch') >= 0; - -let outputRoot = __dirname; -const outputRootIndex = args.indexOf('--outputRoot'); -if (outputRootIndex >= 0) { - outputRoot = args[outputRootIndex + 1]; -} const srcDir = path.join(__dirname, 'src'); -const outDir = path.join(outputRoot, 'renderer-out'); +const outDir = path.join(__dirname, 'renderer-out'); -function build() { - return esbuild.build({ - entryPoints: [ - path.join(srcDir, 'index.ts'), - ], - bundle: true, - minify: false, - sourcemap: false, - format: 'esm', - outdir: outDir, - platform: 'browser', - target: ['es2020'], - }); -} - -build().catch(() => process.exit(1)); - -if (isWatch) { - const watcher = require('@parcel/watcher'); - watcher.subscribe(srcDir, () => { - return build(); - }); -} +require('../esbuild-webview-common').run({ + entryPoints: [ + path.join(srcDir, 'index.ts'), + ], + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/notebook-renderers/package.json b/extensions/notebook-renderers/package.json index f78839bbeeb..3f9f3d21e33 100644 --- a/extensions/notebook-renderers/package.json +++ b/extensions/notebook-renderers/package.json @@ -41,14 +41,15 @@ ] }, "scripts": { - "compile": "npm run build-notebook", - "watch": "node ./esbuild --watch", + "compile": "npx gulp compile-extension:notebook-renderers && npm run build-notebook", + "watch": "npx gulp compile-watch:notebook-renderers", "build-notebook": "node ./esbuild" }, - "dependencies": { - }, + "dependencies": {}, "devDependencies": { - "@types/vscode-notebook-renderer": "^1.60.0" + "@types/jsdom": "^21.1.0", + "@types/vscode-notebook-renderer": "^1.60.0", + "jsdom": "^21.1.1" }, "repository": { "type": "git", diff --git a/extensions/notebook-renderers/src/ansi.ts b/extensions/notebook-renderers/src/ansi.ts index 95bd1769dcc..bf3516b0252 100644 --- a/extensions/notebook-renderers/src/ansi.ts +++ b/extensions/notebook-renderers/src/ansi.ts @@ -5,6 +5,7 @@ import { RGBA, Color } from './color'; import { ansiColorIdentifiers } from './colorMap'; +import { ttPolicy } from './htmlHelper'; import { linkify } from './linkify'; @@ -379,11 +380,6 @@ export function handleANSIOutput(text: string, trustHtml: boolean): HTMLSpanElem } } -const ttPolicy = window.trustedTypes?.createPolicy('notebookRenderer', { - createHTML: value => value, - createScript: value => value, -}); - function appendStylizedStringToContainer( root: HTMLElement, stringContent: string, diff --git a/extensions/notebook-renderers/src/htmlHelper.ts b/extensions/notebook-renderers/src/htmlHelper.ts new file mode 100644 index 00000000000..819a3a640af --- /dev/null +++ b/extensions/notebook-renderers/src/htmlHelper.ts @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export const ttPolicy = (typeof window !== 'undefined') ? + window.trustedTypes?.createPolicy('notebookRenderer', { + createHTML: value => value, + createScript: value => value, + }) : undefined; diff --git a/extensions/notebook-renderers/src/index.ts b/extensions/notebook-renderers/src/index.ts index f0f28feb2fb..df674353633 100644 --- a/extensions/notebook-renderers/src/index.ts +++ b/extensions/notebook-renderers/src/index.ts @@ -4,35 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import type { ActivationFunction, OutputItem, RendererContext } from 'vscode-notebook-renderer'; -import { insertOutput } from './textHelper'; - -interface IDisposable { - dispose(): void; -} - -interface HtmlRenderingHook { - /** - * Invoked after the output item has been rendered but before it has been appended to the document. - * - * @return A new `HTMLElement` or `undefined` to continue using the provided element. - */ - postRender(outputItem: OutputItem, element: HTMLElement, signal: AbortSignal): HTMLElement | undefined | Promise; -} - -interface JavaScriptRenderingHook { - /** - * Invoked before the script is evaluated. - * - * @return A new string of JavaScript or `undefined` to continue using the provided string. - */ - preEvaluate(outputItem: OutputItem, element: HTMLElement, script: string, signal: AbortSignal): string | undefined | Promise; -} - -interface RenderOptions { - readonly lineLimit: number; - readonly outputScrolling: boolean; - readonly outputWordWrap: boolean; -} +import { createOutputContent, scrollableClass } from './textHelper'; +import { HtmlRenderingHook, IDisposable, IRichRenderContext, JavaScriptRenderingHook, RenderOptions } from './rendererTypes'; +import { ttPolicy } from './htmlHelper'; function clearContainer(container: HTMLElement) { while (container.firstChild) { @@ -59,6 +33,10 @@ function renderImage(outputInfo: OutputItem, element: HTMLElement): IDisposable const image = document.createElement('img'); image.src = src; + const alt = getAltText(outputInfo); + if (alt) { + image.alt = alt; + } const display = document.createElement('div'); display.classList.add('display'); display.appendChild(image); @@ -67,11 +45,6 @@ function renderImage(outputInfo: OutputItem, element: HTMLElement): IDisposable return disposable; } -const ttPolicy = window.trustedTypes?.createPolicy('notebookRenderer', { - createHTML: value => value, - createScript: value => value, -}); - const preservedScriptAttributes: (keyof HTMLScriptElement)[] = [ 'type', 'src', 'nonce', 'noModule', 'async', ]; @@ -95,12 +68,33 @@ const domEval = (container: Element) => { } }; +function getAltText(outputInfo: OutputItem) { + const metadata = outputInfo.metadata; + if (typeof metadata === 'object' && metadata && 'vscode_altText' in metadata && typeof metadata.vscode_altText === 'string') { + return metadata.vscode_altText; + } + return undefined; +} + +function injectTitleForSvg(outputInfo: OutputItem, element: HTMLElement) { + if (outputInfo.mime.indexOf('svg') > -1) { + const svgElement = element.querySelector('svg'); + const altText = getAltText(outputInfo); + if (svgElement && altText) { + const title = document.createElement('title'); + title.innerText = altText; + svgElement.prepend(title); + } + } +} + async function renderHTML(outputInfo: OutputItem, container: HTMLElement, signal: AbortSignal, hooks: Iterable): Promise { clearContainer(container); let element: HTMLElement = document.createElement('div'); const htmlContent = outputInfo.text(); const trustedHtml = ttPolicy?.createHTML(htmlContent) ?? htmlContent; element.innerHTML = trustedHtml as string; + injectTitleForSvg(outputInfo, element); for (const hook of hooks) { element = (await hook.postRender(outputInfo, element, signal)) ?? element; @@ -134,11 +128,36 @@ async function renderJavascript(outputInfo: OutputItem, container: HTMLElement, domEval(element); } -function renderError(outputInfo: OutputItem, container: HTMLElement, ctx: RendererContext & { readonly settings: RenderOptions }): void { - clearContainer(container); +interface Event { + (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable; +} + +function createDisposableStore(): { push(...disposables: IDisposable[]): void; dispose(): void } { + const localDisposables: IDisposable[] = []; + const disposable = { + push: (...disposables: IDisposable[]) => { + localDisposables.push(...disposables); + }, + dispose: () => { + localDisposables.forEach(d => d.dispose()); + } + }; + + return disposable; +} + +type DisposableStore = ReturnType; + +function renderError( + outputInfo: OutputItem, + outputElement: HTMLElement, + ctx: IRichRenderContext, + trustHTML: boolean +): IDisposable { + const disposableStore = createDisposableStore(); + + clearContainer(outputElement); - const element = document.createElement('div'); - container.appendChild(element); type ErrorLike = Partial; let err: ErrorLike; @@ -146,97 +165,185 @@ function renderError(outputInfo: OutputItem, container: HTMLElement, ctx: Render err = JSON.parse(outputInfo.text()); } catch (e) { console.log(e); - return; + return disposableStore; } if (err.stack) { - const stack = document.createElement('pre'); - stack.classList.add('traceback'); - if (ctx.settings.outputWordWrap) { - stack.classList.add('wordWrap'); - } - stack.style.margin = '8px 0'; - const element = document.createElement('span'); - insertOutput(outputInfo.id, [err.stack ?? ''], ctx.settings.lineLimit, false, element, true); - stack.appendChild(element); - container.appendChild(stack); + outputElement.classList.add('traceback'); + + const outputScrolling = scrollingEnabled(outputInfo, ctx.settings); + const content = createOutputContent(outputInfo.id, [err.stack ?? ''], ctx.settings.lineLimit, outputScrolling, trustHTML); + const contentParent = document.createElement('div'); + contentParent.classList.toggle('word-wrap', ctx.settings.outputWordWrap); + disposableStore.push(ctx.onDidChangeSettings(e => { + contentParent.classList.toggle('word-wrap', e.outputWordWrap); + })); + contentParent.classList.toggle('scrollable', outputScrolling); + + contentParent.appendChild(content); + outputElement.appendChild(contentParent); + initializeScroll(contentParent, disposableStore); } else { const header = document.createElement('div'); const headerMessage = err.name && err.message ? `${err.name}: ${err.message}` : err.name || err.message; if (headerMessage) { header.innerText = headerMessage; - container.appendChild(header); + outputElement.appendChild(header); } } - container.classList.add('error'); + outputElement.classList.add('error'); + return disposableStore; } -function renderStream(outputInfo: OutputItem, container: HTMLElement, error: boolean, ctx: RendererContext & { readonly settings: RenderOptions }): void { - const outputContainer = container.parentElement; - if (!outputContainer) { - // should never happen +function getPreviousMatchingContentGroup(outputElement: HTMLElement) { + const outputContainer = outputElement.parentElement; + let match: HTMLElement | undefined = undefined; + + let previous = outputContainer?.previousSibling; + while (previous) { + const outputElement = (previous.firstChild as HTMLElement | null); + if (!outputElement || !outputElement.classList.contains('output-stream')) { + break; + } + + match = outputElement.firstChild as HTMLElement; + previous = previous?.previousSibling; + } + + return match; +} + +function onScrollHandler(e: globalThis.Event) { + const target = e.target as HTMLElement; + if (target.scrollTop === 0) { + target.classList.remove('more-above'); + } else { + target.classList.add('more-above'); + } +} + +function onKeypressHandler(e: KeyboardEvent) { + if (e.ctrlKey || e.shiftKey) { return; } - - const prev = outputContainer.previousSibling; - if (prev) { - // OutputItem in the same cell - // check if the previous item is a stream - const outputElement = (prev.firstChild as HTMLElement | null); - if (outputElement && outputElement.getAttribute('output-mime-type') === outputInfo.mime) { - // same stream - - // find child with same id - const existing = outputElement.querySelector(`[output-item-id="${outputInfo.id}"]`) as HTMLElement | null; - if (existing) { - clearContainer(existing); - } - - const text = outputInfo.text(); - const element = existing ?? document.createElement('span'); - element.classList.add('output-stream'); - if (ctx.settings.outputWordWrap) { - element.classList.add('wordWrap'); - } else { - element.classList.remove('wordWrap'); - } - element.setAttribute('output-item-id', outputInfo.id); - insertOutput(outputInfo.id, [text], ctx.settings.lineLimit, ctx.settings.outputScrolling, element, false); - outputElement.appendChild(element); - return; - } - } - - const element = document.createElement('span'); - element.classList.add('output-stream'); - if (ctx.settings.outputWordWrap) { - element.classList.add('wordWrap'); - } - element.setAttribute('output-item-id', outputInfo.id); - - const text = outputInfo.text(); - insertOutput(outputInfo.id, [text], ctx.settings.lineLimit, ctx.settings.outputScrolling, element, false); - while (container.firstChild) { - container.removeChild(container.firstChild); - } - container.appendChild(element); - container.setAttribute('output-mime-type', outputInfo.mime); - if (error) { - container.classList.add('error'); + if (e.code === 'ArrowDown' || e.code === 'End' || e.code === 'ArrowUp' || e.code === 'Home') { + // These should change the scroll position, not adjust the selected cell in the notebook + e.stopPropagation(); } } -function renderText(outputInfo: OutputItem, container: HTMLElement, ctx: RendererContext & { readonly settings: RenderOptions }): void { - clearContainer(container); - const contentNode = document.createElement('div'); - contentNode.classList.add('output-plaintext'); - if (ctx.settings.outputWordWrap) { - contentNode.classList.add('wordWrap'); +// if there is a scrollable output, it will be scrolled to the given value if provided or the bottom of the element +function initializeScroll(scrollableElement: HTMLElement, disposables: DisposableStore, scrollTop?: number) { + if (scrollableElement.classList.contains(scrollableClass)) { + const scrollbarVisible = scrollableElement.scrollHeight > scrollableElement.clientHeight; + scrollableElement.classList.toggle('scrollbar-visible', scrollbarVisible); + scrollableElement.scrollTop = scrollTop !== undefined ? scrollTop : scrollableElement.scrollHeight; + if (scrollbarVisible) { + scrollableElement.addEventListener('scroll', onScrollHandler); + disposables.push({ dispose: () => scrollableElement.removeEventListener('scroll', onScrollHandler) }); + scrollableElement.addEventListener('keydown', onKeypressHandler); + disposables.push({ dispose: () => scrollableElement.removeEventListener('keydown', onKeypressHandler) }); + } } +} + +// Find the scrollTop of the existing scrollable output, return undefined if at the bottom or element doesn't exist +function findScrolledHeight(container: HTMLElement): number | undefined { + const scrollableElement = container.querySelector('.' + scrollableClass); + if (scrollableElement && scrollableElement.scrollHeight - scrollableElement.scrollTop - scrollableElement.clientHeight > 2) { + // not scrolled to the bottom + return scrollableElement.scrollTop; + } + return undefined; +} + +function scrollingEnabled(output: OutputItem, options: RenderOptions) { + const metadata = output.metadata; + return (typeof metadata === 'object' && metadata + && 'scrollable' in metadata && typeof metadata.scrollable === 'boolean') ? + metadata.scrollable : options.outputScrolling; +} + +// div.cell_container +// div.output_container +// div.output.output-stream <-- outputElement parameter +// div.scrollable? tabindex="0" <-- contentParent +// div output-item-id="{guid}" <-- content from outputItem parameter +function renderStream(outputInfo: OutputItem, outputElement: HTMLElement, error: boolean, ctx: IRichRenderContext): IDisposable { + const disposableStore = createDisposableStore(); + const outputScrolling = scrollingEnabled(outputInfo, ctx.settings); + + outputElement.classList.add('output-stream'); + const text = outputInfo.text(); - insertOutput(outputInfo.id, [text], ctx.settings.lineLimit, ctx.settings.outputScrolling, contentNode, false); - container.appendChild(contentNode); + const newContent = createOutputContent(outputInfo.id, [text], ctx.settings.lineLimit, outputScrolling, false); + newContent.setAttribute('output-item-id', outputInfo.id); + if (error) { + newContent.classList.add('error'); + } + + const scrollTop = outputScrolling ? findScrolledHeight(outputElement) : undefined; + + const previousOutputParent = getPreviousMatchingContentGroup(outputElement); + // If the previous output item for the same cell was also a stream, append this output to the previous + if (previousOutputParent) { + const existingContent = previousOutputParent.querySelector(`[output-item-id="${outputInfo.id}"]`) as HTMLElement | null; + if (existingContent) { + existingContent.replaceWith(newContent); + + } else { + previousOutputParent.appendChild(newContent); + } + previousOutputParent.classList.toggle('scrollbar-visible', previousOutputParent.scrollHeight > previousOutputParent.clientHeight); + previousOutputParent.scrollTop = scrollTop !== undefined ? scrollTop : previousOutputParent.scrollHeight; + } else { + const existingContent = outputElement.querySelector(`[output-item-id="${outputInfo.id}"]`) as HTMLElement | null; + let contentParent = existingContent?.parentElement; + if (existingContent && contentParent) { + existingContent.replaceWith(newContent); + while (newContent.nextSibling) { + // clear out any stale content if we had previously combined streaming outputs into this one + newContent.nextSibling.remove(); + } + } else { + contentParent = document.createElement('div'); + contentParent.appendChild(newContent); + while (outputElement.firstChild) { + outputElement.removeChild(outputElement.firstChild); + } + outputElement.appendChild(contentParent); + } + + contentParent.classList.toggle('scrollable', outputScrolling); + contentParent.classList.toggle('word-wrap', ctx.settings.outputWordWrap); + disposableStore.push(ctx.onDidChangeSettings(e => { + contentParent!.classList.toggle('word-wrap', e.outputWordWrap); + })); + + initializeScroll(contentParent, disposableStore, scrollTop); + } + + return disposableStore; +} + +function renderText(outputInfo: OutputItem, outputElement: HTMLElement, ctx: IRichRenderContext): IDisposable { + const disposableStore = createDisposableStore(); + clearContainer(outputElement); + + const text = outputInfo.text(); + const outputScrolling = scrollingEnabled(outputInfo, ctx.settings); + const content = createOutputContent(outputInfo.id, [text], ctx.settings.lineLimit, outputScrolling, false); + content.classList.add('output-plaintext'); + if (ctx.settings.outputWordWrap) { + content.classList.add('word-wrap'); + } + + content.classList.toggle('scrollable', outputScrolling); + outputElement.appendChild(content); + initializeScroll(content, disposableStore); + + return disposableStore; } export const activate: ActivationFunction = (ctx) => { @@ -244,10 +351,14 @@ export const activate: ActivationFunction = (ctx) => { const htmlHooks = new Set(); const jsHooks = new Set(); - const latestContext = ctx as (RendererContext & { readonly settings: RenderOptions }); + const latestContext = ctx as (RendererContext & { readonly settings: RenderOptions; readonly onDidChangeSettings: Event }); const style = document.createElement('style'); style.textContent = ` + #container div.output.remove-padding { + padding-left: 0; + padding-right: 0; + } .output-plaintext, .output-stream, .traceback { @@ -265,19 +376,44 @@ export const activate: ActivationFunction = (ctx) => { white-space: pre; } /* When wordwrap turned on, force it to pre-wrap */ - .output-plaintext.wordWrap span, - .output-stream.wordWrap span, - .traceback.wordWrap span { + #container div.output_container .word-wrap span { white-space: pre-wrap; } - .output .scrollable { - overflow-y: scroll; - max-height: var(--notebook-cell-output-max-height); - border: var(--vscode-editorWidget-border); - border-style: solid; - padding-left: 4px; + #container div.output>div { + padding-left: var(--notebook-output-node-left-padding); + padding-right: var(--notebook-output-node-padding); box-sizing: border-box; border-width: 1px; + border-style: solid; + border-color: transparent; + } + #container div.output>div:focus { + outline: 0; + border-color: var(--theme-input-focus-border-color); + } + #container div.output .scrollable { + overflow-y: scroll; + max-height: var(--notebook-cell-output-max-height); + } + #container div.output .scrollable.scrollbar-visible { + border-color: var(--vscode-editorWidget-border); + } + #container div.output .scrollable.scrollbar-visible:focus { + border-color: var(--theme-input-focus-border-color); + } + #container div.truncation-message { + font-style: italic; + font-family: var(--theme-font-family); + padding-top: 4px; + } + #container div.output .scrollable div { + cursor: text; + } + #container div.output .scrollable div a { + cursor: pointer; + } + #container div.output .scrollable.more-above { + box-shadow: var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset } .output-plaintext .code-bold, .output-stream .code-bold, @@ -304,6 +440,7 @@ export const activate: ActivationFunction = (ctx) => { return { renderOutputItem: async (outputInfo, element, signal?: AbortSignal) => { + element.classList.add('remove-padding'); switch (outputInfo.mime) { case 'text/html': case 'image/svg+xml': { @@ -334,30 +471,42 @@ export const activate: ActivationFunction = (ctx) => { break; case 'application/vnd.code.notebook.error': { - renderError(outputInfo, element, latestContext); + disposables.get(outputInfo.id)?.dispose(); + const disposable = renderError(outputInfo, element, latestContext, ctx.workspace.isTrusted); + disposables.set(outputInfo.id, disposable); } break; case 'application/vnd.code.notebook.stdout': case 'application/x.notebook.stdout': case 'application/x.notebook.stream': { - renderStream(outputInfo, element, false, latestContext); + disposables.get(outputInfo.id)?.dispose(); + const disposable = renderStream(outputInfo, element, false, latestContext); + disposables.set(outputInfo.id, disposable); } break; case 'application/vnd.code.notebook.stderr': case 'application/x.notebook.stderr': { - renderStream(outputInfo, element, true, latestContext); + disposables.get(outputInfo.id)?.dispose(); + const disposable = renderStream(outputInfo, element, true, latestContext); + disposables.set(outputInfo.id, disposable); } break; case 'text/plain': { - renderText(outputInfo, element, latestContext); + disposables.get(outputInfo.id)?.dispose(); + const disposable = renderText(outputInfo, element, latestContext); + disposables.set(outputInfo.id, disposable); } break; default: break; } + if (element.querySelector('div')) { + element.querySelector('div')!.tabIndex = 0; + } + }, disposeOutputItem: (id: string | undefined) => { if (id) { diff --git a/extensions/notebook-renderers/src/linkify.ts b/extensions/notebook-renderers/src/linkify.ts index 416527484d9..c466c9e8c65 100644 --- a/extensions/notebook-renderers/src/linkify.ts +++ b/extensions/notebook-renderers/src/linkify.ts @@ -6,12 +6,12 @@ const CONTROL_CODES = '\\u0000-\\u0020\\u007f-\\u009f'; const WEB_LINK_REGEX = new RegExp('(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|data:|www\\.)[^\\s' + CONTROL_CODES + '"]{2,}[^\\s' + CONTROL_CODES + '"\')}\\],:;.!?]', 'ug'); -const WIN_ABSOLUTE_PATH = /(?:[a-zA-Z]:(?:(?:\\|\/)[\w\.-]*)+)/; -const WIN_RELATIVE_PATH = /(?:(?:\~|\.)(?:(?:\\|\/)[\w\.-]*)+)/; +const WIN_ABSOLUTE_PATH = /(?<=^|\s)(?:[a-zA-Z]:(?:(?:\\|\/)[\w\.-]*)+)/; +const WIN_RELATIVE_PATH = /(?<=^|\s)(?:(?:\~|\.)(?:(?:\\|\/)[\w\.-]*)+)/; const WIN_PATH = new RegExp(`(${WIN_ABSOLUTE_PATH.source}|${WIN_RELATIVE_PATH.source})`); -const POSIX_PATH = /((?:\~|\.)?(?:\/[\w\.-]*)+)/; +const POSIX_PATH = /(?<=^|\s)((?:\~|\.)?(?:\/[\w\.-]*)+)/; const LINE_COLUMN = /(?:\:([\d]+))?(?:\:([\d]+))?/; -const isWindows = navigator.userAgent.indexOf('Windows') >= 0; +const isWindows = (typeof navigator !== 'undefined') ? navigator.userAgent && navigator.userAgent.indexOf('Windows') >= 0 : false; const PATH_LINK_REGEX = new RegExp(`${isWindows ? WIN_PATH.source : POSIX_PATH.source}${LINE_COLUMN.source}`, 'g'); const MAX_LENGTH = 2000; diff --git a/extensions/notebook-renderers/src/rendererTypes.ts b/extensions/notebook-renderers/src/rendererTypes.ts new file mode 100644 index 00000000000..9da94aeef5d --- /dev/null +++ b/extensions/notebook-renderers/src/rendererTypes.ts @@ -0,0 +1,37 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { OutputItem, RendererContext } from 'vscode-notebook-renderer'; +import { Event } from 'vscode'; + +export interface IDisposable { + dispose(): void; +} + +export interface HtmlRenderingHook { + /** + * Invoked after the output item has been rendered but before it has been appended to the document. + * + * @return A new `HTMLElement` or `undefined` to continue using the provided element. + */ + postRender(outputItem: OutputItem, element: HTMLElement, signal: AbortSignal): HTMLElement | undefined | Promise; +} + +export interface JavaScriptRenderingHook { + /** + * Invoked before the script is evaluated. + * + * @return A new string of JavaScript or `undefined` to continue using the provided string. + */ + preEvaluate(outputItem: OutputItem, element: HTMLElement, script: string, signal: AbortSignal): string | undefined | Promise; +} + +export interface RenderOptions { + readonly lineLimit: number; + readonly outputScrolling: boolean; + readonly outputWordWrap: boolean; +} + +export type IRichRenderContext = RendererContext & { readonly settings: RenderOptions; readonly onDidChangeSettings: Event }; diff --git a/extensions/notebook-renderers/src/test/index.ts b/extensions/notebook-renderers/src/test/index.ts new file mode 100644 index 00000000000..c7a818354b7 --- /dev/null +++ b/extensions/notebook-renderers/src/test/index.ts @@ -0,0 +1,40 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as path from 'path'; +import * as testRunner from '../../../../test/integration/electron/testrunner'; + +const options: import('mocha').MochaOptions = { + ui: 'tdd', + color: true, + timeout: 60000 +}; + +// These integration tests is being run in multiple environments (electron, web, remote) +// so we need to set the suite name based on the environment as the suite name is used +// for the test results file name +let suite = ''; +if (process.env.VSCODE_BROWSER) { + suite = `${process.env.VSCODE_BROWSER} Browser Integration notebook output renderer Tests`; +} else if (process.env.REMOTE_VSCODE) { + suite = 'Remote Integration notebook output renderer Tests'; +} else { + suite = 'Integration notebook output renderer Tests'; +} + +if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) { + options.reporter = 'mocha-multi-reporters'; + options.reporterOptions = { + reporterEnabled: 'spec, mocha-junit-reporter', + mochaJunitReporterReporterOptions: { + testsuitesTitle: `${suite} ${process.platform}`, + mochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${suite.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) + } + }; +} + +testRunner.configure(options); + +export = testRunner; diff --git a/extensions/notebook-renderers/src/test/notebookRenderer.test.ts b/extensions/notebook-renderers/src/test/notebookRenderer.test.ts new file mode 100644 index 00000000000..e67d1d8ce26 --- /dev/null +++ b/extensions/notebook-renderers/src/test/notebookRenderer.test.ts @@ -0,0 +1,345 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { activate } from '..'; +import { OutputItem, RendererApi } from 'vscode-notebook-renderer'; +import { IDisposable, IRichRenderContext, RenderOptions } from '../rendererTypes'; +import { JSDOM } from "jsdom"; + +const dom = new JSDOM(); +global.document = dom.window.document; + +suite('Notebook builtin output renderer', () => { + + const error = { + name: "NameError", + message: "name 'x' is not defined", + stack: "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m" + + "\n\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)" + + "\nCell \u001b[1;32mIn[3], line 1\u001b[0m" + + "\n\u001b[1;32m----> 1\u001b[0m \u001b[39mprint\u001b[39m(x)" + + "\n\n\u001b[1;31mNameError\u001b[0m: name 'x' is not defined" + }; + + const errorMimeType = 'application/vnd.code.notebook.error'; + + const stdoutMimeType = 'application/vnd.code.notebook.stdout'; + const stderrMimeType = 'application/vnd.code.notebook.stderr'; + + const textLikeMimeTypes = [ + stdoutMimeType, + stderrMimeType, + 'text/plain' + ]; + + type optionalRenderOptions = { [k in keyof RenderOptions]?: RenderOptions[k] }; + + type handler = (e: RenderOptions) => any; + + const settingsChangedHandlers: handler[] = []; + function fireSettingsChange(options: optionalRenderOptions) { + settingsChangedHandlers.forEach((handler) => handler(options as RenderOptions)); + } + + function createContext(settings?: optionalRenderOptions): IRichRenderContext { + settingsChangedHandlers.length = 0; + return { + setState(_value: void) { }, + getState() { return undefined; }, + async getRenderer(_id): Promise { return undefined; }, + settings: { + outputWordWrap: true, + outputScrolling: true, + lineLimit: 30, + ...settings + } as RenderOptions, + onDidChangeSettings(listener: handler, _thisArgs?: any, disposables?: IDisposable[]) { + settingsChangedHandlers.push(listener); + + const dispose = () => { + settingsChangedHandlers.splice(settingsChangedHandlers.indexOf(listener), 1); + }; + + disposables?.push({ dispose }); + return { + dispose + }; + }, + workspace: { + isTrusted: true + } + }; + } + + function createElement(elementType: 'div' | 'span', classes: string[]) { + const el = global.document.createElement(elementType); + classes.forEach((c) => el.classList.add(c)); + return el; + } + + // Helper to generate HTML similar to what is passed to the renderer + //
+ //
+ //
+ class OutputHtml { + private readonly cell = createElement('div', ['cell_container']); + private readonly firstOutput: HTMLElement; + + constructor() { + const outputContainer = createElement('div', ['output_container']); + const outputElement = createElement('div', ['output']); + + this.cell.appendChild(outputContainer); + outputContainer.appendChild(outputElement); + + this.firstOutput = outputElement; + } + + public get cellElement() { + return this.cell; + } + + public getFirstOuputElement() { + return this.firstOutput; + } + + public appendOutputElement() { + const outputElement = createElement('div', ['output']); + const outputContainer = createElement('div', ['output_container']); + this.cell.appendChild(outputContainer); + outputContainer.appendChild(outputElement); + + return outputElement; + } + } + + function createOutputItem(text: string, mime: string, id: string = '123'): OutputItem { + return { + id: id, + mime: mime, + text() { + return text; + }, + blob() { + return [] as any; + }, + json() { + return '{ }'; + }, + data() { + return [] as any; + }, + metadata: {} + }; + } + + textLikeMimeTypes.forEach((mimeType) => { + test(`Render with wordwrap and scrolling for mimetype ${mimeType}`, async () => { + const context = createContext({ outputWordWrap: true, outputScrolling: true }); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputElement = new OutputHtml().getFirstOuputElement(); + const outputItem = createOutputItem('content', mimeType); + await renderer!.renderOutputItem(outputItem, outputElement); + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`); + assert.ok(outputElement.classList.contains('remove-padding'), `Padding should be removed for scrollable outputs ${outputElement.classList}`); + assert.ok(inserted.classList.contains('word-wrap') && inserted.classList.contains('scrollable'), + `output content classList should contain word-wrap and scrollable ${inserted.classList}`); + assert.ok(inserted.innerHTML.indexOf('>content -1, `Content was not added to output element: ${outputElement.innerHTML}`); + }); + + test(`Render without wordwrap or scrolling for mimetype ${mimeType}`, async () => { + const context = createContext({ outputWordWrap: false, outputScrolling: false }); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputElement = new OutputHtml().getFirstOuputElement(); + const outputItem = createOutputItem('content', mimeType); + await renderer!.renderOutputItem(outputItem, outputElement); + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`); + assert.ok(outputElement.classList.contains('remove-padding'), `Padding should be removed for non-scrollable outputs: ${outputElement.classList}`); + assert.ok(!inserted.classList.contains('word-wrap') && !inserted.classList.contains('scrollable'), + `output content classList should not contain word-wrap and scrollable ${inserted.classList}`); + assert.ok(inserted.innerHTML.indexOf('>content -1, `Content was not added to output element: ${outputElement.innerHTML}`); + }); + + test(`Replace content in element for mimetype ${mimeType}`, async () => { + const context = createContext(); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputElement = new OutputHtml().getFirstOuputElement(); + const outputItem = createOutputItem('content', 'text/plain'); + await renderer!.renderOutputItem(outputItem, outputElement); + const outputItem2 = createOutputItem('replaced content', 'text/plain'); + await renderer!.renderOutputItem(outputItem2, outputElement); + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted.innerHTML.indexOf('>contentreplaced content { + const context = createContext({ outputWordWrap: true, outputScrolling: true }); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputElement = new OutputHtml().getFirstOuputElement(); + const outputItem = createOutputItem(JSON.stringify(error), errorMimeType); + await renderer!.renderOutputItem(outputItem, outputElement); + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`); + assert.ok(outputElement.classList.contains('remove-padding'), 'Padding should be removed for scrollable outputs'); + assert.ok(inserted.classList.contains('word-wrap') && inserted.classList.contains('scrollable'), + `output content classList should contain word-wrap and scrollable ${inserted.classList}`); + assert.ok(inserted.innerHTML.indexOf('>: name \'x\' is not defined -1, `Content was not added to output element:\n ${outputElement.innerHTML}`); + }); + + test(`Replace content in element for error output`, async () => { + const context = createContext(); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputElement = new OutputHtml().getFirstOuputElement(); + const outputItem = createOutputItem(JSON.stringify(error), errorMimeType); + await renderer!.renderOutputItem(outputItem, outputElement); + const error2: typeof error = { ...error, message: 'new message', stack: 'replaced content' }; + const outputItem2 = createOutputItem(JSON.stringify(error2), errorMimeType); + await renderer!.renderOutputItem(outputItem2, outputElement); + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted.innerHTML.indexOf('>: name \'x\' is not definedreplaced content { + const context = createContext(); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputHtml = new OutputHtml(); + const outputElement = outputHtml.getFirstOuputElement(); + const outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1'); + const outputItem2 = createOutputItem('second stream content', stdoutMimeType, '2'); + const outputItem3 = createOutputItem('third stream content', stderrMimeType, '3'); + await renderer!.renderOutputItem(outputItem1, outputElement); + await renderer!.renderOutputItem(outputItem2, outputHtml.appendOutputElement()); + await renderer!.renderOutputItem(outputItem3, outputHtml.appendOutputElement()); + + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>first stream content -1, `Content was not added to output element: ${outputElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>second stream content -1, `Content was not added to output element: ${outputElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>third stream content -1, `Content was not added to output element: ${outputElement.innerHTML}`); + }); + + test(`Consolidated streaming outputs should replace matching outputs correctly`, async () => { + const context = createContext({ outputScrolling: false }); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputHtml = new OutputHtml(); + const outputElement = outputHtml.getFirstOuputElement(); + const outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1'); + const outputItem2 = createOutputItem('second stream content', stdoutMimeType, '2'); + await renderer!.renderOutputItem(outputItem1, outputElement); + const secondOutput = outputHtml.appendOutputElement(); + await renderer!.renderOutputItem(outputItem2, secondOutput); + const newOutputItem1 = createOutputItem('replaced content', stdoutMimeType, '2'); + await renderer!.renderOutputItem(newOutputItem1, secondOutput); + + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>first stream content -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>replaced content -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>second stream content { + const context = createContext({ outputScrolling: false }); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputHtml = new OutputHtml(); + const firstOutputElement = outputHtml.getFirstOuputElement(); + const outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1'); + const outputItem2 = createOutputItem(JSON.stringify(error), errorMimeType, '2'); + const outputItem3 = createOutputItem('second stream content', stdoutMimeType, '3'); + await renderer!.renderOutputItem(outputItem1, firstOutputElement); + const secondOutputElement = outputHtml.appendOutputElement(); + await renderer!.renderOutputItem(outputItem2, secondOutputElement); + const thirdOutputElement = outputHtml.appendOutputElement(); + await renderer!.renderOutputItem(outputItem3, thirdOutputElement); + + assert.ok(firstOutputElement.innerHTML.indexOf('>first stream content -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`); + assert.ok(secondOutputElement.innerHTML.indexOf('>NameError -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`); + assert.ok(thirdOutputElement.innerHTML.indexOf('>second stream content -1, `Content was not added to output element: ${outputHtml.cellElement.innerHTML}`); + }); + + test(`Multiple adjacent streaming outputs, rerendering the first should erase the rest`, async () => { + const context = createContext(); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputHtml = new OutputHtml(); + const outputElement = outputHtml.getFirstOuputElement(); + const outputItem1 = createOutputItem('first stream content', stdoutMimeType, '1'); + const outputItem2 = createOutputItem('second stream content', stdoutMimeType, '2'); + const outputItem3 = createOutputItem('third stream content', stderrMimeType, '3'); + await renderer!.renderOutputItem(outputItem1, outputElement); + await renderer!.renderOutputItem(outputItem2, outputHtml.appendOutputElement()); + await renderer!.renderOutputItem(outputItem3, outputHtml.appendOutputElement()); + const newOutputItem1 = createOutputItem('replaced content', stderrMimeType, '1'); + await renderer!.renderOutputItem(newOutputItem1, outputElement); + + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted, `nothing appended to output element: ${outputElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>replaced content -1, `Content was not added to output element: ${outputElement.innerHTML}`); + assert.ok(inserted.innerHTML.indexOf('>first stream contentsecond stream contentthird stream content { + const context = createContext({ outputWordWrap: false, outputScrolling: true }); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputElement = new OutputHtml().getFirstOuputElement(); + const outputItem = createOutputItem('content', stdoutMimeType); + await renderer!.renderOutputItem(outputItem, outputElement); + fireSettingsChange({ outputWordWrap: true, outputScrolling: true }); + + const inserted = outputElement.firstChild as HTMLElement; + assert.ok(inserted.classList.contains('word-wrap') && inserted.classList.contains('scrollable'), + `output content classList should contain word-wrap and scrollable ${inserted.classList}`); + }); + + test(`Settings event change listeners should not grow if output is re-rendered`, async () => { + const context = createContext({ outputWordWrap: false }); + const renderer = await activate(context); + assert.ok(renderer, 'Renderer not created'); + + const outputElement = new OutputHtml().getFirstOuputElement(); + await renderer!.renderOutputItem(createOutputItem('content', stdoutMimeType), outputElement); + const handlerCount = settingsChangedHandlers.length; + await renderer!.renderOutputItem(createOutputItem('content', stdoutMimeType), outputElement); + + assert.equal(settingsChangedHandlers.length, handlerCount); + }); +}); + diff --git a/extensions/notebook-renderers/src/textHelper.ts b/extensions/notebook-renderers/src/textHelper.ts index 560aec613e0..8cc03fd543e 100644 --- a/extensions/notebook-renderers/src/textHelper.ts +++ b/extensions/notebook-renderers/src/textHelper.ts @@ -5,74 +5,108 @@ import { handleANSIOutput } from './ansi'; -function generateViewMoreElement(outputId: string, adjustableSize: boolean) { - const container = document.createElement('span'); - const first = document.createElement('span'); +export const scrollableClass = 'scrollable'; - if (adjustableSize) { - first.textContent = 'Output exceeds the '; - const second = document.createElement('a'); - second.textContent = 'size limit'; - second.href = `command:workbench.action.openSettings?%5B%22notebook.output.textLineLimit%22%5D`; - container.appendChild(first); - container.appendChild(second); - } else { - first.textContent = 'Output exceeds the maximium size limit'; - container.appendChild(first); - } +/** + * Output is Truncated. View as a [scrollable element] or open in a [text editor]. Adjust cell output [settings...] + */ +function generateViewMoreElement(outputId: string) { + + const container = document.createElement('div'); + container.classList.add('truncation-message'); + const first = document.createElement('span'); + first.textContent = 'Output is truncated. View as a '; + container.appendChild(first); + + const viewAsScrollableLink = document.createElement('a'); + viewAsScrollableLink.textContent = 'scrollable element'; + viewAsScrollableLink.href = `command:cellOutput.enableScrolling?${outputId}`; + viewAsScrollableLink.ariaLabel = 'enable scrollable output'; + container.appendChild(viewAsScrollableLink); + + const second = document.createElement('span'); + second.textContent = ' or open in a '; + container.appendChild(second); + + const openInTextEditorLink = document.createElement('a'); + openInTextEditorLink.textContent = 'text editor'; + openInTextEditorLink.href = `command:workbench.action.openLargeOutput?${outputId}`; + openInTextEditorLink.ariaLabel = 'open output in text editor'; + container.appendChild(openInTextEditorLink); const third = document.createElement('span'); - third.textContent = '. Open the full output data '; - const forth = document.createElement('a'); - forth.textContent = 'in a text editor'; - forth.href = `command:workbench.action.openLargeOutput?${outputId}`; + third.textContent = '. Adjust cell output '; container.appendChild(third); - container.appendChild(forth); + + const layoutSettingsLink = document.createElement('a'); + layoutSettingsLink.textContent = 'settings'; + layoutSettingsLink.href = `command:workbench.action.openSettings?%5B%22%40tag%3AnotebookOutputLayout%22%5D`; + layoutSettingsLink.ariaLabel = 'notebook output settings'; + container.appendChild(layoutSettingsLink); + + const fourth = document.createElement('span'); + fourth.textContent = '...'; + container.appendChild(fourth); + return container; } -function truncatedArrayOfString(id: string, buffer: string[], linesLimit: number, container: HTMLElement, trustHtml: boolean) { - const lineCount = buffer.length; - container.appendChild(generateViewMoreElement(id, true)); +function generateNestedViewAllElement(outputId: string) { + const container = document.createElement('div'); - const div = document.createElement('div'); - container.appendChild(div); - div.appendChild(handleANSIOutput(buffer.slice(0, linesLimit - 5).join('\n'), trustHtml)); + const link = document.createElement('a'); + link.textContent = '...'; + link.href = `command:workbench.action.openLargeOutput?${outputId}`; + link.ariaLabel = 'Open full output in text editor'; + link.title = 'Open full output in text editor'; + link.style.setProperty('text-decoration', 'none'); + container.appendChild(link); - // view more ... - const viewMoreSpan = document.createElement('span'); - viewMoreSpan.innerText = '...'; - container.appendChild(viewMoreSpan); - - const div2 = document.createElement('div'); - container.appendChild(div2); - div2.appendChild(handleANSIOutput(buffer.slice(lineCount - 5).join('\n'), trustHtml)); + return container; } -function scrollableArrayOfString(id: string, buffer: string[], container: HTMLElement, trustHtml: boolean) { - const scrollableDiv = document.createElement('div'); - scrollableDiv.classList.add('scrollable'); - - if (buffer.length > 5000) { - container.appendChild(generateViewMoreElement(id, false)); - } - container.appendChild(scrollableDiv); - scrollableDiv.appendChild(handleANSIOutput(buffer.slice(0, 5000).join('\n'), trustHtml)); -} - -export function insertOutput(id: string, outputs: string[], linesLimit: number, scrollable: boolean, container: HTMLElement, trustHtml: boolean) { - const buffer = outputs.join('\n').split(/\r\n|\r|\n/g); +function truncatedArrayOfString(id: string, buffer: string[], linesLimit: number, trustHtml: boolean) { + const container = document.createElement('div'); const lineCount = buffer.length; - if (lineCount < linesLimit) { + if (lineCount <= linesLimit) { const spanElement = handleANSIOutput(buffer.join('\n'), trustHtml); container.appendChild(spanElement); - return; + return container; } + container.appendChild(handleANSIOutput(buffer.slice(0, linesLimit - 5).join('\n'), trustHtml)); + + // truncated piece + const elipses = document.createElement('div'); + elipses.innerText = '...'; + container.appendChild(elipses); + + container.appendChild(handleANSIOutput(buffer.slice(lineCount - 5).join('\n'), trustHtml)); + + container.appendChild(generateViewMoreElement(id)); + + return container; +} + +function scrollableArrayOfString(id: string, buffer: string[], trustHtml: boolean) { + const element = document.createElement('div'); + if (buffer.length > 5000) { + element.appendChild(generateNestedViewAllElement(id)); + } + + element.appendChild(handleANSIOutput(buffer.slice(-5000).join('\n'), trustHtml)); + + return element; +} + +export function createOutputContent(id: string, outputs: string[], linesLimit: number, scrollable: boolean, trustHtml: boolean): HTMLElement { + + const buffer = outputs.join('\n').split(/\r\n|\r|\n/g); + if (scrollable) { - scrollableArrayOfString(id, buffer, container, trustHtml); + return scrollableArrayOfString(id, buffer, trustHtml); } else { - truncatedArrayOfString(id, buffer, linesLimit, container, trustHtml); + return truncatedArrayOfString(id, buffer, linesLimit, trustHtml); } } diff --git a/extensions/notebook-renderers/yarn.lock b/extensions/notebook-renderers/yarn.lock index 06ac4e135c3..ba3ff6b48d9 100644 --- a/extensions/notebook-renderers/yarn.lock +++ b/extensions/notebook-renderers/yarn.lock @@ -2,7 +2,422 @@ # yarn lockfile v1 +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/jsdom@^21.1.0": + version "21.1.0" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.0.tgz#219f15e3370da3f85d18fe02ae86bda7ff66104a" + integrity sha512-leWreJOdnuIxq9Y70tBVm/bvTuh31DSlF/r4l7Cfi4uhVQqLHD0Q4v301GMisEMwwbMgF7ZKxuZ+Jbd4NcdmRw== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + +"@types/node@*": + version "18.15.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" + integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== + +"@types/tough-cookie@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + "@types/vscode-notebook-renderer@^1.60.0": version "1.60.0" resolved "https://registry.yarnpkg.com/@types/vscode-notebook-renderer/-/vscode-notebook-renderer-1.60.0.tgz#8a67d561f48ddf46a95dfa9f712a79c72c7b8f7a" integrity sha512-u7TD2uuEZTVuitx0iijOJdKI0JLiQP6PsSBSRy2XmHXUOXcp5p1S56NrjOEDoF+PIHd3NL3eO6KTRSf5nukDqQ== + +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.1.0, acorn@^8.8.2: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +cssstyle@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== + dependencies: + rrweb-cssom "^0.6.0" + +data-urls@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.0" + +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + +entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +jsdom@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.1.1.tgz#ab796361e3f6c01bcfaeda1fea3c06197ac9d8ae" + integrity sha512-Jjgdmw48RKcdAIQyUD1UdBh2ecH7VqwaXPN3ehoZN6MqgVbMn+lRm1aAT1AsdJRAJpwfa4IpwgzySn61h2qu3w== + dependencies: + abab "^2.0.6" + acorn "^8.8.2" + acorn-globals "^7.0.0" + cssstyle "^3.0.0" + data-urls "^4.0.0" + decimal.js "^10.4.3" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.1" + ws "^8.13.0" + xml-name-validator "^4.0.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nwsapi@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +parse5@^7.0.0, parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +punycode@^2.1.1, punycode@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tough-cookie@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== + dependencies: + punycode "^2.3.0" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^12.0.0, whatwg-url@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== + dependencies: + tr46 "^4.1.1" + webidl-conversions "^7.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== diff --git a/extensions/npm/src/features/date.ts b/extensions/npm/src/features/date.ts new file mode 100644 index 00000000000..e2f3b44f818 --- /dev/null +++ b/extensions/npm/src/features/date.ts @@ -0,0 +1,201 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { l10n } from 'vscode'; + + +const minute = 60; +const hour = minute * 60; +const day = hour * 24; +const week = day * 7; +const month = day * 30; +const year = day * 365; + +/** + * Create a localized of the time between now and the specified date. + * @param date The date to generate the difference from. + * @param appendAgoLabel Whether to append the " ago" to the end. + * @param useFullTimeWords Whether to use full words (eg. seconds) instead of + * shortened (eg. secs). + * @param disallowNow Whether to disallow the string "now" when the difference + * is less than 30 seconds. + */ +export function fromNow(date: number | Date, appendAgoLabel?: boolean, useFullTimeWords?: boolean, disallowNow?: boolean): string { + if (typeof date !== 'number') { + date = date.getTime(); + } + + const seconds = Math.round((new Date().getTime() - date) / 1000); + if (seconds < -30) { + return l10n.t('in {0}', fromNow(new Date().getTime() + seconds * 1000, false)); + } + + if (!disallowNow && seconds < 30) { + return l10n.t('now'); + } + + let value: number; + if (seconds < minute) { + value = seconds; + + if (appendAgoLabel) { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} second ago', value) + : l10n.t('{0} sec ago', value); + } else { + return useFullTimeWords + ? l10n.t('{0} seconds ago', value) + : l10n.t('{0} secs ago', value); + } + } else { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} second', value) + : l10n.t('{0} sec', value); + } else { + return useFullTimeWords + ? l10n.t('{0} seconds', value) + : l10n.t('{0} secs', value); + } + } + } + + if (seconds < hour) { + value = Math.floor(seconds / minute); + if (appendAgoLabel) { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} minute ago', value) + : l10n.t('{0} min ago', value); + } else { + return useFullTimeWords + ? l10n.t('{0} minutes ago', value) + : l10n.t('{0} mins ago', value); + } + } else { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} minute', value) + : l10n.t('{0} min', value); + } else { + return useFullTimeWords + ? l10n.t('{0} minutes', value) + : l10n.t('{0} mins', value); + } + } + } + + if (seconds < day) { + value = Math.floor(seconds / hour); + if (appendAgoLabel) { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} hour ago', value) + : l10n.t('{0} hr ago', value); + } else { + return useFullTimeWords + ? l10n.t('{0} hours ago', value) + : l10n.t('{0} hrs ago', value); + } + } else { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} hour', value) + : l10n.t('{0} hr', value); + } else { + return useFullTimeWords + ? l10n.t('{0} hours', value) + : l10n.t('{0} hrs', value); + } + } + } + + if (seconds < week) { + value = Math.floor(seconds / day); + if (appendAgoLabel) { + return value === 1 + ? l10n.t('{0} day ago', value) + : l10n.t('{0} days ago', value); + } else { + return value === 1 + ? l10n.t('{0} day', value) + : l10n.t('{0} days', value); + } + } + + if (seconds < month) { + value = Math.floor(seconds / week); + if (appendAgoLabel) { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} week ago', value) + : l10n.t('{0} wk ago', value); + } else { + return useFullTimeWords + ? l10n.t('{0} weeks ago', value) + : l10n.t('{0} wks ago', value); + } + } else { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} week', value) + : l10n.t('{0} wk', value); + } else { + return useFullTimeWords + ? l10n.t('{0} weeks', value) + : l10n.t('{0} wks', value); + } + } + } + + if (seconds < year) { + value = Math.floor(seconds / month); + if (appendAgoLabel) { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} month ago', value) + : l10n.t('{0} mo ago', value); + } else { + return useFullTimeWords + ? l10n.t('{0} months ago', value) + : l10n.t('{0} mos ago', value); + } + } else { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} month', value) + : l10n.t('{0} mo', value); + } else { + return useFullTimeWords + ? l10n.t('{0} months', value) + : l10n.t('{0} mos', value); + } + } + } + + value = Math.floor(seconds / year); + if (appendAgoLabel) { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} year ago', value) + : l10n.t('{0} yr ago', value); + } else { + return useFullTimeWords + ? l10n.t('{0} years ago', value) + : l10n.t('{0} yrs ago', value); + } + } else { + if (value === 1) { + return useFullTimeWords + ? l10n.t('{0} year', value) + : l10n.t('{0} yr', value); + } else { + return useFullTimeWords + ? l10n.t('{0} years', value) + : l10n.t('{0} yrs', value); + } + } +} diff --git a/extensions/npm/src/features/packageJSONContribution.ts b/extensions/npm/src/features/packageJSONContribution.ts index 7368f8cbf86..5a9250d97de 100644 --- a/extensions/npm/src/features/packageJSONContribution.ts +++ b/extensions/npm/src/features/packageJSONContribution.ts @@ -10,6 +10,7 @@ import { Location } from 'jsonc-parser'; import * as cp from 'child_process'; import { dirname } from 'path'; +import { fromNow } from './date'; const LIMIT = 40; @@ -215,14 +216,14 @@ export class PackageJSONContribution implements IJSONContribution { return null; } - private getDocumentation(description: string | undefined, version: string | undefined, homepage: string | undefined): MarkdownString { + private getDocumentation(description: string | undefined, version: string | undefined, time: string | undefined, homepage: string | undefined): MarkdownString { const str = new MarkdownString(); if (description) { str.appendText(description); } if (version) { str.appendText('\n\n'); - str.appendText(l10n.t("Latest version: {0}", version)); + str.appendText(time ? l10n.t("Latest version: {0} published {1}", version, fromNow(Date.parse(time), true, true)) : l10n.t("Latest version: {0}", version)); } if (homepage) { str.appendText('\n\n'); @@ -241,7 +242,7 @@ export class PackageJSONContribution implements IJSONContribution { return this.fetchPackageInfo(name, resource).then(info => { if (info) { - item.documentation = this.getDocumentation(info.description, info.version, info.homepage); + item.documentation = this.getDocumentation(info.description, info.version, info.time, info.homepage); return item; } return null; @@ -283,15 +284,17 @@ export class PackageJSONContribution implements IJSONContribution { private npmView(npmCommandPath: string, pack: string, resource: Uri | undefined): Promise { return new Promise((resolve, _reject) => { - const args = ['view', '--json', pack, 'description', 'dist-tags.latest', 'homepage', 'version']; + const args = ['view', '--json', pack, 'description', 'dist-tags.latest', 'homepage', 'version', 'time']; const cwd = resource && resource.scheme === 'file' ? dirname(resource.fsPath) : undefined; cp.execFile(npmCommandPath, args, { cwd }, (error, stdout) => { if (!error) { try { const content = JSON.parse(stdout); + const version = content['dist-tags.latest'] || content['version']; resolve({ description: content['description'], - version: content['dist-tags.latest'] || content['version'], + version, + time: content.time?.[version], homepage: content['homepage'] }); return; @@ -316,6 +319,7 @@ export class PackageJSONContribution implements IJSONContribution { return { description: obj.description || '', version, + time: obj.time?.[version], homepage: obj.homepage || '' }; } @@ -334,7 +338,7 @@ export class PackageJSONContribution implements IJSONContribution { if (typeof pack === 'string') { return this.fetchPackageInfo(pack, resource).then(info => { if (info) { - return [this.getDocumentation(info.description, info.version, info.homepage)]; + return [this.getDocumentation(info.description, info.version, info.time, info.homepage)]; } return null; }); @@ -363,7 +367,7 @@ export class PackageJSONContribution implements IJSONContribution { proposal.kind = CompletionItemKind.Property; proposal.insertText = insertText; proposal.filterText = JSON.stringify(name); - proposal.documentation = this.getDocumentation(pack.description, pack.version, pack?.links?.homepage); + proposal.documentation = this.getDocumentation(pack.description, pack.version, undefined, pack?.links?.homepage); collector.add(proposal); } } @@ -379,5 +383,6 @@ interface SearchPackageInfo { interface ViewPackageInfo { description: string; version?: string; + time?: string; homepage?: string; } diff --git a/extensions/npm/src/preferred-pm.ts b/extensions/npm/src/preferred-pm.ts index f69933d10f1..92fcdfc8033 100644 --- a/extensions/npm/src/preferred-pm.ts +++ b/extensions/npm/src/preferred-pm.ts @@ -66,18 +66,18 @@ export async function findPreferredPM(pkgPath: string): Promise<{ name: string; detectedPackageManagerProperties.push(npmPreferred); } - const yarnPreferred = await isYarnPreferred(pkgPath); - if (yarnPreferred.isPreferred) { - detectedPackageManagerNames.push('yarn'); - detectedPackageManagerProperties.push(yarnPreferred); - } - const pnpmPreferred = await isPNPMPreferred(pkgPath); if (pnpmPreferred.isPreferred) { detectedPackageManagerNames.push('pnpm'); detectedPackageManagerProperties.push(pnpmPreferred); } + const yarnPreferred = await isYarnPreferred(pkgPath); + if (yarnPreferred.isPreferred) { + detectedPackageManagerNames.push('yarn'); + detectedPackageManagerProperties.push(yarnPreferred); + } + const pmUsedForInstallation: { name: string } | null = await whichPM(pkgPath); if (pmUsedForInstallation && !detectedPackageManagerNames.includes(pmUsedForInstallation.name)) { diff --git a/extensions/npm/src/tasks.ts b/extensions/npm/src/tasks.ts index 7bd6b1a2b14..17bb815f962 100644 --- a/extensions/npm/src/tasks.ts +++ b/extensions/npm/src/tasks.ts @@ -140,7 +140,7 @@ export async function getPackageManager(extensionContext: ExtensionContext, fold window.showInformationMessage(multiplePMWarning, learnMore, neverShowAgain).then(result => { switch (result) { case neverShowAgain: extensionContext.globalState.update(neverShowWarning, true); break; - case learnMore: env.openExternal(Uri.parse('https://nodejs.dev/learn/the-package-lock-json-file')); + case learnMore: env.openExternal(Uri.parse('https://docs.npmjs.com/cli/v9/configuring-npm/package-lock-json')); } }); } diff --git a/extensions/package.json b/extensions/package.json index f503aac6659..8ab93875293 100644 --- a/extensions/package.json +++ b/extensions/package.json @@ -4,14 +4,14 @@ "license": "MIT", "description": "Dependencies shared by all extensions", "dependencies": { - "typescript": "^5.0.0-dev.20230224" + "typescript": "5.1.3" }, "scripts": { "postinstall": "node ./postinstall.mjs" }, "devDependencies": { "@parcel/watcher": "2.1.0", - "esbuild": "^0.15.14", + "esbuild": "0.17.14", "vscode-grammar-updater": "^1.1.0" } } diff --git a/extensions/perl/package.json b/extensions/perl/package.json index e195e517e50..3357e1ff3bd 100644 --- a/extensions/perl/package.json +++ b/extensions/perl/package.json @@ -9,7 +9,7 @@ "vscode": "*" }, "scripts": { - "update-grammar": "node ../node_modules/vscode-grammar-updater/bin textmate/perl.tmbundle Syntaxes/Perl.plist ./syntaxes/perl.tmLanguage.json Syntaxes/Perl%206.tmLanguage ./syntaxes/perl6.tmLanguage.json" + "update-grammar": "node ../node_modules/vscode-grammar-updater/bin textmate/perl.tmbundle Syntaxes/Perl.plist ./syntaxes/perl.tmLanguage.json Syntaxes/Perl%%206.tmLanguage ./syntaxes/perl6.tmLanguage.json" }, "contributes": { "languages": [ @@ -50,7 +50,10 @@ { "language": "perl", "scopeName": "source.perl", - "path": "./syntaxes/perl.tmLanguage.json" + "path": "./syntaxes/perl.tmLanguage.json", + "unbalancedBracketScopes": [ + "variable.other.predefined.perl" + ] }, { "language": "perl6", diff --git a/extensions/php/build/update-grammar.mjs b/extensions/php/build/update-grammar.mjs index 5fa17f218af..2a7ad082549 100644 --- a/extensions/php/build/update-grammar.mjs +++ b/extensions/php/build/update-grammar.mjs @@ -68,8 +68,8 @@ function fixBadRegex(grammar) { } } -vscodeGrammarUpdater.update('atom/language-php', 'grammars/php.cson', './syntaxes/php.tmLanguage.json', fixBadRegex); -vscodeGrammarUpdater.update('atom/language-php', 'grammars/html.cson', './syntaxes/html.tmLanguage.json', grammar => { +vscodeGrammarUpdater.update('KapitanOczywisty/language-php', 'grammars/php.cson', './syntaxes/php.tmLanguage.json', fixBadRegex); +vscodeGrammarUpdater.update('KapitanOczywisty/language-php', 'grammars/html.cson', './syntaxes/html.tmLanguage.json', grammar => { adaptInjectionScope(grammar); includeDerivativeHtml(grammar); }); diff --git a/extensions/php/cgmanifest.json b/extensions/php/cgmanifest.json index 4fe8f5ebcb5..02faac2b0c0 100644 --- a/extensions/php/cgmanifest.json +++ b/extensions/php/cgmanifest.json @@ -5,12 +5,12 @@ "type": "git", "git": { "name": "language-php", - "repositoryUrl": "https://github.com/atom/language-php", - "commitHash": "eb28b8aea1214dcbc732f3d9b9ed20c089c648bd" + "repositoryUrl": "https://github.com/KapitanOczywisty/language-php", + "commitHash": "5e8f000cb5a20f44f7a7a89d07ad0774031c53f3" } }, "license": "MIT", - "version": "0.48.1" + "version": "0.49.0" } ], "version": 1 diff --git a/extensions/php/snippets/php.code-snippets b/extensions/php/snippets/php.code-snippets index 3c213765b4b..5cc31f19661 100644 --- a/extensions/php/snippets/php.code-snippets +++ b/extensions/php/snippets/php.code-snippets @@ -1,8 +1,66 @@ { + "$… = ( … ) ? … : …": { + "prefix": "if?", + "body": "$${1:retVal} = (${2:condition}) ? ${3:a} : ${4:b} ;", + "description": "Ternary conditional assignment" + }, + "$… = array (…)": { + "prefix": "array", + "body": "$${1:arrayName} = array($0);", + "description": "Array initializer" + }, + "$… = […]": { + "prefix": "shorray", + "body": "$${1:arrayName} = [$0];", + "description": "Array initializer" + }, + "… => …": { + "prefix": "keyval,kvp", + "body": "'$1' => $2$0", + "description": "Key-Value pair" + }, + "$a <=> $b": { + "prefix": "spaceship", + "body": "(${1:$$a} <=> ${2:$$b} === ${3|0,1,-1|})", + "description": "Spaceship equality check" + }, + "attribute": { + "prefix": "attr", + "body": [ + "#[\\\\Attribute]", + "class ${1:My}Attribute${2: extends ${3:MyOther}Attribute} {", + "\t$0", + "}" + ], + "description": "Attribute" + }, + "attribute target": { + "prefix": "attr_target", + "body": "\\Attribute::${1|TARGET_ALL,TARGET_CLASS,TARGET_FUNCTION,TARGET_METHOD,TARGET_PROPERTY,TARGET_CLASS_CONSTANT,TARGET_PARAMETER,IS_REPEATABLE|}$0" + }, + "attribute with target": { + "prefix": "attr_with_target", + "body": [ + "#[\\\\Attribute(\\Attribute::${1|TARGET_ALL,TARGET_CLASS,TARGET_FUNCTION,TARGET_METHOD,TARGET_PROPERTY,TARGET_CLASS_CONSTANT,TARGET_PARAMETER,IS_REPEATABLE|}$2)]", + "class ${3:My}Attribute${4: extends ${5:MyOther}Attribute} {", + "\t$0", + "}" + ], + "description": "Attribute - Chain targets with attr_target snippet" + }, + "case …": { + "prefix": "case", + "body": [ + "case '${1:value}':", + "\t${0:# code...}", + "\tbreak;" + ], + "description": "Case Block" + }, "class …": { "prefix": "class", "body": [ - "class ${1:ClassName} ${2:extends ${3:AnotherClass}} ${4:implements ${5:Interface}}", + "${1:${2|final ,readonly |}}class ${3:${TM_FILENAME_BASE}}${4: extends ${5:AnotherClass}} ${6:implements ${7:Interface}}", "{", "\t$0", "}", @@ -10,87 +68,36 @@ ], "description": "Class definition" }, - "PHPDoc class …": { - "prefix": "doc_class", - "isFileTemplate": true, + "class __construct": { + "prefix": "construct", "body": [ - "/**", - " * ${6:undocumented class}", - " */", - "class ${1:ClassName} ${2:extends ${3:AnotherClass}} ${4:implements ${5:Interface}}", - "{", - "\t$0", - "}", - "" - ], - "description": "Documented Class Declaration" - }, - "function __construct": { - "prefix": "con", - "body": [ - "${1:public} function __construct(${2:${3:Type} $${4:var}${5: = ${6:null}}}) {", - "\t\\$this->${4:var} = $${4:var};$0", - "}" + "${1|public,private,protected|} function __construct(${2:${3:Type} $${4:var}${5: = ${6:null}}}$7) {", + "\t\\$this->${4:var} = $${4:var};$0", + "}" ] }, - "PHPDoc property": { - "prefix": "doc_v", + "class function …": { + "prefix": "class_fun", "body": [ - "/** @var ${1:Type} $${2:var} ${3:description} */", - "${4:protected} $${2:var}${5: = ${6:null}};$0" - ], - "description": "Documented Class Variable" - }, - "PHPDoc function …": { - "prefix": "doc_f", - "isFileTemplate": true, - "body": [ - "/**", - " * ${1:undocumented function summary}", - " *", - " * ${2:Undocumented function long description}", - " *", - "${3: * @param ${4:Type} $${5:var} ${6:Description}}", - "${7: * @return ${8:type}}", - "${9: * @throws ${10:conditon}}", - " **/", - "${11:public }function ${12:FunctionName}(${13:${14:${4:Type} }$${5:var}${15: = ${16:null}}})", + "${1|public ,private ,protected |}${2: static }function ${3:FunctionName}(${4:${5:${6:Type} }$${7:var}${8: = ${9:null}}}$10) : ${11:Returntype}", "{", "\t${0:# code...}", "}" ], - "description": "Documented function" + "description": "Function for classes, traits and enums" }, - "PHPDoc param …": { - "prefix": "param", - "body": [ - "* @param ${1:Type} ${2:var} ${3:Description}$0" - ], - "description": "Parameter documentation" + "const": { + "prefix": "const", + "body": "${1|public ,private ,protected |}const ${2:NAME} = $3;", + "description": "Constant for classes, traits, enums" }, - "function …": { - "prefix": "fun", + "enum": { + "prefix": "enum", "body": [ - "${1:public }function ${2:FunctionName}(${3:${4:${5:Type} }$${6:var}${7: = ${8:null}}})", - "{", - "\t${0:# code...}", + "enum $1 {", + "\tcase $2;$0", "}" - ], - "description": "Function" - }, - "trait …": { - "prefix": "trait", - "body": [ - "/**", - " * $1", - " */", - "trait ${2:TraitName}", - "{", - "\t$0", - "}", - "" - ], - "description": "Trait" + ] }, "define(…, …)": { "prefix": "def", @@ -108,41 +115,6 @@ "} while (${1:$${2:a} <= ${3:10}});" ], "description": "Do-While loop" - }, - "while …": { - "prefix": "while", - "body": [ - "while (${1:$${2:a} <= ${3:10}}) {", - "\t${0:# code...}", - "}" - ], - "description": "While-loop" - }, - "if …": { - "prefix": "if", - "body": [ - "if (${1:condition}) {", - "\t${0:# code...}", - "}" - ], - "description": "If block" - }, - "if … else …": { - "prefix": "ifelse", - "body": [ - "if (${1:condition}) {", - "\t${2:# code...}", - "} else {", - "\t${3:# code...}", - "}", - "$0" - ], - "description": "If Else block" - }, - "$… = ( … ) ? … : …": { - "prefix": "if?", - "body": "$${1:retVal} = (${2:condition}) ? ${3:a} : ${4:b} ;", - "description": "Ternary conditional assignment" }, "else …": { "prefix": "else", @@ -174,26 +146,146 @@ "foreach …": { "prefix": "foreach", "body": [ - "foreach ($${1:variable} as $${2:key} ${3:=> $${4:value}}) {", + "foreach ($${1:variable} as $${2:key}${3: => $${4:value}}) {", "\t${0:# code...}", "}" ], "description": "Foreach loop" }, - "$… = array (…)": { - "prefix": "array", - "body": "$${1:arrayName} = array('$2' => $3${4:,} $0);", - "description": "Array initializer" + "function": { + "prefix": "fun", + "body": [ + "function ${1:FunctionName}($2)${3: : ${4:Returntype}} {", + "\t$0", + "}" + ], + "description": "Function - use param snippet for parameters" }, - "$… = […]": { - "prefix": "shorray", - "body": "$${1:arrayName} = ['$2' => $3${4:,} $0];", - "description": "Array initializer" + "anonymous function": { + "prefix": "fun_anonymous", + "body": [ + "function ($1)${2: use ($${3:var})} {", + "\t$0", + "}" + ], + "description": "Anonymous Function" }, - "… => …": { - "prefix": "keyval", - "body": "'$1' => $2${3:,} $0", - "description": "Key-Value initializer" + "if …": { + "prefix": "if", + "body": [ + "if (${1:condition}) {", + "\t${0:# code...}", + "}" + ], + "description": "If block" + }, + "if … else …": { + "prefix": "ifelse", + "body": [ + "if (${1:condition}) {", + "\t${2:# code...}", + "} else {", + "\t${3:# code...}", + "}", + "$0" + ], + "description": "If Else block" + }, + "match": { + "prefix": "match", + "body": [ + "match (${1:expression}) {", + "\t$2 => $3,", + "\t$4 => $5,$0", + "}" + ], + "description": "Match expression; like switch with identity checks. Use keyval snippet to chain expressions" + }, + "param": { + "prefix": "param", + "body": "${1:Type} $${2:var}${3: = ${4:null}}$5", + "description": "Parameter definition" + }, + "property": { + "prefix": "property", + "body": "${1|public ,private ,protected |}${2|static ,readonly |}${3:Type} $${4:var}${5: = ${6:null}};$0", + "description": "Property" + }, + "PHPDoc class …": { + "prefix": "doc_class", + "body": [ + "/**", + " * ${8:undocumented class}", + " */", + "${1:${2|final ,readonly |}}class ${3:${TM_FILENAME_BASE}}${4: extends ${5:AnotherClass}} ${6:implements ${7:Interface}}", + "{", + "\t$0", + "}", + "" + ], + "description": "Documented Class Declaration" + }, + "PHPDoc function …": { + "prefix": "doc_fun", + "body": [ + "/**", + " * ${1:undocumented function summary}", + " *", + " * ${2:Undocumented function long description}", + " *", + "${3: * @param ${4:Type} $${5:var} ${6:Description}}", + "${7: * @return ${8:type}}", + "${9: * @throws ${10:conditon}}", + " **/", + "${11:public }function ${12:FunctionName}(${13:${14:${4:Type} }$${5:var}${15: = ${16:null}}}17)", + "{", + "\t${0:# code...}", + "}" + ], + "description": "Documented function" + }, + "PHPDoc param …": { + "prefix": "doc_param", + "body": [ + "* @param ${1:Type} ${2:var} ${3:Description}$0" + ], + "description": "Paramater documentation" + }, + "PHPDoc trait": { + "prefix": "doc_trait", + "body": [ + "/**", + " * $1", + " */", + "trait ${2:TraitName}", + "{", + "\t$0", + "}", + "" + ], + "description": "Trait" + }, + "PHPDoc var": { + "prefix": "doc_var", + "body": [ + "/** @var ${1:Type} $${2:var} ${3:description} */", + "${4:protected} $${2:var}${5: = ${6:null}};$0" + ], + "description": "Documented Class Variable" + }, + "Region End": { + "prefix": "#endregion", + "body": [ + "#endregion" + ], + "description": "Folding Region End" + }, + "Region Start": { + "prefix": "#region", + "body": [ + "#region" + ], + "description": "Folding Region Start" }, "switch …": { "prefix": "switch", @@ -210,25 +302,11 @@ ], "description": "Switch block" }, - "case …": { - "prefix": "case", - "body": [ - "case '${1:value}':", - "\t${0:# code...}", - "\tbreak;" - ], - "description": "Case Block" - }, "$this->…": { "prefix": "this", "body": "\\$this->$0;", "description": "$this->..." }, - "echo $this->…": { - "prefix": "ethis", - "body": "echo \\$this->$0;", - "description": "Echo this" - }, "Throw Exception": { "prefix": "throw", "body": [ @@ -237,19 +315,16 @@ ], "description": "Throw exception" }, - "Region Start": { - "prefix": "#region", + "trait …": { + "prefix": "trait", "body": [ - "#region" + "trait ${1:TraitName}", + "{", + "\t$0", + "}", + "" ], - "description": "Folding Region Start" - }, - "Region End": { - "prefix": "#endregion", - "body": [ - "#endregion" - ], - "description": "Folding Region End" + "description": "Trait" }, "Try Catch Block": { "prefix": "try", @@ -261,5 +336,36 @@ "}" ], "description": "Try catch block" + }, + "use function": { + "prefix": "use_fun", + "body": "use function $1;" + }, + "use const": { + "prefix": "use_const", + "body": "use const $1;" + }, + "use grouping": { + "prefix": "use_group", + "body": [ + "use${1| const , function |}$2\\{", + "\t$0,", + "}" + ], + "description": "Use grouping imports" + }, + "use as ": { + "prefix": "use_as", + "body": "use${1| const , function |}$2 as $3;", + "description": "Use as alias" + }, + "while …": { + "prefix": "while", + "body": [ + "while (${1:$${2:a} <= ${3:10}}) {", + "\t${0:# code...}", + "}" + ], + "description": "While-loop" } } diff --git a/extensions/php/syntaxes/html.tmLanguage.json b/extensions/php/syntaxes/html.tmLanguage.json index 4959a223a18..86defb99262 100644 --- a/extensions/php/syntaxes/html.tmLanguage.json +++ b/extensions/php/syntaxes/html.tmLanguage.json @@ -1,10 +1,10 @@ { "information_for_contributors": [ - "This file has been converted from https://github.com/atom/language-php/blob/master/grammars/html.cson", + "This file has been converted from https://github.com/KapitanOczywisty/language-php/blob/master/grammars/html.cson", "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-php/commit/ff64523c94c014d68f5dec189b05557649c5872a", + "version": "https://github.com/KapitanOczywisty/language-php/commit/ff64523c94c014d68f5dec189b05557649c5872a", "name": "PHP", "scopeName": "text.html.php", "injections": { diff --git a/extensions/php/syntaxes/php.tmLanguage.json b/extensions/php/syntaxes/php.tmLanguage.json index 542b02023a7..96821c6770c 100644 --- a/extensions/php/syntaxes/php.tmLanguage.json +++ b/extensions/php/syntaxes/php.tmLanguage.json @@ -1,10 +1,10 @@ { "information_for_contributors": [ - "This file has been converted from https://github.com/atom/language-php/blob/master/grammars/php.cson", + "This file has been converted from https://github.com/KapitanOczywisty/language-php/blob/master/grammars/php.cson", "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-php/commit/eb28b8aea1214dcbc732f3d9b9ed20c089c648bd", + "version": "https://github.com/KapitanOczywisty/language-php/commit/5e8f000cb5a20f44f7a7a89d07ad0774031c53f3", "scopeName": "source.php", "patterns": [ { @@ -320,10 +320,19 @@ ] }, { - "begin": "(?ix)\n(?:\n \\b(?:(abstract|final)\\s+)?(class)\\s+([a-z_\\x{7f}-\\x{10ffff}][a-z0-9_\\x{7f}-\\x{10ffff}]*)\n |\\b(new)\\b\\s*(\\#\\[.*\\])?\\s*\\b(class)\\b # anonymous class\n)", + "begin": "(?ix)\n(?:\n \\b((?:(?:final|abstract|readonly)\\s+)*)(class)\\s+([a-z_\\x{7f}-\\x{10ffff}][a-z0-9_\\x{7f}-\\x{10ffff}]*)\n |\\b(new)\\b\\s*(\\#\\[.*\\])?\\s*(?:(readonly)\\s+)?\\b(class)\\b # anonymous class\n)", "beginCaptures": { "1": { - "name": "storage.modifier.${1:/downcase}.php" + "patterns": [ + { + "match": "final|abstract", + "name": "storage.modifier.${0:/downcase}.php" + }, + { + "match": "readonly", + "name": "storage.modifier.php" + } + ] }, "2": { "name": "storage.type.class.php" @@ -342,6 +351,9 @@ ] }, "6": { + "name": "storage.modifier.php" + }, + "7": { "name": "storage.type.class.php" } }, @@ -574,7 +586,7 @@ ] }, { - "match": "(?xi)\n(:)\\s*\n(\n (?:\\?\\s*)? [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ | # nullable type\n [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ (?: \\s*[|&]\\s* [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+)+ # union type\n)\n(?=\\s*(?:{|/[/*]|\\#|$))", + "match": "(?xi)\n(:)\\s*\n(\n # nullable type\n (?:\\?\\s*)? [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ |\n # union, intersection or DNF type\n (?: [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ | \\(\\s* [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+(?:\\s*&\\s*[a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+)+ \\s*\\) )\n (?: \\s*[|&]\\s*\n (?: [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ | \\(\\s* [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+(?:\\s*&\\s*[a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+)+ \\s*\\) )\n )+\n)\n(?=\\s*(?:{|/[/*]|\\#|$))", "captures": { "1": { "name": "keyword.operator.return-value.php" @@ -629,7 +641,7 @@ ] }, { - "match": "(?xi)\n(:)\\s*\n(\n (?:\\?\\s*)? [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ | # nullable type\n [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ (?: \\s*[|&]\\s* [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+)+ # union type\n)\n(?=\\s*(?:=>|/[/*]|\\#|$))", + "match": "(?xi)\n(:)\\s*\n(\n # nullable type\n (?:\\?\\s*)? [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ |\n # union, intersection or DNF type\n (?: [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ | \\(\\s* [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+(?:\\s*&\\s*[a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+)+ \\s*\\) )\n (?: \\s*[|&]\\s*\n (?: [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+ | \\(\\s* [a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+(?:\\s*&\\s*[a-z0-9_\\x{7f}-\\x{10ffff}\\\\]+)+ \\s*\\) )\n )+\n)\n(?=\\s*(?:=>|/[/*]|\\#|$))", "captures": { "1": { "name": "keyword.operator.return-value.php" @@ -667,7 +679,7 @@ } }, "contentName": "meta.function.parameters.php", - "end": "(?xi)\n(\\)) \\s* ( : \\s*\n (?:\\?\\s*)? (?!\\s) [a-z0-9_\\x{7f}-\\x{10ffff}\\\\\\s\\|&]+ (??/])|\\))", "name": "attribute_value", "patterns": [ - { - "include": "#string" - }, { "include": "#js_parens" }, @@ -758,9 +752,6 @@ "end": "$|(?=,|(?:\\s+[^!%&*\\-+~|<>?/])|\\))", "name": "attribute_value2", "patterns": [ - { - "include": "#string" - }, { "include": "#js_parens" }, @@ -979,23 +970,6 @@ } ] }, - "string": { - "begin": "(['\"])", - "end": "(?]*>)", "end": "$|(?=>)", diff --git a/extensions/razor/cgmanifest.json b/extensions/razor/cgmanifest.json index 04a1078be19..799e12cf325 100644 --- a/extensions/razor/cgmanifest.json +++ b/extensions/razor/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "dotnet/razor", "repositoryUrl": "https://github.com/dotnet/razor", - "commitHash": "8d0ae9664cb27276eab36d83e48e88356468ca67" + "commitHash": "69f60231df08319b544d3d32a588575acbb58ff0" } }, "license": "MIT", diff --git a/extensions/razor/syntaxes/cshtml.tmLanguage.json b/extensions/razor/syntaxes/cshtml.tmLanguage.json index 9293a6de060..0b5463ee3ca 100644 --- a/extensions/razor/syntaxes/cshtml.tmLanguage.json +++ b/extensions/razor/syntaxes/cshtml.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/dotnet/razor/commit/8d0ae9664cb27276eab36d83e48e88356468ca67", + "version": "https://github.com/dotnet/razor/commit/69f60231df08319b544d3d32a588575acbb58ff0", "name": "ASP.NET Razor", "scopeName": "text.html.cshtml", "patterns": [ @@ -531,7 +531,7 @@ ] }, "code-directive": { - "begin": "(@)(code)\\s*", + "begin": "(@)(code)((?=\\{)|\\s+)", "beginCaptures": { "1": { "patterns": [ @@ -552,7 +552,7 @@ "end": "(?<=})|\\s" }, "functions-directive": { - "begin": "(@)(functions)\\s*", + "begin": "(@)(functions)((?=\\{)|\\s+)", "beginCaptures": { "1": { "patterns": [ diff --git a/extensions/references-view/package.nls.json b/extensions/references-view/package.nls.json index 0fed0b80fd5..a1a4b202a0f 100644 --- a/extensions/references-view/package.nls.json +++ b/extensions/references-view/package.nls.json @@ -5,7 +5,7 @@ "config.references.preferredLocation.peek": "Show references in peek editor.", "config.references.preferredLocation.view": "Show references in separate view.", "container.title": "References", - "view.title": "Results", + "view.title": "Reference Search Results", "cmd.category.references": "References", "cmd.references-view.findReferences": "Find All References", "cmd.references-view.findImplementations": "Find All Implementations", diff --git a/extensions/references-view/src/calls/model.ts b/extensions/references-view/src/calls/model.ts index 30d320355aa..087e577b160 100644 --- a/extensions/references-view/src/calls/model.ts +++ b/extensions/references-view/src/calls/model.ts @@ -177,7 +177,7 @@ class CallItemDataProvider implements vscode.TreeDataProvider { const item = new vscode.TreeItem(element.item.name); item.description = element.item.detail; - item.tooltip = item.label ? `${item.label} - ${element.item.detail}` : element.item.detail; + item.tooltip = item.label && element.item.detail ? `${item.label} - ${element.item.detail}` : item.label ? `${item.label}` : element.item.detail; item.contextValue = 'call-item'; item.iconPath = getThemeIcon(element.item.kind); diff --git a/extensions/references-view/src/highlights.ts b/extensions/references-view/src/highlights.ts index e50ef4bed28..fff533fa176 100644 --- a/extensions/references-view/src/highlights.ts +++ b/extensions/references-view/src/highlights.ts @@ -23,7 +23,11 @@ export class EditorHighlights { vscode.workspace.onDidChangeTextDocument(e => this._ignore.add(e.document.uri.toString())), vscode.window.onDidChangeActiveTextEditor(() => _view.visible && this.update()), _view.onDidChangeVisibility(e => e.visible ? this._show() : this._hide()), - _view.onDidChangeSelection(() => _view.visible && this.update()) + _view.onDidChangeSelection(() => { + if (_view.visible) { + this.update(); + } + }) ); this._show(); } diff --git a/extensions/references-view/src/navigation.ts b/extensions/references-view/src/navigation.ts index fdb7dc64881..e592dfbf7ea 100644 --- a/extensions/references-view/src/navigation.ts +++ b/extensions/references-view/src/navigation.ts @@ -18,7 +18,6 @@ export class Navigation { this._disposables.push( vscode.commands.registerCommand('references-view.next', () => this.next(false)), vscode.commands.registerCommand('references-view.prev', () => this.previous(false)), - _view.onDidChangeSelection(() => this._ensureSelectedElementIsVisible()), ); } @@ -31,20 +30,6 @@ export class Navigation { this._ctxCanNavigate.set(Boolean(this._delegate)); } - private _ensureSelectedElementIsVisible(): void { - if (this._view.selection.length === 0) { - return; - } - const [item] = this._view.selection; - const location = this._delegate?.location(item); - if (!location) { - return; - } - if (vscode.window.activeTextEditor?.document.uri.toString() !== location.uri.toString()) { - this._open(location, true); - } - } - private _anchor(): undefined | unknown { if (!this._delegate) { return undefined; diff --git a/extensions/references-view/src/tree.ts b/extensions/references-view/src/tree.ts index 0c005237d45..2a4a0e924af 100644 --- a/extensions/references-view/src/tree.ts +++ b/extensions/references-view/src/tree.ts @@ -268,7 +268,7 @@ class TreeInputHistory implements vscode.TreeDataProvider{ vscode.commands.registerCommand('_references-view.showHistoryItem', async (item) => { if (item instanceof HistoryItem) { const position = item.anchor.guessedTrackedPosition() ?? item.input.location.range.start; - return vscode.commands.executeCommand('vscode.open', item.input.location.uri, { selection: new vscode.Range(position, position) }); + await vscode.commands.executeCommand('vscode.open', item.input.location.uri, { selection: new vscode.Range(position, position) }); } }), vscode.commands.registerCommand('references-view.pickFromHistory', async () => { diff --git a/extensions/restructuredtext/cgmanifest.json b/extensions/restructuredtext/cgmanifest.json index 8ff3f8a76d9..29c269c3611 100644 --- a/extensions/restructuredtext/cgmanifest.json +++ b/extensions/restructuredtext/cgmanifest.json @@ -6,11 +6,11 @@ "git": { "name": "trond-snekvik/vscode-rst", "repositoryUrl": "https://github.com/trond-snekvik/vscode-rst", - "commitHash": "f0fe19ffde6509be52ad9267a57e1b3df665f072" + "commitHash": "4f6f1a8f94e0d16e30dddc9c4e359d062b715408" } }, "license": "MIT", - "version": "1.5.1" + "version": "1.5.2" } ], "version": 1 diff --git a/extensions/restructuredtext/syntaxes/rst.tmLanguage.json b/extensions/restructuredtext/syntaxes/rst.tmLanguage.json index ce4b5d1282d..093db907962 100644 --- a/extensions/restructuredtext/syntaxes/rst.tmLanguage.json +++ b/extensions/restructuredtext/syntaxes/rst.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/trond-snekvik/vscode-rst/commit/f0fe19ffde6509be52ad9267a57e1b3df665f072", + "version": "https://github.com/trond-snekvik/vscode-rst/commit/4f6f1a8f94e0d16e30dddc9c4e359d062b715408", "scopeName": "source.rst", "patterns": [ { @@ -312,9 +312,16 @@ ] }, "block-comment": { - "begin": "^(\\s*)\\.{2}", - "while": "^\\1(?=\\s)|^\\s*$", - "name": "comment.block" + "begin": "^(\\s*)\\.{2}(\\s+|$)", + "end": "^(?=\\S)|^\\s*$", + "name": "comment.block", + "patterns": [ + { + "begin": "^\\s{3,}(?=\\S)", + "while": "^\\s{3}.*|^\\s*$", + "name": "comment.block" + } + ] }, "literal-block": { "begin": "^(\\s*)(.*)(::)\\s*$", diff --git a/extensions/search-result/package.json b/extensions/search-result/package.json index 1e5c3df2077..747cde8e648 100644 --- a/extensions/search-result/package.json +++ b/extensions/search-result/package.json @@ -14,7 +14,9 @@ ], "main": "./out/extension.js", "browser": "./dist/extension.js", - "activationEvents": [], + "activationEvents": [ + "onLanguage:search-result" + ], "scripts": { "generate-grammar": "node ./syntaxes/generateTMLanguage.js", "vscode:prepublish": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:search-result ./tsconfig.json" diff --git a/extensions/search-result/src/extension.ts b/extensions/search-result/src/extension.ts index 90443f16771..815bd8c1391 100644 --- a/extensions/search-result/src/extension.ts +++ b/extensions/search-result/src/extension.ts @@ -78,7 +78,7 @@ export function activate(context: vscode.ExtensionContext) { const lineResult = parseSearchResults(document, token)[position.line]; if (!lineResult) { return []; } if (lineResult.type === 'file') { - return lineResult.allLocations; + return lineResult.allLocations.map(l => ({ ...l, originSelectionRange: lineResult.location.originSelectionRange })); } const location = lineResult.locations.find(l => l.originSelectionRange.contains(position)); diff --git a/extensions/shared.webpack.config.js b/extensions/shared.webpack.config.js index 1ad14eca57d..5a9ccd93d30 100644 --- a/extensions/shared.webpack.config.js +++ b/extensions/shared.webpack.config.js @@ -22,8 +22,7 @@ const tsLoaderOptions = { onlyCompileBundledFiles: true, }; -function withNodeDefaults(/**@type WebpackConfig*/extConfig) { - /** @type WebpackConfig */ +function withNodeDefaults(/**@type WebpackConfig & { context: string }*/extConfig) { const defaultConfig = { mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') target: 'node', // extensions run in a node context @@ -105,7 +104,7 @@ function nodePlugins(context) { * }} AdditionalBrowserConfig */ -function withBrowserDefaults(/**@type WebpackConfig*/extConfig, /** @type AdditionalBrowserConfig */ additionalOptions = {}) { +function withBrowserDefaults(/**@type WebpackConfig & { context: string }*/extConfig, /** @type AdditionalBrowserConfig */ additionalOptions = {}) { /** @type WebpackConfig */ const defaultConfig = { mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') diff --git a/extensions/shellscript/cgmanifest.json b/extensions/shellscript/cgmanifest.json index e6df65116de..87be4976392 100644 --- a/extensions/shellscript/cgmanifest.json +++ b/extensions/shellscript/cgmanifest.json @@ -6,11 +6,11 @@ "git": { "name": "jeff-hykin/better-shell-syntax", "repositoryUrl": "https://github.com/jeff-hykin/better-shell-syntax", - "commitHash": "ab3c6da1c3651dff20651ebcf0ec5adb5fe413a0" + "commitHash": "1bad17d8badf6283125aaa7c31be06ba64146a0f" } }, "license": "MIT", - "version": "1.3.3" + "version": "1.5.4" } ], "version": 1 diff --git a/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json b/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json index 261d0529c2e..e132b9e5699 100644 --- a/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json +++ b/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/jeff-hykin/better-shell-syntax/commit/ab3c6da1c3651dff20651ebcf0ec5adb5fe413a0", + "version": "https://github.com/jeff-hykin/better-shell-syntax/commit/1bad17d8badf6283125aaa7c31be06ba64146a0f", "name": "Shell Script", "scopeName": "source.shell", "patterns": [ @@ -14,8 +14,8 @@ ], "repository": { "alias_statement": { - "begin": "(alias)\\s*+\\s*+(?:((?<=^|;|&|\\s)(?:export|declare|typeset|local|readonly)(?=\\s|;|&|$))\\s*+)?((?\\(\\)\\$`\\\\\"\\|]+(?!>))", + "match": "[ \\t]*+([^ \t\n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>))", "captures": { "1": { "name": "string.unquoted.argument.shell", @@ -112,14 +112,14 @@ } }, { - "include": "#statement_context" + "include": "#normal_statement_context" } ] }, "assignment": { "patterns": [ { - "begin": "\\s*+(?:((?<=^|;|&|\\s)(?:export|declare|typeset|local|readonly)(?=\\s|;|&|$))\\s*+)?((?|#|\\n|$|;|[ \\t]))(?!foreach\\b(?!\\/)|select\\b(?!\\/)|repeat\\b(?!\\/)|until\\b(?!\\/)|while\\b(?!\\/)|case\\b(?!\\/)|done\\b(?!\\/)|elif\\b(?!\\/)|else\\b(?!\\/)|esac\\b(?!\\/)|then\\b(?!\\/)|for\\b(?!\\/)|end\\b(?!\\/)|in\\b(?!\\/)|fi\\b(?!\\/)|do\\b(?!\\/)|if\\b(?!\\/))(?:((?<=^|;|&|[ \\t])(?:export|declare|typeset|local|readonly)(?=[ \\t]|;|&|$))|((?!\"|'|\\\\\\n?$)[^!'\" \\t\\n\\r]+?))(?:(?= |\\t)|(?=;|\\||&|\\n|\\)|\\`|\\{|\\}|[ \\t]*#|\\])(?|#|\\n|$|;|\\s))(?:\\s*+([^ \n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$')|'))|(\\s*+(?!(?:!|%|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|\\s))(?:\\s*+([^ \n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$\")|\")))", - "end": "(?=;|\\||&|\\n|\\)|\\`|\\{|\\}| *#|\\])(?|#|\\n|$|;|\\s))(?:((?<=^|;|&|\\s)(?:export|declare|typeset|local|readonly)(?=\\s|;|&|$))|((?!\\\\\\n?$)(?:(?:\\$?\")|(?:.+?))))(?:(?=\\s)|(?=;|\\||&|\\n|\\)|\\`|\\{|\\}| *#|\\])(?|#|\\n|$|;|\\s))(?:((?<=^|;|&|\\s)(?:export|declare|typeset|local|readonly)(?=\\s|;|&|$))|((?!\\\\\\n?$)(?:(?:\\$?\")|(?:.+?))))(?:(?=\\s)|(?=;|\\||&|\\n|\\)|\\`|\\{|\\}| *#|\\])(?|#|\\n|$|;|[ \\t]))(?!foreach\\b(?!\\/)|select\\b(?!\\/)|repeat\\b(?!\\/)|until\\b(?!\\/)|while\\b(?!\\/)|case\\b(?!\\/)|done\\b(?!\\/)|elif\\b(?!\\/)|else\\b(?!\\/)|esac\\b(?!\\/)|then\\b(?!\\/)|for\\b(?!\\/)|end\\b(?!\\/)|in\\b(?!\\/)|fi\\b(?!\\/)|do\\b(?!\\/)|if\\b(?!\\/))(?!\\\\\\n?$)", + "end": "(?=;|\\||&|\\n|\\)|\\`|\\{|\\}|[ \\t]*#|\\])(?)", + "captures": { + "1": { + "name": "constant.numeric.shell constant.numeric.hex.shell" + }, + "2": { + "name": "constant.numeric.shell constant.numeric.octal.shell" + }, + "3": { + "name": "constant.numeric.shell constant.numeric.other.shell" + }, + "4": { + "name": "constant.numeric.shell constant.numeric.integer.shell" + }, + "5": { + "name": "constant.numeric.shell constant.numeric.integer.shell" + } + } }, "option": { - "begin": "\\s++(-)((?!(?:!|%|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|\\s)))", - "end": "(?:(?=\\s)|(?=;|\\||&|\\n|\\)|\\`|\\{|\\}| *#|\\])(?|#|\\n|$|;|[ \\t])))", + "end": "(?:(?=[ \\t])|(?=;|\\||&|\\n|\\)|\\`|\\{|\\}|[ \\t]*#|\\])(?)", + "match": "(?<=[ \\t])(?:(1)|(2)|(\\d+))(?=>)", "captures": { "1": { "name": "keyword.operator.redirect.stdout.shell" @@ -1880,12 +1692,12 @@ ] }, "simple_options": { - "match": "(?:\\s++\\-\\w+)*", + "match": "(?:[ \\t]++\\-\\w+)*", "captures": { "0": { "patterns": [ { - "match": "\\s++(\\-)(\\w+)", + "match": "[ \\t]++(\\-)(\\w+)", "captures": { "1": { "name": "string.unquoted.argument.shell constant.other.option.dash.shell" @@ -1899,11 +1711,14 @@ } } }, + "start_of_command": { + "match": "[ \\t]*+(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?!foreach\\b(?!\\/)|select\\b(?!\\/)|repeat\\b(?!\\/)|until\\b(?!\\/)|while\\b(?!\\/)|case\\b(?!\\/)|done\\b(?!\\/)|elif\\b(?!\\/)|else\\b(?!\\/)|esac\\b(?!\\/)|then\\b(?!\\/)|for\\b(?!\\/)|end\\b(?!\\/)|in\\b(?!\\/)|fi\\b(?!\\/)|do\\b(?!\\/)|if\\b(?!\\/))(?!\\\\\\n?$)" + }, "start_of_double_quoted_command_name": { - "match": "\\s*+(?!(?:!|%|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|\\s))(?:\\s*+([^ \n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$\")|\")", + "match": "(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?:[ \\t]*+([^ \t\n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$\")|\")", "captures": { "1": { - "name": "entity.name.command.shell", + "name": "entity.name.function.call.shell entity.name.command.shell", "patterns": [ { "match": "\\*", @@ -1926,13 +1741,13 @@ ] } }, - "name": "meta.command_name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.command.shell" + "name": "meta.statement.command.name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell" }, "start_of_single_quoted_command_name": { - "match": "\\s*+(?!(?:!|%|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|\\s))(?:\\s*+([^ \n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$')|')", + "match": "(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?:[ \\t]*+([^ \t\n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$')|')", "captures": { "1": { - "name": "entity.name.command.shell", + "name": "entity.name.function.call.shell entity.name.command.shell", "patterns": [ { "match": "\\*", @@ -1955,76 +1770,7 @@ ] } }, - "name": "meta.command_name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.command.shell" - }, - "statement_context": { - "patterns": [ - { - "include": "#comment" - }, - { - "include": "#pipeline" - }, - { - "include": "#statement_seperator" - }, - { - "include": "#misc_ranges" - }, - { - "include": "#boolean" - }, - { - "include": "#redirect_number" - }, - { - "include": "#numeric_literal" - }, - { - "include": "#string" - }, - { - "include": "#variable" - }, - { - "include": "#interpolation" - }, - { - "include": "#heredoc" - }, - { - "include": "#herestring" - }, - { - "include": "#redirection" - }, - { - "include": "#pathname" - }, - { - "include": "#keyword" - }, - { - "include": "#support" - } - ] - }, - "statement_seperator": { - "match": "(?:(?:(?:(?:(;)|(&&))|(\\|\\|))|(&))|\\n)", - "captures": { - "1": { - "name": "punctuation.terminator.statement.semicolon.shell" - }, - "2": { - "name": "punctuation.separator.statement.and.shell" - }, - "3": { - "name": "punctuation.separator.statement.or.shell" - }, - "4": { - "name": "punctuation.separator.statement.background.shell" - } - } + "name": "meta.statement.command.name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell" }, "string": { "patterns": [ @@ -2141,17 +1887,6 @@ } } }, - { - "match": "(\\$)(\\{[0-9]+\\}(?!\\w))", - "captures": { - "1": { - "name": "punctuation.definition.variable.shell variable.parameter.positional.shell" - }, - "2": { - "name": "variable.parameter.positional.shell" - } - } - }, { "match": "(\\$)([-*#?$!0_](?!\\w))", "captures": { @@ -2164,21 +1899,22 @@ } }, { - "begin": "(\\$)(\\{)", + "begin": "(\\$)(\\{)[ \\t]*+(?=\\d)", "end": "\\}", "beginCaptures": { "1": { - "name": "punctuation.definition.variable.shell punctuation.section.bracket.curly.variable.begin.shell" + "name": "punctuation.definition.variable.shell variable.parameter.positional.shell" }, "2": { - "name": "punctuation.section.bracket.curly.variable.begin.shell" + "name": "punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell variable.parameter.positional.shell" } }, "endCaptures": { "0": { - "name": "punctuation.section.bracket.curly.variable.end.shell" + "name": "punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell variable.parameter.positional.shell" } }, + "contentName": "meta.parameter-expansion", "patterns": [ { "match": "!|:[-=?]?|\\*|@|##|#|%%|%|\\/", @@ -2195,6 +1931,59 @@ } } }, + { + "match": "[0-9]+", + "name": "variable.parameter.positional.shell" + }, + { + "match": "(?= 0; - -let outputRoot = __dirname; -const outputRootIndex = args.indexOf('--outputRoot'); -if (outputRootIndex >= 0) { - outputRoot = args[outputRootIndex + 1]; -} const srcDir = path.join(__dirname, 'preview-src'); -const outDir = path.join(outputRoot, 'media'); +const outDir = path.join(__dirname, 'media'); -async function build() { - fs.copyFileSync( - path.join(__dirname, 'node_modules', 'vscode-codicons', 'dist', 'codicon.css'), - path.join(outDir, 'codicon.css')); - - fs.copyFileSync( - path.join(__dirname, 'node_modules', 'vscode-codicons', 'dist', 'codicon.ttf'), - path.join(outDir, 'codicon.ttf')); - - await esbuild.build({ - entryPoints: [ - path.join(srcDir, 'index.ts') - ], - bundle: true, - minify: true, - sourcemap: false, - format: 'esm', - outdir: outDir, - platform: 'browser', - target: ['es2020'], - }); -} - -build().catch(() => process.exit(1)); - -if (isWatch) { - const watcher = require('@parcel/watcher'); - watcher.subscribe(srcDir, () => { - return build(); - }); -} +require('../esbuild-webview-common').run({ + entryPoints: { + 'index': path.join(srcDir, 'index.ts'), + 'codicon': path.join(__dirname, 'node_modules', 'vscode-codicons', 'dist', 'codicon.css'), + }, + srcDir, + outdir: outDir, + additionalOptions: { + loader: { + '.ttf': 'dataurl', + } + } +}, process.argv); diff --git a/extensions/simple-browser/src/simpleBrowserView.ts b/extensions/simple-browser/src/simpleBrowserView.ts index 28663ab39e9..5725dcf4f9b 100644 --- a/extensions/simple-browser/src/simpleBrowserView.ts +++ b/extensions/simple-browser/src/simpleBrowserView.ts @@ -125,7 +125,7 @@ export class SimpleBrowserView extends Disposable {
${vscode.l10n.t("Focus Lock")}
- +
diff --git a/extensions/sql/cgmanifest.json b/extensions/sql/cgmanifest.json index e83fc02271f..a3092ba903e 100644 --- a/extensions/sql/cgmanifest.json +++ b/extensions/sql/cgmanifest.json @@ -6,11 +6,11 @@ "git": { "name": "microsoft/vscode-mssql", "repositoryUrl": "https://github.com/microsoft/vscode-mssql", - "commitHash": "998c713b179e2e5256b8bf1aeb8ecda3433e6112" + "commitHash": "cb5940297a8cef76daaf4a6b63c4968c9a12d17a" } }, "license": "MIT", - "version": "1.17.0" + "version": "1.20.0" } ], "version": 1 diff --git a/extensions/sql/language-configuration.json b/extensions/sql/language-configuration.json index 6878d8ca72f..7911ff4f6c8 100644 --- a/extensions/sql/language-configuration.json +++ b/extensions/sql/language-configuration.json @@ -25,6 +25,7 @@ ["`", "`"] ], "folding": { + "offSide": true, "markers": { "start": "^\\s*--\\s*#region\\b", "end": "^\\s*--\\s*#endregion\\b" diff --git a/extensions/sql/syntaxes/sql.tmLanguage.json b/extensions/sql/syntaxes/sql.tmLanguage.json index 3a6574abbb4..f05df61a7a0 100644 --- a/extensions/sql/syntaxes/sql.tmLanguage.json +++ b/extensions/sql/syntaxes/sql.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/microsoft/vscode-mssql/commit/998c713b179e2e5256b8bf1aeb8ecda3433e6112", + "version": "https://github.com/microsoft/vscode-mssql/commit/cb5940297a8cef76daaf4a6b63c4968c9a12d17a", "name": "SQL", "scopeName": "source.sql", "patterns": [ @@ -372,7 +372,7 @@ "include": "#regexps" }, { - "match": "\\b(?i)(abort|abort_after_wait|absent|absolute|accent_sensitivity|acceptable_cursopt|acp|action|activation|add|address|admin|aes_128|aes_192|aes_256|affinity|after|aggregate|algorithm|all_constraints|all_errormsgs|all_indexes|all_levels|all_results|allow_connections|allow_dup_row|allow_encrypted_value_modifications|allow_page_locks|allow_row_locks|allow_snapshot_isolation|alter|altercolumn|always|anonymous|ansi_defaults|ansi_null_default|ansi_null_dflt_off|ansi_null_dflt_on|ansi_nulls|ansi_padding|ansi_warnings|appdomain|append|application|apply|arithabort|arithignore|array|assembly|asymmetric|asynchronous_commit|at|atan2|atomic|attach|attach_force_rebuild_log|attach_rebuild_log|audit|auth_realm|authentication|auto|auto_cleanup|auto_close|auto_create_statistics|auto_drop|auto_shrink|auto_update_statistics|auto_update_statistics_async|automated_backup_preference|automatic|autopilot|availability|availability_mode|backup_priority|base64|basic|batches|batchsize|before|between|bigint|binary|binding|bit|block|blockers|blocksize|bmk|both|break|broker|broker_instance|bucket_count|buffer|buffercount|bulk_logged|by|call|caller|card|case|catalog|catch|cert|certificate|change_retention|change_tracking|change_tracking_context|changes|char|character|character_set|check_expiration|check_policy|checkconstraints|checkindex|checkpoint|cleanup_policy|clear|clear_port|close|clustered|codepage|collection|column_encryption_key|column_master_key|columnstore|columnstore_archive|colv_80_to_100|colv_100_to_80|commit_differential_base|committed|compatibility_level|compress_all_row_groups|compression|compression_delay|concat_null_yields_null|concatenate|configuration|connect|continue|continue_after_error|contract|contract_name|control|conversation|conversation_group_id|conversation_handle|copy|copy_only|count_rows|counter|create(\\\\s+or\\\\s+alter)?|credential|cross|cryptographic|cryptographic_provider|cube|cursor|cursor_close_on_commit|cursor_default|data|data_compression|data_flush_interval_seconds|data_mirroring|data_purity|data_source|database|database_name|database_snapshot|datafiletype|date_correlation_optimization|date|datefirst|dateformat|date_format|datetime|datetime2|datetimeoffset|day(s)?|db_chaining|dbid|dbidexec|dbo_only|deadlock_priority|deallocate|dec|decimal|declare|decrypt|decrypt_a|decryption|default_database|default_language|default_logon_domain|default_schema|definition|delay|delayed_durability|delimitedtext|density_vector|dependent|des|description|desired_state|desx|differential|digest|disable|disable_broker|disable_def_cnst_chk|disabled|disk|distinct|distributed|distribution|drop|drop_existing|dts_buffers|dump|durability|dynamic|edition|elements|else|emergency|empty|enable|enable_broker|enabled|encoding|encrypted|encrypted_value|encryption|encryption_type|end|endpoint|endpoint_url|enhancedintegrity|entry|error_broker_conversations|errorfile|estimateonly|event|except|exec|executable|execute|exists|expand|expiredate|expiry_date|explicit|external|external_access|failover|failover_mode|failure_condition_level|fast|fast_forward|fastfirstrow|federated_service_account|fetch|field_terminator|fieldterminator|file|filelistonly|filegroup|filename|filestream|filestream_log|filestream_on|filetable|file_format|filter|first_row|fips_flagger|fire_triggers|first|firstrow|float|flush_interval_seconds|fmtonly|following|force|force_failover_allow_data_loss|force_service_allow_data_loss|forced|forceplan|formatfile|format_options|format_type|formsof|forward_only|free_cursors|free_exec_context|fullscan|fulltext|fulltextall|fulltextkey|function|generated|get|geography|geometry|global|go|goto|governor|guid|hadoop|hardening|hash|hashed|header_limit|headeronly|health_check_timeout|hidden|hierarchyid|histogram|histogram_steps|hits_cursors|hits_exec_context|hour(s)?|http|identity|identity_value|if|ifnull|ignore|ignore_constraints|ignore_dup_key|ignore_dup_row|ignore_triggers|image|immediate|implicit_transactions|include|include_null_values|index|inflectional|init|initiator|insensitive|insert|instead|int|integer|integrated|intersect|intermediate|interval_length_minutes|into|inuse_cursors|inuse_exec_context|io|is|isabout|iso_week|isolation|job_tracker_location|json|keep|keep_nulls|keep_replication|keepdefaults|keepfixed|keepidentity|keepnulls|kerberos|key|key_path|key_source|key_store_provider_name|keyset|kill|kilobytes_per_batch|labelonly|langid|language|last|lastrow|leading|legacy_cardinality_estimation|length|level|lifetime|lineage_80_to_100|lineage_100_to_80|listener_ip|listener_port|load|loadhistory|lob_compaction|local|local_service_name|locate|location|lock_escalation|lock_timeout|lockres|login|login_type|loop|manual|mark_in_use_for_removal|masked|master|matched|max_queue_readers|max_duration|max_outstanding_io_per_volume|maxdop|maxerrors|maxlength|maxtransfersize|max_plans_per_query|max_storage_size_mb|mediadescription|medianame|mediapassword|memogroup|memory_optimized|merge|message|message_forward_size|message_forwarding|microsecond|millisecond|minute(s)?|mirror_address|misses_cursors|misses_exec_context|mixed|modify|money|month|move|multi_user|must_change|name|namespace|nanosecond|native|native_compilation|nchar|ncharacter|never|new_account|new_broker|newname|next|no|no_browsetable|no_checksum|no_compression|no_infomsgs|no_triggers|no_truncate|nocount|noexec|noexpand|noformat|noinit|nolock|nonatomic|nonclustered|nondurable|none|norecompute|norecovery|noreset|norewind|noskip|not|notification|nounload|now|nowait|ntext|ntlm|nulls|numeric|numeric_roundabort|nvarchar|object|objid|oem|offline|old_account|online|operation_mode|open|openjson|optimistic|option|orc|out|outer|output|over|override|owner|ownership|pad_index|page|page_checksum|page_verify|pagecount|paglock|param|parameter_sniffing|parameter_type_expansion|parameterization|parquet|parseonly|partial|partition|partner|password|path|pause|percentage|permission_set|persisted|period|physical_only|plan_forcing_mode|policy|pool|population|ports|preceding|precision|predicate|presume_abort|primary|primary_role|print|prior|priority |priority_level|private|proc(edure)?|procedure_name|profile|provider|quarter|query_capture_mode|query_governor_cost_limit|query_optimizer_hotfixes|query_store|queue|quoted_identifier|raiserror|range|raw|rcfile|rc2|rc4|rc4_128|rdbms|read_committed_snapshot|read|read_only|read_write|readcommitted|readcommittedlock|readonly|readpast|readuncommitted|readwrite|real|rebuild|receive|recmodel_70backcomp|recompile|reconfigure|recovery|recursive|recursive_triggers|redo_queue|reject_sample_value|reject_type|reject_value|relative|remote|remote_data_archive|remote_proc_transactions|remote_service_name|remove|removed_cursors|removed_exec_context|reorganize|repeat|repeatable|repeatableread|replica|replicated|replnick_100_to_80|replnickarray_80_to_100|replnickarray_100_to_80|required|required_cursopt|resample|reset|resource|resource_manager_location|respect|restart|restore|restricted_user|resume|retaindays|retention|return|revert|rewind|rewindonly|returns|robust|role|rollup|root|round_robin|route|row|rowdump|rowguidcol|rowlock|row_terminator|rows|rows_per_batch|rowsets_only|rowterminator|rowversion|rsa_1024|rsa_2048|rsa_3072|rsa_4096|rsa_512|safe|safety|sample|save|scalar|schema|schemabinding|scoped|scroll|scroll_locks|sddl|second|secexpr|secondary|secondary_only|secondary_role|secret|security|securityaudit|selective|self|send|sent|sequence|serde_method|serializable|server|service|service_broker|service_name|service_objective|session_timeout|session|sessions|seterror|setopts|sets|shard_map_manager|shard_map_name|sharded|shared_memory|show_statistics|showplan_all|showplan_text|showplan_xml|showplan_xml_with_recompile|shrinkdb|shutdown|sid|signature|simple|single_blob|single_clob|single_nclob|single_user|singleton|site|size_based_cleanup_mode|skip|smalldatetime|smallint|smallmoney|snapshot|snapshot_import|snapshotrestorephase|soap|softnuma|sort_in_tempdb|sorted_data|sorted_data_reorg|spatial|sql|sql_bigint|sql_binary|sql_bit|sql_char|sql_date|sql_decimal|sql_double|sql_float|sql_guid|sql_handle|sql_longvarbinary|sql_longvarchar|sql_numeric|sql_real|sql_smallint|sql_time|sql_timestamp|sql_tinyint|sql_tsi_day|sql_tsi_frac_second|sql_tsi_hour|sql_tsi_minute|sql_tsi_month|sql_tsi_quarter|sql_tsi_second|sql_tsi_week|sql_tsi_year|sql_type_date|sql_type_time|sql_type_timestamp|sql_varbinary|sql_varchar|sql_variant|sql_wchar|sql_wlongvarchar|ssl|ssl_port|standard|standby|start|start_date|started|stat_header|state|statement|static|statistics|statistics_incremental|statistics_norecompute|statistics_only|statman|stats_stream|status|stop|stop_on_error|stopat|stopatmark|stopbeforemark|stoplist|stopped|string_delimiter|subject|supplemental_logging|supported|suspend|symmetric|synchronous_commit|synonym|sysname|system|system_time|system_versioning|table|tableresults|tablock|tablockx|take|tape|target|target_index|target_partition|tcp|temporal_history_retention|text|textimage_on|then|thesaurus|throw|time|timeout|timestamp|tinyint|to|top|torn_page_detection|track_columns_updated|trailing|tran|transaction|transfer|triple_des|triple_des_3key|truncate|trustworthy|try|tsql|type|type_desc|type_warning|tzoffset|uid|unbounded|uncommitted|unique|uniqueidentifier|unlimited|unload|unlock|unsafe|updlock|url|use|useplan|useroptions|use_type_default|using|utcdatetime|valid_xml|validation|value|values|varbinary|varchar|verbose|verifyonly|version|view_metadata|virtual_device|visiblity|wait_at_low_priority|waitfor|webmethod|week|weekday|weight|well_formed_xml|when|while|widechar|widechar_ansi|widenative|window|windows|with|within|within group|witness|without|without_array_wrapper|workload|wsdl|xact_abort|xlock|xml|xmlschema|xquery|xsinil|year|zone)\\b", + "match": "\\b(?i)(abort|abort_after_wait|absent|absolute|accent_sensitivity|acceptable_cursopt|acp|action|activation|add|address|admin|aes_128|aes_192|aes_256|affinity|after|aggregate|algorithm|all_constraints|all_errormsgs|all_indexes|all_levels|all_results|allow_connections|allow_dup_row|allow_encrypted_value_modifications|allow_page_locks|allow_row_locks|allow_snapshot_isolation|alter|altercolumn|always|anonymous|ansi_defaults|ansi_null_default|ansi_null_dflt_off|ansi_null_dflt_on|ansi_nulls|ansi_padding|ansi_warnings|appdomain|append|application|apply|arithabort|arithignore|array|assembly|asymmetric|asynchronous_commit|at|atan2|atomic|attach|attach_force_rebuild_log|attach_rebuild_log|audit|auth_realm|authentication|auto|auto_cleanup|auto_close|auto_create_statistics|auto_drop|auto_shrink|auto_update_statistics|auto_update_statistics_async|automated_backup_preference|automatic|autopilot|availability|availability_mode|backup|backup_priority|base64|basic|batches|batchsize|before|between|bigint|binary|binding|bit|block|blockers|blocksize|bmk|both|break|broker|broker_instance|bucket_count|buffer|buffercount|bulk_logged|by|call|caller|card|case|catalog|catch|cert|certificate|change_retention|change_tracking|change_tracking_context|changes|char|character|character_set|check_expiration|check_policy|checkconstraints|checkindex|checkpoint|checksum|cleanup_policy|clear|clear_port|close|clustered|codepage|collection|column_encryption_key|column_master_key|columnstore|columnstore_archive|colv_80_to_100|colv_100_to_80|commit_differential_base|committed|compatibility_level|compress_all_row_groups|compression|compression_delay|concat_null_yields_null|concatenate|configuration|connect|continue|continue_after_error|contract|contract_name|control|conversation|conversation_group_id|conversation_handle|copy|copy_only|count_rows|counter|create(\\\\s+or\\\\s+alter)?|credential|cross|cryptographic|cryptographic_provider|cube|cursor|cursor_close_on_commit|cursor_default|data|data_compression|data_flush_interval_seconds|data_mirroring|data_purity|data_source|database|database_name|database_snapshot|datafiletype|date_correlation_optimization|date|datefirst|dateformat|date_format|datetime|datetime2|datetimeoffset|day(s)?|db_chaining|dbid|dbidexec|dbo_only|deadlock_priority|deallocate|dec|decimal|declare|decrypt|decrypt_a|decryption|default_database|default_language|default_logon_domain|default_schema|definition|delay|delayed_durability|delimitedtext|density_vector|dependent|des|description|desired_state|desx|differential|digest|disable|disable_broker|disable_def_cnst_chk|disabled|disk|distinct|distributed|distribution|drop|drop_existing|dts_buffers|dump|durability|dynamic|edition|elements|else|emergency|empty|enable|enable_broker|enabled|encoding|encrypted|encrypted_value|encryption|encryption_type|end|endpoint|endpoint_url|enhancedintegrity|entry|error_broker_conversations|errorfile|estimateonly|event|except|exec|executable|execute|exists|expand|expiredate|expiry_date|explicit|external|external_access|failover|failover_mode|failure_condition_level|fast|fast_forward|fastfirstrow|federated_service_account|fetch|field_terminator|fieldterminator|file|filelistonly|filegroup|filename|filestream|filestream_log|filestream_on|filetable|file_format|filter|first_row|fips_flagger|fire_triggers|first|firstrow|float|flush_interval_seconds|fmtonly|following|force|force_failover_allow_data_loss|force_service_allow_data_loss|forced|forceplan|formatfile|format_options|format_type|formsof|forward_only|free_cursors|free_exec_context|fullscan|fulltext|fulltextall|fulltextkey|function|generated|get|geography|geometry|global|go|goto|governor|guid|hadoop|hardening|hash|hashed|header_limit|headeronly|health_check_timeout|hidden|hierarchyid|histogram|histogram_steps|hits_cursors|hits_exec_context|hour(s)?|http|identity|identity_value|if|ifnull|ignore|ignore_constraints|ignore_dup_key|ignore_dup_row|ignore_triggers|image|immediate|implicit_transactions|include|include_null_values|index|inflectional|init|initiator|insensitive|insert|instead|int|integer|integrated|intersect|intermediate|interval_length_minutes|into|inuse_cursors|inuse_exec_context|io|is|isabout|iso_week|isolation|job_tracker_location|json|keep|keep_nulls|keep_replication|keepdefaults|keepfixed|keepidentity|keepnulls|kerberos|key|key_path|key_source|key_store_provider_name|keyset|kill|kilobytes_per_batch|labelonly|langid|language|last|lastrow|leading|legacy_cardinality_estimation|length|level|lifetime|lineage_80_to_100|lineage_100_to_80|listener_ip|listener_port|load|loadhistory|lob_compaction|local|local_service_name|locate|location|lock_escalation|lock_timeout|lockres|log|login|login_type|loop|manual|mark_in_use_for_removal|masked|master|matched|max_queue_readers|max_duration|max_outstanding_io_per_volume|maxdop|maxerrors|maxlength|maxtransfersize|max_plans_per_query|max_storage_size_mb|mediadescription|medianame|mediapassword|memogroup|memory_optimized|merge|message|message_forward_size|message_forwarding|microsecond|millisecond|minute(s)?|mirror_address|misses_cursors|misses_exec_context|mixed|modify|money|month|move|multi_user|must_change|name|namespace|nanosecond|native|native_compilation|nchar|ncharacter|never|new_account|new_broker|newname|next|no|no_browsetable|no_checksum|no_compression|no_infomsgs|no_triggers|no_truncate|nocount|noexec|noexpand|noformat|noinit|nolock|nonatomic|nonclustered|nondurable|none|norecompute|norecovery|noreset|norewind|noskip|not|notification|nounload|now|nowait|ntext|ntlm|nulls|numeric|numeric_roundabort|nvarchar|object|objid|oem|offline|old_account|online|operation_mode|open|openjson|optimistic|option|orc|out|outer|output|over|override|owner|ownership|pad_index|page|page_checksum|page_verify|pagecount|paglock|param|parameter_sniffing|parameter_type_expansion|parameterization|parquet|parseonly|partial|partition|partner|password|path|pause|percentage|permission_set|persisted|period|physical_only|plan_forcing_mode|policy|pool|population|ports|preceding|precision|predicate|presume_abort|primary|primary_role|print|prior|priority |priority_level|private|proc(edure)?|procedure_name|profile|provider|quarter|query_capture_mode|query_governor_cost_limit|query_optimizer_hotfixes|query_store|queue|quoted_identifier|raiserror|range|raw|rcfile|rc2|rc4|rc4_128|rdbms|read_committed_snapshot|read|read_only|read_write|readcommitted|readcommittedlock|readonly|readpast|readuncommitted|readwrite|real|rebuild|receive|recmodel_70backcomp|recompile|reconfigure|recovery|recursive|recursive_triggers|redo_queue|reject_sample_value|reject_type|reject_value|relative|remote|remote_data_archive|remote_proc_transactions|remote_service_name|remove|removed_cursors|removed_exec_context|reorganize|repeat|repeatable|repeatableread|replace|replica|replicated|replnick_100_to_80|replnickarray_80_to_100|replnickarray_100_to_80|required|required_cursopt|resample|reset|resource|resource_manager_location|respect|restart|restore|restricted_user|resume|retaindays|retention|return|revert|rewind|rewindonly|returns|robust|role|rollup|root|round_robin|route|row|rowdump|rowguidcol|rowlock|row_terminator|rows|rows_per_batch|rowsets_only|rowterminator|rowversion|rsa_1024|rsa_2048|rsa_3072|rsa_4096|rsa_512|safe|safety|sample|save|scalar|schema|schemabinding|scoped|scroll|scroll_locks|sddl|second|secexpr|secondary|secondary_only|secondary_role|secret|security|securityaudit|selective|self|send|sent|sequence|serde_method|serializable|server|service|service_broker|service_name|service_objective|session_timeout|session|sessions|seterror|setopts|sets|shard_map_manager|shard_map_name|sharded|shared_memory|show_statistics|showplan_all|showplan_text|showplan_xml|showplan_xml_with_recompile|shrinkdb|shutdown|sid|signature|simple|single_blob|single_clob|single_nclob|single_user|singleton|site|size_based_cleanup_mode|skip|smalldatetime|smallint|smallmoney|snapshot|snapshot_import|snapshotrestorephase|soap|softnuma|sort_in_tempdb|sorted_data|sorted_data_reorg|spatial|sql|sql_bigint|sql_binary|sql_bit|sql_char|sql_date|sql_decimal|sql_double|sql_float|sql_guid|sql_handle|sql_longvarbinary|sql_longvarchar|sql_numeric|sql_real|sql_smallint|sql_time|sql_timestamp|sql_tinyint|sql_tsi_day|sql_tsi_frac_second|sql_tsi_hour|sql_tsi_minute|sql_tsi_month|sql_tsi_quarter|sql_tsi_second|sql_tsi_week|sql_tsi_year|sql_type_date|sql_type_time|sql_type_timestamp|sql_varbinary|sql_varchar|sql_variant|sql_wchar|sql_wlongvarchar|ssl|ssl_port|standard|standby|start|start_date|started|stat_header|state|statement|static|statistics|statistics_incremental|statistics_norecompute|statistics_only|statman|stats|stats_stream|status|stop|stop_on_error|stopat|stopatmark|stopbeforemark|stoplist|stopped|string_delimiter|subject|supplemental_logging|supported|suspend|symmetric|synchronous_commit|synonym|sysname|system|system_time|system_versioning|table|tableresults|tablock|tablockx|take|tape|target|target_index|target_partition|tcp|temporal_history_retention|text|textimage_on|then|thesaurus|throw|time|timeout|timestamp|tinyint|to|top|torn_page_detection|track_columns_updated|trailing|tran|transaction|transfer|triple_des|triple_des_3key|truncate|trustworthy|try|tsql|type|type_desc|type_warning|tzoffset|uid|unbounded|uncommitted|unique|uniqueidentifier|unlimited|unload|unlock|unsafe|updlock|url|use|useplan|useroptions|use_type_default|using|utcdatetime|valid_xml|validation|value|values|varbinary|varchar|verbose|verifyonly|version|view_metadata|virtual_device|visiblity|wait_at_low_priority|waitfor|webmethod|week|weekday|weight|well_formed_xml|when|while|widechar|widechar_ansi|widenative|window|windows|with|within|within group|witness|without|without_array_wrapper|workload|wsdl|xact_abort|xlock|xml|xmlschema|xquery|xsinil|year|zone)\\b", "name": "keyword.other.sql" }, { @@ -424,14 +424,22 @@ "patterns": [] }, { - "begin": "/\\*", - "captures": { - "0": { - "name": "punctuation.definition.comment.sql" - } - }, - "end": "\\*/", - "name": "comment.block.c" + "include": "#comment-block" + } + ] + }, + "comment-block": { + "begin": "/\\*", + "captures": { + "0": { + "name": "punctuation.definition.comment.sql" + } + }, + "end": "\\*/", + "name": "comment.block", + "patterns": [ + { + "include": "#comment-block" } ] }, diff --git a/extensions/theme-abyss/themes/abyss-color-theme.json b/extensions/theme-abyss/themes/abyss-color-theme.json index e81c3b9adca..4202bdd7d2a 100644 --- a/extensions/theme-abyss/themes/abyss-color-theme.json +++ b/extensions/theme-abyss/themes/abyss-color-theme.json @@ -17,8 +17,11 @@ } }, { - "name": "Comment", - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "foreground": "#384887" } diff --git a/extensions/theme-defaults/package.json b/extensions/theme-defaults/package.json index c7e4d25aeaf..2458ef317da 100644 --- a/extensions/theme-defaults/package.json +++ b/extensions/theme-defaults/package.json @@ -20,10 +20,10 @@ "path": "./themes/dark_plus.json" }, { - "id": "Default Dark+ Experimental", - "label": "%darkPlusExperimentalColorThemeLabel%", + "id": "Default Dark Modern", + "label": "%darkModernThemeLabel%", "uiTheme": "vs-dark", - "path": "./themes/dark_plus_experimental.json" + "path": "./themes/dark_modern.json" }, { "id": "Default Light+", @@ -32,10 +32,10 @@ "path": "./themes/light_plus.json" }, { - "id": "Default Light+ Experimental", - "label": "%lightPlusExperimentalColorThemeLabel%", + "id": "Default Light Modern", + "label": "%lightModernThemeLabel%", "uiTheme": "vs", - "path": "./themes/light_plus_experimental.json" + "path": "./themes/light_modern.json" }, { "id": "Visual Studio Dark", diff --git a/extensions/theme-defaults/package.nls.json b/extensions/theme-defaults/package.nls.json index bcb5691a95b..cacbd6b8d9a 100644 --- a/extensions/theme-defaults/package.nls.json +++ b/extensions/theme-defaults/package.nls.json @@ -1,10 +1,10 @@ { "displayName": "Default Themes", "description": "The default Visual Studio light and dark themes", - "darkPlusColorThemeLabel": "Dark+ (default dark)", - "darkPlusExperimentalColorThemeLabel": "Dark+ V2 (Experimental)", - "lightPlusColorThemeLabel": "Light+ (default light)", - "lightPlusExperimentalColorThemeLabel": "Light+ V2 (Experimental)", + "darkPlusColorThemeLabel": "Dark+", + "darkModernThemeLabel": "Dark Modern", + "lightPlusColorThemeLabel": "Light+", + "lightModernThemeLabel": "Light Modern", "darkColorThemeLabel": "Dark (Visual Studio)", "lightColorThemeLabel": "Light (Visual Studio)", "hcColorThemeLabel": "Dark High Contrast", diff --git a/extensions/theme-defaults/themes/dark_plus_experimental.json b/extensions/theme-defaults/themes/dark_modern.json similarity index 92% rename from extensions/theme-defaults/themes/dark_plus_experimental.json rename to extensions/theme-defaults/themes/dark_modern.json index 0eeea832e42..14fc09e91c1 100644 --- a/extensions/theme-defaults/themes/dark_plus_experimental.json +++ b/extensions/theme-defaults/themes/dark_modern.json @@ -1,6 +1,6 @@ { "$schema": "vscode://schemas/color-theme", - "name": "Dark+ (Experimental)", + "name": "Default Dark Modern", "include": "./dark_plus.json", "colors": { "activityBar.activeBorder": "#0078d4", @@ -30,7 +30,7 @@ "dropdown.background": "#313131", "dropdown.border": "#ffffff1f", "dropdown.foreground": "#cccccc", - "dropdown.listBackground": "#313131", + "dropdown.listBackground": "#1f1f1f", "editor.background": "#1f1f1f", "editor.findMatchBackground": "#9e6a03", "editor.foreground": "#cccccc", @@ -40,10 +40,8 @@ "editorGutter.addedBackground": "#2ea043", "editorGutter.deletedBackground": "#f85149", "editorGutter.modifiedBackground": "#0078d4", - "editorInlayHint.background": "#8b949e33", - "editorInlayHint.foreground": "#8b949e", - "editorInlayHint.typeBackground": "#8b949e33", - "editorInlayHint.typeForeground": "#8b949e", + "editorInlayHint.background": "#8b949e1b", + "editorInlayHint.typeBackground": "#8b949e1b", "editorLineNumber.activeForeground": "#cccccc", "editorLineNumber.foreground": "#6e7681", "editorOverviewRuler.border": "#010409", @@ -52,14 +50,14 @@ "focusBorder": "#0078d4", "foreground": "#cccccc", "icon.foreground": "#cccccc", - "input.background": "#ffffff0f", + "input.background": "#2a2a2a", "input.border": "#ffffff1f", "input.foreground": "#cccccc", "input.placeholderForeground": "#ffffff79", "inputOption.activeBackground": "#2489db82", "inputOption.activeBorder": "#2488db", "keybindingLabel.foreground": "#cccccc", - "list.activeSelectionBackground": "#ffffff0f", + "list.activeSelectionBackground": "#323232", "list.activeSelectionIconForeground": "#ffffff", "list.activeSelectionForeground": "#ffffff", "menu.background": "#1f1f1f", @@ -102,6 +100,7 @@ "statusBar.border": "#ffffff15", "statusBar.debuggingBackground": "#0078d4", "statusBar.debuggingForeground": "#ffffff", + "statusBar.focusBorder": "#0078d4", "statusBar.foreground": "#cccccc", "statusBar.noFolderBackground": "#1f1f1f", "statusBarItem.focusBorder": "#0078d4", @@ -126,7 +125,6 @@ "textCodeBlock.background": "#6e768166", "textLink.activeForeground": "#40A6FF", "textLink.foreground": "#40A6FF", - "textPreformat.foreground": "#f85149", "textSeparator.foreground": "#21262d", "titleBar.activeBackground": "#181818", "titleBar.activeForeground": "#cccccc", @@ -135,6 +133,6 @@ "titleBar.inactiveForeground": "#8b949e", "welcomePage.tileBackground": "#ffffff0f", "welcomePage.progress.foreground": "#0078d4", - "widgetBorder": "#ffffff15", + "widget.border": "#ffffff15", }, } diff --git a/extensions/theme-defaults/themes/dark_plus.json b/extensions/theme-defaults/themes/dark_plus.json index 31830994812..ed80b1785f6 100644 --- a/extensions/theme-defaults/themes/dark_plus.json +++ b/extensions/theme-defaults/themes/dark_plus.json @@ -1,6 +1,6 @@ { "$schema": "vscode://schemas/color-theme", - "name": "Dark+ (default dark)", + "name": "Dark+", "include": "./dark_vs.json", "tokenColors": [ { @@ -173,7 +173,10 @@ } }, { - "scope": "constant.character", + "scope": [ + "constant.character", + "constant.other.option" + ], "settings": { "foreground": "#569cd6" } diff --git a/extensions/theme-defaults/themes/dark_vs.json b/extensions/theme-defaults/themes/dark_vs.json index 38af44cd2c1..04e33e07063 100644 --- a/extensions/theme-defaults/themes/dark_vs.json +++ b/extensions/theme-defaults/themes/dark_vs.json @@ -57,7 +57,11 @@ } }, { - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "foreground": "#6A9955" } diff --git a/extensions/theme-defaults/themes/hc_black.json b/extensions/theme-defaults/themes/hc_black.json index b8eda7974b7..dbc3d2808c2 100644 --- a/extensions/theme-defaults/themes/hc_black.json +++ b/extensions/theme-defaults/themes/hc_black.json @@ -43,7 +43,11 @@ } }, { - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "foreground": "#7ca668" } diff --git a/extensions/theme-defaults/themes/hc_light.json b/extensions/theme-defaults/themes/hc_light.json index 83a4083f90b..5a06c116a1a 100644 --- a/extensions/theme-defaults/themes/hc_light.json +++ b/extensions/theme-defaults/themes/hc_light.json @@ -27,7 +27,11 @@ } }, { - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "foreground": "#515151" } diff --git a/extensions/theme-defaults/themes/light_plus_experimental.json b/extensions/theme-defaults/themes/light_modern.json similarity index 95% rename from extensions/theme-defaults/themes/light_plus_experimental.json rename to extensions/theme-defaults/themes/light_modern.json index c1c0729ff8e..5640a255dc1 100644 --- a/extensions/theme-defaults/themes/light_plus_experimental.json +++ b/extensions/theme-defaults/themes/light_modern.json @@ -1,6 +1,6 @@ { "$schema": "vscode://schemas/color-theme", - "name": "Light+ (Experimental)", + "name": "Default Light Modern", "include": "./light_plus.json", "colors": { "activityBar.activeBorder": "#005FB8", @@ -41,10 +41,8 @@ "editorGutter.deletedBackground": "#f85149", "editorGutter.modifiedBackground": "#005FB8", "editorIndentGuide.background": "#D3D3D3", - "editorInlayHint.background": "#8b949e33", - "editorInlayHint.foreground": "#8b949e", - "editorInlayHint.typeBackground": "#8b949e33", - "editorInlayHint.typeForeground": "#8b949e", + "editorInlayHint.background": "#8b949e1b", + "editorInlayHint.typeBackground": "#8b949e1b", "editorLineNumber.activeForeground": "#171184", "editorLineNumber.foreground": "#6e7681", "editorOverviewRuler.border": "#0000001a", @@ -137,7 +135,7 @@ "terminal.tab.activeBorder": "#005fb8", "textBlockQuote.background": "#f8f8f8", "textBlockQuote.border": "#0000001a", - "textCodeBlock.background": "#6e768166", + "textCodeBlock.background": "#f2f2f2", "textLink.activeForeground": "#005FB8", "textLink.foreground": "#005FB8", "textSeparator.foreground": "#21262d", @@ -147,6 +145,6 @@ "titleBar.inactiveBackground": "#f8f8f8", "titleBar.inactiveForeground": "#8b949e", "welcomePage.tileBackground": "#f3f3f3", - "widgetBorder": "#0000001a", + "widget.border": "#0000001a", }, } diff --git a/extensions/theme-defaults/themes/light_plus.json b/extensions/theme-defaults/themes/light_plus.json index 9a0d0d6dea4..f73b79579f0 100644 --- a/extensions/theme-defaults/themes/light_plus.json +++ b/extensions/theme-defaults/themes/light_plus.json @@ -1,6 +1,6 @@ { "$schema": "vscode://schemas/color-theme", - "name": "Light+ (default light)", + "name": "Light+", "include": "./light_vs.json", "tokenColors": [ // adds rules to the light vs rules { @@ -174,7 +174,10 @@ } }, { - "scope": "constant.character", + "scope": [ + "constant.character", + "constant.other.option" + ], "settings": { "foreground": "#0000ff" } diff --git a/extensions/theme-defaults/themes/light_vs.json b/extensions/theme-defaults/themes/light_vs.json index 89589bb0e74..2cfe0ec0448 100644 --- a/extensions/theme-defaults/themes/light_vs.json +++ b/extensions/theme-defaults/themes/light_vs.json @@ -62,7 +62,11 @@ } }, { - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "foreground": "#008000" } diff --git a/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json b/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json index eeb4eeb6b88..b8f95bf86aa 100644 --- a/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json +++ b/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json @@ -81,7 +81,8 @@ "name": "Comments", "scope": [ "comment", - "punctuation.definition.comment" + "punctuation.definition.comment", + "string.quoted.docstring" ], "settings": { "foreground": "#a57a4c" diff --git a/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json b/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json index ea84bededd5..2ed1bcc96e0 100644 --- a/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json +++ b/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json @@ -78,8 +78,11 @@ } }, { - "name": "Comment", - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "fontStyle": "", "foreground": "#9A9B99" diff --git a/extensions/theme-monokai/themes/monokai-color-theme.json b/extensions/theme-monokai/themes/monokai-color-theme.json index 6489b0dd39c..2fddaa5972c 100644 --- a/extensions/theme-monokai/themes/monokai-color-theme.json +++ b/extensions/theme-monokai/themes/monokai-color-theme.json @@ -118,8 +118,11 @@ } }, { - "name": "Comment", - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "foreground": "#88846f" } diff --git a/extensions/theme-quietlight/themes/quietlight-color-theme.json b/extensions/theme-quietlight/themes/quietlight-color-theme.json index 9d55f2e362b..a01c73d3ec5 100644 --- a/extensions/theme-quietlight/themes/quietlight-color-theme.json +++ b/extensions/theme-quietlight/themes/quietlight-color-theme.json @@ -20,7 +20,8 @@ "name": "Comments", "scope": [ "comment", - "punctuation.definition.comment" + "punctuation.definition.comment", + "string.quoted.docstring" ], "settings": { "fontStyle": "italic", diff --git a/extensions/theme-red/themes/Red-color-theme.json b/extensions/theme-red/themes/Red-color-theme.json index c139400dc56..cf0f69316b2 100644 --- a/extensions/theme-red/themes/Red-color-theme.json +++ b/extensions/theme-red/themes/Red-color-theme.json @@ -77,8 +77,11 @@ } }, { - "name": "Comment", - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "fontStyle": "italic", "foreground": "#e7c0c0ff" diff --git a/extensions/theme-seti/build/update-icon-theme.js b/extensions/theme-seti/build/update-icon-theme.js index ab2a1c81e81..366e7f37dd6 100644 --- a/extensions/theme-seti/build/update-icon-theme.js +++ b/extensions/theme-seti/build/update-icon-theme.js @@ -44,6 +44,7 @@ const nonBuiltInLanguages = { // { fileNames, extensions } // list of languagesId that inherit the icon from another language const inheritIconFromLanguage = { "jsonc": 'json', + "jsonl": 'json', "postcss": 'css', "django-html": 'html', "blade": 'php' diff --git a/extensions/theme-seti/icons/vs-seti-icon-theme.json b/extensions/theme-seti/icons/vs-seti-icon-theme.json index f5b78299680..184cded8cad 100644 --- a/extensions/theme-seti/icons/vs-seti-icon-theme.json +++ b/extensions/theme-seti/icons/vs-seti-icon-theme.json @@ -1943,6 +1943,7 @@ "todo": "_todo", "vala": "_vala", "vue": "_vue", + "jsonl": "_json", "postcss": "_css", "django-html": "_html_3", "blade": "_php" @@ -2257,6 +2258,7 @@ "terraform": "_terraform_light", "vala": "_vala_light", "vue": "_vue_light", + "jsonl": "_json_light", "postcss": "_css_light", "django-html": "_html_3_light", "blade": "_php_light" diff --git a/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json b/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json index e10c6e67403..3abb94bd426 100644 --- a/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json +++ b/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json @@ -17,8 +17,11 @@ } }, { - "name": "Comment", - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "fontStyle": "italic", "foreground": "#586E75" diff --git a/extensions/theme-solarized-light/themes/solarized-light-color-theme.json b/extensions/theme-solarized-light/themes/solarized-light-color-theme.json index 8b4074c9a07..19ccf4fc92e 100644 --- a/extensions/theme-solarized-light/themes/solarized-light-color-theme.json +++ b/extensions/theme-solarized-light/themes/solarized-light-color-theme.json @@ -17,8 +17,11 @@ } }, { - "name": "Comment", - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "fontStyle": "italic", "foreground": "#93A1A1" 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 8e24e6fe4de..5591d39f1a9 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 @@ -78,8 +78,11 @@ } }, { - "name": "Comment", - "scope": "comment", + "name": "Comments", + "scope": [ + "comment", + "string.quoted.docstring" + ], "settings": { "foreground": "#7285B7" } diff --git a/extensions/typescript-basics/cgmanifest.json b/extensions/typescript-basics/cgmanifest.json index 825d91cb611..4b7b1b2d37a 100644 --- a/extensions/typescript-basics/cgmanifest.json +++ b/extensions/typescript-basics/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "TypeScript-TmLanguage", "repositoryUrl": "https://github.com/microsoft/TypeScript-TmLanguage", - "commitHash": "0d73d1117e0a9b1d6635ebbe9aa37d615171b02d" + "commitHash": "8c7482b94b548eab56da64dbfb30b82589b3f747" } }, "license": "MIT", diff --git a/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json b/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json index cd028501bd6..81eeb5b5d96 100644 --- a/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json +++ b/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/0d73d1117e0a9b1d6635ebbe9aa37d615171b02d", + "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/8c7482b94b548eab56da64dbfb30b82589b3f747", "name": "TypeScript", "scopeName": "source.ts", "patterns": [ @@ -134,7 +134,7 @@ "name": "keyword.control.flow.ts" } }, - "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -296,7 +296,7 @@ { "name": "meta.var.expr.ts", "begin": "(?=(?|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#comment" @@ -1805,7 +1873,7 @@ }, { "begin": "(?<=:)\\s*", - "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -1966,7 +2034,7 @@ "name": "storage.type.namespace.ts" } }, - "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2003,7 +2071,7 @@ "name": "entity.name.type.alias.ts" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2021,7 +2089,7 @@ "name": "keyword.control.intrinsic.ts" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2035,7 +2103,7 @@ "name": "keyword.operator.assignment.ts" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2226,7 +2294,7 @@ "name": "keyword.control.default.ts" } }, - "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#interface-declaration" @@ -2238,7 +2306,7 @@ }, { "name": "meta.export.ts", - "begin": "(?:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[,);}\\]=>:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type-arguments" @@ -3953,7 +4021,7 @@ "name": "keyword.operator.type.annotation.ts" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#arrow-return-type-body" @@ -3967,7 +4035,7 @@ "name": "meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "contentName": "meta.arrow.ts meta.return.type.arrow.ts", "patterns": [ { diff --git a/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json b/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json index bc4348140b5..e516ea1a1fa 100644 --- a/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json +++ b/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/0d73d1117e0a9b1d6635ebbe9aa37d615171b02d", + "version": "https://github.com/microsoft/TypeScript-TmLanguage/commit/8c7482b94b548eab56da64dbfb30b82589b3f747", "name": "TypeScriptReact", "scopeName": "source.tsx", "patterns": [ @@ -134,7 +134,7 @@ "name": "keyword.control.flow.tsx" } }, - "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -299,7 +299,7 @@ { "name": "meta.var.expr.tsx", "begin": "(?=(?|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#comment" @@ -1808,7 +1876,7 @@ }, { "begin": "(?<=:)\\s*", - "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#expression" @@ -1969,7 +2037,7 @@ "name": "storage.type.namespace.tsx" } }, - "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?<=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2006,7 +2074,7 @@ "name": "entity.name.type.alias.tsx" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#comment" @@ -2024,7 +2092,7 @@ "name": "keyword.control.intrinsic.tsx" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2038,7 +2106,7 @@ "name": "keyword.operator.assignment.tsx" } }, - "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type" @@ -2229,7 +2297,7 @@ "name": "keyword.control.default.tsx" } }, - "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#interface-declaration" @@ -2241,7 +2309,7 @@ }, { "name": "meta.export.tsx", - "begin": "(?:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", + "end": "(?=[,);}\\]=>:&|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))", "patterns": [ { "include": "#type-arguments" @@ -3904,7 +3972,7 @@ "name": "keyword.operator.type.annotation.tsx" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#arrow-return-type-body" @@ -3918,7 +3986,7 @@ "name": "meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx" } }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", + "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "contentName": "meta.arrow.tsx meta.return.type.arrow.tsx", "patterns": [ { diff --git a/extensions/typescript-language-features/extension-browser.webpack.config.js b/extensions/typescript-language-features/extension-browser.webpack.config.js index c931b906965..7e131117174 100644 --- a/extensions/typescript-language-features/extension-browser.webpack.config.js +++ b/extensions/typescript-language-features/extension-browser.webpack.config.js @@ -41,8 +41,7 @@ module.exports = [withBrowserDefaults({ patterns: [ { from: '../node_modules/typescript/lib/*.d.ts', - to: 'typescript/', - flatten: true + to: 'typescript/[name][ext]', }, { from: '../node_modules/typescript/lib/typesMap.json', @@ -50,9 +49,14 @@ module.exports = [withBrowserDefaults({ }, ...languages.map(lang => ({ from: `../node_modules/typescript/lib/${lang}/**/*`, - to: 'typescript/', - transformPath: (targetPath) => { - return targetPath.replace(/\.\.[\/\\]node_modules[\/\\]typescript[\/\\]lib/, ''); + to: (pathData) => { + const normalizedFileName = pathData.absoluteFilename.replace(/[\\/]/g, '/'); + const match = normalizedFileName.match(/typescript\/lib\/(.*)/); + if (match) { + return `typescript/${match[1]}`; + } + console.log(`Did not find typescript/lib in ${normalizedFileName}`); + return 'typescript/'; } })) ], diff --git a/extensions/typescript-language-features/media/nodejsWalkthroughIcon.png b/extensions/typescript-language-features/media/nodejsWalkthroughIcon.png deleted file mode 100644 index 10a8e5b822b..00000000000 Binary files a/extensions/typescript-language-features/media/nodejsWalkthroughIcon.png and /dev/null differ diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json index 30ccbd8558f..b9b63d61495 100644 --- a/extensions/typescript-language-features/package.json +++ b/extensions/typescript-language-features/package.json @@ -143,6 +143,12 @@ "title": "%configuration.typescript%", "order": 20, "properties": { + "typescript.experimental.aiQuickFix": { + "type": "boolean", + "default": true, + "description": "%typescript.experimental.aiQuickFix%", + "scope": "resource" + }, "typescript.tsdk": { "type": "string", "markdownDescription": "%typescript.tsdk.desc%", @@ -232,17 +238,6 @@ "description": "%typescript.tsserver.pluginPaths%", "scope": "machine" }, - "typescript.tsserver.trace": { - "type": "string", - "enum": [ - "off", - "messages", - "verbose" - ], - "default": "off", - "description": "%typescript.tsserver.trace%", - "scope": "window" - }, "javascript.suggest.completeFunctionCalls": { "type": "boolean", "default": false, @@ -525,6 +520,12 @@ "%format.semicolons.remove%" ] }, + "typescript.format.indentSwitchCase": { + "type": "boolean", + "default": true, + "description": "%format.indentSwitchCase%", + "scope": "resource" + }, "javascript.validate.enable": { "type": "boolean", "default": true, @@ -900,6 +901,12 @@ "index", "js" ], + "enumItemLabels": [ + null, + null, + null, + "%typescript.preferences.importModuleSpecifierEnding.label.js%" + ], "markdownEnumDescriptions": [ "%typescript.preferences.importModuleSpecifierEnding.auto%", "%typescript.preferences.importModuleSpecifierEnding.minimal%", @@ -918,6 +925,12 @@ "index", "js" ], + "enumItemLabels": [ + null, + null, + null, + "%typescript.preferences.importModuleSpecifierEnding.label.js%" + ], "markdownEnumDescriptions": [ "%typescript.preferences.importModuleSpecifierEnding.auto%", "%typescript.preferences.importModuleSpecifierEnding.minimal%", @@ -1018,6 +1031,18 @@ "description": "%typescript.preferences.useAliasesForRenames%", "scope": "language-overridable" }, + "javascript.preferences.renameMatchingJsxTags": { + "type": "boolean", + "default": true, + "description": "%typescript.preferences.renameMatchingJsxTags%", + "scope": "language-overridable" + }, + "typescript.preferences.renameMatchingJsxTags": { + "type": "boolean", + "default": true, + "description": "%typescript.preferences.renameMatchingJsxTags%", + "scope": "language-overridable" + }, "typescript.updateImportsOnFileMove.enabled": { "type": "string", "enum": [ @@ -1213,14 +1238,29 @@ "description": "%configuration.suggest.objectLiteralMethodSnippets.enabled%", "scope": "resource" }, - "typescript.experimental.tsserver.web.enableProjectWideIntellisense": { + "typescript.tsserver.web.projectWideIntellisense.enabled": { + "type": "boolean", + "default": true, + "description": "%configuration.tsserver.web.projectWideIntellisense.enabled%", + "scope": "window" + }, + "typescript.tsserver.web.projectWideIntellisense.suppressSemanticErrors": { + "type": "boolean", + "default": true, + "description": "%configuration.tsserver.web.projectWideIntellisense.suppressSemanticErrors%", + "scope": "window" + }, + "typescript.preferGoToSourceDefinition": { "type": "boolean", "default": false, - "description": "%typescript.experimental.tsserver.web.enableProjectWideIntellisense%", - "scope": "window", - "tags": [ - "experimental" - ] + "description": "%configuration.preferGoToSourceDefinition%", + "scope": "window" + }, + "javascript.preferGoToSourceDefinition": { + "type": "boolean", + "default": false, + "description": "%configuration.preferGoToSourceDefinition%", + "scope": "window" } } }, @@ -1242,12 +1282,12 @@ }, { "command": "typescript.goToProjectConfig", - "title": "%goToProjectConfig.title%", + "title": "%typescript.goToProjectConfig.title%", "category": "TypeScript" }, { "command": "javascript.goToProjectConfig", - "title": "%goToProjectConfig.title%", + "title": "%javascript.goToProjectConfig.title%", "category": "JavaScript" }, { @@ -1562,59 +1602,6 @@ } ] } - ], - "walkthroughs": [ - { - "id": "nodejsWelcome", - "title": "%walkthroughs.nodejsWelcome.title%", - "icon": "media/nodejsWalkthroughIcon.png", - "description": "%walkthroughs.nodejsWelcome.description%", - "when": "false", - "steps": [ - { - "id": "walkthroughs.nodejsWelcome.downloadNode.forMacOrWindows", - "title": "%walkthroughs.nodejsWelcome.downloadNode.forMacOrWindows.title%", - "description": "%walkthroughs.nodejsWelcome.downloadNode.forMacOrWindows.description%", - "media": { - "svg": "resources/walkthroughs/install-node-js.svg" - }, - "when": "isWindows || isMac" - }, - { - "id": "walkthroughs.nodejsWelcome.downloadNode.forLinux", - "title": "%walkthroughs.nodejsWelcome.downloadNode.forLinux.title%", - "description": "%walkthroughs.nodejsWelcome.downloadNode.forLinux.description%", - "media": { - "svg": "resources/walkthroughs/install-node-js.svg" - }, - "when": "isLinux" - }, - { - "id": "walkthroughs.nodejsWelcome.makeJsFile", - "title": "%walkthroughs.nodejsWelcome.makeJsFile.title%", - "description": "%walkthroughs.nodejsWelcome.makeJsFile.description%", - "media": { - "svg": "resources/walkthroughs/create-a-js-file.svg" - } - }, - { - "id": "walkthroughs.nodejsWelcome.debugJsFile", - "title": "%walkthroughs.nodejsWelcome.debugJsFile.title%", - "description": "%walkthroughs.nodejsWelcome.debugJsFile.description%", - "media": { - "svg": "resources/walkthroughs/debug-and-run.svg" - } - }, - { - "id": "walkthroughs.nodejsWelcome.learnMoreAboutJs", - "title": "%walkthroughs.nodejsWelcome.learnMoreAboutJs.title%", - "description": "%walkthroughs.nodejsWelcome.learnMoreAboutJs.description%", - "media": { - "svg": "resources/walkthroughs/learn-more.svg" - } - } - ] - } ] }, "repository": { diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json index fdf08f0d41a..bd4dd6366ad 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json @@ -8,6 +8,7 @@ "configuration.suggest.completeFunctionCalls": "Complete functions with their parameter signature.", "configuration.suggest.includeAutomaticOptionalChainCompletions": "Enable/disable showing completions on potentially undefined values that insert an optional chain call. Requires strict null checks to be enabled.", "configuration.suggest.includeCompletionsForImportStatements": "Enable/disable auto-import-style completions on partially-typed import statements.", + "typescript.experimental.aiQuickFix": "Enable/disable AI-assisted quick fixes. Requires an extension providing AI chat functionality.", "typescript.tsdk.desc": "Specifies the folder path to the tsserver and `lib*.d.ts` files under a TypeScript install to use for IntelliSense, for example: `./node_modules/typescript/lib`.\n\n- When specified as a user setting, the TypeScript version from `typescript.tsdk` automatically replaces the built-in TypeScript version.\n- When specified as a workspace setting, `typescript.tsdk` allows you to switch to use that workspace version of TypeScript for IntelliSense with the `TypeScript: Select TypeScript version` command.\n\nSee the [TypeScript documentation](https://code.visualstudio.com/docs/typescript/typescript-compiling#_using-newer-typescript-versions) for more detail about managing TypeScript versions.", "typescript.disableAutomaticTypeAcquisition": "Disables [automatic type acquisition](https://code.visualstudio.com/docs/nodejs/working-with-javascript#_typings-and-automatic-type-acquisition). Automatic type acquisition fetches `@types` packages from npm to improve IntelliSense for external libraries.", "typescript.enablePromptUseWorkspaceTsdk": "Enables prompting of users to use the TypeScript version configured in the workspace for Intellisense.", @@ -39,15 +40,17 @@ "format.semicolons.ignore": "Don't insert or remove any semicolons.", "format.semicolons.insert": "Insert semicolons at statement ends.", "format.semicolons.remove": "Remove unnecessary semicolons.", + "format.indentSwitchCase": "Indent case clauses in switch statements. Requires using TypeScript 5.1+ in the workspace.", "javascript.validate.enable": "Enable/disable JavaScript validation.", - "goToProjectConfig.title": "Go to Project Configuration", + "javascript.goToProjectConfig.title": "Go to Project Configuration (jsconfig / tsconfig)", + "typescript.goToProjectConfig.title": "Go to Project Configuration (tsconfig)", "javascript.referencesCodeLens.enabled": "Enable/disable references CodeLens in JavaScript files.", "javascript.referencesCodeLens.showOnAllFunctions": "Enable/disable references CodeLens on all functions in JavaScript files.", "typescript.referencesCodeLens.enabled": "Enable/disable references CodeLens in TypeScript files.", "typescript.referencesCodeLens.showOnAllFunctions": "Enable/disable references CodeLens on all functions in TypeScript files.", "typescript.implementationsCodeLens.enabled": "Enable/disable implementations CodeLens. This CodeLens shows the implementers of an interface.", "typescript.openTsServerLog.title": "Open TS Server log", - "typescript.restartTsServer": "Restart TS server", + "typescript.restartTsServer": "Restart TS Server", "typescript.selectTypeScriptVersion.title": "Select TypeScript Version...", "typescript.reportStyleChecksAsWarnings": "Report style checks as warnings.", "typescript.npm": "Specifies the path to the npm executable used for [Automatic Type Acquisition](https://code.visualstudio.com/docs/nodejs/working-with-javascript#_typings-and-automatic-type-acquisition).", @@ -80,34 +83,47 @@ "configuration.implicitProjectConfig.strictFunctionTypes": "Enable/disable [strict function types](https://www.typescriptlang.org/tsconfig#strictFunctionTypes) in JavaScript and TypeScript files that are not part of a project. Existing `jsconfig.json` or `tsconfig.json` files override this setting.", "configuration.suggest.jsdoc.generateReturns": "Enable/disable generating `@returns` annotations for JSDoc templates.", "configuration.suggest.autoImports": "Enable/disable auto import suggestions.", + "configuration.preferGoToSourceDefinition": "Makes Go to Definition avoid type declaration files when possible by triggering Go to Source Definition instead. This allows Go to Source Definition to be triggered with the mouse gesture. Requires using TypeScript 4.7+ in the workspace.", "inlayHints.parameterNames.none": "Disable parameter name hints.", "inlayHints.parameterNames.literals": "Enable parameter name hints only for literal arguments.", "inlayHints.parameterNames.all": "Enable parameter name hints for literal and non-literal arguments.", "configuration.inlayHints.parameterNames.enabled": { "message": "Enable/disable inlay hints for parameter names:\n```typescript\n\nparseInt(/* str: */ '123', /* radix: */ 8)\n \n```", - "comment": ["The text inside the ``` block is code and should not be localized."] + "comment": [ + "The text inside the ``` block is code and should not be localized." + ] }, "configuration.inlayHints.parameterNames.suppressWhenArgumentMatchesName": "Suppress parameter name hints on arguments whose text is identical to the parameter name.", "configuration.inlayHints.parameterTypes.enabled": { "message": "Enable/disable inlay hints for implicit parameter types:\n```typescript\n\nel.addEventListener('click', e /* :MouseEvent */ => ...)\n \n```", - "comment": ["The text inside the ``` block is code and should not be localized."] + "comment": [ + "The text inside the ``` block is code and should not be localized." + ] }, "configuration.inlayHints.variableTypes.enabled": { "message": "Enable/disable inlay hints for implicit variable types:\n```typescript\n\nconst foo /* :number */ = Date.now();\n \n```", - "comment": ["The text inside the ``` block is code and should not be localized."] + "comment": [ + "The text inside the ``` block is code and should not be localized." + ] }, "configuration.inlayHints.variableTypes.suppressWhenTypeMatchesName": "Suppress type hints on variables whose name is identical to the type name. Requires using TypeScript 4.8+ in the workspace.", "configuration.inlayHints.propertyDeclarationTypes.enabled": { "message": "Enable/disable inlay hints for implicit types on property declarations:\n```typescript\n\nclass Foo {\n\tprop /* :number */ = Date.now();\n}\n \n```", - "comment": ["The text inside the ``` block is code and should not be localized."] + "comment": [ + "The text inside the ``` block is code and should not be localized." + ] }, "configuration.inlayHints.functionLikeReturnTypes.enabled": { "message": "Enable/disable inlay hints for implicit return types on function signatures:\n```typescript\n\nfunction foo() /* :number */ {\n\treturn Date.now();\n} \n \n```", - "comment": ["The text inside the ``` block is code and should not be localized."] + "comment": [ + "The text inside the ``` block is code and should not be localized." + ] }, "configuration.inlayHints.enumMemberValues.enabled": { "message": "Enable/disable inlay hints for member values in enum declarations:\n```typescript\n\nenum MyValue {\n\tA /* = 0 */;\n\tB /* = 1 */;\n}\n \n```", - "comment": ["The text inside the ``` block is code and should not be localized."] + "comment": [ + "The text inside the ``` block is code and should not be localized." + ] }, "taskDefinition.tsconfig.description": "The tsconfig file that defines the TS build.", "javascript.suggestionActions.enabled": "Enable/disable suggestion diagnostics for JavaScript files in the editor.", @@ -122,10 +138,11 @@ "typescript.preferences.importModuleSpecifier.nonRelative": "Prefers a non-relative import based on the `baseUrl` or `paths` configured in your `jsconfig.json` / `tsconfig.json`.", "typescript.preferences.importModuleSpecifier.projectRelative": "Prefers a non-relative import only if the relative import path would leave the package or project directory.", "typescript.preferences.importModuleSpecifierEnding": "Preferred path ending for auto imports.", + "typescript.preferences.importModuleSpecifierEnding.label.js": ".js / .ts", "typescript.preferences.importModuleSpecifierEnding.auto": "Use project settings to select a default.", "typescript.preferences.importModuleSpecifierEnding.minimal": "Shorten `./component/index.js` to `./component`.", "typescript.preferences.importModuleSpecifierEnding.index": "Shorten `./component/index.js` to `./component/index`.", - "typescript.preferences.importModuleSpecifierEnding.js": "Do not shorten path endings; include the `.js` extension.", + "typescript.preferences.importModuleSpecifierEnding.js": "Do not shorten path endings; include the `.js` or `.ts` extension.", "typescript.preferences.jsxAttributeCompletionStyle": "Preferred style for JSX attribute completions.", "javascript.preferences.jsxAttributeCompletionStyle.auto": "Insert `={}` or `=\"\"` after attribute names based on the prop type. See `javascript.preferences.quoteStyle` to control the type of quotes used for string attributes.", "typescript.preferences.jsxAttributeCompletionStyle.auto": "Insert `={}` or `=\"\"` after attribute names based on the prop type. See `typescript.preferences.quoteStyle` to control the type of quotes used for string attributes.", @@ -164,6 +181,7 @@ "configuration.tsserver.watchOptions.synchronousWatchDirectory": "Disable deferred watching on directories. Deferred watching is useful when lots of file changes might occur at once (e.g. a change in node_modules from running npm install), but you might want to disable it with this flag for some less-common setups.", "typescript.preferences.renameShorthandProperties.deprecationMessage": "The setting 'typescript.preferences.renameShorthandProperties' has been deprecated in favor of 'typescript.preferences.useAliasesForRenames'", "typescript.preferences.useAliasesForRenames": "Enable/disable introducing aliases for object shorthand properties during renames.", + "typescript.preferences.renameMatchingJsxTags": "When on a JSX tag, try to rename the matching tag instead of renaming the symbol. Requires using TypeScript 5.1+ in the workspace.", "typescript.workspaceSymbols.scope": "Controls which files are searched by [Go to Symbol in Workspace](https://code.visualstudio.com/docs/editor/editingevolved#_open-symbol-by-name).", "typescript.workspaceSymbols.scope.allOpenProjects": "Search all open JavaScript or TypeScript projects for symbols.", "typescript.workspaceSymbols.scope.currentProject": "Only search for symbols in the current JavaScript or TypeScript project.", @@ -193,26 +211,6 @@ "typescript.goToSourceDefinition": "Go to Source Definition", "configuration.suggest.classMemberSnippets.enabled": "Enable/disable snippet completions for class members.", "configuration.suggest.objectLiteralMethodSnippets.enabled": "Enable/disable snippet completions for methods in object literals. Requires using TypeScript 4.7+ in the workspace.", - - "typescript.experimental.tsserver.web.enableProjectWideIntellisense": "Enable/disable project-wide IntelliSense on web. Requires that VS Code is running in a trusted context.", - - "walkthroughs.nodejsWelcome.title": "Get started with JavaScript and Node.js", - "walkthroughs.nodejsWelcome.description": "Make the most of Visual Studio Code's first-class JavaScript experience.", - - "walkthroughs.nodejsWelcome.downloadNode.forMacOrWindows.title": "Install Node.js", - "walkthroughs.nodejsWelcome.downloadNode.forMacOrWindows.description": "Node.js is an easy way to run JavaScript code. You can use it to quickly build command-line apps and servers. It also comes with npm, a package manager which makes reusing and sharing JavaScript code easy.\n[Install Node.js](https://nodejs.org/en/download/)", - - "walkthroughs.nodejsWelcome.downloadNode.forLinux.title": "Install Node.js", - "walkthroughs.nodejsWelcome.downloadNode.forLinux.description": "Node.js is an easy way to run JavaScript code. You can use it to quickly build command-line apps and servers. It also comes with npm, a package manager which makes reusing and sharing JavaScript code easy.\n[Install Node.js](https://nodejs.org/en/download/package-manager/)", - - "walkthroughs.nodejsWelcome.makeJsFile.title": "Create a JavaScript File", - "walkthroughs.nodejsWelcome.makeJsFile.description": "Let's write our first JavaScript file. We'll have to create a new file and save it with the ``.js`` extension at the end of the file name.\n[Create a JavaScript File](command:javascript-walkthrough.commands.createJsFile)", - - "walkthroughs.nodejsWelcome.debugJsFile.title": "Run and Debug your JavaScript", - "walkthroughs.nodejsWelcome.debugJsFile.description": "Once you've installed Node.js, you can run JavaScript programs at a terminal by entering ``node your-file-name.js``\nAnother easy way to run Node.js programs is by using VS Code's debugger which lets you run your code, pause at different points, and help you understand what's going on step-by-step.\n[Start Debugging](command:javascript-walkthrough.commands.debugJsFile)", - "walkthroughs.nodejsWelcome.debugJsFile.altText": "Debug and run your JavaScript code in Node.js with Visual Studio Code.", - - "walkthroughs.nodejsWelcome.learnMoreAboutJs.title": "Explore More", - "walkthroughs.nodejsWelcome.learnMoreAboutJs.description": "Want to get more comfortable with JavaScript, Node.js, and VS Code? Be sure to check out our docs!\nWe've got lots of resources for learning [JavaScript](https://code.visualstudio.com/docs/nodejs/working-with-javascript) and [Node.js](https://code.visualstudio.com/docs/nodejs/nodejs-tutorial).\n\n[Learn More](https://code.visualstudio.com/docs/nodejs/nodejs-tutorial)", - "walkthroughs.nodejsWelcome.learnMoreAboutJs.altText": "Learn more about JavaScript and Node.js in Visual Studio Code." + "configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that VS Code is running in a trusted context.", + "configuration.tsserver.web.projectWideIntellisense.suppressSemanticErrors": "Suppresses semantic errors. This is needed when using external packages as these can't be included analyzed on web." } diff --git a/extensions/typescript-language-features/src/api.ts b/extensions/typescript-language-features/src/api.ts index 67ca8be1cf7..5c408f6f29b 100644 --- a/extensions/typescript-language-features/src/api.ts +++ b/extensions/typescript-language-features/src/api.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { PluginManager } from './utils/plugins'; +import { PluginManager } from './tsServer/plugins'; class ApiV0 { public constructor( diff --git a/extensions/typescript-language-features/src/commands/configurePlugin.ts b/extensions/typescript-language-features/src/commands/configurePlugin.ts index f781c4a50fa..356738294ad 100644 --- a/extensions/typescript-language-features/src/commands/configurePlugin.ts +++ b/extensions/typescript-language-features/src/commands/configurePlugin.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { PluginManager } from '../utils/plugins'; +import { PluginManager } from '../tsServer/plugins'; import { Command } from './commandManager'; export class ConfigurePluginCommand implements Command { diff --git a/extensions/typescript-language-features/src/commands/goToProjectConfiguration.ts b/extensions/typescript-language-features/src/commands/goToProjectConfiguration.ts index fde3a4e40db..0222f32aae8 100644 --- a/extensions/typescript-language-features/src/commands/goToProjectConfiguration.ts +++ b/extensions/typescript-language-features/src/commands/goToProjectConfiguration.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import TypeScriptServiceClientHost from '../typeScriptServiceClientHost'; -import { ActiveJsTsEditorTracker } from '../utils/activeJsTsEditorTracker'; +import { ActiveJsTsEditorTracker } from '../ui/activeJsTsEditorTracker'; import { Lazy } from '../utils/lazy'; -import { openProjectConfigForFile, ProjectType } from '../utils/tsconfig'; +import { openProjectConfigForFile, ProjectType } from '../tsconfig'; import { Command } from './commandManager'; export class TypeScriptGoToProjectConfigCommand implements Command { diff --git a/extensions/typescript-language-features/src/commands/index.ts b/extensions/typescript-language-features/src/commands/index.ts index 4b6f8d36ac3..7130f201975 100644 --- a/extensions/typescript-language-features/src/commands/index.ts +++ b/extensions/typescript-language-features/src/commands/index.ts @@ -3,14 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { PluginManager } from '../tsServer/plugins'; import TypeScriptServiceClientHost from '../typeScriptServiceClientHost'; -import { ActiveJsTsEditorTracker } from '../utils/activeJsTsEditorTracker'; +import { ActiveJsTsEditorTracker } from '../ui/activeJsTsEditorTracker'; import { Lazy } from '../utils/lazy'; -import { PluginManager } from '../utils/plugins'; import { CommandManager } from './commandManager'; import { ConfigurePluginCommand } from './configurePlugin'; import { JavaScriptGoToProjectConfigCommand, TypeScriptGoToProjectConfigCommand } from './goToProjectConfiguration'; import { LearnMoreAboutRefactoringsCommand } from './learnMoreAboutRefactorings'; +import { OpenJsDocLinkCommand } from './openJsDocLink'; import { OpenTsServerLogCommand } from './openTsServerLog'; import { ReloadJavaScriptProjectsCommand, ReloadTypeScriptProjectsCommand } from './reloadProject'; import { RestartTsServerCommand } from './restartTsServer'; @@ -33,4 +34,5 @@ export function registerBaseCommands( commandManager.register(new ConfigurePluginCommand(pluginManager)); commandManager.register(new LearnMoreAboutRefactoringsCommand()); commandManager.register(new TSServerRequestCommand(lazyClientHost)); + commandManager.register(new OpenJsDocLinkCommand()); } diff --git a/extensions/typescript-language-features/src/commands/learnMoreAboutRefactorings.ts b/extensions/typescript-language-features/src/commands/learnMoreAboutRefactorings.ts index c1c21f363ee..212307f2cd8 100644 --- a/extensions/typescript-language-features/src/commands/learnMoreAboutRefactorings.ts +++ b/extensions/typescript-language-features/src/commands/learnMoreAboutRefactorings.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { isTypeScriptDocument } from '../utils/languageIds'; +import { isTypeScriptDocument } from '../configuration/languageIds'; import { Command } from './commandManager'; export class LearnMoreAboutRefactoringsCommand implements Command { diff --git a/extensions/typescript-language-features/src/commands/openJsDocLink.ts b/extensions/typescript-language-features/src/commands/openJsDocLink.ts new file mode 100644 index 00000000000..10a480a4bd3 --- /dev/null +++ b/extensions/typescript-language-features/src/commands/openJsDocLink.ts @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { Command } from './commandManager'; + +export interface OpenJsDocLinkCommand_Args { + readonly file: vscode.Uri; + readonly position: vscode.Position; +} + +/** + * Proxy command for opening links in jsdoc comments. + * + * This is needed to avoid incorrectly rewriting uris. + */ +export class OpenJsDocLinkCommand implements Command { + public static readonly id = '_typescript.openJsDocLink'; + public readonly id = OpenJsDocLinkCommand.id; + + public async execute(args: OpenJsDocLinkCommand_Args): Promise { + await vscode.commands.executeCommand('vscode.open', vscode.Uri.from(args.file), { + selection: new vscode.Range(args.position, args.position), + }); + } +} diff --git a/extensions/typescript-language-features/src/utils/configuration.browser.ts b/extensions/typescript-language-features/src/configuration/configuration.browser.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/configuration.browser.ts rename to extensions/typescript-language-features/src/configuration/configuration.browser.ts diff --git a/extensions/typescript-language-features/src/utils/configuration.electron.ts b/extensions/typescript-language-features/src/configuration/configuration.electron.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/configuration.electron.ts rename to extensions/typescript-language-features/src/configuration/configuration.electron.ts diff --git a/extensions/typescript-language-features/src/utils/configuration.ts b/extensions/typescript-language-features/src/configuration/configuration.ts similarity index 89% rename from extensions/typescript-language-features/src/utils/configuration.ts rename to extensions/typescript-language-features/src/configuration/configuration.ts index 2436aae8368..cab1cf4c819 100644 --- a/extensions/typescript-language-features/src/utils/configuration.ts +++ b/extensions/typescript-language-features/src/configuration/configuration.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import * as Proto from '../tsServer/protocol/protocol'; import * as objects from '../utils/objects'; -import * as Proto from '../protocol'; export enum TsServerLogLevel { Off, @@ -110,7 +110,8 @@ export interface TypeScriptServiceConfiguration { readonly implicitProjectConfiguration: ImplicitProjectConfiguration; readonly disableAutomaticTypeAcquisition: boolean; readonly useSyntaxServer: SyntaxServerConfiguration; - readonly enableProjectWideIntellisenseOnWeb: boolean; + readonly webProjectWideIntellisenseEnabled: boolean; + readonly webProjectWideIntellisenseSuppressSemanticErrors: boolean; readonly enableProjectDiagnostics: boolean; readonly maxTsServerMemory: number; readonly enablePromptUseWorkspaceTsdk: boolean; @@ -141,7 +142,8 @@ export abstract class BaseServiceConfigurationProvider implements ServiceConfigu implicitProjectConfiguration: new ImplicitProjectConfiguration(configuration), disableAutomaticTypeAcquisition: this.readDisableAutomaticTypeAcquisition(configuration), useSyntaxServer: this.readUseSyntaxServer(configuration), - enableProjectWideIntellisenseOnWeb: this.readEnableProjectWideIntellisenseOnWeb(configuration), + webProjectWideIntellisenseEnabled: this.readWebProjectWideIntellisenseEnable(configuration), + webProjectWideIntellisenseSuppressSemanticErrors: this.readWebProjectWideIntellisenseSuppressSemanticErrors(configuration), enableProjectDiagnostics: this.readEnableProjectDiagnostics(configuration), maxTsServerMemory: this.readMaxTsServerMemory(configuration), enablePromptUseWorkspaceTsdk: this.readEnablePromptUseWorkspaceTsdk(configuration), @@ -200,7 +202,9 @@ export abstract class BaseServiceConfigurationProvider implements ServiceConfigu } protected readWatchOptions(configuration: vscode.WorkspaceConfiguration): Proto.WatchOptions | undefined { - return configuration.get('typescript.tsserver.watchOptions'); + const watchOptions = configuration.get('typescript.tsserver.watchOptions'); + // Returned value may be a proxy. Clone it into a normal object + return { ...(watchOptions ?? {}) }; } protected readIncludePackageJsonAutoImports(configuration: vscode.WorkspaceConfiguration): 'auto' | 'on' | 'off' | undefined { @@ -225,7 +229,11 @@ export abstract class BaseServiceConfigurationProvider implements ServiceConfigu return configuration.get('typescript.tsserver.enableTracing', false); } - private readEnableProjectWideIntellisenseOnWeb(configuration: vscode.WorkspaceConfiguration): boolean { - return configuration.get('typescript.experimental.tsserver.web.enableProjectWideIntellisense', false); + private readWebProjectWideIntellisenseEnable(configuration: vscode.WorkspaceConfiguration): boolean { + return configuration.get('typescript.tsserver.web.projectWideIntellisense.enabled', true); + } + + private readWebProjectWideIntellisenseSuppressSemanticErrors(configuration: vscode.WorkspaceConfiguration): boolean { + return configuration.get('typescript.tsserver.web.projectWideIntellisense.suppressSemanticErrors', true); } } diff --git a/extensions/typescript-language-features/src/utils/documentSelector.ts b/extensions/typescript-language-features/src/configuration/documentSelector.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/documentSelector.ts rename to extensions/typescript-language-features/src/configuration/documentSelector.ts diff --git a/extensions/typescript-language-features/src/utils/fileSchemes.ts b/extensions/typescript-language-features/src/configuration/fileSchemes.ts similarity index 80% rename from extensions/typescript-language-features/src/utils/fileSchemes.ts rename to extensions/typescript-language-features/src/configuration/fileSchemes.ts index 66d9b0aa3f3..93417cde8e4 100644 --- a/extensions/typescript-language-features/src/utils/fileSchemes.ts +++ b/extensions/typescript-language-features/src/configuration/fileSchemes.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isWeb } from './platform'; import * as vscode from 'vscode'; +import { isWeb } from '../utils/platform'; export const file = 'file'; export const untitled = 'untitled'; @@ -19,13 +19,18 @@ export const memFs = 'memfs'; export const vscodeVfs = 'vscode-vfs'; export const officeScript = 'office-script'; -export const semanticSupportedSchemes = isWeb() && vscode.workspace.workspaceFolders ? - vscode.workspace.workspaceFolders.map(folder => folder.uri.scheme) : [ +export function getSemanticSupportedSchemes() { + if (isWeb() && vscode.workspace.workspaceFolders) { + return vscode.workspace.workspaceFolders.map(folder => folder.uri.scheme); + } + + return [ file, untitled, walkThroughSnippet, vscodeNotebookCell, ]; +} /** * File scheme for which JS/TS language feature should be disabled diff --git a/extensions/typescript-language-features/src/utils/languageDescription.ts b/extensions/typescript-language-features/src/configuration/languageDescription.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/languageDescription.ts rename to extensions/typescript-language-features/src/configuration/languageDescription.ts diff --git a/extensions/typescript-language-features/src/utils/languageIds.ts b/extensions/typescript-language-features/src/configuration/languageIds.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/languageIds.ts rename to extensions/typescript-language-features/src/configuration/languageIds.ts diff --git a/extensions/typescript-language-features/src/utils/schemes.ts b/extensions/typescript-language-features/src/configuration/schemes.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/schemes.ts rename to extensions/typescript-language-features/src/configuration/schemes.ts diff --git a/extensions/typescript-language-features/src/experimentTelemetryReporter.ts b/extensions/typescript-language-features/src/experimentTelemetryReporter.ts index ddd643fbc88..8fd7ce4aa66 100644 --- a/extensions/typescript-language-features/src/experimentTelemetryReporter.ts +++ b/extensions/typescript-language-features/src/experimentTelemetryReporter.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; import VsCodeTelemetryReporter from '@vscode/extension-telemetry'; +import * as vscode from 'vscode'; import * as tas from 'vscode-tas-client'; export interface IExperimentationTelemetryReporter extends tas.IExperimentationTelemetry, vscode.Disposable { diff --git a/extensions/typescript-language-features/src/experimentationService.ts b/extensions/typescript-language-features/src/experimentationService.ts index 86d1fd42b55..5dc458277d4 100644 --- a/extensions/typescript-language-features/src/experimentationService.ts +++ b/extensions/typescript-language-features/src/experimentationService.ts @@ -18,7 +18,7 @@ export class ExperimentationService { constructor(telemetryReporter: IExperimentationTelemetryReporter, id: string, version: string, globalState: vscode.Memento) { this._telemetryReporter = telemetryReporter; - this._experimentationServicePromise = createExperimentationService(this._telemetryReporter, id, version, globalState); + this._experimentationServicePromise = createTasExperimentationService(this._telemetryReporter, id, version, globalState); } public async getTreatmentVariable(name: K, defaultValue: ExperimentTypes[K]): Promise { @@ -32,7 +32,7 @@ export class ExperimentationService { } } -export async function createExperimentationService( +export async function createTasExperimentationService( reporter: IExperimentationTelemetryReporter, id: string, version: string, diff --git a/extensions/typescript-language-features/src/extension.browser.ts b/extensions/typescript-language-features/src/extension.browser.ts index 517c6f81d4b..392a81f7922 100644 --- a/extensions/typescript-language-features/src/extension.browser.ts +++ b/extensions/typescript-language-features/src/extension.browser.ts @@ -11,18 +11,19 @@ import { registerBaseCommands } from './commands/index'; import { ExperimentationTelemetryReporter, IExperimentationTelemetryReporter } from './experimentTelemetryReporter'; import { createLazyClientHost, lazilyActivateClient } from './lazyClientHost'; import RemoteRepositories from './remoteRepositories.browser'; +import { API } from './tsServer/api'; import { noopRequestCancellerFactory } from './tsServer/cancellation'; import { noopLogDirectoryProvider } from './tsServer/logDirectoryProvider'; import { WorkerServerProcessFactory } from './tsServer/serverProcess.browser'; import { ITypeScriptVersionProvider, TypeScriptVersion, TypeScriptVersionSource } from './tsServer/versionProvider'; -import { ActiveJsTsEditorTracker } from './utils/activeJsTsEditorTracker'; -import API from './utils/api'; -import { TypeScriptServiceConfiguration } from './utils/configuration'; -import { BrowserServiceConfigurationProvider } from './utils/configuration.browser'; -import { Logger } from './utils/logger'; +import { ActiveJsTsEditorTracker } from './ui/activeJsTsEditorTracker'; +import { TypeScriptServiceConfiguration } from './configuration/configuration'; +import { BrowserServiceConfigurationProvider } from './configuration/configuration.browser'; +import { Logger } from './logging/logger'; import { getPackageInfo } from './utils/packageInfo'; import { isWebAndHasSharedArrayBuffers } from './utils/platform'; -import { PluginManager } from './utils/plugins'; +import { PluginManager } from './tsServer/plugins'; +import { Disposable } from './utils/dispose'; class StaticVersionProvider implements ITypeScriptVersionProvider { @@ -59,7 +60,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { new TypeScriptVersion( TypeScriptVersionSource.Bundled, vscode.Uri.joinPath(context.extensionUri, 'dist/browser/typescript/tsserver.web.js').toString(), - API.fromSimpleString('4.9.3'))); + API.fromSimpleString('5.1.3'))); let experimentTelemetryReporter: IExperimentationTelemetryReporter | undefined; const packageInfo = getPackageInfo(context); @@ -78,7 +79,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { logDirectoryProvider: noopLogDirectoryProvider, cancellerFactory: noopRequestCancellerFactory, versionProvider, - processFactory: new WorkerServerProcessFactory(context.extensionUri), + processFactory: new WorkerServerProcessFactory(context.extensionUri, logger), activeJsTsEditorTracker, serviceConfigurationProvider: new BrowserServiceConfigurationProvider(), experimentTelemetryReporter, @@ -96,34 +97,63 @@ export async function activate(context: vscode.ExtensionContext): Promise { }); context.subscriptions.push(lazilyActivateClient(lazyClientHost, pluginManager, activeJsTsEditorTracker, async () => { - await preload(logger); + await startPreloadWorkspaceContentsIfNeeded(context, logger); })); return getExtensionApi(onCompletionAccepted.event, pluginManager); } -async function preload(logger: Logger): Promise { +async function startPreloadWorkspaceContentsIfNeeded(context: vscode.ExtensionContext, logger: Logger): Promise { if (!isWebAndHasSharedArrayBuffers()) { return; } const workspaceUri = vscode.workspace.workspaceFolders?.[0].uri; - if (!workspaceUri || workspaceUri.scheme !== 'vscode-vfs' || workspaceUri.authority !== 'github') { - return undefined; + if (!workspaceUri || workspaceUri.scheme !== 'vscode-vfs' || !workspaceUri.authority.startsWith('github')) { + logger.info(`Skipped loading workspace contents for repository ${workspaceUri?.toString()}`); + return; } - try { - const remoteHubApi = await RemoteRepositories.getApi(); - if (remoteHubApi.loadWorkspaceContents !== undefined) { - if (await remoteHubApi.loadWorkspaceContents(workspaceUri)) { - logger.info(`Successfully loaded workspace content for repository ${workspaceUri.toString()}`); - } else { - logger.info(`Failed to load workspace content for repository ${workspaceUri.toString()}`); - } + const loader = new RemoteWorkspaceContentsPreloader(workspaceUri, logger); + context.subscriptions.push(loader); + return loader.triggerPreload(); +} +class RemoteWorkspaceContentsPreloader extends Disposable { + + private _preload: Promise | undefined; + + constructor( + private readonly workspaceUri: vscode.Uri, + private readonly logger: Logger, + ) { + super(); + + const fsWatcher = this._register(vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(workspaceUri, '*'))); + this._register(fsWatcher.onDidChange(uri => { + if (uri.toString() === workspaceUri.toString()) { + this._preload = undefined; + this.triggerPreload(); + } + })); + } + + async triggerPreload() { + this._preload ??= this.doPreload(); + return this._preload; + } + + private async doPreload(): Promise { + try { + const remoteHubApi = await RemoteRepositories.getApi(); + if (await remoteHubApi.loadWorkspaceContents?.(this.workspaceUri)) { + this.logger.info(`Successfully loaded workspace content for repository ${this.workspaceUri.toString()}`); + } else { + this.logger.info(`Failed to load workspace content for repository ${this.workspaceUri.toString()}`); + } + } catch (error) { + this.logger.info(`Loading workspace content for repository ${this.workspaceUri.toString()} failed: ${error instanceof Error ? error.toString() : 'Unknown reason'}`); + console.error(error); } - } catch (error) { - logger.info(`Loading workspace content for repository ${workspaceUri.toString()} failed: ${error instanceof Error ? error.toString() : 'Unknown reason'}`); - console.error(error); } } diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts index b4072aadfd4..22fdd25bb71 100644 --- a/extensions/typescript-language-features/src/extension.ts +++ b/extensions/typescript-language-features/src/extension.ts @@ -16,13 +16,12 @@ import { nodeRequestCancellerFactory } from './tsServer/cancellation.electron'; import { NodeLogDirectoryProvider } from './tsServer/logDirectoryProvider.electron'; import { ElectronServiceProcessFactory } from './tsServer/serverProcess.electron'; import { DiskTypeScriptVersionProvider } from './tsServer/versionProvider.electron'; -import { JsWalkthroughState, registerJsNodeWalkthrough } from './ui/jsNodeWalkthrough.electron'; -import { ActiveJsTsEditorTracker } from './utils/activeJsTsEditorTracker'; -import { ElectronServiceConfigurationProvider } from './utils/configuration.electron'; -import { onCaseInsensitiveFileSystem } from './utils/fileSystem.electron'; -import { Logger } from './utils/logger'; +import { ActiveJsTsEditorTracker } from './ui/activeJsTsEditorTracker'; +import { ElectronServiceConfigurationProvider } from './configuration/configuration.electron'; +import { onCaseInsensitiveFileSystem } from './utils/fs.electron'; +import { Logger } from './logging/logger'; import { getPackageInfo } from './utils/packageInfo'; -import { PluginManager } from './utils/plugins'; +import { PluginManager } from './tsServer/plugins'; import * as temp from './utils/temp.electron'; export function activate( @@ -43,9 +42,6 @@ export function activate( const activeJsTsEditorTracker = new ActiveJsTsEditorTracker(); context.subscriptions.push(activeJsTsEditorTracker); - const jsWalkthroughState = new JsWalkthroughState(); - context.subscriptions.push(jsWalkthroughState); - let experimentTelemetryReporter: IExperimentationTelemetryReporter | undefined; const packageInfo = getPackageInfo(context); if (packageInfo) { @@ -77,7 +73,6 @@ export function activate( }); registerBaseCommands(commandManager, lazyClientHost, pluginManager, activeJsTsEditorTracker); - registerJsNodeWalkthrough(commandManager, jsWalkthroughState); import('./task/taskProvider').then(module => { context.subscriptions.push(module.register(lazyClientHost.map(x => x.serviceClient))); diff --git a/extensions/typescript-language-features/src/languageFeatures/callHierarchy.ts b/extensions/typescript-language-features/src/languageFeatures/callHierarchy.ts index 8cd56a01fbd..00adb9407c8 100644 --- a/extensions/typescript-language-features/src/languageFeatures/callHierarchy.ts +++ b/extensions/typescript-language-features/src/languageFeatures/callHierarchy.ts @@ -5,14 +5,14 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import * as PConst from '../protocol.const'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { API } from '../tsServer/api'; +import { parseKindModifier } from '../tsServer/protocol/modifiers'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as PConst from '../tsServer/protocol/protocol.const'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { conditionalRegistration, requireMinVersion, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import { parseKindModifier } from '../utils/modifiers'; -import * as typeConverters from '../utils/typeConverters'; +import { conditionalRegistration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration'; class TypeScriptCallHierarchySupport implements vscode.CallHierarchyProvider { public static readonly minVersion = API.v380; diff --git a/extensions/typescript-language-features/src/languageFeatures/codeLens/baseCodeLensProvider.ts b/extensions/typescript-language-features/src/languageFeatures/codeLens/baseCodeLensProvider.ts index 218424264d5..7c970e4212c 100644 --- a/extensions/typescript-language-features/src/languageFeatures/codeLens/baseCodeLensProvider.ts +++ b/extensions/typescript-language-features/src/languageFeatures/codeLens/baseCodeLensProvider.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../../protocol'; import { CachedResponse } from '../../tsServer/cachedResponse'; +import type * as Proto from '../../tsServer/protocol/protocol'; +import * as typeConverters from '../../typeConverters'; import { ITypeScriptServiceClient } from '../../typescriptService'; import { escapeRegExp } from '../../utils/regexp'; -import * as typeConverters from '../../utils/typeConverters'; export class ReferencesCodeLens extends vscode.CodeLens { diff --git a/extensions/typescript-language-features/src/languageFeatures/codeLens/implementationsCodeLens.ts b/extensions/typescript-language-features/src/languageFeatures/codeLens/implementationsCodeLens.ts index 0941a506ddb..b0346c8572b 100644 --- a/extensions/typescript-language-features/src/languageFeatures/codeLens/implementationsCodeLens.ts +++ b/extensions/typescript-language-features/src/languageFeatures/codeLens/implementationsCodeLens.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../../protocol'; -import * as PConst from '../../protocol.const'; +import { DocumentSelector } from '../../configuration/documentSelector'; +import { LanguageDescription } from '../../configuration/languageDescription'; import { CachedResponse } from '../../tsServer/cachedResponse'; +import type * as Proto from '../../tsServer/protocol/protocol'; +import * as PConst from '../../tsServer/protocol/protocol.const'; +import * as typeConverters from '../../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService'; -import { conditionalRegistration, requireGlobalConfiguration, requireSomeCapability } from '../../utils/dependentRegistration'; -import { DocumentSelector } from '../../utils/documentSelector'; -import { LanguageDescription } from '../../utils/languageDescription'; -import * as typeConverters from '../../utils/typeConverters'; -import { getSymbolRange, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider'; +import { conditionalRegistration, requireGlobalConfiguration, requireSomeCapability } from '../util/dependentRegistration'; +import { ReferencesCodeLens, TypeScriptBaseCodeLensProvider, getSymbolRange } from './baseCodeLensProvider'; export default class TypeScriptImplementationsCodeLensProvider extends TypeScriptBaseCodeLensProvider { diff --git a/extensions/typescript-language-features/src/languageFeatures/codeLens/referencesCodeLens.ts b/extensions/typescript-language-features/src/languageFeatures/codeLens/referencesCodeLens.ts index 2a89bd6c127..d76db9f9b18 100644 --- a/extensions/typescript-language-features/src/languageFeatures/codeLens/referencesCodeLens.ts +++ b/extensions/typescript-language-features/src/languageFeatures/codeLens/referencesCodeLens.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../../protocol'; -import * as PConst from '../../protocol.const'; +import { DocumentSelector } from '../../configuration/documentSelector'; +import { LanguageDescription } from '../../configuration/languageDescription'; import { CachedResponse } from '../../tsServer/cachedResponse'; +import type * as Proto from '../../tsServer/protocol/protocol'; +import * as PConst from '../../tsServer/protocol/protocol.const'; import { ExecutionTarget } from '../../tsServer/server'; +import * as typeConverters from '../../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService'; -import { conditionalRegistration, requireGlobalConfiguration, requireSomeCapability } from '../../utils/dependentRegistration'; -import { DocumentSelector } from '../../utils/documentSelector'; -import { LanguageDescription } from '../../utils/languageDescription'; -import * as typeConverters from '../../utils/typeConverters'; -import { getSymbolRange, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider'; +import { conditionalRegistration, requireGlobalConfiguration, requireSomeCapability } from '../util/dependentRegistration'; +import { ReferencesCodeLens, TypeScriptBaseCodeLensProvider, getSymbolRange } from './baseCodeLensProvider'; export class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLensProvider { diff --git a/extensions/typescript-language-features/src/languageFeatures/completions.ts b/extensions/typescript-language-features/src/languageFeatures/completions.ts index 3e3fd930bfd..b97c9b8b3fb 100644 --- a/extensions/typescript-language-features/src/languageFeatures/completions.ts +++ b/extensions/typescript-language-features/src/languageFeatures/completions.ts @@ -5,22 +5,22 @@ import * as vscode from 'vscode'; import { Command, CommandManager } from '../commands/commandManager'; -import type * as Proto from '../protocol'; -import * as PConst from '../protocol.const'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { LanguageDescription } from '../configuration/languageDescription'; +import { TelemetryReporter } from '../logging/telemetry'; +import { API } from '../tsServer/api'; +import { parseKindModifier } from '../tsServer/protocol/modifiers'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as PConst from '../tsServer/protocol/protocol.const'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient, ServerResponse } from '../typescriptService'; -import API from '../utils/api'; +import TypingsStatus from '../ui/typingsStatus'; import { nulToken } from '../utils/cancellation'; -import { applyCodeAction } from '../utils/codeAction'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import { LanguageDescription } from '../utils/languageDescription'; -import { parseKindModifier } from '../utils/modifiers'; -import * as Previewer from '../utils/previewer'; -import { snippetForFunctionCall } from '../utils/snippetForFunctionCall'; -import { TelemetryReporter } from '../utils/telemetry'; -import * as typeConverters from '../utils/typeConverters'; -import TypingsStatus from '../utils/typingsStatus'; import FileConfigurationManager from './fileConfigurationManager'; +import { applyCodeAction } from './util/codeAction'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; +import { snippetForFunctionCall } from './util/snippetForFunctionCall'; +import * as Previewer from './util/textRendering'; interface DotAccessorContext { @@ -31,17 +31,14 @@ interface DotAccessorContext { interface CompletionContext { readonly isNewIdentifierLocation: boolean; readonly isMemberCompletion: boolean; - readonly isInValidCommitCharacterContext: boolean; readonly dotAccessorContext?: DotAccessorContext; readonly enableCallCompletions: boolean; - readonly useCodeSnippetsOnMethodSuggest: boolean; + readonly completeFunctionCalls: boolean; readonly wordRange: vscode.Range | undefined; readonly line: string; - - readonly useFuzzyWordRangeLogic: boolean; } type ResolvedCompletionItem = { @@ -61,45 +58,48 @@ class MyCompletionItem extends vscode.CompletionItem { public readonly metadata: any | undefined, client: ITypeScriptServiceClient, ) { - super(tsEntry.name, MyCompletionItem.convertKind(tsEntry.kind)); + const label = tsEntry.name || (tsEntry.insertText ?? ''); + super(label, MyCompletionItem.convertKind(tsEntry.kind)); - if (tsEntry.source && tsEntry.hasAction) { + if (tsEntry.source && tsEntry.hasAction && client.apiVersion.lt(API.v490)) { // De-prioritze auto-imports // https://github.com/microsoft/vscode/issues/40311 this.sortText = '\uffff' + tsEntry.sortText; - - // Render "fancy" when source is a workspace path - const qualifierCandidate = vscode.workspace.asRelativePath(tsEntry.source); - if (qualifierCandidate !== tsEntry.source) { - this.label = { label: tsEntry.name, description: qualifierCandidate }; - } - } else { this.sortText = tsEntry.sortText; } + if (tsEntry.source && tsEntry.hasAction) { + // Render "fancy" when source is a workspace path + const qualifierCandidate = vscode.workspace.asRelativePath(tsEntry.source); + if (qualifierCandidate !== tsEntry.source) { + this.label = { label, description: qualifierCandidate }; + } + + } + const { sourceDisplay, isSnippet } = tsEntry; if (sourceDisplay) { - this.label = { label: tsEntry.name, description: Previewer.plainWithLinks(sourceDisplay, client) }; + this.label = { label, description: Previewer.asPlainTextWithLinks(sourceDisplay, client) }; } if (tsEntry.labelDetails) { - this.label = { label: tsEntry.name, ...tsEntry.labelDetails }; + this.label = { label, ...tsEntry.labelDetails }; } this.preselect = tsEntry.isRecommended; this.position = position; - this.useCodeSnippet = completionContext.useCodeSnippetsOnMethodSuggest && (this.kind === vscode.CompletionItemKind.Function || this.kind === vscode.CompletionItemKind.Method); + this.useCodeSnippet = completionContext.completeFunctionCalls && (this.kind === vscode.CompletionItemKind.Function || this.kind === vscode.CompletionItemKind.Method); this.range = this.getRangeFromReplacementSpan(tsEntry, completionContext); this.commitCharacters = MyCompletionItem.getCommitCharacters(completionContext, tsEntry); this.insertText = isSnippet && tsEntry.insertText ? new vscode.SnippetString(tsEntry.insertText) : tsEntry.insertText; - this.filterText = this.getFilterText(completionContext.line, tsEntry.insertText); + this.filterText = tsEntry.filterText || this.getFilterText(completionContext.line, tsEntry.insertText); if (completionContext.isMemberCompletion && completionContext.dotAccessorContext && !(this.insertText instanceof vscode.SnippetString)) { this.filterText = completionContext.dotAccessorContext.text + (this.insertText || this.textLabel); if (!this.range) { - const replacementRange = this.getFuzzyWordRange(); + const replacementRange = this.completionContext.wordRange; if (replacementRange) { this.range = { inserting: completionContext.dotAccessorContext.range, @@ -253,7 +253,7 @@ class MyCompletionItem extends vscode.CompletionItem { parts.push(action.description); } - parts.push(Previewer.plainWithLinks(detail.displayParts, client)); + parts.push(Previewer.asPlainTextWithLinks(detail.displayParts, client)); return parts.join('\n\n'); } @@ -263,7 +263,7 @@ class MyCompletionItem extends vscode.CompletionItem { baseUri: vscode.Uri, ): vscode.MarkdownString | undefined { const documentation = new vscode.MarkdownString(); - Previewer.addMarkdownDocumentation(documentation, detail.documentation, detail.tags, client); + Previewer.appendDocumentationAsMarkdown(documentation, detail.documentation, detail.tags, client); documentation.baseUri = baseUri; return documentation.value.length ? documentation : undefined; } @@ -293,17 +293,29 @@ class MyCompletionItem extends vscode.CompletionItem { // Noop } + const line = document.lineAt(position.line); // Don't complete function call if there is already something that looks like a function call // https://github.com/microsoft/vscode/issues/18131 - const after = document.lineAt(position.line).text.slice(position.character); - return after.match(/^[a-z_$0-9]*\s*\(/gi) === null; + + const after = line.text.slice(position.character); + if (after.match(/^[a-z_$0-9]*\s*\(/gi)) { + return false; + } + + // Don't complete function call if it looks like a jsx tag. + const before = line.text.slice(0, position.character); + if (before.match(/<\s*[\w]*$/gi)) { + return false; + } + + return true; } private getCodeActions( detail: Proto.CompletionEntryDetails, filepath: string ): { command?: vscode.Command; additionalTextEdits?: vscode.TextEdit[] } { - if (!detail.codeActions || !detail.codeActions.length) { + if (!detail.codeActions?.length) { return {}; } @@ -408,7 +420,7 @@ class MyCompletionItem extends vscode.CompletionItem { return; } - const replaceRange = this.getFuzzyWordRange(); + const replaceRange = this.completionContext.wordRange; if (replaceRange) { this.range = { inserting: new vscode.Range(replaceRange.start, this.position), @@ -417,23 +429,6 @@ class MyCompletionItem extends vscode.CompletionItem { } } - private getFuzzyWordRange() { - if (this.completionContext.useFuzzyWordRangeLogic) { - // Try getting longer, prefix based range for completions that span words - const text = this.completionContext.line.slice(Math.max(0, this.position.character - this.textLabel.length), this.position.character).toLowerCase(); - const entryName = this.textLabel.toLowerCase(); - for (let i = entryName.length; i >= 0; --i) { - if (text.endsWith(entryName.substr(0, i)) && (!this.completionContext.wordRange || this.completionContext.wordRange.start.character > this.position.character - i)) { - return new vscode.Range( - new vscode.Position(this.position.line, Math.max(0, this.position.character - i)), - this.position); - } - } - } - - return this.completionContext.wordRange; - } - private static convertKind(kind: string): vscode.CompletionItemKind { switch (kind) { case PConst.Kind.primitiveType: @@ -502,7 +497,7 @@ class MyCompletionItem extends vscode.CompletionItem { return undefined; } - if (context.isNewIdentifierLocation || !context.isInValidCommitCharacterContext) { + if (context.isNewIdentifierLocation) { return undefined; } @@ -631,7 +626,7 @@ class ApplyCompletionCodeActionCommand implements Command { } interface CompletionConfiguration { - readonly useCodeSnippetsOnMethodSuggest: boolean; + readonly completeFunctionCalls: boolean; readonly nameSuggestions: boolean; readonly pathSuggestions: boolean; readonly autoImportSuggestions: boolean; @@ -639,7 +634,7 @@ interface CompletionConfiguration { } namespace CompletionConfiguration { - export const useCodeSnippetsOnMethodSuggest = 'suggest.completeFunctionCalls'; + export const completeFunctionCalls = 'suggest.completeFunctionCalls'; export const nameSuggestions = 'suggest.names'; export const pathSuggestions = 'suggest.paths'; export const autoImportSuggestions = 'suggest.autoImports'; @@ -651,7 +646,7 @@ namespace CompletionConfiguration { ): CompletionConfiguration { const config = vscode.workspace.getConfiguration(modeId, resource); return { - useCodeSnippetsOnMethodSuggest: config.get(CompletionConfiguration.useCodeSnippetsOnMethodSuggest, false), + completeFunctionCalls: config.get(CompletionConfiguration.completeFunctionCalls, false), pathSuggestions: config.get(CompletionConfiguration.pathSuggestions, true), autoImportSuggestions: config.get(CompletionConfiguration.autoImportSuggestions, true), nameSuggestions: config.get(CompletionConfiguration.nameSuggestions, true), @@ -775,16 +770,14 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider< metadata = response.metadata; } - const completionContext = { + const completionContext: CompletionContext = { isNewIdentifierLocation, isMemberCompletion, dotAccessorContext, - isInValidCommitCharacterContext: this.isInValidCommitCharacterContext(document, position), - enableCallCompletions: !completionConfiguration.useCodeSnippetsOnMethodSuggest, + enableCallCompletions: !completionConfiguration.completeFunctionCalls, wordRange, line: line.text, - useCodeSnippetsOnMethodSuggest: completionConfiguration.useCodeSnippetsOnMethodSuggest, - useFuzzyWordRangeLogic: this.client.apiVersion.lt(API.v390), + completeFunctionCalls: completionConfiguration.completeFunctionCalls, }; let includesPackageJsonImport = false; @@ -849,26 +842,27 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider< private getTsTriggerCharacter(context: vscode.CompletionContext): Proto.CompletionsTriggerCharacter | undefined { switch (context.triggerCharacter) { - case '@': // Workaround for https://github.com/microsoft/TypeScript/issues/27321 + case '@': { // Workaround for https://github.com/microsoft/TypeScript/issues/27321 return this.client.apiVersion.gte(API.v310) && this.client.apiVersion.lt(API.v320) ? undefined : '@'; - - case '#': // Workaround for https://github.com/microsoft/TypeScript/issues/36367 + } + case '#': { // Workaround for https://github.com/microsoft/TypeScript/issues/36367 return this.client.apiVersion.lt(API.v381) ? undefined : '#'; - + } case ' ': { - const space: Proto.CompletionsTriggerCharacter = ' '; - return this.client.apiVersion.gte(API.v430) ? space : undefined; + return this.client.apiVersion.gte(API.v430) ? ' ' : undefined; } case '.': case '"': case '\'': case '`': case '/': - case '<': + case '<': { return context.triggerCharacter; + } + default: { + return undefined; + } } - - return undefined; } public async resolveCompletionItem( @@ -879,25 +873,6 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider< return item; } - private isInValidCommitCharacterContext( - document: vscode.TextDocument, - position: vscode.Position - ): boolean { - if (this.client.apiVersion.lt(API.v320)) { - // Workaround for https://github.com/microsoft/TypeScript/issues/27742 - // Only enable dot completions when previous character not a dot preceded by whitespace. - // Prevents incorrectly completing while typing spread operators. - if (position.character > 1) { - const preText = document.getText(new vscode.Range( - position.line, 0, - position.line, position.character)); - return preText.match(/(\s|^)\.$/ig) === null; - } - } - - return true; - } - private shouldTrigger( context: vscode.CompletionContext, line: vscode.TextLine, diff --git a/extensions/typescript-language-features/src/languageFeatures/definitionProviderBase.ts b/extensions/typescript-language-features/src/languageFeatures/definitionProviderBase.ts index df005110b37..7ebf7c89288 100644 --- a/extensions/typescript-language-features/src/languageFeatures/definitionProviderBase.ts +++ b/extensions/typescript-language-features/src/languageFeatures/definitionProviderBase.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import * as typeConverters from '../utils/typeConverters'; export default class TypeScriptDefinitionProviderBase { diff --git a/extensions/typescript-language-features/src/languageFeatures/definitions.ts b/extensions/typescript-language-features/src/languageFeatures/definitions.ts index 5d3bf1bcf5a..76c5818be6c 100644 --- a/extensions/typescript-language-features/src/languageFeatures/definitions.ts +++ b/extensions/typescript-language-features/src/languageFeatures/definitions.ts @@ -4,11 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { API } from '../tsServer/api'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as typeConverters from '../utils/typeConverters'; import DefinitionProviderBase from './definitionProviderBase'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; export default class TypeScriptDefinitionProvider extends DefinitionProviderBase implements vscode.DefinitionProvider { @@ -29,7 +30,16 @@ export default class TypeScriptDefinitionProvider extends DefinitionProviderBase } const span = response.body.textSpan ? typeConverters.Range.fromTextSpan(response.body.textSpan) : undefined; - return response.body.definitions + let definitions = response.body.definitions; + + if (vscode.workspace.getConfiguration(document.languageId).get('preferGoToSourceDefinition', false) && this.client.apiVersion.gte(API.v470)) { + const sourceDefinitionsResponse = await this.client.execute('findSourceDefinition', args, token); + if (sourceDefinitionsResponse.type === 'response' && sourceDefinitionsResponse.body?.length) { + definitions = sourceDefinitionsResponse.body; + } + } + + return definitions .map((location): vscode.DefinitionLink => { const target = typeConverters.Location.fromTextSpan(this.client.toResource(location.file), location); if (location.contextStart && location.contextEnd) { diff --git a/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts b/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts index bed00af351a..aeb4491872e 100644 --- a/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts +++ b/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { DiagnosticLanguage } from '../configuration/languageDescription'; import * as arrays from '../utils/arrays'; import { Disposable } from '../utils/dispose'; -import { DiagnosticLanguage } from '../utils/languageDescription'; import { ResourceMap } from '../utils/resourceMap'; function diagnosticsEquals(a: vscode.Diagnostic, b: vscode.Diagnostic): boolean { @@ -53,7 +53,7 @@ class FileDiagnostics { } const existing = this._diagnostics.get(kind); - if (arrays.equals(existing || arrays.empty, diagnostics, diagnosticsEquals)) { + if (existing?.length === 0 && diagnostics.length === 0) { // No need to update return false; } @@ -170,7 +170,7 @@ export class DiagnosticsManager extends Disposable { public override dispose() { super.dispose(); - for (const value of this._pendingUpdates.values) { + for (const value of this._pendingUpdates.values()) { clearTimeout(value); } this._pendingUpdates.clear(); @@ -259,7 +259,7 @@ export class DiagnosticsManager extends Disposable { private rebuildAll(): void { this._currentDiagnostics.clear(); - for (const fileDiagnostic of this._diagnostics.values) { + for (const fileDiagnostic of this._diagnostics.values()) { this.rebuildFile(fileDiagnostic); } } diff --git a/extensions/typescript-language-features/src/languageFeatures/directiveCommentCompletions.ts b/extensions/typescript-language-features/src/languageFeatures/directiveCommentCompletions.ts index 8cbb9ba4d3e..aa972ceb199 100644 --- a/extensions/typescript-language-features/src/languageFeatures/directiveCommentCompletions.ts +++ b/extensions/typescript-language-features/src/languageFeatures/directiveCommentCompletions.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { API } from '../tsServer/api'; import { ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { DocumentSelector } from '../utils/documentSelector'; interface Directive { diff --git a/extensions/typescript-language-features/src/languageFeatures/documentHighlight.ts b/extensions/typescript-language-features/src/languageFeatures/documentHighlight.ts index 8c6ce2d6317..b3489ecdbc5 100644 --- a/extensions/typescript-language-features/src/languageFeatures/documentHighlight.ts +++ b/extensions/typescript-language-features/src/languageFeatures/documentHighlight.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as typeConverters from '../utils/typeConverters'; class TypeScriptDocumentHighlightProvider implements vscode.DocumentHighlightProvider { public constructor( @@ -33,10 +33,7 @@ class TypeScriptDocumentHighlightProvider implements vscode.DocumentHighlightPro return []; } - return response.body - .filter(highlight => highlight.file === file) - .map(convertDocumentHighlight) - .flat(); + return response.body.flatMap(convertDocumentHighlight); } } diff --git a/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts b/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts index c197031c7ee..ef2d47ef942 100644 --- a/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts +++ b/extensions/typescript-language-features/src/languageFeatures/documentSymbol.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import * as PConst from '../protocol.const'; +import { DocumentSelector } from '../configuration/documentSelector'; import { CachedResponse } from '../tsServer/cachedResponse'; +import { parseKindModifier } from '../tsServer/protocol/modifiers'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as PConst from '../tsServer/protocol/protocol.const'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import { DocumentSelector } from '../utils/documentSelector'; -import { parseKindModifier } from '../utils/modifiers'; -import * as typeConverters from '../utils/typeConverters'; const getSymbolKind = (kind: string): vscode.SymbolKind => { switch (kind) { diff --git a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts index 4df07ef7d96..ebf0131fced 100644 --- a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts +++ b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts @@ -5,12 +5,12 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import type * as Proto from '../tsServer/protocol/protocol'; +import { API } from '../tsServer/api'; import { ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; import { Disposable } from '../utils/dispose'; -import * as fileSchemes from '../utils/fileSchemes'; -import { isTypeScriptDocument } from '../utils/languageIds'; +import * as fileSchemes from '../configuration/fileSchemes'; +import { isTypeScriptDocument } from '../configuration/languageIds'; import { equals } from '../utils/objects'; import { ResourceMap } from '../utils/resourceMap'; @@ -161,6 +161,7 @@ export default class FileConfigurationManager extends Disposable { placeOpenBraceOnNewLineForFunctions: config.get('placeOpenBraceOnNewLineForFunctions'), placeOpenBraceOnNewLineForControlBlocks: config.get('placeOpenBraceOnNewLineForControlBlocks'), semicolons: config.get('semicolons'), + indentSwitchCase: config.get('indentSwitchCase'), }; } diff --git a/extensions/typescript-language-features/src/languageFeatures/fileReferences.ts b/extensions/typescript-language-features/src/languageFeatures/fileReferences.ts index 2e28a14c587..3a475ac257b 100644 --- a/extensions/typescript-language-features/src/languageFeatures/fileReferences.ts +++ b/extensions/typescript-language-features/src/languageFeatures/fileReferences.ts @@ -5,10 +5,10 @@ import * as vscode from 'vscode'; import { Command, CommandManager } from '../commands/commandManager'; +import { isSupportedLanguageMode } from '../configuration/languageIds'; +import { API } from '../tsServer/api'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { isSupportedLanguageMode } from '../utils/languageIds'; -import * as typeConverters from '../utils/typeConverters'; class FileReferencesCommand implements Command { diff --git a/extensions/typescript-language-features/src/languageFeatures/fixAll.ts b/extensions/typescript-language-features/src/languageFeatures/fixAll.ts index bfa9d2b36c7..690439218a8 100644 --- a/extensions/typescript-language-features/src/languageFeatures/fixAll.ts +++ b/extensions/typescript-language-features/src/languageFeatures/fixAll.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { API } from '../tsServer/api'; +import * as errorCodes from '../tsServer/protocol/errorCodes'; +import * as fixNames from '../tsServer/protocol/fixNames'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { conditionalRegistration, requireMinVersion, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as errorCodes from '../utils/errorCodes'; -import * as fixNames from '../utils/fixNames'; -import * as typeConverters from '../utils/typeConverters'; import { DiagnosticsManager } from './diagnostics'; import FileConfigurationManager from './fileConfigurationManager'; +import { conditionalRegistration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration'; interface AutoFix { @@ -219,10 +219,6 @@ class TypeScriptAutoFixProvider implements vscode.CodeActionProvider { } const actions = this.getFixAllActions(context.only); - if (this.client.bufferSyncSupport.hasPendingDiagnostics(document.uri)) { - return actions; - } - const diagnostics = this.diagnosticsManager.getDiagnostics(document.uri); if (!diagnostics.length) { // Actions are a no-op in this case but we still want to return them diff --git a/extensions/typescript-language-features/src/languageFeatures/folding.ts b/extensions/typescript-language-features/src/languageFeatures/folding.ts index a633e6e97a0..b8401d4ad60 100644 --- a/extensions/typescript-language-features/src/languageFeatures/folding.ts +++ b/extensions/typescript-language-features/src/languageFeatures/folding.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; import { coalesce } from '../utils/arrays'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as typeConverters from '../utils/typeConverters'; class TypeScriptFoldingProvider implements vscode.FoldingRangeProvider { diff --git a/extensions/typescript-language-features/src/languageFeatures/formatting.ts b/extensions/typescript-language-features/src/languageFeatures/formatting.ts index f2a17da6ede..3b31499c37b 100644 --- a/extensions/typescript-language-features/src/languageFeatures/formatting.ts +++ b/extensions/typescript-language-features/src/languageFeatures/formatting.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { LanguageDescription } from '../configuration/languageDescription'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import { conditionalRegistration, requireGlobalConfiguration } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import { LanguageDescription } from '../utils/languageDescription'; -import * as typeConverters from '../utils/typeConverters'; import FileConfigurationManager from './fileConfigurationManager'; +import { conditionalRegistration, requireGlobalConfiguration } from './util/dependentRegistration'; class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEditProvider, vscode.OnTypeFormattingEditProvider { public constructor( diff --git a/extensions/typescript-language-features/src/languageFeatures/hover.ts b/extensions/typescript-language-features/src/languageFeatures/hover.ts index c6982dfed10..3012658036f 100644 --- a/extensions/typescript-language-features/src/languageFeatures/hover.ts +++ b/extensions/typescript-language-features/src/languageFeatures/hover.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import type * as Proto from '../tsServer/protocol/protocol'; import { ClientCapability, ITypeScriptServiceClient, ServerType } from '../typescriptService'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import { markdownDocumentation } from '../utils/previewer'; -import * as typeConverters from '../utils/typeConverters'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { documentationToMarkdown } from './util/textRendering'; +import * as typeConverters from '../typeConverters'; import FileConfigurationManager from './fileConfigurationManager'; @@ -68,7 +68,7 @@ class TypeScriptHoverProvider implements vscode.HoverProvider { displayParts.push(data.displayString); parts.push(new vscode.MarkdownString().appendCodeblock(displayParts.join(' '), 'typescript')); } - const md = markdownDocumentation(data.documentation, data.tags, this.client, resource); + const md = documentationToMarkdown(data.documentation, data.tags, this.client, resource); parts.push(md); return parts; } diff --git a/extensions/typescript-language-features/src/languageFeatures/implementations.ts b/extensions/typescript-language-features/src/languageFeatures/implementations.ts index bf3ddfee414..b6b8aac1d29 100644 --- a/extensions/typescript-language-features/src/languageFeatures/implementations.ts +++ b/extensions/typescript-language-features/src/languageFeatures/implementations.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { DocumentSelector } from '../configuration/documentSelector'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; import DefinitionProviderBase from './definitionProviderBase'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; class TypeScriptImplementationProvider extends DefinitionProviderBase implements vscode.ImplementationProvider { public provideImplementation(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise { diff --git a/extensions/typescript-language-features/src/languageFeatures/inlayHints.ts b/extensions/typescript-language-features/src/languageFeatures/inlayHints.ts index 14d5ef8f4c9..263f8f3bd72 100644 --- a/extensions/typescript-language-features/src/languageFeatures/inlayHints.ts +++ b/extensions/typescript-language-features/src/languageFeatures/inlayHints.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { LanguageDescription } from '../configuration/languageDescription'; +import { API } from '../tsServer/api'; +import type * as Proto from '../tsServer/protocol/protocol'; +import { Position } from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { conditionalRegistration, requireMinVersion, requireSomeCapability } from '../utils/dependentRegistration'; import { Disposable } from '../utils/dispose'; -import { DocumentSelector } from '../utils/documentSelector'; -import { LanguageDescription } from '../utils/languageDescription'; -import { Position } from '../utils/typeConverters'; -import FileConfigurationManager, { getInlayHintsPreferences, InlayHintSettingNames } from './fileConfigurationManager'; +import FileConfigurationManager, { InlayHintSettingNames, getInlayHintsPreferences } from './fileConfigurationManager'; +import { conditionalRegistration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration'; const inlayHintSettingNames = Object.freeze([ diff --git a/extensions/typescript-language-features/src/languageFeatures/jsDocCompletions.ts b/extensions/typescript-language-features/src/languageFeatures/jsDocCompletions.ts index 9b96186a904..f2c1b49c67f 100644 --- a/extensions/typescript-language-features/src/languageFeatures/jsDocCompletions.ts +++ b/extensions/typescript-language-features/src/languageFeatures/jsDocCompletions.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { LanguageDescription } from '../configuration/languageDescription'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import { DocumentSelector } from '../utils/documentSelector'; -import { LanguageDescription } from '../utils/languageDescription'; -import * as typeConverters from '../utils/typeConverters'; import FileConfigurationManager from './fileConfigurationManager'; @@ -103,7 +103,7 @@ class JsDocCompletionProvider implements vscode.CompletionItemProvider { export function templateToSnippet(template: string): vscode.SnippetString { // TODO: use append placeholder let snippetIndex = 1; - template = template.replace(/\$/g, '\\$'); + template = template.replace(/\$/g, '\\$'); // CodeQL [SM02383] This is only used for text which is put into the editor. It is not for rendered html template = template.replace(/^[ \t]*(?=(\/|[ ]\*))/gm, ''); template = template.replace(/^(\/\*\*\s*\*[ ]*)$/m, (x) => x + `\$0`); template = template.replace(/\* @param([ ]\{\S+\})?\s+(\S+)[ \t]*$/gm, (_param, type, post) => { diff --git a/extensions/typescript-language-features/src/languageFeatures/linkedEditing.ts b/extensions/typescript-language-features/src/languageFeatures/linkedEditing.ts new file mode 100644 index 00000000000..9576cad1c7c --- /dev/null +++ b/extensions/typescript-language-features/src/languageFeatures/linkedEditing.ts @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { API } from '../tsServer/api'; +import * as typeConverters from '../typeConverters'; +import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; +import { conditionalRegistration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration'; + +class LinkedEditingSupport implements vscode.LinkedEditingRangeProvider { + + public static readonly minVersion = API.v510; + + public constructor( + private readonly client: ITypeScriptServiceClient + ) { } + + async provideLinkedEditingRanges(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise { + const filepath = this.client.toOpenTsFilePath(document); + if (!filepath) { + return undefined; + } + + const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position); + const response = await this.client.execute('linkedEditingRange', args, token); + if (response.type !== 'response' || !response.body) { + return undefined; + } + + const wordPattern = response.body.wordPattern ? new RegExp(response.body.wordPattern) : undefined; + return new vscode.LinkedEditingRanges(response.body.ranges.map(range => typeConverters.Range.fromTextSpan(range)), wordPattern); + } +} + +export function register( + selector: DocumentSelector, + client: ITypeScriptServiceClient +) { + return conditionalRegistration([ + requireMinVersion(client, LinkedEditingSupport.minVersion), + requireSomeCapability(client, ClientCapability.Syntax), + ], () => { + return vscode.languages.registerLinkedEditingRangeProvider(selector.syntax, + new LinkedEditingSupport(client)); + }); +} diff --git a/extensions/typescript-language-features/src/languageFeatures/organizeImports.ts b/extensions/typescript-language-features/src/languageFeatures/organizeImports.ts index 43d2af73c7c..1092e1f202b 100644 --- a/extensions/typescript-language-features/src/languageFeatures/organizeImports.ts +++ b/extensions/typescript-language-features/src/languageFeatures/organizeImports.ts @@ -5,16 +5,16 @@ import * as vscode from 'vscode'; import { Command, CommandManager } from '../commands/commandManager'; -import type * as Proto from '../protocol'; -import { OrganizeImportsMode } from '../protocol.const'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { TelemetryReporter } from '../logging/telemetry'; +import { API } from '../tsServer/api'; +import type * as Proto from '../tsServer/protocol/protocol'; +import { OrganizeImportsMode } from '../tsServer/protocol/protocol.const'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; import { nulToken } from '../utils/cancellation'; -import { conditionalRegistration, requireMinVersion, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import { TelemetryReporter } from '../utils/telemetry'; -import * as typeConverters from '../utils/typeConverters'; import FileConfigurationManager from './fileConfigurationManager'; +import { conditionalRegistration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration'; interface OrganizeImportsCommandMetadata { @@ -133,7 +133,7 @@ class ImportsCodeActionProvider implements vscode.CodeActionProvider { return []; } - if (!context.only || !context.only.contains(this.commandMetadata.kind)) { + if (!context.only?.contains(this.commandMetadata.kind)) { return []; } diff --git a/extensions/typescript-language-features/src/languageFeatures/quickFix.ts b/extensions/typescript-language-features/src/languageFeatures/quickFix.ts index c2285dc04c9..bc2442046aa 100644 --- a/extensions/typescript-language-features/src/languageFeatures/quickFix.ts +++ b/extensions/typescript-language-features/src/languageFeatures/quickFix.ts @@ -5,26 +5,63 @@ import * as vscode from 'vscode'; import { Command, CommandManager } from '../commands/commandManager'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { TelemetryReporter } from '../logging/telemetry'; +import * as fixNames from '../tsServer/protocol/fixNames'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; import { nulToken } from '../utils/cancellation'; -import { applyCodeActionCommands, getEditForCodeAction } from '../utils/codeAction'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as fixNames from '../utils/fixNames'; import { memoize } from '../utils/memoize'; import { equals } from '../utils/objects'; -import { TelemetryReporter } from '../utils/telemetry'; -import * as typeConverters from '../utils/typeConverters'; import { DiagnosticsManager } from './diagnostics'; import FileConfigurationManager from './fileConfigurationManager'; +import { applyCodeActionCommands, getEditForCodeAction } from './util/codeAction'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; type ApplyCodeActionCommand_args = { - readonly resource: vscode.Uri; + readonly document: vscode.TextDocument; readonly diagnostic: vscode.Diagnostic; readonly action: Proto.CodeFixAction; + readonly followupAction?: Command; }; +class EditorChatFollowUp implements Command { + + id: string = '_typescript.quickFix.editorChatFollowUp'; + + constructor(private readonly prompt: string, private readonly document: vscode.TextDocument, private readonly range: vscode.Range, private readonly client: ITypeScriptServiceClient) { + } + + async execute() { + const findScopeEndLineFromNavTree = (startLine: number, navigationTree: Proto.NavigationTree[]): vscode.Range | undefined => { + for (const node of navigationTree) { + const range = typeConverters.Range.fromTextSpan(node.spans[0]); + if (startLine === range.start.line) { + return range; + } else if (startLine > range.start.line && startLine <= range.end.line && node.childItems) { + return findScopeEndLineFromNavTree(startLine, node.childItems); + } + } + return undefined; + }; + const filepath = this.client.toOpenTsFilePath(this.document); + if (!filepath) { + return; + } + const response = await this.client.execute('navtree', { file: filepath }, nulToken); + if (response.type !== 'response' || !response.body?.childItems) { + return; + } + const startLine = this.range.start.line; + const enclosingRange = findScopeEndLineFromNavTree(startLine, response.body.childItems); + if (!enclosingRange) { + return; + } + await vscode.commands.executeCommand('vscode.editorChat.start', { initialRange: enclosingRange, message: this.prompt, autoSend: true }); + } +} + class ApplyCodeActionCommand implements Command { public static readonly ID = '_typescript.applyCodeActionCommand'; public readonly id = ApplyCodeActionCommand.ID; @@ -35,7 +72,7 @@ class ApplyCodeActionCommand implements Command { private readonly telemetryReporter: TelemetryReporter, ) { } - public async execute({ resource, action, diagnostic }: ApplyCodeActionCommand_args): Promise { + public async execute({ document, action, diagnostic, followupAction }: ApplyCodeActionCommand_args): Promise { /* __GDPR__ "quickFix.execute" : { "owner": "mjbvz", @@ -49,8 +86,10 @@ class ApplyCodeActionCommand implements Command { fixName: action.fixName }); - this.diagnosticManager.deleteDiagnostic(resource, diagnostic); - return applyCodeActionCommands(this.client, action.commands, nulToken); + this.diagnosticManager.deleteDiagnostic(document.uri, diagnostic); + const codeActionResult = await applyCodeActionCommands(this.client, action.commands, nulToken); + await followupAction?.execute(); + return codeActionResult; } } @@ -313,22 +352,27 @@ class TypeScriptQuickFixProvider implements vscode.CodeActionProvider{ action: tsAction, diagnostic, resource }], + arguments: [{ action: tsAction, diagnostic, document, followupAction }], title: '' }; return codeAction; @@ -395,6 +439,7 @@ const preferredFixes = new Map { + for (const command of commands) { + await vscode.commands.executeCommand(command.command, ...(command.arguments ?? [])); + } + } +} + +namespace DidApplyRefactoringCommand { + export interface Args { + readonly action: string; + } } class DidApplyRefactoringCommand implements Command { @@ -31,7 +59,7 @@ class DidApplyRefactoringCommand implements Command { private readonly telemetryReporter: TelemetryReporter ) { } - public async execute(args: DidApplyRefactoringCommand_Args): Promise { + public async execute(args: DidApplyRefactoringCommand.Args): Promise { /* __GDPR__ "refactor.execute" : { "owner": "mjbvz", @@ -42,32 +70,16 @@ class DidApplyRefactoringCommand implements Command { } */ this.telemetryReporter.logTelemetry('refactor.execute', { - action: args.codeAction.action, + action: args.action, }); - - if (!args.codeAction.edit?.size) { - vscode.window.showErrorMessage(vscode.l10n.t("Could not apply refactoring")); - return; - } - - const renameLocation = args.codeAction.renameLocation; - if (renameLocation) { - // Disable renames in interactive playground https://github.com/microsoft/vscode/issues/75137 - if (args.codeAction.document.uri.scheme !== fileSchemes.walkThroughSnippet) { - await vscode.commands.executeCommand('editor.action.rename', [ - args.codeAction.document.uri, - typeConverters.Position.fromLocation(renameLocation) - ]); - } - } } } - -interface SelectRefactorCommand_Args { - readonly action: vscode.CodeAction; - readonly document: vscode.TextDocument; - readonly info: Proto.ApplicableRefactorInfo; - readonly rangeOrSelection: vscode.Range | vscode.Selection; +namespace SelectRefactorCommand { + export interface Args { + readonly document: vscode.TextDocument; + readonly refactor: Proto.ApplicableRefactorInfo; + readonly rangeOrSelection: vscode.Range | vscode.Selection; + } } class SelectRefactorCommand implements Command { @@ -76,16 +88,16 @@ class SelectRefactorCommand implements Command { constructor( private readonly client: ITypeScriptServiceClient, - private readonly didApplyCommand: DidApplyRefactoringCommand ) { } - public async execute(args: SelectRefactorCommand_Args): Promise { + public async execute(args: SelectRefactorCommand.Args): Promise { const file = this.client.toOpenTsFilePath(args.document); if (!file) { return; } - const selected = await vscode.window.showQuickPick(args.info.actions.map((action): vscode.QuickPickItem => ({ + const selected = await vscode.window.showQuickPick(args.refactor.actions.map((action): vscode.QuickPickItem & { action: Proto.RefactorActionInfo } => ({ + action, label: action.name, description: action.description, }))); @@ -93,17 +105,139 @@ class SelectRefactorCommand implements Command { return; } - const tsAction = new InlinedCodeAction(this.client, args.action.title, args.action.kind, args.document, args.info.name, selected.label, args.rangeOrSelection); + const tsAction = new InlinedCodeAction(this.client, args.document, args.refactor, selected.action, args.rangeOrSelection); await tsAction.resolve(nulToken); if (tsAction.edit) { - if (!(await vscode.workspace.applyEdit(tsAction.edit))) { + if (!(await vscode.workspace.applyEdit(tsAction.edit, { isRefactoring: true }))) { vscode.window.showErrorMessage(vscode.l10n.t("Could not apply refactoring")); return; } } - await this.didApplyCommand.execute({ codeAction: tsAction }); + if (tsAction.command) { + await vscode.commands.executeCommand(tsAction.command.command, ...(tsAction.command.arguments ?? [])); + } + } +} + +namespace MoveToFileRefactorCommand { + export interface Args { + readonly document: vscode.TextDocument; + readonly action: Proto.RefactorActionInfo; + readonly range: vscode.Range; + } +} + +class MoveToFileRefactorCommand implements Command { + public static readonly ID = '_typescript.moveToFileRefactoring'; + public readonly id = MoveToFileRefactorCommand.ID; + + constructor( + private readonly client: ITypeScriptServiceClient, + private readonly didApplyCommand: DidApplyRefactoringCommand + ) { } + + public async execute(args: MoveToFileRefactorCommand.Args): Promise { + const file = this.client.toOpenTsFilePath(args.document); + if (!file) { + return; + } + + const targetFile = await this.getTargetFile(args.document, file, args.range); + if (!targetFile || targetFile.toString() === file.toString()) { + return; + } + + const fileSuggestionArgs: Proto.GetEditsForRefactorRequestArgs = { + ...typeConverters.Range.toFileRangeRequestArgs(file, args.range), + action: 'Move to file', + refactor: 'Move to file', + interactiveRefactorArguments: { targetFile }, + }; + + const response = await this.client.execute('getEditsForRefactor', fileSuggestionArgs, nulToken); + if (response.type !== 'response' || !response.body) { + return; + } + const edit = toWorkspaceEdit(this.client, response.body.edits); + if (!(await vscode.workspace.applyEdit(edit, { isRefactoring: true }))) { + vscode.window.showErrorMessage(vscode.l10n.t("Could not apply refactoring")); + return; + } + + await this.didApplyCommand.execute({ action: args.action.name }); + } + + private async getTargetFile(document: vscode.TextDocument, file: string, range: vscode.Range): Promise { + const args = typeConverters.Range.toFileRangeRequestArgs(file, range); + const response = await this.client.execute('getMoveToRefactoringFileSuggestions', args, nulToken); + if (response.type !== 'response' || !response.body) { + return; + } + + const selectExistingFileItem: vscode.QuickPickItem = { + label: vscode.l10n.t("Select existing file..."), + }; + const selectNewFileItem: vscode.QuickPickItem = { + label: vscode.l10n.t("Enter new file path..."), + }; + + type DestinationItem = vscode.QuickPickItem & { readonly file: string }; + + const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri); + const destinationItems = response.body.files.map((file): DestinationItem => { + const uri = this.client.toResource(file); + const parentDir = Utils.dirname(uri); + + let description; + if (workspaceFolder) { + if (uri.scheme === Schemes.file) { + description = path.relative(workspaceFolder.uri.fsPath, parentDir.fsPath); + } else { + description = path.posix.relative(workspaceFolder.uri.path, parentDir.path); + } + } else { + description = parentDir.fsPath; + } + + return { + file, + label: Utils.basename(uri), + description, + }; + }); + + const picked = await vscode.window.showQuickPick([ + selectExistingFileItem, + selectNewFileItem, + { label: vscode.l10n.t("Destination Files"), kind: vscode.QuickPickItemKind.Separator }, + ...destinationItems + ], { + title: vscode.l10n.t("Move to File"), + placeHolder: vscode.l10n.t("Select move destination"), + }); + if (!picked) { + return; + } + + if (picked === selectExistingFileItem) { + const picked = await vscode.window.showOpenDialog({ + title: vscode.l10n.t("Select move destination"), + openLabel: vscode.l10n.t("Move to File"), + defaultUri: Utils.dirname(document.uri), + }); + return picked?.length ? this.client.toTsFilePath(picked[0]) : undefined; + } else if (picked === selectNewFileItem) { + const picked = await vscode.window.showSaveDialog({ + title: vscode.l10n.t("Select move destination"), + saveLabel: vscode.l10n.t("Move to File"), + defaultUri: this.client.toResource(response.body.newFileName), + }); + return picked ? this.client.toTsFilePath(picked) : undefined; + } else { + return (picked as DestinationItem).file; + } } } @@ -132,6 +266,11 @@ const Extract_Interface = Object.freeze({ matches: refactor => refactor.name.startsWith('Extract to interface') }); +const Move_File = Object.freeze({ + kind: vscode.CodeActionKind.RefactorMove.append('file'), + matches: refactor => refactor.name.startsWith('Move to file') +}); + const Move_NewFile = Object.freeze({ kind: vscode.CodeActionKind.RefactorMove.append('newFile'), matches: refactor => refactor.name.startsWith('Move to a new file') @@ -167,6 +306,7 @@ const allKnownCodeActionKinds = [ Extract_Constant, Extract_Type, Extract_Interface, + Move_File, Move_NewFile, Rewrite_Import, Rewrite_Export, @@ -178,18 +318,23 @@ const allKnownCodeActionKinds = [ class InlinedCodeAction extends vscode.CodeAction { constructor( public readonly client: ITypeScriptServiceClient, - title: string, - kind: vscode.CodeActionKind | undefined, public readonly document: vscode.TextDocument, - public readonly refactor: string, - public readonly action: string, + public readonly refactor: Proto.ApplicableRefactorInfo, + public readonly action: Proto.RefactorActionInfo, public readonly range: vscode.Range, ) { - super(title, kind); - } + super(action.description, InlinedCodeAction.getKind(action)); - // Filled in during resolve - public renameLocation?: Proto.Location; + if (action.notApplicableReason) { + this.disabled = { reason: action.notApplicableReason }; + } + + this.command = { + title: action.description, + command: DidApplyRefactoringCommand.ID, + arguments: [{ action: action.name }], + }; + } public async resolve(token: vscode.CancellationToken): Promise { const file = this.client.toOpenTsFilePath(this.document); @@ -199,8 +344,8 @@ class InlinedCodeAction extends vscode.CodeAction { const args: Proto.GetEditsForRefactorRequestArgs = { ...typeConverters.Range.toFileRangeRequestArgs(file, this.range), - refactor: this.refactor, - action: this.action, + refactor: this.refactor.name, + action: this.action.name, }; const response = await this.client.execute('getEditsForRefactor', args, token); @@ -208,26 +353,59 @@ class InlinedCodeAction extends vscode.CodeAction { return; } - // Resolve - this.edit = InlinedCodeAction.getWorkspaceEditForRefactoring(this.client, response.body); - this.renameLocation = response.body.renameLocation; + this.edit = toWorkspaceEdit(this.client, response.body.edits); + if (!this.edit.size) { + vscode.window.showErrorMessage(vscode.l10n.t("Could not apply refactoring")); + return; + } - return; - } - - private static getWorkspaceEditForRefactoring( - client: ITypeScriptServiceClient, - body: Proto.RefactorEditInfo, - ): vscode.WorkspaceEdit { - const workspaceEdit = new vscode.WorkspaceEdit(); - for (const edit of body.edits) { - const resource = client.toResource(edit.fileName); - if (resource.scheme === fileSchemes.file) { - workspaceEdit.createFile(resource, { ignoreIfExists: true }); + if (response.body.renameLocation) { + // Disable renames in interactive playground https://github.com/microsoft/vscode/issues/75137 + if (this.document.uri.scheme !== fileSchemes.walkThroughSnippet) { + this.command = { + command: CompositeCommand.ID, + title: '', + arguments: coalesce([ + this.command, + { + command: 'editor.action.rename', + arguments: [[ + this.document.uri, + typeConverters.Position.fromLocation(response.body.renameLocation) + ]] + } + ]) + }; } } - typeConverters.WorkspaceEdit.withFileCodeEdits(workspaceEdit, client, body.edits); - return workspaceEdit; + } + + private static getKind(refactor: Proto.RefactorActionInfo) { + if ((refactor as Proto.RefactorActionInfo & { kind?: string }).kind) { + return vscode.CodeActionKind.Empty.append((refactor as Proto.RefactorActionInfo & { kind?: string }).kind!); + } + const match = allKnownCodeActionKinds.find(kind => kind.matches(refactor)); + return match ? match.kind : vscode.CodeActionKind.Refactor; + } +} + +class MoveToFileCodeAction extends vscode.CodeAction { + constructor( + document: vscode.TextDocument, + action: Proto.RefactorActionInfo, + range: vscode.Range, + ) { + super(action.description, Move_File.kind); + + if (action.notApplicableReason) { + this.disabled = { reason: action.notApplicableReason }; + } + + this.command = { + title: action.description, + command: MoveToFileRefactorCommand.ID, + arguments: [{ action, document, range }] + }; } } @@ -241,12 +419,12 @@ class SelectCodeAction extends vscode.CodeAction { this.command = { title: info.description, command: SelectRefactorCommand.ID, - arguments: [{ action: this, document, info, rangeOrSelection }] + arguments: [{ action: this, document, refactor: info, rangeOrSelection }] }; } } -type TsCodeAction = InlinedCodeAction | SelectCodeAction; +type TsCodeAction = InlinedCodeAction | MoveToFileCodeAction | SelectCodeAction; class TypeScriptRefactorProvider implements vscode.CodeActionProvider { @@ -257,7 +435,9 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider { + const actions = Array.from(this.convertApplicableRefactors(document, response.body, rangeOrSelection)).filter(action => { if (this.client.apiVersion.lt(API.v430)) { // Don't show 'infer return type' refactoring unless it has been explicitly requested // https://github.com/microsoft/TypeScript/issues/42993 @@ -341,43 +522,34 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider { + for (const refactor of refactors) { + if (refactor.inlineable === false) { + yield new SelectCodeAction(refactor, document, rangeOrSelection); } else { - for (const action of info.actions) { - actions.push(this.refactorActionToCodeAction(action, document, info, rangeOrSelection, info.actions)); + for (const action of refactor.actions) { + yield this.refactorActionToCodeAction(document, refactor, action, rangeOrSelection, refactor.actions); } } } - return actions; } private refactorActionToCodeAction( - action: Proto.RefactorActionInfo, document: vscode.TextDocument, - info: Proto.ApplicableRefactorInfo, + refactor: Proto.ApplicableRefactorInfo, + action: Proto.RefactorActionInfo, rangeOrSelection: vscode.Range | vscode.Selection, allActions: readonly Proto.RefactorActionInfo[], - ): InlinedCodeAction { - const codeAction = new InlinedCodeAction(this.client, action.description, TypeScriptRefactorProvider.getKind(action), document, info.name, action.name, rangeOrSelection); - - // https://github.com/microsoft/TypeScript/pull/37871 - if (action.notApplicableReason) { - codeAction.disabled = { reason: action.notApplicableReason }; + ): TsCodeAction { + let codeAction: TsCodeAction; + if (action.name === 'Move to file') { + codeAction = new MoveToFileCodeAction(document, action, rangeOrSelection); } else { - codeAction.command = { - title: action.description, - command: DidApplyRefactoringCommand.ID, - arguments: [{ codeAction }], - }; + codeAction = new InlinedCodeAction(this.client, document, refactor, action, rangeOrSelection); } codeAction.isPreferred = TypeScriptRefactorProvider.isPreferred(action, allActions); @@ -394,14 +566,6 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider kind.matches(refactor)); - return match ? match.kind : vscode.CodeActionKind.Refactor; - } - private static isPreferred( action: Proto.RefactorActionInfo, allActions: readonly Proto.RefactorActionInfo[], diff --git a/extensions/typescript-language-features/src/languageFeatures/references.ts b/extensions/typescript-language-features/src/languageFeatures/references.ts index 5ca2518a2eb..1a39ffbc2eb 100644 --- a/extensions/typescript-language-features/src/languageFeatures/references.ts +++ b/extensions/typescript-language-features/src/languageFeatures/references.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { DocumentSelector } from '../configuration/documentSelector'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as typeConverters from '../utils/typeConverters'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; class TypeScriptReferenceSupport implements vscode.ReferenceProvider { public constructor( diff --git a/extensions/typescript-language-features/src/languageFeatures/rename.ts b/extensions/typescript-language-features/src/languageFeatures/rename.ts index 71f790ebe0b..3dcca16f5b2 100644 --- a/extensions/typescript-language-features/src/languageFeatures/rename.ts +++ b/extensions/typescript-language-features/src/languageFeatures/rename.ts @@ -5,17 +5,28 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import { ClientCapability, ITypeScriptServiceClient, ServerResponse } from '../typescriptService'; -import API from '../utils/api'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as typeConverters from '../utils/typeConverters'; +import { DocumentSelector } from '../configuration/documentSelector'; +import * as languageIds from '../configuration/languageIds'; +import { API } from '../tsServer/api'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; +import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; import FileConfigurationManager from './fileConfigurationManager'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; +import { LanguageDescription } from '../configuration/languageDescription'; +type RenameResponse = { + readonly type: 'rename'; + readonly body: Proto.RenameResponseBody; +} | { + readonly type: 'jsxLinkedEditing'; + readonly spans: readonly Proto.TextSpan[]; +}; class TypeScriptRenameProvider implements vscode.RenameProvider { + public constructor( + private readonly language: LanguageDescription, private readonly client: ITypeScriptServiceClient, private readonly fileConfigurationManager: FileConfigurationManager ) { } @@ -24,22 +35,30 @@ class TypeScriptRenameProvider implements vscode.RenameProvider { document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken - ): Promise { + ): Promise { if (this.client.apiVersion.lt(API.v310)) { - return null; + return undefined; } const response = await this.execRename(document, position, token); - if (response?.type !== 'response' || !response.body) { - return null; + if (!response) { + return undefined; } - const renameInfo = response.body.info; - if (!renameInfo.canRename) { - return Promise.reject(renameInfo.localizedErrorMessage); + switch (response.type) { + case 'rename': { + const renameInfo = response.body.info; + if (!renameInfo.canRename) { + return Promise.reject(renameInfo.localizedErrorMessage); + } + return typeConverters.Range.fromTextSpan(renameInfo.triggerSpan); + } + case 'jsxLinkedEditing': { + return response.spans + .map(typeConverters.Range.fromTextSpan) + .find(range => range.contains(position)); + } } - - return typeConverters.Range.fromTextSpan(renameInfo.triggerSpan); } public async provideRenameEdits( @@ -47,51 +66,93 @@ class TypeScriptRenameProvider implements vscode.RenameProvider { position: vscode.Position, newName: string, token: vscode.CancellationToken - ): Promise { + ): Promise { + const file = this.client.toOpenTsFilePath(document); + if (!file) { + return undefined; + } + const response = await this.execRename(document, position, token); - if (!response || response.type !== 'response' || !response.body) { - return null; + if (!response || token.isCancellationRequested) { + return undefined; } - const renameInfo = response.body.info; - if (!renameInfo.canRename) { - return Promise.reject(renameInfo.localizedErrorMessage); - } + switch (response.type) { + case 'rename': { + const renameInfo = response.body.info; + if (!renameInfo.canRename) { + return Promise.reject(renameInfo.localizedErrorMessage); + } - if (renameInfo.fileToRename) { - const edits = await this.renameFile(renameInfo.fileToRename, newName, token); - if (edits) { - return edits; - } else { - return Promise.reject(vscode.l10n.t("An error occurred while renaming file")); + if (renameInfo.fileToRename) { + const edits = await this.renameFile(renameInfo.fileToRename, newName, token); + if (edits) { + return edits; + } else { + return Promise.reject(vscode.l10n.t("An error occurred while renaming file")); + } + } + + return this.updateLocs(response.body.locs, newName); + } + case 'jsxLinkedEditing': { + return this.updateLocs([{ + file, + locs: response.spans.map((span): Proto.RenameTextSpan => ({ ...span })), + }], newName); } } - - return this.updateLocs(response.body.locs, newName); } public async execRename( document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken - ): Promise | undefined> { + ): Promise { const file = this.client.toOpenTsFilePath(document); if (!file) { return undefined; } + // Prefer renaming matching jsx tag when available + if (this.client.apiVersion.gte(API.v510) && + vscode.workspace.getConfiguration(this.language.id).get('preferences.renameMatchingJsxTags', true) && + this.looksLikePotentialJsxTagContext(document, position) + ) { + const args = typeConverters.Position.toFileLocationRequestArgs(file, position); + const response = await this.client.execute('linkedEditingRange', args, token); + if (response.type !== 'response' || !response.body) { + return undefined; + } + + return { type: 'jsxLinkedEditing', spans: response.body.ranges }; + } + const args: Proto.RenameRequestArgs = { ...typeConverters.Position.toFileLocationRequestArgs(file, position), findInStrings: false, findInComments: false }; - return this.client.interruptGetErr(() => { + return this.client.interruptGetErr(async () => { this.fileConfigurationManager.ensureConfigurationForDocument(document, token); - return this.client.execute('rename', args, token); + const response = await this.client.execute('rename', args, token); + if (response.type !== 'response' || !response.body) { + return undefined; + } + return { type: 'rename', body: response.body }; }); } + private looksLikePotentialJsxTagContext(document: vscode.TextDocument, position: vscode.Position): boolean { + if (![languageIds.typescriptreact, languageIds.javascript, languageIds.javascriptreact].includes(document.languageId)) { + return false; + } + + const prefix = document.getText(new vscode.Range(position.line, 0, position.line, position.character)); + return /\<\/?\s*[\w\d_$.]*$/.test(prefix); + } + private updateLocs( locations: ReadonlyArray, newName: string @@ -138,6 +199,7 @@ class TypeScriptRenameProvider implements vscode.RenameProvider { export function register( selector: DocumentSelector, + language: LanguageDescription, client: ITypeScriptServiceClient, fileConfigurationManager: FileConfigurationManager, ) { @@ -145,6 +207,6 @@ export function register( requireSomeCapability(client, ClientCapability.Semantic), ], () => { return vscode.languages.registerRenameProvider(selector.semantic, - new TypeScriptRenameProvider(client, fileConfigurationManager)); + new TypeScriptRenameProvider(language, client, fileConfigurationManager)); }); } diff --git a/extensions/typescript-language-features/src/languageFeatures/semanticTokens.ts b/extensions/typescript-language-features/src/languageFeatures/semanticTokens.ts index 582ea7e661c..48c9af7a5a5 100644 --- a/extensions/typescript-language-features/src/languageFeatures/semanticTokens.ts +++ b/extensions/typescript-language-features/src/languageFeatures/semanticTokens.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as Proto from '../protocol'; +import * as Proto from '../tsServer/protocol/protocol'; +import { API } from '../tsServer/api'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { conditionalRegistration, requireMinVersion, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; +import { conditionalRegistration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration'; +import { DocumentSelector } from '../configuration/documentSelector'; // as we don't do deltas, for performance reasons, don't compute semantic tokens for documents above that limit const CONTENT_LENGTH_LIMIT = 100000; diff --git a/extensions/typescript-language-features/src/languageFeatures/signatureHelp.ts b/extensions/typescript-language-features/src/languageFeatures/signatureHelp.ts index 70b1f7084a7..62aeba68b55 100644 --- a/extensions/typescript-language-features/src/languageFeatures/signatureHelp.ts +++ b/extensions/typescript-language-features/src/languageFeatures/signatureHelp.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as Previewer from '../utils/previewer'; -import * as typeConverters from '../utils/typeConverters'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; +import * as Previewer from './util/textRendering'; class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider { @@ -72,19 +72,19 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider { private convertSignature(item: Proto.SignatureHelpItem, baseUri: vscode.Uri) { const signature = new vscode.SignatureInformation( - Previewer.plainWithLinks(item.prefixDisplayParts, this.client), - Previewer.markdownDocumentation(item.documentation, item.tags.filter(x => x.name !== 'param'), this.client, baseUri)); + Previewer.asPlainTextWithLinks(item.prefixDisplayParts, this.client), + Previewer.documentationToMarkdown(item.documentation, item.tags.filter(x => x.name !== 'param'), this.client, baseUri)); let textIndex = signature.label.length; - const separatorLabel = Previewer.plainWithLinks(item.separatorDisplayParts, this.client); + const separatorLabel = Previewer.asPlainTextWithLinks(item.separatorDisplayParts, this.client); for (let i = 0; i < item.parameters.length; ++i) { const parameter = item.parameters[i]; - const label = Previewer.plainWithLinks(parameter.displayParts, this.client); + const label = Previewer.asPlainTextWithLinks(parameter.displayParts, this.client); signature.parameters.push( new vscode.ParameterInformation( [textIndex, textIndex + label.length], - Previewer.markdownDocumentation(parameter.documentation, [], this.client, baseUri))); + Previewer.documentationToMarkdown(parameter.documentation, [], this.client, baseUri))); textIndex += label.length; signature.label += label; @@ -95,7 +95,7 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider { } } - signature.label += Previewer.plainWithLinks(item.suffixDisplayParts, this.client); + signature.label += Previewer.asPlainTextWithLinks(item.suffixDisplayParts, this.client); return signature; } } diff --git a/extensions/typescript-language-features/src/languageFeatures/smartSelect.ts b/extensions/typescript-language-features/src/languageFeatures/smartSelect.ts index 5906cdeadb3..80887d65180 100644 --- a/extensions/typescript-language-features/src/languageFeatures/smartSelect.ts +++ b/extensions/typescript-language-features/src/languageFeatures/smartSelect.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { API } from '../tsServer/api'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { conditionalRegistration, requireMinVersion } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; -import * as typeConverters from '../utils/typeConverters'; +import { conditionalRegistration, requireMinVersion } from './util/dependentRegistration'; class SmartSelection implements vscode.SelectionRangeProvider { public static readonly minVersion = API.v350; diff --git a/extensions/typescript-language-features/src/languageFeatures/sourceDefinition.ts b/extensions/typescript-language-features/src/languageFeatures/sourceDefinition.ts index 9e842d73813..301f8607a1e 100644 --- a/extensions/typescript-language-features/src/languageFeatures/sourceDefinition.ts +++ b/extensions/typescript-language-features/src/languageFeatures/sourceDefinition.ts @@ -5,10 +5,10 @@ import * as vscode from 'vscode'; import { Command, CommandManager } from '../commands/commandManager'; +import { isSupportedLanguageMode } from '../configuration/languageIds'; +import { API } from '../tsServer/api'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { isSupportedLanguageMode } from '../utils/languageIds'; -import * as typeConverters from '../utils/typeConverters'; class SourceDefinitionCommand implements Command { diff --git a/extensions/typescript-language-features/src/languageFeatures/tagClosing.ts b/extensions/typescript-language-features/src/languageFeatures/tagClosing.ts index 21677f47390..36c894e8e1e 100644 --- a/extensions/typescript-language-features/src/languageFeatures/tagClosing.ts +++ b/extensions/typescript-language-features/src/languageFeatures/tagClosing.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import type * as Proto from '../tsServer/protocol/protocol'; +import { API } from '../tsServer/api'; import { ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import { Condition, conditionalRegistration, requireMinVersion } from '../utils/dependentRegistration'; +import { Condition, conditionalRegistration, requireMinVersion } from './util/dependentRegistration'; import { Disposable } from '../utils/dispose'; -import { DocumentSelector } from '../utils/documentSelector'; -import { LanguageDescription } from '../utils/languageDescription'; -import * as typeConverters from '../utils/typeConverters'; +import { DocumentSelector } from '../configuration/documentSelector'; +import { LanguageDescription } from '../configuration/languageDescription'; +import * as typeConverters from '../typeConverters'; class TagClosing extends Disposable { public static readonly minVersion = API.v300; diff --git a/extensions/typescript-language-features/src/languageFeatures/tsconfig.ts b/extensions/typescript-language-features/src/languageFeatures/tsconfig.ts index 1bc20abd55b..34ed6828145 100644 --- a/extensions/typescript-language-features/src/languageFeatures/tsconfig.ts +++ b/extensions/typescript-language-features/src/languageFeatures/tsconfig.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as jsonc from 'jsonc-parser'; -import { basename, posix } from 'path'; +import { posix } from 'path'; import * as vscode from 'vscode'; import { Utils } from 'vscode-uri'; import { coalesce } from '../utils/arrays'; -import { exists } from '../utils/fs'; +import { exists, looksLikeAbsoluteWindowsPath } from '../utils/fs'; function mapChildren(node: jsonc.Node | undefined, f: (x: jsonc.Node) => R): R[] { return node && node.type === 'array' && node.children @@ -18,8 +18,8 @@ function mapChildren(node: jsonc.Node | undefined, f: (x: jsonc.Node) => R): const openExtendsLinkCommandId = '_typescript.openExtendsLink'; type OpenExtendsLinkCommandArgs = { - resourceUri: vscode.Uri; - extendsValue: string; + readonly resourceUri: vscode.Uri; + readonly extendsValue: string; }; @@ -42,23 +42,31 @@ class TsconfigLinkProvider implements vscode.DocumentLinkProvider { } private getExtendsLink(document: vscode.TextDocument, root: jsonc.Node): vscode.DocumentLink | undefined { - const extendsNode = jsonc.findNodeAtLocation(root, ['extends']); - if (!this.isPathValue(extendsNode)) { - return undefined; - } + const node = jsonc.findNodeAtLocation(root, ['extends']); + return node && this.tryCreateTsConfigLink(document, node); + } - const extendsValue: string = extendsNode.value; - if (extendsValue.startsWith('/')) { + private getReferencesLinks(document: vscode.TextDocument, root: jsonc.Node) { + return mapChildren( + jsonc.findNodeAtLocation(root, ['references']), + child => { + const pathNode = jsonc.findNodeAtLocation(child, ['path']); + return pathNode && this.tryCreateTsConfigLink(document, pathNode); + }); + } + + private tryCreateTsConfigLink(document: vscode.TextDocument, node: jsonc.Node): vscode.DocumentLink | undefined { + if (!this.isPathValue(node)) { return undefined; } const args: OpenExtendsLinkCommandArgs = { - resourceUri: document.uri, - extendsValue: extendsValue + resourceUri: { ...document.uri.toJSON(), $mid: undefined }, + extendsValue: node.value }; const link = new vscode.DocumentLink( - this.getRange(document, extendsNode), + this.getRange(document, node), vscode.Uri.parse(`command:${openExtendsLinkCommandId}?${JSON.stringify(args)}`)); link.tooltip = vscode.l10n.t("Follow link"); return link; @@ -70,22 +78,6 @@ class TsconfigLinkProvider implements vscode.DocumentLinkProvider { child => this.pathNodeToLink(document, child)); } - private getReferencesLinks(document: vscode.TextDocument, root: jsonc.Node) { - return mapChildren( - jsonc.findNodeAtLocation(root, ['references']), - child => { - const pathNode = jsonc.findNodeAtLocation(child, ['path']); - if (!this.isPathValue(pathNode)) { - return undefined; - } - - return new vscode.DocumentLink(this.getRange(document, pathNode), - basename(pathNode.value).endsWith('.json') - ? this.getFileTarget(document, pathNode) - : this.getFolderTarget(document, pathNode)); - }); - } - private pathNodeToLink( document: vscode.TextDocument, node: jsonc.Node | undefined @@ -95,21 +87,17 @@ class TsconfigLinkProvider implements vscode.DocumentLinkProvider { : undefined; } - private isPathValue(extendsNode: jsonc.Node | undefined): extendsNode is jsonc.Node { - return extendsNode - && extendsNode.type === 'string' - && extendsNode.value - && !(extendsNode.value as string).includes('*'); // don't treat globs as links. + private isPathValue(node: jsonc.Node | undefined): node is jsonc.Node { + return node + && node.type === 'string' + && node.value + && !(node.value as string).includes('*'); // don't treat globs as links. } private getFileTarget(document: vscode.TextDocument, node: jsonc.Node): vscode.Uri { return vscode.Uri.joinPath(Utils.dirname(document.uri), node.value); } - private getFolderTarget(document: vscode.TextDocument, node: jsonc.Node): vscode.Uri { - return vscode.Uri.joinPath(Utils.dirname(document.uri), node.value, 'tsconfig.json'); - } - private getRange(document: vscode.TextDocument, node: jsonc.Node) { const offset = node.offset; const start = document.positionAt(offset + 1); @@ -160,14 +148,9 @@ async function resolveNodeModulesPath(baseDirUri: vscode.Uri, pathCandidates: st /** * @returns Returns undefined in case of lack of result while trying to resolve from node_modules */ -async function getTsconfigPath(baseDirUri: vscode.Uri, extendsValue: string): Promise { - // Don't take into account a case, where tsconfig might be resolved from the root (see the reference) - // e.g. C:/projects/shared-tsconfig/tsconfig.json (note that C: prefix is optional) - - const isRelativePath = ['./', '../'].some(str => extendsValue.startsWith(str)); - if (isRelativePath) { - const absolutePath = vscode.Uri.joinPath(baseDirUri, extendsValue); - if (await exists(absolutePath) || absolutePath.path.endsWith('.json')) { +async function getTsconfigPath(baseDirUri: vscode.Uri, pathValue: string): Promise { + async function resolve(absolutePath: vscode.Uri): Promise { + if (absolutePath.path.endsWith('.json') || await exists(absolutePath)) { return absolutePath; } return absolutePath.with({ @@ -175,12 +158,21 @@ async function getTsconfigPath(baseDirUri: vscode.Uri, extendsValue: string): Pr }); } + const isRelativePath = ['./', '../'].some(str => pathValue.startsWith(str)); + if (isRelativePath) { + return resolve(vscode.Uri.joinPath(baseDirUri, pathValue)); + } + + if (pathValue.startsWith('/') || looksLikeAbsoluteWindowsPath(pathValue)) { + return resolve(vscode.Uri.file(pathValue)); + } + // Otherwise resolve like a module return resolveNodeModulesPath(baseDirUri, [ - extendsValue, - ...extendsValue.endsWith('.json') ? [] : [ - `${extendsValue}.json`, - `${extendsValue}/tsconfig.json`, + pathValue, + ...pathValue.endsWith('.json') ? [] : [ + `${pathValue}.json`, + `${pathValue}/tsconfig.json`, ] ]); } @@ -199,7 +191,7 @@ export function register() { return vscode.Disposable.from( vscode.commands.registerCommand(openExtendsLinkCommandId, async ({ resourceUri, extendsValue, }: OpenExtendsLinkCommandArgs) => { - const tsconfigPath = await getTsconfigPath(Utils.dirname(resourceUri), extendsValue); + const tsconfigPath = await getTsconfigPath(Utils.dirname(vscode.Uri.from(resourceUri)), extendsValue); if (tsconfigPath === undefined) { vscode.window.showErrorMessage(vscode.l10n.t("Failed to resolve {0} as module", extendsValue)); return; diff --git a/extensions/typescript-language-features/src/languageFeatures/typeDefinitions.ts b/extensions/typescript-language-features/src/languageFeatures/typeDefinitions.ts index 4aef4f41ed4..e6564749006 100644 --- a/extensions/typescript-language-features/src/languageFeatures/typeDefinitions.ts +++ b/extensions/typescript-language-features/src/languageFeatures/typeDefinitions.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { DocumentSelector } from '../configuration/documentSelector'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import { conditionalRegistration, requireSomeCapability } from '../utils/dependentRegistration'; -import { DocumentSelector } from '../utils/documentSelector'; import DefinitionProviderBase from './definitionProviderBase'; +import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; export default class TypeScriptTypeDefinitionProvider extends DefinitionProviderBase implements vscode.TypeDefinitionProvider { public provideTypeDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise { diff --git a/extensions/typescript-language-features/src/languageFeatures/updatePathsOnRename.ts b/extensions/typescript-language-features/src/languageFeatures/updatePathsOnRename.ts index b52d201a944..0d4da5b39a5 100644 --- a/extensions/typescript-language-features/src/languageFeatures/updatePathsOnRename.ts +++ b/extensions/typescript-language-features/src/languageFeatures/updatePathsOnRename.ts @@ -5,17 +5,17 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import * as fileSchemes from '../configuration/fileSchemes'; +import { doesResourceLookLikeATypeScriptFile } from '../configuration/languageDescription'; +import { API } from '../tsServer/api'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; import { Delayer } from '../utils/async'; import { nulToken } from '../utils/cancellation'; -import { conditionalRegistration, requireMinVersion, requireSomeCapability } from '../utils/dependentRegistration'; import { Disposable } from '../utils/dispose'; -import * as fileSchemes from '../utils/fileSchemes'; -import { doesResourceLookLikeATypeScriptFile } from '../utils/languageDescription'; -import * as typeConverters from '../utils/typeConverters'; import FileConfigurationManager from './fileConfigurationManager'; +import { conditionalRegistration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration'; const updateImportsOnFileMoveName = 'updateImportsOnFileMove.enabled'; @@ -239,7 +239,7 @@ class UpdateImportsOnFileRenameHandler extends Disposable { for (const rename of renames) { // Group renames by type (js/ts) and by workspace. - const key = `${this.client.getWorkspaceRootForResource(rename.jsTsFileThatIsBeingMoved)}@@@${doesResourceLookLikeATypeScriptFile(rename.jsTsFileThatIsBeingMoved)}`; + const key = `${this.client.getWorkspaceRootForResource(rename.jsTsFileThatIsBeingMoved)?.fsPath}@@@${doesResourceLookLikeATypeScriptFile(rename.jsTsFileThatIsBeingMoved)}`; if (!groups.has(key)) { groups.set(key, new Set()); } diff --git a/extensions/typescript-language-features/src/utils/codeAction.ts b/extensions/typescript-language-features/src/languageFeatures/util/codeAction.ts similarity index 87% rename from extensions/typescript-language-features/src/utils/codeAction.ts rename to extensions/typescript-language-features/src/languageFeatures/util/codeAction.ts index 6a7ad144482..c2197d593db 100644 --- a/extensions/typescript-language-features/src/utils/codeAction.ts +++ b/extensions/typescript-language-features/src/languageFeatures/util/codeAction.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import { ITypeScriptServiceClient } from '../typescriptService'; -import * as typeConverters from './typeConverters'; +import type * as Proto from '../../tsServer/protocol/protocol'; +import * as typeConverters from '../../typeConverters'; +import { ITypeScriptServiceClient } from '../../typescriptService'; export function getEditForCodeAction( client: ITypeScriptServiceClient, diff --git a/extensions/typescript-language-features/src/utils/dependentRegistration.ts b/extensions/typescript-language-features/src/languageFeatures/util/dependentRegistration.ts similarity index 93% rename from extensions/typescript-language-features/src/utils/dependentRegistration.ts rename to extensions/typescript-language-features/src/languageFeatures/util/dependentRegistration.ts index c53d553625c..e234acd1ab4 100644 --- a/extensions/typescript-language-features/src/utils/dependentRegistration.ts +++ b/extensions/typescript-language-features/src/languageFeatures/util/dependentRegistration.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from './api'; -import { Disposable } from './dispose'; +import { API } from '../../tsServer/api'; +import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService'; +import { Disposable } from '../../utils/dispose'; export class Condition extends Disposable { private _value: boolean; diff --git a/extensions/typescript-language-features/src/utils/snippetForFunctionCall.ts b/extensions/typescript-language-features/src/languageFeatures/util/snippetForFunctionCall.ts similarity index 96% rename from extensions/typescript-language-features/src/utils/snippetForFunctionCall.ts rename to extensions/typescript-language-features/src/languageFeatures/util/snippetForFunctionCall.ts index 2c5a0fd515c..def0895703f 100644 --- a/extensions/typescript-language-features/src/utils/snippetForFunctionCall.ts +++ b/extensions/typescript-language-features/src/languageFeatures/util/snippetForFunctionCall.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import * as PConst from '../protocol.const'; +import type * as Proto from '../../tsServer/protocol/protocol'; +import * as PConst from '../../tsServer/protocol/protocol.const'; export function snippetForFunctionCall( item: { insertText?: string | vscode.SnippetString; label: string }, diff --git a/extensions/typescript-language-features/src/utils/previewer.ts b/extensions/typescript-language-features/src/languageFeatures/util/textRendering.ts similarity index 83% rename from extensions/typescript-language-features/src/utils/previewer.ts rename to extensions/typescript-language-features/src/languageFeatures/util/textRendering.ts index cc8125fc778..bc4b7ad1b5f 100644 --- a/extensions/typescript-language-features/src/utils/previewer.ts +++ b/extensions/typescript-language-features/src/languageFeatures/util/textRendering.ts @@ -4,7 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { OpenJsDocLinkCommand, OpenJsDocLinkCommand_Args } from '../../commands/openJsDocLink'; +import type * as Proto from '../../tsServer/protocol/protocol'; +import * as typeConverters from '../../typeConverters'; export interface IFilePathToResourceConverter { /** @@ -130,7 +132,7 @@ function getTagBody(tag: Proto.JSDocTagInfo, filePathConverter: IFilePathToResou return (convertLinkTags(tag.text, filePathConverter)).split(/^(\S+)\s*-?\s*/); } -export function plainWithLinks( +export function asPlainTextWithLinks( parts: readonly Proto.SymbolDisplayPart[] | string, filePathConverter: IFilePathToResourceConverter, ): string { @@ -160,13 +162,15 @@ function convertLinkTags( case 'link': if (currentLink) { if (currentLink.target) { - const link = filePathConverter.toResource(currentLink.target.file) - .with({ - fragment: `L${currentLink.target.start.line},${currentLink.target.start.offset}` - }); + const file = filePathConverter.toResource(currentLink.target.file); + const args: OpenJsDocLinkCommand_Args = { + file: { ...file.toJSON(), $mid: undefined }, // Prevent VS Code from trying to transform the uri, + position: typeConverters.Position.fromLocation(currentLink.target.start) + }; + const command = `command:${OpenJsDocLinkCommand.id}?${encodeURIComponent(JSON.stringify([args]))}`; const linkText = currentLink.text ? currentLink.text : escapeMarkdownSyntaxTokensForCode(currentLink.name ?? ''); - out.push(`[${currentLink.linkcode ? '`' + linkText + '`' : linkText}](${link.toString()})`); + out.push(`[${currentLink.linkcode ? '`' + linkText + '`' : linkText}](${command})`); } else { const text = currentLink.text ?? currentLink.name; if (text) { @@ -212,44 +216,48 @@ function convertLinkTags( return processInlineTags(out.join('')); } -export function tagsMarkdownPreview( +function escapeMarkdownSyntaxTokensForCode(text: string): string { + return text.replace(/`/g, '\\$&'); // CodeQL [SM02383] This is only meant to escape backticks. The Markdown is fully sanitized after being rendered. +} + +export function tagsToMarkdown( tags: readonly Proto.JSDocTagInfo[], filePathConverter: IFilePathToResourceConverter, ): string { return tags.map(tag => getTagDocumentation(tag, filePathConverter)).join(' \n\n'); } -export function markdownDocumentation( +export function documentationToMarkdown( documentation: readonly Proto.SymbolDisplayPart[] | string, tags: readonly Proto.JSDocTagInfo[], filePathConverter: IFilePathToResourceConverter, baseUri: vscode.Uri | undefined, ): vscode.MarkdownString { const out = new vscode.MarkdownString(); - addMarkdownDocumentation(out, documentation, tags, filePathConverter); + appendDocumentationAsMarkdown(out, documentation, tags, filePathConverter); out.baseUri = baseUri; + out.isTrusted = { enabledCommands: [OpenJsDocLinkCommand.id] }; return out; } -export function addMarkdownDocumentation( +export function appendDocumentationAsMarkdown( out: vscode.MarkdownString, documentation: readonly Proto.SymbolDisplayPart[] | string | undefined, tags: readonly Proto.JSDocTagInfo[] | undefined, converter: IFilePathToResourceConverter, ): vscode.MarkdownString { if (documentation) { - out.appendMarkdown(plainWithLinks(documentation, converter)); + out.appendMarkdown(asPlainTextWithLinks(documentation, converter)); } if (tags) { - const tagsPreview = tagsMarkdownPreview(tags, converter); + const tagsPreview = tagsToMarkdown(tags, converter); if (tagsPreview) { out.appendMarkdown('\n\n' + tagsPreview); } } + + out.isTrusted = { enabledCommands: [OpenJsDocLinkCommand.id] }; + return out; } - -function escapeMarkdownSyntaxTokensForCode(text: string): string { - return text.replace(/`/g, '\\$&'); -} diff --git a/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts b/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts index 0072156efa9..f9cdbf79afb 100644 --- a/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts +++ b/extensions/typescript-language-features/src/languageFeatures/workspaceSymbols.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import * as PConst from '../protocol.const'; +import * as fileSchemes from '../configuration/fileSchemes'; +import { doesResourceLookLikeAJavaScriptFile, doesResourceLookLikeATypeScriptFile } from '../configuration/languageDescription'; +import { API } from '../tsServer/api'; +import { parseKindModifier } from '../tsServer/protocol/modifiers'; +import type * as Proto from '../tsServer/protocol/protocol'; +import * as PConst from '../tsServer/protocol/protocol.const'; +import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; -import * as fileSchemes from '../utils/fileSchemes'; -import { doesResourceLookLikeAJavaScriptFile, doesResourceLookLikeATypeScriptFile } from '../utils/languageDescription'; -import { parseKindModifier } from '../utils/modifiers'; -import * as typeConverters from '../utils/typeConverters'; function getSymbolKind(item: Proto.NavtoItem): vscode.SymbolKind { switch (item.kind) { diff --git a/extensions/typescript-language-features/src/languageProvider.ts b/extensions/typescript-language-features/src/languageProvider.ts index 321a2c845b3..1de34c6998c 100644 --- a/extensions/typescript-language-features/src/languageProvider.ts +++ b/extensions/typescript-language-features/src/languageProvider.ts @@ -6,17 +6,18 @@ import { basename, extname } from 'path'; import * as vscode from 'vscode'; import { CommandManager } from './commands/commandManager'; +import { DocumentSelector } from './configuration/documentSelector'; +import * as fileSchemes from './configuration/fileSchemes'; +import { LanguageDescription } from './configuration/languageDescription'; import { DiagnosticKind } from './languageFeatures/diagnostics'; import FileConfigurationManager from './languageFeatures/fileConfigurationManager'; +import { TelemetryReporter } from './logging/telemetry'; import { CachedResponse } from './tsServer/cachedResponse'; import { ClientCapability } from './typescriptService'; import TypeScriptServiceClient from './typescriptServiceClient'; +import TypingsStatus from './ui/typingsStatus'; import { Disposable } from './utils/dispose'; -import { DocumentSelector } from './utils/documentSelector'; -import * as fileSchemes from './utils/fileSchemes'; -import { LanguageDescription } from './utils/languageDescription'; -import { TelemetryReporter } from './utils/telemetry'; -import TypingsStatus from './utils/typingsStatus'; +import { isWeb } from './utils/platform'; const validateSetting = 'validate.enable'; @@ -45,7 +46,7 @@ export default class LanguageProvider extends Disposable { const syntax: vscode.DocumentFilter[] = []; for (const language of this.description.languageIds) { syntax.push({ language }); - for (const scheme of fileSchemes.semanticSupportedSchemes) { + for (const scheme of fileSchemes.getSemanticSupportedSchemes()) { semantic.push({ language, scheme }); } } @@ -75,11 +76,12 @@ export default class LanguageProvider extends Disposable { import('./languageFeatures/implementations').then(provider => this._register(provider.register(selector, this.client))), import('./languageFeatures/inlayHints').then(provider => this._register(provider.register(selector, this.description, this.client, this.fileConfigurationManager))), import('./languageFeatures/jsDocCompletions').then(provider => this._register(provider.register(selector, this.description, this.client, this.fileConfigurationManager))), + import('./languageFeatures/linkedEditing').then(provider => this._register(provider.register(selector, this.client))), import('./languageFeatures/organizeImports').then(provider => this._register(provider.register(selector, this.client, this.commandManager, this.fileConfigurationManager, this.telemetryReporter))), import('./languageFeatures/quickFix').then(provider => this._register(provider.register(selector, this.client, this.fileConfigurationManager, this.commandManager, this.client.diagnosticsManager, this.telemetryReporter))), import('./languageFeatures/refactor').then(provider => this._register(provider.register(selector, this.client, this.fileConfigurationManager, this.commandManager, this.telemetryReporter))), import('./languageFeatures/references').then(provider => this._register(provider.register(selector, this.client))), - import('./languageFeatures/rename').then(provider => this._register(provider.register(selector, this.client, this.fileConfigurationManager))), + import('./languageFeatures/rename').then(provider => this._register(provider.register(selector, this.description, this.client, this.fileConfigurationManager))), import('./languageFeatures/semanticTokens').then(provider => this._register(provider.register(selector, this.client))), import('./languageFeatures/signatureHelp').then(provider => this._register(provider.register(selector, this.client))), import('./languageFeatures/smartSelect').then(provider => this._register(provider.register(selector, this.client))), @@ -138,6 +140,10 @@ export default class LanguageProvider extends Disposable { return; } + if (diagnosticsKind === DiagnosticKind.Semantic && isWeb() && this.client.configuration.webProjectWideIntellisenseSuppressSemanticErrors) { + return; + } + const config = vscode.workspace.getConfiguration(this.id, file); const reportUnnecessary = config.get('showUnused', true); const reportDeprecated = config.get('showDeprecated', true); diff --git a/extensions/typescript-language-features/src/lazyClientHost.ts b/extensions/typescript-language-features/src/lazyClientHost.ts index db8e23245b2..be832b3e169 100644 --- a/extensions/typescript-language-features/src/lazyClientHost.ts +++ b/extensions/typescript-language-features/src/lazyClientHost.ts @@ -11,14 +11,14 @@ import { ILogDirectoryProvider } from './tsServer/logDirectoryProvider'; import { TsServerProcessFactory } from './tsServer/server'; import { ITypeScriptVersionProvider } from './tsServer/versionProvider'; import TypeScriptServiceClientHost from './typeScriptServiceClientHost'; -import { ActiveJsTsEditorTracker } from './utils/activeJsTsEditorTracker'; -import { ServiceConfigurationProvider } from './utils/configuration'; -import * as fileSchemes from './utils/fileSchemes'; -import { standardLanguageDescriptions } from './utils/languageDescription'; +import { ActiveJsTsEditorTracker } from './ui/activeJsTsEditorTracker'; +import ManagedFileContextManager from './ui/managedFileContext'; +import { ServiceConfigurationProvider } from './configuration/configuration'; +import * as fileSchemes from './configuration/fileSchemes'; +import { standardLanguageDescriptions } from './configuration/languageDescription'; import { Lazy, lazy } from './utils/lazy'; -import { Logger } from './utils/logger'; -import ManagedFileContextManager from './utils/managedFileContext'; -import { PluginManager } from './utils/plugins'; +import { Logger } from './logging/logger'; +import { PluginManager } from './tsServer/plugins'; export function createLazyClientHost( context: vscode.ExtensionContext, diff --git a/extensions/typescript-language-features/src/utils/logLevelMonitor.ts b/extensions/typescript-language-features/src/logging/logLevelMonitor.ts similarity index 96% rename from extensions/typescript-language-features/src/utils/logLevelMonitor.ts rename to extensions/typescript-language-features/src/logging/logLevelMonitor.ts index f1140567d99..09d566b05bf 100644 --- a/extensions/typescript-language-features/src/utils/logLevelMonitor.ts +++ b/extensions/typescript-language-features/src/logging/logLevelMonitor.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { TsServerLogLevel } from './configuration'; -import { Disposable } from './dispose'; +import { TsServerLogLevel } from '../configuration/configuration'; +import { Disposable } from '../utils/dispose'; export class LogLevelMonitor extends Disposable { diff --git a/extensions/typescript-language-features/src/logging/logger.ts b/extensions/typescript-language-features/src/logging/logger.ts new file mode 100644 index 00000000000..33139b15537 --- /dev/null +++ b/extensions/typescript-language-features/src/logging/logger.ts @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { memoize } from '../utils/memoize'; + +export class Logger { + + @memoize + private get output(): vscode.LogOutputChannel { + return vscode.window.createOutputChannel('TypeScript', { log: true }); + } + + public get logLevel(): vscode.LogLevel { + return this.output.logLevel; + } + + public info(message: string, ...args: any[]): void { + this.output.info(message, ...args); + } + + public trace(message: string, ...args: any[]): void { + this.output.trace(message, ...args); + } + + public error(message: string, data?: any): void { + // See https://github.com/microsoft/TypeScript/issues/10496 + if (data && data.message === 'No content available.') { + return; + } + this.output.error(message, ...(data ? [data] : [])); + } +} diff --git a/extensions/typescript-language-features/src/utils/telemetry.ts b/extensions/typescript-language-features/src/logging/telemetry.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/telemetry.ts rename to extensions/typescript-language-features/src/logging/telemetry.ts diff --git a/extensions/typescript-language-features/src/logging/tracer.ts b/extensions/typescript-language-features/src/logging/tracer.ts new file mode 100644 index 00000000000..e273181075d --- /dev/null +++ b/extensions/typescript-language-features/src/logging/tracer.ts @@ -0,0 +1,50 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import type * as Proto from '../tsServer/protocol/protocol'; +import { Disposable } from '../utils/dispose'; +import { Logger } from './logger'; + +interface RequestExecutionMetadata { + readonly queuingStartTime: number; +} + +export default class Tracer extends Disposable { + + constructor( + private readonly logger: Logger + ) { + super(); + } + + public traceRequest(serverId: string, request: Proto.Request, responseExpected: boolean, queueLength: number): void { + if (this.logger.logLevel === vscode.LogLevel.Trace) { + this.trace(serverId, `Sending request: ${request.command} (${request.seq}). Response expected: ${responseExpected ? 'yes' : 'no'}. Current queue length: ${queueLength}`, request.arguments); + } + } + + public traceResponse(serverId: string, response: Proto.Response, meta: RequestExecutionMetadata): void { + if (this.logger.logLevel === vscode.LogLevel.Trace) { + this.trace(serverId, `Response received: ${response.command} (${response.request_seq}). Request took ${Date.now() - meta.queuingStartTime} ms. Success: ${response.success} ${!response.success ? '. Message: ' + response.message : ''}`, response.body); + } + } + + public traceRequestCompleted(serverId: string, command: string, request_seq: number, meta: RequestExecutionMetadata): any { + if (this.logger.logLevel === vscode.LogLevel.Trace) { + this.trace(serverId, `Async response received: ${command} (${request_seq}). Request took ${Date.now() - meta.queuingStartTime} ms.`); + } + } + + public traceEvent(serverId: string, event: Proto.Event): void { + if (this.logger.logLevel === vscode.LogLevel.Trace) { + this.trace(serverId, `Event received: ${event.event} (${event.seq}).`, event.body); + } + } + + public trace(serverId: string, message: string, data?: unknown): void { + this.logger.trace(`<${serverId}> ${message}`, ...(data ? [JSON.stringify(data, null, 4)] : [])); + } +} diff --git a/extensions/typescript-language-features/src/task/taskProvider.ts b/extensions/typescript-language-features/src/task/taskProvider.ts index 05aeb1119a7..c1b14385603 100644 --- a/extensions/typescript-language-features/src/task/taskProvider.ts +++ b/extensions/typescript-language-features/src/task/taskProvider.ts @@ -11,9 +11,9 @@ import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService'; import { coalesce } from '../utils/arrays'; import { Disposable } from '../utils/dispose'; import { exists } from '../utils/fs'; -import { isTsConfigFileName } from '../utils/languageDescription'; +import { isTsConfigFileName } from '../configuration/languageDescription'; import { Lazy } from '../utils/lazy'; -import { isImplicitProjectConfigFile } from '../utils/tsconfig'; +import { isImplicitProjectConfigFile } from '../tsconfig'; import { TSConfig, TsConfigProvider } from './tsconfigProvider'; diff --git a/extensions/typescript-language-features/src/test/smoke/completions.test.ts b/extensions/typescript-language-features/src/test/smoke/completions.test.ts index 4c0c5f61e5d..bdaeb858e25 100644 --- a/extensions/typescript-language-features/src/test/smoke/completions.test.ts +++ b/extensions/typescript-language-features/src/test/smoke/completions.test.ts @@ -6,7 +6,7 @@ import 'mocha'; import * as vscode from 'vscode'; import { acceptFirstSuggestion, typeCommitCharacter } from '../../test/suggestTestHelpers'; -import { assertEditorContents, Config, createTestEditor, enumerateConfig, joinLines, updateConfig, VsCodeConfiguration } from '../../test/testUtils'; +import { Config, VsCodeConfiguration, assertEditorContents, createTestEditor, enumerateConfig, joinLines, updateConfig } from '../../test/testUtils'; import { disposeAll } from '../../utils/dispose'; const testDocumentUri = vscode.Uri.parse('untitled:test.ts'); diff --git a/extensions/typescript-language-features/src/test/unit/cachedResponse.test.ts b/extensions/typescript-language-features/src/test/unit/cachedResponse.test.ts index 49a9049013a..5b024e59a4f 100644 --- a/extensions/typescript-language-features/src/test/unit/cachedResponse.test.ts +++ b/extensions/typescript-language-features/src/test/unit/cachedResponse.test.ts @@ -6,8 +6,8 @@ import * as assert from 'assert'; import 'mocha'; import * as vscode from 'vscode'; -import type * as Proto from '../../protocol'; import { CachedResponse } from '../../tsServer/cachedResponse'; +import type * as Proto from '../../tsServer/protocol/protocol'; import { ServerResponse } from '../../typescriptService'; suite('CachedResponse', () => { diff --git a/extensions/typescript-language-features/src/test/unit/functionCallSnippet.test.ts b/extensions/typescript-language-features/src/test/unit/functionCallSnippet.test.ts index 5b46a7f0e6d..ccda34396f3 100644 --- a/extensions/typescript-language-features/src/test/unit/functionCallSnippet.test.ts +++ b/extensions/typescript-language-features/src/test/unit/functionCallSnippet.test.ts @@ -6,7 +6,7 @@ import * as assert from 'assert'; import 'mocha'; import * as vscode from 'vscode'; -import { snippetForFunctionCall } from '../../utils/snippetForFunctionCall'; +import { snippetForFunctionCall } from '../../languageFeatures/util/snippetForFunctionCall'; suite('typescript function call snippets', () => { test('Should use label as function name', async () => { diff --git a/extensions/typescript-language-features/src/test/unit/server.test.ts b/extensions/typescript-language-features/src/test/unit/server.test.ts index 29b3c20729a..4d086be5b88 100644 --- a/extensions/typescript-language-features/src/test/unit/server.test.ts +++ b/extensions/typescript-language-features/src/test/unit/server.test.ts @@ -6,14 +6,14 @@ import * as assert from 'assert'; import 'mocha'; import * as stream from 'stream'; -import type * as Proto from '../../protocol'; +import { Logger } from '../../logging/logger'; +import { TelemetryReporter } from '../../logging/telemetry'; +import Tracer from '../../logging/tracer'; import { NodeRequestCanceller } from '../../tsServer/cancellation.electron'; +import type * as Proto from '../../tsServer/protocol/protocol'; import { SingleTsServer, TsServerProcess } from '../../tsServer/server'; import { ServerType } from '../../typescriptService'; import { nulToken } from '../../utils/cancellation'; -import { Logger } from '../../utils/logger'; -import { TelemetryReporter } from '../../utils/telemetry'; -import Tracer from '../../utils/tracer'; const NoopTelemetryReporter = new class implements TelemetryReporter { diff --git a/extensions/typescript-language-features/src/test/unit/previewer.test.ts b/extensions/typescript-language-features/src/test/unit/textRendering.test.ts similarity index 83% rename from extensions/typescript-language-features/src/test/unit/previewer.test.ts rename to extensions/typescript-language-features/src/test/unit/textRendering.test.ts index 75a4464610c..2354bb7f589 100644 --- a/extensions/typescript-language-features/src/test/unit/previewer.test.ts +++ b/extensions/typescript-language-features/src/test/unit/textRendering.test.ts @@ -5,9 +5,9 @@ import * as assert from 'assert'; import 'mocha'; -import { SymbolDisplayPart } from '../../protocol'; import { Uri } from 'vscode'; -import { IFilePathToResourceConverter, markdownDocumentation, plainWithLinks, tagsMarkdownPreview } from '../../utils/previewer'; +import { IFilePathToResourceConverter, documentationToMarkdown, asPlainTextWithLinks, tagsToMarkdown } from '../../languageFeatures/util/textRendering'; +import { SymbolDisplayPart } from '../../tsServer/protocol/protocol'; const noopToResource: IFilePathToResourceConverter = { toResource: (path) => Uri.file(path) @@ -16,7 +16,7 @@ const noopToResource: IFilePathToResourceConverter = { suite('typescript.previewer', () => { test('Should ignore hyphens after a param tag', async () => { assert.strictEqual( - tagsMarkdownPreview([ + tagsToMarkdown([ { name: 'param', text: 'a - b' @@ -27,7 +27,7 @@ suite('typescript.previewer', () => { test('Should parse url jsdoc @link', async () => { assert.strictEqual( - markdownDocumentation( + documentationToMarkdown( 'x {@link http://www.example.com/foo} y {@link https://api.jquery.com/bind/#bind-eventType-eventData-handler} z', [], noopToResource, undefined @@ -37,7 +37,7 @@ suite('typescript.previewer', () => { test('Should parse url jsdoc @link with text', async () => { assert.strictEqual( - markdownDocumentation( + documentationToMarkdown( 'x {@link http://www.example.com/foo abc xyz} y {@link http://www.example.com/bar|b a z} z', [], noopToResource, undefined @@ -47,7 +47,7 @@ suite('typescript.previewer', () => { test('Should treat @linkcode jsdocs links as monospace', async () => { assert.strictEqual( - markdownDocumentation( + documentationToMarkdown( 'x {@linkcode http://www.example.com/foo} y {@linkplain http://www.example.com/bar} z', [], noopToResource, undefined @@ -57,7 +57,7 @@ suite('typescript.previewer', () => { test('Should parse url jsdoc @link in param tag', async () => { assert.strictEqual( - tagsMarkdownPreview([ + tagsToMarkdown([ { name: 'param', text: 'a x {@link http://www.example.com/foo abc xyz} y {@link http://www.example.com/bar|b a z} z' @@ -68,7 +68,7 @@ suite('typescript.previewer', () => { test('Should ignore unclosed jsdocs @link', async () => { assert.strictEqual( - markdownDocumentation( + documentationToMarkdown( 'x {@link http://www.example.com/foo y {@link http://www.example.com/bar bar} z', [], noopToResource, undefined @@ -78,7 +78,7 @@ suite('typescript.previewer', () => { test('Should support non-ascii characters in parameter name (#90108)', async () => { assert.strictEqual( - tagsMarkdownPreview([ + tagsToMarkdown([ { name: 'param', text: 'parƔmetroConDiacrƭticos this will not' @@ -89,7 +89,7 @@ suite('typescript.previewer', () => { test('Should render @example blocks as code', () => { assert.strictEqual( - tagsMarkdownPreview([ + tagsToMarkdown([ { name: 'example', text: 'code();' @@ -101,7 +101,7 @@ suite('typescript.previewer', () => { test('Should not render @example blocks as code as if they contain a codeblock', () => { assert.strictEqual( - tagsMarkdownPreview([ + tagsToMarkdown([ { name: 'example', text: 'Not code\n```\ncode();\n```' @@ -113,7 +113,7 @@ suite('typescript.previewer', () => { test('Should render @example blocks as code if they contain a ', () => { assert.strictEqual( - tagsMarkdownPreview([ + tagsToMarkdown([ { name: 'example', text: 'Not code\ncode();' @@ -125,7 +125,7 @@ suite('typescript.previewer', () => { test('Should not render @example blocks as code if they contain a and a codeblock', () => { assert.strictEqual( - tagsMarkdownPreview([ + tagsToMarkdown([ { name: 'example', text: 'Not code\n```\ncode();\n```' @@ -137,7 +137,7 @@ suite('typescript.previewer', () => { test('Should render @linkcode symbol name as code', async () => { assert.strictEqual( - plainWithLinks([ + asPlainTextWithLinks([ { "text": "a ", "kind": "text" }, { "text": "{@linkcode ", "kind": "link" }, { @@ -152,12 +152,12 @@ suite('typescript.previewer', () => { { "text": "}", "kind": "link" }, { "text": " b", "kind": "text" } ], noopToResource), - 'a [`dog`](file:///path/file.ts#L7%2C5) b'); + 'a [`dog`](command:_typescript.openJsDocLink?%5B%7B%22file%22%3A%7B%22path%22%3A%22%2Fpath%2Ffile.ts%22%2C%22scheme%22%3A%22file%22%7D%2C%22position%22%3A%7B%22line%22%3A6%2C%22character%22%3A4%7D%7D%5D) b'); }); test('Should render @linkcode text as code', async () => { assert.strictEqual( - plainWithLinks([ + asPlainTextWithLinks([ { "text": "a ", "kind": "text" }, { "text": "{@linkcode ", "kind": "link" }, { @@ -173,6 +173,6 @@ suite('typescript.previewer', () => { { "text": "}", "kind": "link" }, { "text": " b", "kind": "text" } ], noopToResource), - 'a [`husky`](file:///path/file.ts#L7%2C5) b'); + 'a [`husky`](command:_typescript.openJsDocLink?%5B%7B%22file%22%3A%7B%22path%22%3A%22%2Fpath%2Ffile.ts%22%2C%22scheme%22%3A%22file%22%7D%2C%22position%22%3A%7B%22line%22%3A6%2C%22character%22%3A4%7D%7D%5D) b'); }); }); diff --git a/extensions/typescript-language-features/src/utils/api.ts b/extensions/typescript-language-features/src/tsServer/api.ts similarity index 95% rename from extensions/typescript-language-features/src/utils/api.ts rename to extensions/typescript-language-features/src/tsServer/api.ts index fbf74fe993d..cc90cad37af 100644 --- a/extensions/typescript-language-features/src/utils/api.ts +++ b/extensions/typescript-language-features/src/tsServer/api.ts @@ -7,7 +7,7 @@ import * as semver from 'semver'; import * as vscode from 'vscode'; -export default class API { +export class API { public static fromSimpleString(value: string): API { return new API(value, value, value); } @@ -34,6 +34,8 @@ export default class API { public static readonly v470 = API.fromSimpleString('4.7.0'); public static readonly v480 = API.fromSimpleString('4.8.0'); public static readonly v490 = API.fromSimpleString('4.9.0'); + public static readonly v510 = API.fromSimpleString('5.1.0'); + public static readonly v520 = API.fromSimpleString('5.2.0'); public static fromVersionString(versionString: string): API { let version = semver.valid(versionString); diff --git a/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts b/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts index a4250ba430d..90151ea6a08 100644 --- a/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts +++ b/extensions/typescript-language-features/src/tsServer/bufferSyncSupport.ts @@ -4,30 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; +import { officeScript, vscodeNotebookCell } from '../configuration/fileSchemes'; +import * as languageModeIds from '../configuration/languageIds'; +import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import API from '../utils/api'; +import { inMemoryResourcePrefix } from '../typescriptServiceClient'; import { coalesce } from '../utils/arrays'; import { Delayer, setImmediate } from '../utils/async'; import { nulToken } from '../utils/cancellation'; import { Disposable } from '../utils/dispose'; -import { vscodeNotebookCell } from '../utils/fileSchemes'; -import * as languageModeIds from '../utils/languageIds'; import { ResourceMap } from '../utils/resourceMap'; -import * as typeConverters from '../utils/typeConverters'; +import { API } from './api'; +import type * as Proto from './protocol/protocol'; -const enum BufferKind { - TypeScript = 1, - JavaScript = 2, -} +type ScriptKind = 'TS' | 'TSX' | 'JS' | 'JSX'; -const enum BufferState { - Initial = 1, - Open = 2, - Closed = 2, -} - -function mode2ScriptKind(mode: string): 'TS' | 'TSX' | 'JS' | 'JSX' | undefined { +function mode2ScriptKind(mode: string): ScriptKind | undefined { switch (mode) { case languageModeIds.typescript: return 'TS'; case languageModeIds.typescriptreact: return 'TSX'; @@ -37,19 +29,23 @@ function mode2ScriptKind(mode: string): 'TS' | 'TSX' | 'JS' | 'JSX' | undefined return undefined; } +const enum BufferState { Initial, Open, Closed } + const enum BufferOperationType { Close, Open, Change } class CloseOperation { readonly type = BufferOperationType.Close; constructor( - public readonly args: string + public readonly args: string, + public readonly scriptKind: ScriptKind | undefined, ) { } } class OpenOperation { readonly type = BufferOperationType.Open; constructor( - public readonly args: Proto.OpenRequestArgs + public readonly args: Proto.OpenRequestArgs, + public readonly scriptKind: ScriptKind | undefined, ) { } } @@ -83,7 +79,7 @@ class BufferSynchronizer { public open(resource: vscode.Uri, args: Proto.OpenRequestArgs) { if (this.supportsBatching) { - this.updatePending(resource, new OpenOperation(args)); + this.updatePending(resource, new OpenOperation(args, args.scriptKindName)); } else { this.client.executeWithoutWaitingForResponse('open', args); } @@ -92,9 +88,9 @@ class BufferSynchronizer { /** * @return Was the buffer open? */ - public close(resource: vscode.Uri, filepath: string): boolean { + public close(resource: vscode.Uri, filepath: string, scriptKind: ScriptKind | undefined): boolean { if (this.supportsBatching) { - return this.updatePending(resource, new CloseOperation(filepath)); + return this.updatePending(resource, new CloseOperation(filepath, scriptKind)); } else { const args: Proto.FileRequestArgs = { file: filepath }; this.client.executeWithoutWaitingForResponse('close', args); @@ -150,7 +146,7 @@ class BufferSynchronizer { const closedFiles: string[] = []; const openFiles: Proto.OpenRequestArgs[] = []; const changedFiles: Proto.FileCodeEdits[] = []; - for (const change of this._pending.values) { + for (const change of this._pending.values()) { switch (change.type) { case BufferOperationType.Change: changedFiles.push(change.args); break; case BufferOperationType.Open: openFiles.push(change.args); break; @@ -172,8 +168,10 @@ class BufferSynchronizer { const existing = this._pending.get(resource); switch (existing?.type) { case BufferOperationType.Open: - this._pending.delete(resource); - return false; // Open then close. No need to do anything + if (existing.scriptKind === op.scriptKind) { + this._pending.delete(resource); + return false; // Open then close. No need to do anything + } } break; } @@ -203,7 +201,7 @@ class SyncedBuffer { const args: Proto.OpenRequestArgs = { file: this.filepath, fileContent: this.document.getText(), - projectRootPath: this.client.getWorkspaceRootForResource(this.document.uri), + projectRootPath: this.getProjectRootPath(this.document.uri), }; const scriptKind = mode2ScriptKind(this.document.languageId); @@ -222,6 +220,16 @@ class SyncedBuffer { this.state = BufferState.Open; } + private getProjectRootPath(resource: vscode.Uri): string | undefined { + const workspaceRoot = this.client.getWorkspaceRootForResource(resource); + if (workspaceRoot) { + const tsRoot = this.client.toTsFilePath(workspaceRoot); + return tsRoot?.startsWith(inMemoryResourcePrefix) ? undefined : tsRoot; + } + + return resource.scheme === officeScript ? '/' : undefined; + } + public get resource(): vscode.Uri { return this.document.uri; } @@ -230,17 +238,8 @@ class SyncedBuffer { return this.document.lineCount; } - public get kind(): BufferKind { - switch (this.document.languageId) { - case languageModeIds.javascript: - case languageModeIds.javascriptreact: - return BufferKind.JavaScript; - - case languageModeIds.typescript: - case languageModeIds.typescriptreact: - default: - return BufferKind.TypeScript; - } + public get languageId(): string { + return this.document.languageId; } /** @@ -252,7 +251,7 @@ class SyncedBuffer { return false; } this.state = BufferState.Closed; - return this.synchronizer.close(this.resource, this.filepath); + return this.synchronizer.close(this.resource, this.filepath, mode2ScriptKind(this.document.languageId)); } public onContentChanged(events: readonly vscode.TextDocumentContentChangeEvent[]): void { @@ -271,13 +270,13 @@ class SyncedBufferMap extends ResourceMap { } public get allBuffers(): Iterable { - return this.values; + return this.values(); } } class PendingDiagnostics extends ResourceMap { public getOrderedFileSet(): ResourceMap { - const orderedResources = Array.from(this.entries) + const orderedResources = Array.from(this.entries()) .sort((a, b) => a.value - b.value) .map(entry => entry.resource); @@ -314,7 +313,7 @@ class GetErrRequest { } const supportsSyntaxGetErr = this.client.apiVersion.gte(API.v440); - const allFiles = coalesce(Array.from(files.entries) + const allFiles = coalesce(Array.from(files.entries()) .filter(entry => supportsSyntaxGetErr || client.hasCapabilityForResource(entry.resource, ClientCapability.Semantic)) .map(entry => client.toTsFilePath(entry.resource))); @@ -456,8 +455,9 @@ export default class BufferSyncSupport extends Disposable { private readonly client: ITypeScriptServiceClient; - private _validateJavaScript: boolean = true; - private _validateTypeScript: boolean = true; + private _validateJavaScript = true; + private _validateTypeScript = true; + private readonly modeIds: Set; private readonly syncedBuffers: SyncedBufferMap; private readonly pendingDiagnostics: PendingDiagnostics; @@ -711,7 +711,7 @@ export default class BufferSyncSupport extends Disposable { if (this.pendingGetErr) { this.pendingGetErr.cancel(); - for (const { resource } of this.pendingGetErr.files.entries) { + for (const { resource } of this.pendingGetErr.files.entries()) { if (this.syncedBuffers.get(resource)) { orderedFileSet.set(resource, undefined); } @@ -721,7 +721,7 @@ export default class BufferSyncSupport extends Disposable { } // Add all open TS buffers to the geterr request. They might be visible - for (const buffer of this.syncedBuffers.values) { + for (const buffer of this.syncedBuffers.values()) { orderedFileSet.set(buffer.resource, undefined); } @@ -749,11 +749,13 @@ export default class BufferSyncSupport extends Disposable { return false; } - switch (buffer.kind) { - case BufferKind.JavaScript: + switch (buffer.languageId) { + case languageModeIds.javascript: + case languageModeIds.javascriptreact: return this._validateJavaScript; - case BufferKind.TypeScript: + case languageModeIds.typescript: + case languageModeIds.typescriptreact: default: return this._validateTypeScript; } diff --git a/extensions/typescript-language-features/src/tsServer/cachedResponse.ts b/extensions/typescript-language-features/src/tsServer/cachedResponse.ts index baa1a87a88a..cedc580761f 100644 --- a/extensions/typescript-language-features/src/tsServer/cachedResponse.ts +++ b/extensions/typescript-language-features/src/tsServer/cachedResponse.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; import { ServerResponse } from '../typescriptService'; +import type * as Proto from './protocol/protocol'; type Resolve = () => Promise>; diff --git a/extensions/typescript-language-features/src/tsServer/callbackMap.ts b/extensions/typescript-language-features/src/tsServer/callbackMap.ts index 4e0ec375ddc..57a80051e6d 100644 --- a/extensions/typescript-language-features/src/tsServer/callbackMap.ts +++ b/extensions/typescript-language-features/src/tsServer/callbackMap.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import type * as Proto from '../protocol'; import { ServerResponse } from '../typescriptService'; +import type * as Proto from './protocol/protocol'; export interface CallbackItem { readonly onSuccess: (value: R) => void; diff --git a/extensions/typescript-language-features/src/tsServer/cancellation.electron.ts b/extensions/typescript-language-features/src/tsServer/cancellation.electron.ts index 853ca0c1594..3e1ad0a0c5c 100644 --- a/extensions/typescript-language-features/src/tsServer/cancellation.electron.ts +++ b/extensions/typescript-language-features/src/tsServer/cancellation.electron.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as fs from 'fs'; +import Tracer from '../logging/tracer'; import { getTempFile } from '../utils/temp.electron'; -import Tracer from '../utils/tracer'; import { OngoingRequestCanceller, OngoingRequestCancellerFactory } from './cancellation'; export class NodeRequestCanceller implements OngoingRequestCanceller { @@ -22,7 +22,7 @@ export class NodeRequestCanceller implements OngoingRequestCanceller { if (!this.cancellationPipeName) { return false; } - this._tracer.logTrace(this._serverId, `TypeScript Server: trying to cancel ongoing request with sequence number ${seq}`); + this._tracer.trace(this._serverId, `TypeScript Server: trying to cancel ongoing request with sequence number ${seq}`); try { fs.writeFileSync(this.cancellationPipeName + seq, ''); } catch { diff --git a/extensions/typescript-language-features/src/tsServer/cancellation.ts b/extensions/typescript-language-features/src/tsServer/cancellation.ts index 0eda4e574dc..051708a03d1 100644 --- a/extensions/typescript-language-features/src/tsServer/cancellation.ts +++ b/extensions/typescript-language-features/src/tsServer/cancellation.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import Tracer from '../utils/tracer'; +import Tracer from '../logging/tracer'; export interface OngoingRequestCanceller { readonly cancellationPipeName: string | undefined; diff --git a/extensions/typescript-language-features/src/tsServer/fileWatchingManager.ts b/extensions/typescript-language-features/src/tsServer/fileWatchingManager.ts index 3386067163e..27b9ec3d7f6 100644 --- a/extensions/typescript-language-features/src/tsServer/fileWatchingManager.ts +++ b/extensions/typescript-language-features/src/tsServer/fileWatchingManager.ts @@ -5,32 +5,53 @@ import * as vscode from 'vscode'; import { Utils } from 'vscode-uri'; +import { Schemes } from '../configuration/schemes'; +import { Logger } from '../logging/logger'; import { disposeAll, IDisposable } from '../utils/dispose'; import { ResourceMap } from '../utils/resourceMap'; -import { Schemes } from '../utils/schemes'; -type DirWatcherEntry = { +interface DirWatcherEntry { readonly uri: vscode.Uri; readonly listeners: IDisposable[]; -}; +} -export class FileWatcherManager { +export class FileWatcherManager implements IDisposable { private readonly _fileWatchers = new Map(); private readonly _dirWatchers = new ResourceMap<{ + readonly uri: vscode.Uri; readonly watcher: vscode.FileSystemWatcher; refCount: number; }>(uri => uri.toString(), { onCaseInsensitiveFileSystem: false }); + constructor( + private readonly logger: Logger, + ) { } + + dispose(): void { + for (const entry of this._fileWatchers.values()) { + entry.watcher.dispose(); + } + this._fileWatchers.clear(); + + for (const entry of this._dirWatchers.values()) { + entry.watcher.dispose(); + } + this._dirWatchers.clear(); + } + create(id: number, uri: vscode.Uri, watchParentDirs: boolean, isRecursive: boolean, listeners: { create?: (uri: vscode.Uri) => void; change?: (uri: vscode.Uri) => void; delete?: (uri: vscode.Uri) => void }): void { + this.logger.trace(`Creating file watcher for ${uri.toString()}`); + const watcher = vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(uri, isRecursive ? '**' : '*'), !listeners.create, !listeners.change, !listeners.delete); const parentDirWatchers: DirWatcherEntry[] = []; - this._fileWatchers.set(id, { watcher, dirWatchers: parentDirWatchers }); + this._fileWatchers.set(id, { uri, watcher, dirWatchers: parentDirWatchers }); if (listeners.create) { watcher.onDidCreate(listeners.create); } if (listeners.change) { watcher.onDidChange(listeners.change); } @@ -43,9 +64,10 @@ export class FileWatcherManager { let parentDirWatcher = this._dirWatchers.get(dirUri); if (!parentDirWatcher) { + this.logger.trace(`Creating parent dir watcher for ${dirUri.toString()}`); const glob = new vscode.RelativePattern(Utils.dirname(dirUri), Utils.basename(dirUri)); const parentWatcher = vscode.workspace.createFileSystemWatcher(glob, !listeners.create, true, !listeners.delete); - parentDirWatcher = { refCount: 0, watcher: parentWatcher }; + parentDirWatcher = { uri: dirUri, refCount: 0, watcher: parentWatcher }; this._dirWatchers.set(dirUri, parentDirWatcher); } parentDirWatcher.refCount++; @@ -75,15 +97,19 @@ export class FileWatcherManager { } } + delete(id: number): void { const entry = this._fileWatchers.get(id); if (entry) { + this.logger.trace(`Deleting file watcher for ${entry.uri}`); + for (const dirWatcher of entry.dirWatchers) { disposeAll(dirWatcher.listeners); const dirWatcherEntry = this._dirWatchers.get(dirWatcher.uri); if (dirWatcherEntry) { if (--dirWatcherEntry.refCount <= 0) { + this.logger.trace(`Deleting parent dir ${dirWatcherEntry.uri}`); dirWatcherEntry.watcher.dispose(); this._dirWatchers.delete(dirWatcher.uri); } diff --git a/extensions/typescript-language-features/src/utils/pluginPathsProvider.ts b/extensions/typescript-language-features/src/tsServer/pluginPathsProvider.ts similarity index 89% rename from extensions/typescript-language-features/src/utils/pluginPathsProvider.ts rename to extensions/typescript-language-features/src/tsServer/pluginPathsProvider.ts index c3a878a0bc2..a56076d3944 100644 --- a/extensions/typescript-language-features/src/utils/pluginPathsProvider.ts +++ b/extensions/typescript-language-features/src/tsServer/pluginPathsProvider.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as path from 'path'; import * as vscode from 'vscode'; -import { TypeScriptServiceConfiguration } from './configuration'; -import { RelativeWorkspacePathResolver } from './relativePathResolver'; +import { RelativeWorkspacePathResolver } from '../utils/relativePathResolver'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; export class TypeScriptPluginPathsProvider { diff --git a/extensions/typescript-language-features/src/utils/plugins.ts b/extensions/typescript-language-features/src/tsServer/plugins.ts similarity index 97% rename from extensions/typescript-language-features/src/utils/plugins.ts rename to extensions/typescript-language-features/src/tsServer/plugins.ts index 814f0e12016..6036e4c968b 100644 --- a/extensions/typescript-language-features/src/utils/plugins.ts +++ b/extensions/typescript-language-features/src/tsServer/plugins.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as arrays from './arrays'; -import { Disposable } from './dispose'; +import * as arrays from '../utils/arrays'; +import { Disposable } from '../utils/dispose'; export interface TypeScriptServerPlugin { readonly extension: vscode.Extension; diff --git a/extensions/typescript-language-features/src/utils/errorCodes.ts b/extensions/typescript-language-features/src/tsServer/protocol/errorCodes.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/errorCodes.ts rename to extensions/typescript-language-features/src/tsServer/protocol/errorCodes.ts diff --git a/extensions/typescript-language-features/src/utils/fixNames.ts b/extensions/typescript-language-features/src/tsServer/protocol/fixNames.ts similarity index 95% rename from extensions/typescript-language-features/src/utils/fixNames.ts rename to extensions/typescript-language-features/src/tsServer/protocol/fixNames.ts index af5d7a3639c..82df3b9cc46 100644 --- a/extensions/typescript-language-features/src/utils/fixNames.ts +++ b/extensions/typescript-language-features/src/tsServer/protocol/fixNames.ts @@ -3,17 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +export const addMissingAwait = 'addMissingAwait'; +export const addMissingNewOperator = 'addMissingNewOperator'; +export const addMissingOverride = 'fixOverrideModifier'; export const annotateWithTypeFromJSDoc = 'annotateWithTypeFromJSDoc'; +export const awaitInSyncFunction = 'fixAwaitInSyncFunction'; +export const classDoesntImplementInheritedAbstractMember = 'fixClassDoesntImplementInheritedAbstractMember'; +export const classIncorrectlyImplementsInterface = 'fixClassIncorrectlyImplementsInterface'; export const constructorForDerivedNeedSuperCall = 'constructorForDerivedNeedSuperCall'; export const extendsInterfaceBecomesImplements = 'extendsInterfaceBecomesImplements'; -export const awaitInSyncFunction = 'fixAwaitInSyncFunction'; -export const classIncorrectlyImplementsInterface = 'fixClassIncorrectlyImplementsInterface'; -export const classDoesntImplementInheritedAbstractMember = 'fixClassDoesntImplementInheritedAbstractMember'; +export const fixImport = 'import'; +export const forgottenThisPropertyAccess = 'forgottenThisPropertyAccess'; +export const removeUnnecessaryAwait = 'removeUnnecessaryAwait'; +export const spelling = 'spelling'; export const unreachableCode = 'fixUnreachableCode'; export const unusedIdentifier = 'unusedIdentifier'; -export const forgottenThisPropertyAccess = 'forgottenThisPropertyAccess'; -export const spelling = 'spelling'; -export const fixImport = 'import'; -export const addMissingAwait = 'addMissingAwait'; -export const addMissingOverride = 'fixOverrideModifier'; -export const removeUnnecessaryAwait = 'removeUnnecessaryAwait'; diff --git a/extensions/typescript-language-features/src/utils/modifiers.ts b/extensions/typescript-language-features/src/tsServer/protocol/modifiers.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/modifiers.ts rename to extensions/typescript-language-features/src/tsServer/protocol/modifiers.ts diff --git a/extensions/typescript-language-features/src/protocol.const.ts b/extensions/typescript-language-features/src/tsServer/protocol/protocol.const.ts similarity index 100% rename from extensions/typescript-language-features/src/protocol.const.ts rename to extensions/typescript-language-features/src/tsServer/protocol/protocol.const.ts diff --git a/extensions/typescript-language-features/src/protocol.d.ts b/extensions/typescript-language-features/src/tsServer/protocol/protocol.d.ts similarity index 100% rename from extensions/typescript-language-features/src/protocol.d.ts rename to extensions/typescript-language-features/src/tsServer/protocol/protocol.d.ts diff --git a/extensions/typescript-language-features/src/tsServer/requestQueue.ts b/extensions/typescript-language-features/src/tsServer/requestQueue.ts index 4b75833a1e9..e81da742fd5 100644 --- a/extensions/typescript-language-features/src/tsServer/requestQueue.ts +++ b/extensions/typescript-language-features/src/tsServer/requestQueue.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import type * as Proto from '../protocol'; +import type * as Proto from './protocol/protocol'; export enum RequestQueueingType { /** diff --git a/extensions/typescript-language-features/src/tsServer/server.ts b/extensions/typescript-language-features/src/tsServer/server.ts index 936ecebe727..421c5f5d8e9 100644 --- a/extensions/typescript-language-features/src/tsServer/server.ts +++ b/extensions/typescript-language-features/src/tsServer/server.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; import { Cancellation } from '@vscode/sync-api-common/lib/common/messageCancellation'; -import type * as Proto from '../protocol'; -import { EventName } from '../protocol.const'; +import * as vscode from 'vscode'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; +import { TelemetryReporter } from '../logging/telemetry'; +import Tracer from '../logging/tracer'; import { CallbackMap } from '../tsServer/callbackMap'; import { RequestItem, RequestQueue, RequestQueueingType } from '../tsServer/requestQueue'; import { TypeScriptServerError } from '../tsServer/serverError'; import { ServerResponse, ServerType, TypeScriptRequests } from '../typescriptService'; -import { TypeScriptServiceConfiguration } from '../utils/configuration'; import { Disposable } from '../utils/dispose'; -import { TelemetryReporter } from '../utils/telemetry'; -import Tracer from '../utils/tracer'; +import { isWebAndHasSharedArrayBuffers } from '../utils/platform'; import { OngoingRequestCanceller } from './cancellation'; +import type * as Proto from './protocol/protocol'; +import { EventName } from './protocol/protocol.const'; import { TypeScriptVersionManager } from './versionManager'; import { TypeScriptVersion } from './versionProvider'; -import { isWebAndHasSharedArrayBuffers } from '../utils/platform'; export enum ExecutionTarget { Semantic, @@ -239,7 +239,7 @@ export class SingleTsServer extends Disposable implements ITypeScriptServer { } }).catch((err: Error) => { if (err instanceof TypeScriptServerError) { - if (!executeInfo.token || !executeInfo.token.isCancellationRequested) { + if (!executeInfo.token?.isCancellationRequested) { /* __GDPR__ "languageServiceErrorResponse" : { "owner": "mjbvz", @@ -299,7 +299,7 @@ export class SingleTsServer extends Disposable implements ITypeScriptServer { } private logTrace(message: string) { - this._tracer.logTrace(this._serverId, message); + this._tracer.trace(this._serverId, message); } private static readonly fenceCommands = new Set(['change', 'close', 'open', 'updateOpen']); @@ -495,6 +495,7 @@ export class SyntaxRoutingTsServer extends Disposable implements ITypeScriptServ 'format', 'formatonkey', 'docCommentTemplate', + 'linkedEditingRange' ]); /** diff --git a/extensions/typescript-language-features/src/tsServer/serverError.ts b/extensions/typescript-language-features/src/tsServer/serverError.ts index be9a44d276d..7467c87f216 100644 --- a/extensions/typescript-language-features/src/tsServer/serverError.ts +++ b/extensions/typescript-language-features/src/tsServer/serverError.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import type * as Proto from '../protocol'; +import type * as Proto from './protocol/protocol'; import { TypeScriptVersion } from './versionProvider'; diff --git a/extensions/typescript-language-features/src/tsServer/serverProcess.browser.ts b/extensions/typescript-language-features/src/tsServer/serverProcess.browser.ts index c5c2af3698e..ab916a1f0e9 100644 --- a/extensions/typescript-language-features/src/tsServer/serverProcess.browser.ts +++ b/extensions/typescript-language-features/src/tsServer/serverProcess.browser.ts @@ -6,9 +6,10 @@ import { ServiceConnection } from '@vscode/sync-api-common/browser'; import { ApiService, Requests } from '@vscode/sync-api-service'; import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import { TypeScriptServiceConfiguration } from '../utils/configuration'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; +import { Logger } from '../logging/logger'; import { FileWatcherManager } from './fileWatchingManager'; +import type * as Proto from './protocol/protocol'; import { TsServerLog, TsServerProcess, TsServerProcessFactory, TsServerProcessKind } from './server'; import { TypeScriptVersionManager } from './versionManager'; import { TypeScriptVersion } from './versionProvider'; @@ -30,6 +31,7 @@ type BrowserWatchEvent = { export class WorkerServerProcessFactory implements TsServerProcessFactory { constructor( private readonly _extensionUri: vscode.Uri, + private readonly _logger: Logger, ) { } public fork( @@ -47,7 +49,7 @@ export class WorkerServerProcessFactory implements TsServerProcessFactory { // Explicitly give TS Server its path so it can // load local resources '--executingFilePath', tsServerPath, - ], tsServerLog); + ], tsServerLog, this._logger); } } @@ -60,16 +62,16 @@ class WorkerServerProcess implements TsServerProcess { private readonly _onDataHandlers = new Set<(data: Proto.Response) => void>(); private readonly _onErrorHandlers = new Set<(err: Error) => void>(); private readonly _onExitHandlers = new Set<(code: number | null, signal: string | null) => void>(); - private readonly watches = new FileWatcherManager(); - private readonly worker: Worker; + private readonly _worker: Worker; + private readonly _watches: FileWatcherManager; /** For communicating with TS server synchronously */ - private readonly tsserver: MessagePort; + private readonly _tsserver: MessagePort; /** For communicating watches asynchronously */ - private readonly watcher: MessagePort; + private readonly _watcher: MessagePort; /** For communicating with filesystem synchronously */ - private readonly syncFs: MessagePort; + private readonly _syncFs: MessagePort; public constructor( private readonly kind: TsServerProcessKind, @@ -77,17 +79,20 @@ class WorkerServerProcess implements TsServerProcess { extensionUri: vscode.Uri, args: readonly string[], private readonly tsServerLog: TsServerLog | undefined, + logger: Logger, ) { - this.worker = new Worker(tsServerPath, { name: `TS ${kind} server #${this.id}` }); + this._worker = new Worker(tsServerPath, { name: `TS ${kind} server #${this.id}` }); + + this._watches = new FileWatcherManager(logger); const tsserverChannel = new MessageChannel(); const watcherChannel = new MessageChannel(); const syncChannel = new MessageChannel(); - this.tsserver = tsserverChannel.port2; - this.watcher = watcherChannel.port2; - this.syncFs = syncChannel.port2; + this._tsserver = tsserverChannel.port2; + this._watcher = watcherChannel.port2; + this._syncFs = syncChannel.port2; - this.tsserver.onmessage = (event) => { + this._tsserver.onmessage = (event) => { if (event.data.type === 'log') { console.error(`unexpected log message on tsserver channel: ${JSON.stringify(event)}`); return; @@ -97,18 +102,18 @@ class WorkerServerProcess implements TsServerProcess { } }; - this.watcher.onmessage = (event: MessageEvent) => { + this._watcher.onmessage = (event: MessageEvent) => { switch (event.data.type) { case 'dispose': { - this.watches.delete(event.data.id); + this._watches.delete(event.data.id); break; } case 'watchDirectory': case 'watchFile': { - this.watches.create(event.data.id, vscode.Uri.from(event.data.uri), /*watchParentDirs*/ true, !!event.data.recursive, { - change: uri => this.watcher.postMessage({ type: 'watch', event: 'change', uri }), - create: uri => this.watcher.postMessage({ type: 'watch', event: 'create', uri }), - delete: uri => this.watcher.postMessage({ type: 'watch', event: 'delete', uri }), + this._watches.create(event.data.id, vscode.Uri.from(event.data.uri), /*watchParentDirs*/ true, !!event.data.recursive, { + change: uri => this._watcher.postMessage({ type: 'watch', event: 'change', uri }), + create: uri => this._watcher.postMessage({ type: 'watch', event: 'create', uri }), + delete: uri => this._watcher.postMessage({ type: 'watch', event: 'delete', uri }), }); break; } @@ -117,7 +122,7 @@ class WorkerServerProcess implements TsServerProcess { } }; - this.worker.onmessage = (msg: any) => { + this._worker.onmessage = (msg: any) => { // for logging only if (msg.data.type === 'log') { this.appendLog(msg.data.body); @@ -126,7 +131,7 @@ class WorkerServerProcess implements TsServerProcess { console.error(`unexpected message on main channel: ${JSON.stringify(msg)}`); }; - this.worker.onerror = (err: ErrorEvent) => { + this._worker.onerror = (err: ErrorEvent) => { console.error('error! ' + JSON.stringify(err)); for (const handler of this._onErrorHandlers) { // TODO: The ErrorEvent type might be wrong; previously this was typed as Error and didn't have the property access. @@ -134,7 +139,7 @@ class WorkerServerProcess implements TsServerProcess { } }; - this.worker.postMessage( + this._worker.postMessage( { args, extensionUri }, [syncChannel.port1, tsserverChannel.port1, watcherChannel.port1] ); @@ -145,7 +150,7 @@ class WorkerServerProcess implements TsServerProcess { } write(serverRequest: Proto.Request): void { - this.tsserver.postMessage(serverRequest); + this._tsserver.postMessage(serverRequest); } onData(handler: (response: Proto.Response) => void): void { @@ -162,10 +167,11 @@ class WorkerServerProcess implements TsServerProcess { } kill(): void { - this.worker.terminate(); - this.tsserver.close(); - this.watcher.close(); - this.syncFs.close(); + this._worker.terminate(); + this._tsserver.close(); + this._watcher.close(); + this._syncFs.close(); + this._watches.dispose(); } private appendLog(msg: string) { diff --git a/extensions/typescript-language-features/src/tsServer/serverProcess.electron.ts b/extensions/typescript-language-features/src/tsServer/serverProcess.electron.ts index ab235c8cd76..b5848d5eb9f 100644 --- a/extensions/typescript-language-features/src/tsServer/serverProcess.electron.ts +++ b/extensions/typescript-language-features/src/tsServer/serverProcess.electron.ts @@ -8,10 +8,10 @@ import * as fs from 'fs'; import * as path from 'path'; import type { Readable } from 'stream'; import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import API from '../utils/api'; -import { TypeScriptServiceConfiguration } from '../utils/configuration'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; import { Disposable } from '../utils/dispose'; +import { API } from './api'; +import type * as Proto from './protocol/protocol'; import { TsServerLog, TsServerProcess, TsServerProcessFactory, TsServerProcessKind } from './server'; import { TypeScriptVersionManager } from './versionManager'; import { TypeScriptVersion } from './versionProvider'; diff --git a/extensions/typescript-language-features/src/tsServer/spawner.ts b/extensions/typescript-language-features/src/tsServer/spawner.ts index 2c32cfb87f9..0fa9bedf4a6 100644 --- a/extensions/typescript-language-features/src/tsServer/spawner.ts +++ b/extensions/typescript-language-features/src/tsServer/spawner.ts @@ -4,21 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { SyntaxServerConfiguration, TsServerLogLevel, TypeScriptServiceConfiguration } from '../configuration/configuration'; +import { Logger } from '../logging/logger'; +import { TelemetryReporter } from '../logging/telemetry'; +import Tracer from '../logging/tracer'; import { OngoingRequestCancellerFactory } from '../tsServer/cancellation'; import { ClientCapabilities, ClientCapability, ServerType } from '../typescriptService'; -import API from '../utils/api'; -import { SyntaxServerConfiguration, TsServerLogLevel, TypeScriptServiceConfiguration } from '../utils/configuration'; -import { Logger } from '../utils/logger'; +import { memoize } from '../utils/memoize'; import { isWeb, isWebAndHasSharedArrayBuffers } from '../utils/platform'; -import { TypeScriptPluginPathsProvider } from '../utils/pluginPathsProvider'; -import { PluginManager } from '../utils/plugins'; -import { TelemetryReporter } from '../utils/telemetry'; -import Tracer from '../utils/tracer'; +import { API } from './api'; import { ILogDirectoryProvider } from './logDirectoryProvider'; +import { TypeScriptPluginPathsProvider } from './pluginPathsProvider'; +import { PluginManager } from './plugins'; import { GetErrRoutingTsServer, ITypeScriptServer, SingleTsServer, SyntaxRoutingTsServer, TsServerDelegate, TsServerLog, TsServerProcessFactory, TsServerProcessKind } from './server'; import { TypeScriptVersionManager } from './versionManager'; import { ITypeScriptVersionProvider, TypeScriptVersion } from './versionProvider'; -import { memoize } from '../utils/memoize'; const enum CompositeServerType { /** Run a single server that handles all commands */ @@ -232,7 +232,7 @@ export class TypeScriptServerSpawner { tsServerLog = { type: 'file', uri: logFilePath }; args.push('--logVerbosity', TsServerLogLevel.toString(configuration.tsServerLogLevel)); - args.push('--logFile', logFilePath.path); + args.push('--logFile', logFilePath.fsPath); } } } diff --git a/extensions/typescript-language-features/src/tsServer/versionManager.ts b/extensions/typescript-language-features/src/tsServer/versionManager.ts index 68d44a76890..43a2413e383 100644 --- a/extensions/typescript-language-features/src/tsServer/versionManager.ts +++ b/extensions/typescript-language-features/src/tsServer/versionManager.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; import { setImmediate } from '../utils/async'; -import { TypeScriptServiceConfiguration } from '../utils/configuration'; import { Disposable } from '../utils/dispose'; import { ITypeScriptVersionProvider, TypeScriptVersion } from './versionProvider'; diff --git a/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts b/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts index dca0fb21f1b..239519e6f6a 100644 --- a/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts +++ b/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts @@ -6,9 +6,9 @@ import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; -import API from '../utils/api'; -import { TypeScriptServiceConfiguration } from '../utils/configuration'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; import { RelativeWorkspacePathResolver } from '../utils/relativePathResolver'; +import { API } from './api'; import { ITypeScriptVersionProvider, TypeScriptVersion, TypeScriptVersionSource } from './versionProvider'; @@ -189,7 +189,7 @@ export class DiskTypeScriptVersionProvider implements ITypeScriptVersionProvider } catch (err) { return undefined; } - if (!desc || !desc.version) { + if (!desc?.version) { return undefined; } return desc.version ? API.fromVersionString(desc.version) : undefined; diff --git a/extensions/typescript-language-features/src/tsServer/versionProvider.ts b/extensions/typescript-language-features/src/tsServer/versionProvider.ts index bdf08a0e13d..2eaa0670551 100644 --- a/extensions/typescript-language-features/src/tsServer/versionProvider.ts +++ b/extensions/typescript-language-features/src/tsServer/versionProvider.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import API from '../utils/api'; -import { TypeScriptServiceConfiguration } from '../utils/configuration'; +import { TypeScriptServiceConfiguration } from '../configuration/configuration'; +import { API } from './api'; export const enum TypeScriptVersionSource { diff --git a/extensions/typescript-language-features/src/utils/tsconfig.ts b/extensions/typescript-language-features/src/tsconfig.ts similarity index 89% rename from extensions/typescript-language-features/src/utils/tsconfig.ts rename to extensions/typescript-language-features/src/tsconfig.ts index af25f38cf0c..40a5a5c5982 100644 --- a/extensions/typescript-language-features/src/utils/tsconfig.ts +++ b/extensions/typescript-language-features/src/tsconfig.ts @@ -3,12 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as path from 'path'; import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService'; -import { nulToken } from '../utils/cancellation'; -import { TypeScriptServiceConfiguration } from './configuration'; +import type * as Proto from './tsServer/protocol/protocol'; +import { ITypeScriptServiceClient, ServerResponse } from './typescriptService'; +import { nulToken } from './utils/cancellation'; +import { TypeScriptServiceConfiguration } from './configuration/configuration'; export const enum ProjectType { @@ -87,10 +86,10 @@ function inferredProjectConfigSnippet( export async function openOrCreateConfig( projectType: ProjectType, - rootPath: string, + rootPath: vscode.Uri, configuration: TypeScriptServiceConfiguration, ): Promise { - const configFile = vscode.Uri.file(path.join(rootPath, projectType === ProjectType.TypeScript ? 'tsconfig.json' : 'jsconfig.json')); + const configFile = vscode.Uri.joinPath(rootPath, projectType === ProjectType.TypeScript ? 'tsconfig.json' : 'jsconfig.json'); const col = vscode.window.activeTextEditor?.viewColumn; try { const doc = await vscode.workspace.openTextDocument(configFile); @@ -108,11 +107,11 @@ export async function openOrCreateConfig( export async function openProjectConfigOrPromptToCreate( projectType: ProjectType, client: ITypeScriptServiceClient, - rootPath: string, - configFileName: string, + rootPath: vscode.Uri, + configFilePath: string, ): Promise { - if (!isImplicitProjectConfigFile(configFileName)) { - const doc = await vscode.workspace.openTextDocument(configFileName); + if (!isImplicitProjectConfigFile(configFilePath)) { + const doc = await vscode.workspace.openTextDocument(client.toResource(configFilePath)); vscode.window.showTextDocument(doc, vscode.window.activeTextEditor?.viewColumn); return; } diff --git a/extensions/typescript-language-features/src/utils/typeConverters.ts b/extensions/typescript-language-features/src/typeConverters.ts similarity index 96% rename from extensions/typescript-language-features/src/utils/typeConverters.ts rename to extensions/typescript-language-features/src/typeConverters.ts index 2574fae4064..58babe2bda3 100644 --- a/extensions/typescript-language-features/src/utils/typeConverters.ts +++ b/extensions/typescript-language-features/src/typeConverters.ts @@ -8,9 +8,9 @@ */ import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import * as PConst from '../protocol.const'; -import { ITypeScriptServiceClient } from '../typescriptService'; +import type * as Proto from './tsServer/protocol/protocol'; +import * as PConst from './tsServer/protocol/protocol.const'; +import { ITypeScriptServiceClient } from './typescriptService'; export namespace Range { export const fromTextSpan = (span: Proto.TextSpan): vscode.Range => diff --git a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts index d89bb33290e..7009799430e 100644 --- a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts +++ b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts @@ -10,31 +10,31 @@ import * as vscode from 'vscode'; import { CommandManager } from './commands/commandManager'; +import { ServiceConfigurationProvider } from './configuration/configuration'; +import { DiagnosticLanguage, LanguageDescription } from './configuration/languageDescription'; import { IExperimentationTelemetryReporter } from './experimentTelemetryReporter'; import { DiagnosticKind } from './languageFeatures/diagnostics'; import FileConfigurationManager from './languageFeatures/fileConfigurationManager'; import LanguageProvider from './languageProvider'; -import * as Proto from './protocol'; -import * as PConst from './protocol.const'; +import { LogLevelMonitor } from './logging/logLevelMonitor'; +import { Logger } from './logging/logger'; import { OngoingRequestCancellerFactory } from './tsServer/cancellation'; import { ILogDirectoryProvider } from './tsServer/logDirectoryProvider'; +import { PluginManager } from './tsServer/plugins'; +import * as errorCodes from './tsServer/protocol/errorCodes'; +import * as Proto from './tsServer/protocol/protocol'; +import * as PConst from './tsServer/protocol/protocol.const'; import { TsServerProcessFactory } from './tsServer/server'; import { ITypeScriptVersionProvider } from './tsServer/versionProvider'; +import * as typeConverters from './typeConverters'; import TypeScriptServiceClient from './typescriptServiceClient'; +import { ActiveJsTsEditorTracker } from './ui/activeJsTsEditorTracker'; import { IntellisenseStatus } from './ui/intellisenseStatus'; +import * as LargeProjectStatus from './ui/largeProjectStatus'; +import TypingsStatus, { AtaProgressReporter } from './ui/typingsStatus'; import { VersionStatus } from './ui/versionStatus'; -import { ActiveJsTsEditorTracker } from './utils/activeJsTsEditorTracker'; import { coalesce } from './utils/arrays'; -import { ServiceConfigurationProvider } from './utils/configuration'; import { Disposable } from './utils/dispose'; -import * as errorCodes from './utils/errorCodes'; -import { DiagnosticLanguage, LanguageDescription } from './utils/languageDescription'; -import * as LargeProjectStatus from './utils/largeProjectStatus'; -import { LogLevelMonitor } from './utils/logLevelMonitor'; -import { Logger } from './utils/logger'; -import { PluginManager } from './utils/plugins'; -import * as typeConverters from './utils/typeConverters'; -import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus'; // Style check diagnostics that can be reported as warnings const styleCheckDiagnostics = new Set([ @@ -250,7 +250,7 @@ export default class TypeScriptServiceClientHost extends Disposable { private configFileDiagnosticsReceived(event: Proto.ConfigFileDiagnosticEvent): void { // See https://github.com/microsoft/TypeScript/issues/10384 const body = event.body; - if (!body || !body.diagnostics || !body.configFile) { + if (!body?.diagnostics || !body.configFile) { return; } diff --git a/extensions/typescript-language-features/src/typescriptService.ts b/extensions/typescript-language-features/src/typescriptService.ts index faba971b1d6..6eb30e20986 100644 --- a/extensions/typescript-language-features/src/typescriptService.ts +++ b/extensions/typescript-language-features/src/typescriptService.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as Proto from './protocol'; +import * as Proto from './tsServer/protocol/protocol'; import BufferSyncSupport from './tsServer/bufferSyncSupport'; import { ExecutionTarget } from './tsServer/server'; import { TypeScriptVersion } from './tsServer/versionProvider'; -import API from './utils/api'; -import { TypeScriptServiceConfiguration } from './utils/configuration'; -import { PluginManager } from './utils/plugins'; -import { TelemetryReporter } from './utils/telemetry'; +import { API } from './tsServer/api'; +import { TypeScriptServiceConfiguration } from './configuration/configuration'; +import { PluginManager } from './tsServer/plugins'; +import { TelemetryReporter } from './logging/telemetry'; export enum ServerType { Syntax = 'syntax', @@ -74,6 +74,8 @@ interface StandardTsServerRequests { 'provideInlayHints': [Proto.InlayHintsRequestArgs, Proto.InlayHintsResponse]; 'encodedSemanticClassifications-full': [Proto.EncodedSemanticClassificationsRequestArgs, Proto.EncodedSemanticClassificationsResponse]; 'findSourceDefinition': [Proto.FileLocationRequestArgs, Proto.DefinitionResponse]; + 'getMoveToRefactoringFileSuggestions': [Proto.GetMoveToRefactoringFileSuggestionsRequestArgs, Proto.GetMoveToRefactoringFileSuggestions]; + 'linkedEditingRange': [Proto.FileLocationRequestArgs, Proto.LinkedEditingRangeResponse]; } interface NoResponseTsServerRequests { @@ -154,7 +156,7 @@ export interface ITypeScriptServiceClient { */ hasCapabilityForResource(resource: vscode.Uri, capability: ClientCapability): boolean; - getWorkspaceRootForResource(resource: vscode.Uri): string | undefined; + getWorkspaceRootForResource(resource: vscode.Uri): vscode.Uri | undefined; readonly onTsServerStarted: vscode.Event<{ version: TypeScriptVersion; usedApiVersion: API }>; readonly onProjectLanguageServiceStateChanged: vscode.Event; diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index 737f4523012..984356f17b4 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -7,28 +7,28 @@ import * as path from 'path'; import * as vscode from 'vscode'; import { IExperimentationTelemetryReporter } from './experimentTelemetryReporter'; import { DiagnosticKind, DiagnosticsManager } from './languageFeatures/diagnostics'; -import * as Proto from './protocol'; -import { EventName } from './protocol.const'; +import * as Proto from './tsServer/protocol/protocol'; +import { EventName } from './tsServer/protocol/protocol.const'; +import { API } from './tsServer/api'; import BufferSyncSupport from './tsServer/bufferSyncSupport'; import { OngoingRequestCancellerFactory } from './tsServer/cancellation'; import { ILogDirectoryProvider } from './tsServer/logDirectoryProvider'; +import { TypeScriptPluginPathsProvider } from './tsServer/pluginPathsProvider'; import { ITypeScriptServer, TsServerLog, TsServerProcessFactory, TypeScriptServerExitEvent } from './tsServer/server'; import { TypeScriptServerError } from './tsServer/serverError'; import { TypeScriptServerSpawner } from './tsServer/spawner'; import { TypeScriptVersionManager } from './tsServer/versionManager'; import { ITypeScriptVersionProvider, TypeScriptVersion } from './tsServer/versionProvider'; import { ClientCapabilities, ClientCapability, ExecConfig, ITypeScriptServiceClient, ServerResponse, TypeScriptRequests } from './typescriptService'; -import API from './utils/api'; -import { ServiceConfigurationProvider, SyntaxServerConfiguration, TsServerLogLevel, TypeScriptServiceConfiguration, areServiceConfigurationsEqual } from './utils/configuration'; +import { ServiceConfigurationProvider, SyntaxServerConfiguration, TsServerLogLevel, TypeScriptServiceConfiguration, areServiceConfigurationsEqual } from './configuration/configuration'; import { Disposable } from './utils/dispose'; -import * as fileSchemes from './utils/fileSchemes'; -import { Logger } from './utils/logger'; +import * as fileSchemes from './configuration/fileSchemes'; +import { Logger } from './logging/logger'; import { isWeb, isWebAndHasSharedArrayBuffers } from './utils/platform'; -import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider'; -import { PluginManager, TypeScriptServerPlugin } from './utils/plugins'; -import { TelemetryProperties, TelemetryReporter, VSCodeTelemetryReporter } from './utils/telemetry'; -import Tracer from './utils/tracer'; -import { ProjectType, inferredProjectCompilerOptions } from './utils/tsconfig'; +import { PluginManager, TypeScriptServerPlugin } from './tsServer/plugins'; +import { TelemetryProperties, TelemetryReporter, VSCodeTelemetryReporter } from './logging/telemetry'; +import Tracer from './logging/tracer'; +import { ProjectType, inferredProjectCompilerOptions } from './tsconfig'; export interface TsDiagnostics { @@ -91,10 +91,12 @@ namespace ServerState { export type State = typeof None | Running | Errored; } +export const emptyAuthority = 'ts-nul-authority'; + +export const inMemoryResourcePrefix = '^'; + export default class TypeScriptServiceClient extends Disposable implements ITypeScriptServiceClient { - private readonly emptyAuthority = 'ts-nul-authority'; - private readonly inMemoryResourcePrefix = '^'; private readonly _onReady?: { promise: Promise; resolve: () => void; reject: () => void }; private _configuration: TypeScriptServiceConfiguration; @@ -111,7 +113,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType private _isPromptingAfterCrash = false; private isRestarting: boolean = false; private hasServerFatallyCrashedTooManyTimes = false; - private readonly loadingIndicator = new ServerInitializingIndicator(); + private readonly loadingIndicator = this._register(new ServerInitializingIndicator()); public readonly telemetryReporter: TelemetryReporter; public readonly bufferSyncSupport: BufferSyncSupport; @@ -190,7 +192,6 @@ export default class TypeScriptServiceClient extends Disposable implements IType this.versionProvider.updateConfiguration(this._configuration); this._versionManager.updateConfiguration(this._configuration); this.pluginPathsProvider.updateConfiguration(this._configuration); - this.tracer.updateConfiguration(); if (this.serverState.type === ServerState.Type.Running) { if (!this._configuration.implicitProjectConfiguration.isEqualTo(oldConfiguration.implicitProjectConfiguration)) { @@ -259,7 +260,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType readonly onDidChangeCapabilities = this._onDidChangeCapabilities.event; private isProjectWideIntellisenseOnWebEnabled(): boolean { - return isWebAndHasSharedArrayBuffers() && this._configuration.enableProjectWideIntellisenseOnWeb; + return isWebAndHasSharedArrayBuffers() && this._configuration.webProjectWideIntellisenseEnabled; } private cancelInflightRequestsForResource(resource: vscode.Uri): void { @@ -471,10 +472,6 @@ export default class TypeScriptServiceClient extends Disposable implements IType handle.onEvent(event => this.dispatchEvent(event)); - if (apiVersion.gte(API.v300) && this.capabilities.has(ClientCapability.Semantic)) { - this.loadingIndicator.startedLoadingProject(undefined /* projectName */); - } - this.serviceStarted(resendModels); this._onReady!.resolve(); @@ -697,17 +694,12 @@ export default class TypeScriptServiceClient extends Disposable implements IType } if (resource.scheme === fileSchemes.file && !isWeb()) { - if (!resource.fsPath) { - return undefined; - } - - // Convert to posix style path - return path.posix.normalize(resource.fsPath.split(path.sep).join(path.posix.sep)); + return resource.fsPath; } - return (this.isProjectWideIntellisenseOnWebEnabled() ? '' : this.inMemoryResourcePrefix) + return (this.isProjectWideIntellisenseOnWebEnabled() ? '' : inMemoryResourcePrefix) + '/' + resource.scheme - + '/' + (resource.authority || this.emptyAuthority) + + '/' + (resource.authority || emptyAuthority) + (resource.path.startsWith('/') ? resource.path : '/' + resource.path) + (resource.fragment ? '#' + resource.fragment : ''); } @@ -729,15 +721,13 @@ export default class TypeScriptServiceClient extends Disposable implements IType } switch (capability) { - case ClientCapability.Semantic: - { - return fileSchemes.semanticSupportedSchemes.includes(resource.scheme); - } + case ClientCapability.Semantic: { + return fileSchemes.getSemanticSupportedSchemes().includes(resource.scheme); + } case ClientCapability.Syntax: - case ClientCapability.EnhancedSyntax: - { - return true; - } + case ClientCapability.EnhancedSyntax: { + return true; + } } } @@ -751,46 +741,36 @@ export default class TypeScriptServiceClient extends Disposable implements IType } const parts = filepath.match(/^\/([^\/]+)\/([^\/]*)\/(.+)$/); if (parts) { - const resource = vscode.Uri.parse(parts[1] + '://' + (parts[2] === this.emptyAuthority ? '' : parts[2]) + '/' + parts[3]); + const resource = vscode.Uri.parse(parts[1] + '://' + (parts[2] === emptyAuthority ? '' : parts[2]) + '/' + parts[3]); return this.bufferSyncSupport.toVsCodeResource(resource); } } - if (filepath.startsWith(this.inMemoryResourcePrefix)) { + if (filepath.startsWith(inMemoryResourcePrefix)) { const parts = filepath.match(/^\^\/([^\/]+)\/([^\/]*)\/(.+)$/); if (parts) { - const resource = vscode.Uri.parse(parts[1] + '://' + (parts[2] === this.emptyAuthority ? '' : parts[2]) + '/' + parts[3]); + const resource = vscode.Uri.parse(parts[1] + '://' + (parts[2] === emptyAuthority ? '' : parts[2]) + '/' + parts[3]); return this.bufferSyncSupport.toVsCodeResource(resource); } } return this.bufferSyncSupport.toResource(filepath); } - public getWorkspaceRootForResource(resource: vscode.Uri): string | undefined { + public getWorkspaceRootForResource(resource: vscode.Uri): vscode.Uri | undefined { const roots = vscode.workspace.workspaceFolders ? Array.from(vscode.workspace.workspaceFolders) : undefined; if (!roots?.length) { - if (resource.scheme === fileSchemes.officeScript) { - return '/'; - } return undefined; } - let tsRootPath: string | undefined; for (const root of roots.sort((a, b) => a.uri.fsPath.length - b.uri.fsPath.length)) { if (root.uri.scheme === resource.scheme && root.uri.authority === resource.authority) { if (resource.fsPath.startsWith(root.uri.fsPath + path.sep)) { - tsRootPath = this.toTsFilePath(root.uri); - break; + return root.uri; } } } - tsRootPath ??= this.toTsFilePath(roots[0].uri); - if (!tsRootPath || tsRootPath.startsWith(this.inMemoryResourcePrefix)) { - return undefined; - } - - return tsRootPath; + return undefined; } public execute(command: keyof TypeScriptRequests, args: any, token: vscode.CancellationToken, config?: ExecConfig): Promise> { @@ -912,7 +892,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType const diagnosticEvent = event as Proto.DiagnosticEvent; if (diagnosticEvent.body?.diagnostics) { this._onDiagnosticsReceived.fire({ - kind: getDignosticsKind(event), + kind: getDiagnosticsKind(event), resource: this.toResource(diagnosticEvent.body.file), diagnostics: diagnosticEvent.body.diagnostics }); @@ -1099,7 +1079,7 @@ ${error.serverStack} }; } -function getDignosticsKind(event: Proto.Event) { +function getDiagnosticsKind(event: Proto.Event) { switch (event.event) { case 'syntaxDiag': return DiagnosticKind.Syntax; case 'semanticDiag': return DiagnosticKind.Semantic; diff --git a/extensions/typescript-language-features/src/utils/activeJsTsEditorTracker.ts b/extensions/typescript-language-features/src/ui/activeJsTsEditorTracker.ts similarity index 92% rename from extensions/typescript-language-features/src/utils/activeJsTsEditorTracker.ts rename to extensions/typescript-language-features/src/ui/activeJsTsEditorTracker.ts index ab9e9576d67..e7ad8d7ea09 100644 --- a/extensions/typescript-language-features/src/utils/activeJsTsEditorTracker.ts +++ b/extensions/typescript-language-features/src/ui/activeJsTsEditorTracker.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { Disposable } from './dispose'; -import { isJsConfigOrTsConfigFileName } from './languageDescription'; -import { isSupportedLanguageMode } from './languageIds'; +import { isJsConfigOrTsConfigFileName } from '../configuration/languageDescription'; +import { isSupportedLanguageMode } from '../configuration/languageIds'; +import { Disposable } from '../utils/dispose'; /** * Tracks the active JS/TS editor. diff --git a/extensions/typescript-language-features/src/ui/intellisenseStatus.ts b/extensions/typescript-language-features/src/ui/intellisenseStatus.ts index 2334e7d2e64..367ee86b58b 100644 --- a/extensions/typescript-language-features/src/ui/intellisenseStatus.ts +++ b/extensions/typescript-language-features/src/ui/intellisenseStatus.ts @@ -5,11 +5,11 @@ import * as vscode from 'vscode'; import { CommandManager } from '../commands/commandManager'; +import { isSupportedLanguageMode, isTypeScriptDocument, jsTsLanguageModes } from '../configuration/languageIds'; +import { ProjectType, isImplicitProjectConfigFile, openOrCreateConfig, openProjectConfigForFile, openProjectConfigOrPromptToCreate } from '../tsconfig'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; -import { ActiveJsTsEditorTracker } from '../utils/activeJsTsEditorTracker'; import { Disposable } from '../utils/dispose'; -import { isSupportedLanguageMode, isTypeScriptDocument, jsTsLanguageModes } from '../utils/languageIds'; -import { isImplicitProjectConfigFile, openOrCreateConfig, openProjectConfigForFile, openProjectConfigOrPromptToCreate, ProjectType } from '../utils/tsconfig'; +import { ActiveJsTsEditorTracker } from './activeJsTsEditorTracker'; namespace IntellisenseState { @@ -62,9 +62,9 @@ export class IntellisenseStatus extends Disposable { commandManager.register({ id: this.openOpenConfigCommandId, - execute: async (rootPath: string, projectType: ProjectType) => { + execute: async (root: vscode.Uri, projectType: ProjectType) => { if (this._state.type === IntellisenseState.Type.Resolved) { - await openProjectConfigOrPromptToCreate(projectType, this._client, rootPath, this._state.configFile); + await openProjectConfigOrPromptToCreate(projectType, this._client, root, this._state.configFile); } else if (this._state.type === IntellisenseState.Type.Pending) { await openProjectConfigForFile(projectType, this._client, this._state.resource); } @@ -72,8 +72,8 @@ export class IntellisenseStatus extends Disposable { }); commandManager.register({ id: this.createOrOpenConfigCommandId, - execute: async (rootPath: string, projectType: ProjectType) => { - await openOrCreateConfig(projectType, rootPath, this._client.configuration); + execute: async (root: vscode.Uri, projectType: ProjectType) => { + await openOrCreateConfig(projectType, root, this._client.configuration); }, }); diff --git a/extensions/typescript-language-features/src/ui/jsNodeWalkthrough.electron.ts b/extensions/typescript-language-features/src/ui/jsNodeWalkthrough.electron.ts deleted file mode 100644 index a1a6bd2ac2d..00000000000 --- a/extensions/typescript-language-features/src/ui/jsNodeWalkthrough.electron.ts +++ /dev/null @@ -1,198 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as vscode from 'vscode'; -import * as cp from 'child_process'; - -import { Disposable } from '../utils/dispose'; -import { CommandManager } from '../commands/commandManager'; - - -export async function nodeWasResolvable(): Promise { - let execStr: string; - switch (process.platform) { - case 'win32': - execStr = 'where node'; - break; - case 'aix': - case 'cygwin': - case 'darwin': - case 'freebsd': - case 'haiku': - case 'linux': - case 'netbsd': - case 'openbsd': - case 'sunos': - execStr = 'which node'; - break; - default: - return false; - } - - return new Promise(resolve => { - cp.exec(execStr, { windowsHide: true }, err => { - resolve(!err); - }); - }); -} - -export class JsWalkthroughState extends Disposable { - exampleJsDocument: vscode.TextDocument | undefined = undefined; - - override dispose() { - this.exampleJsDocument = undefined; - } -} - -export class CreateNewJSFileCommand { - public static readonly id = 'javascript-walkthrough.commands.createJsFile'; - public readonly id = CreateNewJSFileCommand.id; - - constructor( - private readonly walkthroughState: JsWalkthroughState - ) { } - - public execute() { - createNewJSFile(this.walkthroughState); - } -} - -export class DebugJsFileCommand { - public static readonly id = 'javascript-walkthrough.commands.debugJsFile'; - public readonly id = DebugJsFileCommand.id; - - constructor( - private readonly walkthroughState: JsWalkthroughState - ) { } - - public execute() { - debugJsFile(this.walkthroughState); - } -} - -export class NodeInstallationFoundCommand { - public static readonly id = 'javascript-walkthrough.commands.nodeInstallationFound'; - public readonly id = NodeInstallationFoundCommand.id; - public execute() { } -} - -async function createNewJSFile(walkthroughState: JsWalkthroughState) { - const newFile = await vscode.workspace.openTextDocument({ - language: 'javascript', - content: `// Write a message to the console.\nconsole.log('hello world!');\n`, - }); - walkthroughState.exampleJsDocument = newFile; - return vscode.window.showTextDocument(newFile, vscode.ViewColumn.Beside); -} - -async function debugJsFile(walkthroughState: JsWalkthroughState) { - const hasNode = await nodeWasResolvable(); - if (!hasNode) { - const reloadResponse = vscode.l10n.t("Reload VS Code"); - const debugAnywayResponse = vscode.l10n.t("Try Debugging Anyway"); - const dismissResponse = vscode.l10n.t("Dismiss"); - const response = await vscode.window.showErrorMessage( - // The message - vscode.l10n.t("We couldn\'t find Node.js on this computer. If you just installed it, you might need to reload VS Code."), - // The options - reloadResponse, - debugAnywayResponse, - dismissResponse, - ); - - if (response === undefined || response === dismissResponse) { - return; - } - if (response === reloadResponse) { - vscode.commands.executeCommand('workbench.action.reloadWindow'); - return; - } - } - tryDebugRelevantDocument(walkthroughState.exampleJsDocument, 'javascript', ['.mjs', '.js'], () => createNewJSFile(walkthroughState)); -} - -type DocSearchResult = - | { kind: 'visible'; editor: vscode.TextEditor } - | { kind: 'hidden'; uri: vscode.Uri } - | { kind: 'not-found' }; - -async function tryDebugRelevantDocument(lastDocument: vscode.TextDocument | undefined, languageId: string, languageExtensions: [string, ...string[]], createFileAndFocus: () => Promise): Promise { - let searchResult!: DocSearchResult; - for (const languageExtension of languageExtensions) { - searchResult = tryFindRelevantDocument(lastDocument, languageId, languageExtension); - if (searchResult.kind !== 'not-found') { - break; - } - } - - let editor: vscode.TextEditor; - // If not, make one. - switch (searchResult.kind) { - case 'visible': - // Focus if necessary. - editor = searchResult.editor; - if (vscode.window.activeTextEditor !== editor) { - await vscode.window.showTextDocument(editor.document, { - viewColumn: vscode.ViewColumn.Beside, - }); - } - break; - case 'hidden': - editor = await vscode.window.showTextDocument(searchResult.uri, { - viewColumn: vscode.ViewColumn.Beside, - }); - break; - case 'not-found': - editor = await createFileAndFocus(); - break; - } - - await Promise.all([ - vscode.commands.executeCommand('workbench.action.debug.start'), - vscode.commands.executeCommand('workbench.debug.action.focusRepl'), - ]); - -} - -/** Tries to find a relevant {@link vscode.TextEditor} or a {@link vscode.Uri} for an open document */ -function tryFindRelevantDocument(lastDocument: vscode.TextDocument | undefined, languageId: string, languageExtension: string): DocSearchResult { - let editor: vscode.TextEditor | undefined; - - // Try to find the document created from the last step. - if (lastDocument) { - editor = vscode.window.visibleTextEditors.find(editor => editor.document === lastDocument); - } - - // If we couldn't find that, find a visible document with the desired language. - editor ??= vscode.window.visibleTextEditors.find(editor => editor.document.languageId === languageId); - if (editor) { - return { - kind: 'visible', - editor, - }; - } - - // If we still couldn't find that, find a possibly not-visible document. - for (const tabGroup of vscode.window.tabGroups.all) { - for (const tab of tabGroup.tabs) { - if (tab.input instanceof vscode.TabInputText && tab.input.uri.path.endsWith(languageExtension)) { - return { - kind: 'hidden', - uri: tab.input.uri, - }; - } - } - } - - return { kind: 'not-found' }; -} - -export function registerJsNodeWalkthrough( - commandManager: CommandManager, - jsWalkthroughState: JsWalkthroughState, -) { - commandManager.register(new CreateNewJSFileCommand(jsWalkthroughState)); - commandManager.register(new DebugJsFileCommand(jsWalkthroughState)); -} diff --git a/extensions/typescript-language-features/src/utils/largeProjectStatus.ts b/extensions/typescript-language-features/src/ui/largeProjectStatus.ts similarity index 96% rename from extensions/typescript-language-features/src/utils/largeProjectStatus.ts rename to extensions/typescript-language-features/src/ui/largeProjectStatus.ts index 8dacf80dab2..4fd094d2969 100644 --- a/extensions/typescript-language-features/src/utils/largeProjectStatus.ts +++ b/extensions/typescript-language-features/src/ui/largeProjectStatus.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { TelemetryReporter } from '../logging/telemetry'; +import { isImplicitProjectConfigFile, openOrCreateConfig, ProjectType } from '../tsconfig'; import { ITypeScriptServiceClient } from '../typescriptService'; -import { TelemetryReporter } from './telemetry'; -import { isImplicitProjectConfigFile, openOrCreateConfig, ProjectType } from './tsconfig'; interface Hint { @@ -15,7 +15,7 @@ interface Hint { class ExcludeHintItem { public configFileName?: string; - private _item: vscode.StatusBarItem; + private readonly _item: vscode.StatusBarItem; private _currentHint?: Hint; constructor( diff --git a/extensions/typescript-language-features/src/utils/managedFileContext.ts b/extensions/typescript-language-features/src/ui/managedFileContext.ts similarity index 87% rename from extensions/typescript-language-features/src/utils/managedFileContext.ts rename to extensions/typescript-language-features/src/ui/managedFileContext.ts index 09942b0c82b..0b929f85277 100644 --- a/extensions/typescript-language-features/src/utils/managedFileContext.ts +++ b/extensions/typescript-language-features/src/ui/managedFileContext.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; +import { disabledSchemes } from '../configuration/fileSchemes'; +import { isJsConfigOrTsConfigFileName } from '../configuration/languageDescription'; +import { isSupportedLanguageMode } from '../configuration/languageIds'; +import { Disposable } from '../utils/dispose'; import { ActiveJsTsEditorTracker } from './activeJsTsEditorTracker'; -import { Disposable } from './dispose'; -import { disabledSchemes } from './fileSchemes'; -import { isJsConfigOrTsConfigFileName } from './languageDescription'; -import { isSupportedLanguageMode } from './languageIds'; /**E * When clause context set when the current file is managed by vscode's built-in typescript extension. diff --git a/extensions/typescript-language-features/src/utils/typingsStatus.ts b/extensions/typescript-language-features/src/ui/typingsStatus.ts similarity index 98% rename from extensions/typescript-language-features/src/utils/typingsStatus.ts rename to extensions/typescript-language-features/src/ui/typingsStatus.ts index 4924a93ad24..2e0d53b363e 100644 --- a/extensions/typescript-language-features/src/utils/typingsStatus.ts +++ b/extensions/typescript-language-features/src/ui/typingsStatus.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; import { ITypeScriptServiceClient } from '../typescriptService'; -import { Disposable } from './dispose'; +import { Disposable } from '../utils/dispose'; const typingsInstallTimeout = 30 * 1000; diff --git a/extensions/typescript-language-features/src/ui/versionStatus.ts b/extensions/typescript-language-features/src/ui/versionStatus.ts index 3e1629d8f1f..a4f377782a8 100644 --- a/extensions/typescript-language-features/src/ui/versionStatus.ts +++ b/extensions/typescript-language-features/src/ui/versionStatus.ts @@ -5,10 +5,10 @@ import * as vscode from 'vscode'; import { SelectTypeScriptVersionCommand } from '../commands/selectTypeScriptVersion'; +import { jsTsLanguageModes } from '../configuration/languageIds'; import { TypeScriptVersion } from '../tsServer/versionProvider'; import { ITypeScriptServiceClient } from '../typescriptService'; import { Disposable } from '../utils/dispose'; -import { jsTsLanguageModes } from '../utils/languageIds'; export class VersionStatus extends Disposable { diff --git a/extensions/typescript-language-features/src/utils/fileSystem.electron.ts b/extensions/typescript-language-features/src/utils/fs.electron.ts similarity index 100% rename from extensions/typescript-language-features/src/utils/fileSystem.electron.ts rename to extensions/typescript-language-features/src/utils/fs.electron.ts diff --git a/extensions/typescript-language-features/src/utils/fs.ts b/extensions/typescript-language-features/src/utils/fs.ts index 88ce3e3aa75..a742b9604f8 100644 --- a/extensions/typescript-language-features/src/utils/fs.ts +++ b/extensions/typescript-language-features/src/utils/fs.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; -export const exists = async (resource: vscode.Uri): Promise => { +export async function exists(resource: vscode.Uri): Promise { try { const stat = await vscode.workspace.fs.stat(resource); // stat.type is an enum flag @@ -13,4 +13,8 @@ export const exists = async (resource: vscode.Uri): Promise => { } catch { return false; } -}; +} + +export function looksLikeAbsoluteWindowsPath(path: string): boolean { + return /^[a-zA-Z]:[\/\\]/.test(path); +} diff --git a/extensions/typescript-language-features/src/utils/logger.ts b/extensions/typescript-language-features/src/utils/logger.ts deleted file mode 100644 index 7ecc48dfce3..00000000000 --- a/extensions/typescript-language-features/src/utils/logger.ts +++ /dev/null @@ -1,58 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as vscode from 'vscode'; -import { memoize } from './memoize'; - - -type LogLevel = 'Trace' | 'Info' | 'Error'; - -export class Logger { - - @memoize - private get output(): vscode.OutputChannel { - return vscode.window.createOutputChannel('TypeScript'); - } - - private data2String(data: any): string { - if (data instanceof Error) { - return data.stack || data.message; - } - if (data.success === false && data.message) { - return data.message; - } - return data.toString(); - } - - public info(message: string, data?: any): void { - this.logLevel('Info', message, data); - } - - public error(message: string, data?: any): void { - // See https://github.com/microsoft/TypeScript/issues/10496 - if (data && data.message === 'No content available.') { - return; - } - this.logLevel('Error', message, data); - } - - public logLevel(level: LogLevel, message: string, data?: any): void { - this.output.appendLine(`[${level} - ${this.now()}] ${message}`); - if (data) { - this.output.appendLine(this.data2String(data)); - } - } - - private now(): string { - const now = new Date(); - return padLeft(now.getUTCHours() + '', 2, '0') - + ':' + padLeft(now.getMinutes() + '', 2, '0') - + ':' + padLeft(now.getUTCSeconds() + '', 2, '0') + '.' + now.getMilliseconds(); - } -} - -function padLeft(s: string, n: number, pad = ' ') { - return pad.repeat(Math.max(0, n - s.length)) + s; -} diff --git a/extensions/typescript-language-features/src/utils/resourceMap.ts b/extensions/typescript-language-features/src/utils/resourceMap.ts index cf97365831c..2328156445b 100644 --- a/extensions/typescript-language-features/src/utils/resourceMap.ts +++ b/extensions/typescript-language-features/src/utils/resourceMap.ts @@ -4,7 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as fileSchemes from '../utils/fileSchemes'; +import * as fileSchemes from '../configuration/fileSchemes'; +import { looksLikeAbsoluteWindowsPath } from './fs'; /** * Maps of file resources @@ -72,11 +73,11 @@ export class ResourceMap { this._map.clear(); } - public get values(): Iterable { + public values(): Iterable { return Array.from(this._map.values(), x => x.value); } - public get entries(): Iterable<{ resource: vscode.Uri; value: T }> { + public entries(): Iterable<{ resource: vscode.Uri; value: T }> { return this._map.values(); } @@ -89,13 +90,9 @@ export class ResourceMap { } private isCaseInsensitivePath(path: string) { - if (isWindowsPath(path)) { + if (looksLikeAbsoluteWindowsPath(path)) { return true; } return path[0] === '/' && this.config.onCaseInsensitiveFileSystem; } } - -function isWindowsPath(path: string): boolean { - return /^[a-zA-Z]:[\/\\]/.test(path); -} diff --git a/extensions/typescript-language-features/src/utils/tracer.ts b/extensions/typescript-language-features/src/utils/tracer.ts deleted file mode 100644 index de3b0c933c7..00000000000 --- a/extensions/typescript-language-features/src/utils/tracer.ts +++ /dev/null @@ -1,102 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as vscode from 'vscode'; -import type * as Proto from '../protocol'; -import { Logger } from './logger'; - -enum Trace { - Off, - Messages, - Verbose, -} - -namespace Trace { - export function fromString(value: string): Trace { - value = value.toLowerCase(); - switch (value) { - case 'off': - return Trace.Off; - case 'messages': - return Trace.Messages; - case 'verbose': - return Trace.Verbose; - default: - return Trace.Off; - } - } -} - -interface RequestExecutionMetadata { - readonly queuingStartTime: number; -} - -export default class Tracer { - private trace?: Trace; - - constructor( - private readonly logger: Logger - ) { - this.updateConfiguration(); - } - - public updateConfiguration() { - this.trace = Tracer.readTrace(); - } - - private static readTrace(): Trace { - let result: Trace = Trace.fromString(vscode.workspace.getConfiguration().get('typescript.tsserver.trace', 'off')); - if (result === Trace.Off && !!process.env.TSS_TRACE) { - result = Trace.Messages; - } - return result; - } - - public traceRequest(serverId: string, request: Proto.Request, responseExpected: boolean, queueLength: number): void { - if (this.trace === Trace.Off) { - return; - } - let data: string | undefined = undefined; - if (this.trace === Trace.Verbose && request.arguments) { - data = `Arguments: ${JSON.stringify(request.arguments, null, 4)}`; - } - this.logTrace(serverId, `Sending request: ${request.command} (${request.seq}). Response expected: ${responseExpected ? 'yes' : 'no'}. Current queue length: ${queueLength}`, data); - } - - public traceResponse(serverId: string, response: Proto.Response, meta: RequestExecutionMetadata): void { - if (this.trace === Trace.Off) { - return; - } - let data: string | undefined = undefined; - if (this.trace === Trace.Verbose && response.body) { - data = `Result: ${JSON.stringify(response.body, null, 4)}`; - } - this.logTrace(serverId, `Response received: ${response.command} (${response.request_seq}). Request took ${Date.now() - meta.queuingStartTime} ms. Success: ${response.success} ${!response.success ? '. Message: ' + response.message : ''}`, data); - } - - public traceRequestCompleted(serverId: string, command: string, request_seq: number, meta: RequestExecutionMetadata): any { - if (this.trace === Trace.Off) { - return; - } - this.logTrace(serverId, `Async response received: ${command} (${request_seq}). Request took ${Date.now() - meta.queuingStartTime} ms.`); - } - - public traceEvent(serverId: string, event: Proto.Event): void { - if (this.trace === Trace.Off) { - return; - } - let data: string | undefined = undefined; - if (this.trace === Trace.Verbose && event.body) { - data = `Data: ${JSON.stringify(event.body, null, 4)}`; - } - this.logTrace(serverId, `Event received: ${event.event} (${event.seq}).`, data); - } - - public logTrace(serverId: string, message: string, data?: any): void { - if (this.trace !== Trace.Off) { - this.logger.logLevel('Trace', `<${serverId}> ${message}`, data); - } - } -} diff --git a/extensions/typescript-language-features/web/webServer.ts b/extensions/typescript-language-features/web/webServer.ts index 1db00fe2a9d..6580a84995c 100644 --- a/extensions/typescript-language-features/web/webServer.ts +++ b/extensions/typescript-language-features/web/webServer.ts @@ -46,24 +46,34 @@ function fromResource(extensionUri: URI, uri: URI) { } return `/${uri.scheme}/${uri.authority}${uri.path}`; } + function updateWatch(event: 'create' | 'change' | 'delete', uri: URI, extensionUri: URI) { - const kind = event === 'create' ? ts.FileWatcherEventKind.Created - : event === 'change' ? ts.FileWatcherEventKind.Changed - : event === 'delete' ? ts.FileWatcherEventKind.Deleted - : ts.FileWatcherEventKind.Changed; + const kind = toTsWatcherKind(event); const path = fromResource(extensionUri, uri); - if (watchFiles.has(path)) { - watchFiles.get(path)!.callback(path, kind); + + const fileWatcher = watchFiles.get(path); + if (fileWatcher) { + fileWatcher.callback(path, kind); return; } - let found = false; + for (const watch of Array.from(watchDirectories.keys()).filter(dir => path.startsWith(dir))) { watchDirectories.get(watch)!.callback(path); - found = true; + return; } - if (!found) { - console.error(`no watcher found for ${path}`); + + console.error(`no watcher found for ${path}`); +} + +function toTsWatcherKind(event: 'create' | 'change' | 'delete') { + if (event === 'create') { + return ts.FileWatcherEventKind.Created; + } else if (event === 'change') { + return ts.FileWatcherEventKind.Changed; + } else if (event === 'delete') { + return ts.FileWatcherEventKind.Deleted; } + throw new Error(`Unknown event: ${event}`); } type ServerHostWithImport = ts.server.ServerHost & { importPlugin(root: string, moduleName: string): Promise }; @@ -95,17 +105,26 @@ function createServerHost(extensionUri: URI, logger: ts.server.Logger, apiClient const logNormal = log.bind(null, ts.server.LogLevel.normal); const logVerbose = log.bind(null, ts.server.LogLevel.verbose); + const noopWatcher: ts.FileWatcher = { close() { } }; return { watchFile(path: string, callback: ts.FileWatcherCallback, pollingInterval?: number, options?: ts.WatchOptions): ts.FileWatcher { if (looksLikeLibDtsPath(path)) { // We don't support watching lib files on web since they are readonly - return { close() { } }; + return noopWatcher; } logVerbose('fs.watchFile', { path }); + let uri: URI; + try { + uri = toResource(path); + } catch (e) { + console.error(e); + return noopWatcher; + } + watchFiles.set(path, { path, callback, pollingInterval, options }); watchId++; - fsWatcher.postMessage({ type: 'watchFile', uri: toResource(path), id: watchId }); + fsWatcher.postMessage({ type: 'watchFile', uri, id: watchId }); return { close() { logVerbose('fs.watchFile.close', { path }); @@ -118,9 +137,17 @@ function createServerHost(extensionUri: URI, logger: ts.server.Logger, apiClient watchDirectory(path: string, callback: ts.DirectoryWatcherCallback, recursive?: boolean, options?: ts.WatchOptions): ts.FileWatcher { logVerbose('fs.watchDirectory', { path }); + let uri: URI; + try { + uri = toResource(path); + } catch (e) { + console.error(e); + return noopWatcher; + } + watchDirectories.set(path, { path, callback, recursive, options }); watchId++; - fsWatcher.postMessage({ type: 'watchDirectory', recursive, uri: toResource(path), id: watchId }); + fsWatcher.postMessage({ type: 'watchDirectory', recursive, uri, id: watchId }); return { close() { logVerbose('fs.watchDirectory.close', { path }); @@ -289,9 +316,13 @@ function createServerHost(extensionUri: URI, logger: ts.server.Logger, apiClient return currentDirectory; }, getDirectories(path: string): string[] { + logVerbose('fs.getDirectories', { path }); + return getAccessibleFileSystemEntries(path).directories.slice(); }, readDirectory(path: string, extensions?: readonly string[], excludes?: readonly string[], includes?: readonly string[], depth?: number): string[] { + logVerbose('fs.readDirectory', { path }); + return matchFiles(path, extensions, excludes, includes, /*useCaseSensitiveFileNames*/ true, currentDirectory, depth, getAccessibleFileSystemEntries, realpath); }, getModifiedTime(path: string): Date | undefined { diff --git a/extensions/vb/language-configuration.json b/extensions/vb/language-configuration.json index a31b67bec0f..53f537617c5 100644 --- a/extensions/vb/language-configuration.json +++ b/extensions/vb/language-configuration.json @@ -5,8 +5,7 @@ "brackets": [ ["{", "}"], ["[", "]"], - ["(", ")"], - ["<", ">"] + ["(", ")"] ], "autoClosingPairs": [ ["{", "}"], diff --git a/extensions/vb/package.json b/extensions/vb/package.json index 801ef7180da..6e5dd080c0b 100644 --- a/extensions/vb/package.json +++ b/extensions/vb/package.json @@ -9,7 +9,7 @@ "vscode": "*" }, "scripts": { - "update-grammar": "node ../node_modules/vscode-grammar-updater/bin textmate/asp.vb.net.tmbundle Syntaxes/ASP%20VB.net.plist ./syntaxes/asp-vb-net.tmlanguage.json" + "update-grammar": "node ../node_modules/vscode-grammar-updater/bin textmate/asp.vb.net.tmbundle Syntaxes/ASP%%20VB.net.plist ./syntaxes/asp-vb-net.tmlanguage.json" }, "contributes": { "languages": [ diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json index 5044b091bb1..b230a1a4897 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -7,9 +7,11 @@ "enabledApiProposals": [ "authSession", "contribViewsRemote", + "contribStatusBarItems", "customEditorMove", "diffCommand", "documentFiltersExclusive", + "documentPaste", "editorInsets", "extensionRuntime", "extensionsAny", @@ -18,16 +20,18 @@ "findTextInFiles", "fsChunks", "notebookCellExecutionState", - "notebookControllerKind", "notebookDeprecated", "notebookLiveShare", "notebookMessaging", "notebookMime", "portsAttributes", "quickPickSortByLabel", + "readonlyMessage", "resolvers", + "saveEditor", "scmActionButton", "scmSelectedProvider", + "scmTextDocument", "scmValidation", "taskPresentationGroup", "terminalDataWriteEvent", @@ -41,8 +45,13 @@ "tokenInformation", "treeItemCheckbox", "treeViewReveal", + "testInvalidateResults", "workspaceTrust", - "telemetry" + "telemetry", + "windowActivity", + "interactiveUserActions", + "envCollectionWorkspace", + "envCollectionOptions" ], "private": true, "activationEvents": [], @@ -185,7 +194,19 @@ } ] } - ] + ], + "statusBarItems": { + "id": "myStaticItem", + "alignment": "right", + "priority": 17, + "name": "My Static Item", + "text": "Hello $(globe)", + "tooltip": "Hover World", + "accessibilityInformation": { + "label": "Hello World", + "role": "button" + } + } }, "scripts": { "compile": "node ./node_modules/vscode/bin/compile -watch -p ./", diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/debug.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/debug.test.ts index 189bb8e3747..84226f62988 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/debug.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/debug.test.ts @@ -6,12 +6,22 @@ import * as assert from 'assert'; import { basename } from 'path'; import { commands, debug, Disposable, window, workspace } from 'vscode'; -import { assertNoRpc, disposeAll } from '../utils'; +import { assertNoRpc, createRandomFile, disposeAll } from '../utils'; suite('vscode API - debug', function () { teardown(assertNoRpc); + test('breakpoints are available before accessing debug extension API', async () => { + const file = await createRandomFile(undefined, undefined, '.js'); + const doc = await workspace.openTextDocument(file); + await window.showTextDocument(doc); + await commands.executeCommand('editor.debug.action.toggleBreakpoint'); + + assert.strictEqual(debug.breakpoints.length, 1); + await commands.executeCommand('editor.debug.action.toggleBreakpoint'); + }); + test('breakpoints', async function () { assert.strictEqual(debug.breakpoints.length, 0); let onDidChangeBreakpointsCounter = 0; diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/documentPaste.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/documentPaste.test.ts new file mode 100644 index 00000000000..dd5b9eae41c --- /dev/null +++ b/extensions/vscode-api-tests/src/singlefolder-tests/documentPaste.test.ts @@ -0,0 +1,222 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import * as vscode from 'vscode'; +import { closeAllEditors, createRandomFile, disposeAll } from '../utils'; + +const textPlain = 'text/plain'; + +// Skipped due to flakiness on Linux Desktop and errors on web +suite.skip('vscode API - Copy Paste', function () { + + this.retries(3); + + const testDisposables: vscode.Disposable[] = []; + + teardown(async function () { + disposeAll(testDisposables); + await closeAllEditors(); + }); + + test('Copy should be able to overwrite text/plain', async () => { + const file = await createRandomFile('$abcde@'); + const doc = await vscode.workspace.openTextDocument(file); + + const editor = await vscode.window.showTextDocument(doc); + editor.selections = [new vscode.Selection(0, 1, 0, 6)]; + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + const existing = dataTransfer.get(textPlain); + if (existing) { + const str = await existing.asString(); + const reversed = reverseString(str); + dataTransfer.set(textPlain, new vscode.DataTransferItem(reversed)); + } + } + }, { copyMimeTypes: [textPlain] })); + + await vscode.commands.executeCommand('editor.action.clipboardCopyAction'); + const newDocContent = getNextDocumentText(testDisposables, doc); + await vscode.commands.executeCommand('editor.action.clipboardPasteAction'); + assert.strictEqual(await newDocContent, '$edcba@'); + }); + + test('Copy with empty selection should copy entire line', async () => { + const file = await createRandomFile('abc\ndef'); + const doc = await vscode.workspace.openTextDocument(file); + await vscode.window.showTextDocument(doc); + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + const existing = dataTransfer.get(textPlain); + if (existing) { + const str = await existing.asString(); + // text/plain includes the trailing new line in this case + // On windows, this will always be `\r\n` even if the document uses `\n` + const eol = str.match(/\r?\n$/)?.[0] ?? '\n'; + const reversed = reverseString(str.slice(0, -eol.length)); + dataTransfer.set(textPlain, new vscode.DataTransferItem(reversed + '\n')); + } + } + }, { copyMimeTypes: [textPlain] })); + + await vscode.commands.executeCommand('editor.action.clipboardCopyAction'); + const newDocContent = getNextDocumentText(testDisposables, doc); + await vscode.commands.executeCommand('editor.action.clipboardPasteAction'); + assert.strictEqual(await newDocContent, `cba\nabc\ndef`); + }); + + test('Copy with multiple selections should get all selections', async () => { + const file = await createRandomFile('111\n222\n333'); + const doc = await vscode.workspace.openTextDocument(file); + const editor = await vscode.window.showTextDocument(doc); + + editor.selections = [ + new vscode.Selection(0, 0, 0, 3), + new vscode.Selection(2, 0, 2, 3), + ]; + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(document: vscode.TextDocument, ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + const existing = dataTransfer.get(textPlain); + if (existing) { + const selections = ranges.map(range => document.getText(range)); + dataTransfer.set(textPlain, new vscode.DataTransferItem(`(${ranges.length})${selections.join(' ')}`)); + } + } + }, { copyMimeTypes: [textPlain] })); + + await vscode.commands.executeCommand('editor.action.clipboardCopyAction'); + editor.selections = [new vscode.Selection(0, 0, 0, 0)]; + const newDocContent = getNextDocumentText(testDisposables, doc); + await vscode.commands.executeCommand('editor.action.clipboardPasteAction'); + + assert.strictEqual(await newDocContent, `(2)111 333111\n222\n333`); + }); + + test('Earlier invoked copy providers should win when writing values', async () => { + const file = await createRandomFile('abc\ndef'); + const doc = await vscode.workspace.openTextDocument(file); + + const editor = await vscode.window.showTextDocument(doc); + editor.selections = [new vscode.Selection(0, 0, 0, 3)]; + + const callOrder: string[] = []; + const a_id = 'a'; + const b_id = 'b'; + + let providerAResolve: () => void; + const providerAFinished = new Promise(resolve => providerAResolve = resolve); + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + callOrder.push(a_id); + dataTransfer.set(textPlain, new vscode.DataTransferItem('a')); + providerAResolve(); + } + }, { copyMimeTypes: [textPlain] })); + + // Later registered providers will be called first + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + callOrder.push(b_id); + + // Wait for the first provider to finish even though we were called first. + // This tests that resulting order does not depend on the order the providers + // return in. + await providerAFinished; + + dataTransfer.set(textPlain, new vscode.DataTransferItem('b')); + } + }, { copyMimeTypes: [textPlain] })); + + await vscode.commands.executeCommand('editor.action.clipboardCopyAction'); + const newDocContent = getNextDocumentText(testDisposables, doc); + await vscode.commands.executeCommand('editor.action.clipboardPasteAction'); + assert.strictEqual(await newDocContent, 'b\ndef'); + + // Confirm provider call order is what we expected + assert.deepStrictEqual(callOrder, [b_id, a_id]); + }); + + test('Copy providers should not be able to effect the data transfer of another', async () => { + const file = await createRandomFile('abc\ndef'); + const doc = await vscode.workspace.openTextDocument(file); + + const editor = await vscode.window.showTextDocument(doc); + editor.selections = [new vscode.Selection(0, 0, 0, 3)]; + + + let providerAResolve: () => void; + const providerAFinished = new Promise(resolve => providerAResolve = resolve); + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + dataTransfer.set(textPlain, new vscode.DataTransferItem('xyz')); + providerAResolve(); + } + }, { copyMimeTypes: [textPlain] })); + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + + // Wait for the first provider to finish + await providerAFinished; + + // We we access the data transfer here, we should not see changes made by the first provider + const entry = dataTransfer.get(textPlain); + const str = await entry!.asString(); + dataTransfer.set(textPlain, new vscode.DataTransferItem(reverseString(str))); + } + }, { copyMimeTypes: [textPlain] })); + + await vscode.commands.executeCommand('editor.action.clipboardCopyAction'); + const newDocContent = getNextDocumentText(testDisposables, doc); + await vscode.commands.executeCommand('editor.action.clipboardPasteAction'); + assert.strictEqual(await newDocContent, 'cba\ndef'); + }); + + + test('One failing provider should not effect other', async () => { + const file = await createRandomFile('abc\ndef'); + const doc = await vscode.workspace.openTextDocument(file); + + const editor = await vscode.window.showTextDocument(doc); + editor.selections = [new vscode.Selection(0, 0, 0, 3)]; + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + dataTransfer.set(textPlain, new vscode.DataTransferItem('xyz')); + } + }, { copyMimeTypes: [textPlain] })); + + testDisposables.push(vscode.languages.registerDocumentPasteEditProvider({ language: 'plaintext' }, new class implements vscode.DocumentPasteEditProvider { + async prepareDocumentPaste(_document: vscode.TextDocument, _ranges: readonly vscode.Range[], _dataTransfer: vscode.DataTransfer, _token: vscode.CancellationToken): Promise { + throw new Error('Expected testing error from bad provider'); + } + }, { copyMimeTypes: [textPlain] })); + + await vscode.commands.executeCommand('editor.action.clipboardCopyAction'); + const newDocContent = getNextDocumentText(testDisposables, doc); + await vscode.commands.executeCommand('editor.action.clipboardPasteAction'); + assert.strictEqual(await newDocContent, 'xyz\ndef'); + }); +}); + +function reverseString(str: string) { + return str.split("").reverse().join(""); +} + +function getNextDocumentText(disposables: vscode.Disposable[], doc: vscode.TextDocument): Promise { + return new Promise(resolve => { + disposables.push(vscode.workspace.onDidChangeTextDocument(e => { + if (e.document.uri.fsPath === doc.uri.fsPath) { + resolve(e.document.getText()); + } + })); + }); +} diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/interactiveWindow.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/interactiveWindow.test.ts index 4f8a1211c2d..c85fdcb4c81 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/interactiveWindow.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/interactiveWindow.test.ts @@ -20,6 +20,7 @@ async function createInteractiveWindow(kernel: Kernel) { `vscode.vscode-api-tests/${kernel.controller.id}`, undefined )) as unknown as INativeInteractiveWindow; + assert.ok(notebookEditor, 'Interactive Window was not created successfully'); return { notebookEditor, inputUri }; } @@ -29,16 +30,25 @@ async function addCell(code: string, notebook: vscode.NotebookDocument) { const edit = vscode.NotebookEdit.insertCells(notebook.cellCount, [cell]); const workspaceEdit = new vscode.WorkspaceEdit(); workspaceEdit.set(notebook.uri, [edit]); + const event = asPromise(vscode.workspace.onDidChangeNotebookDocument); await vscode.workspace.applyEdit(workspaceEdit); + await event; return notebook.cellAt(notebook.cellCount - 1); } -async function addCellAndRun(code: string, notebook: vscode.NotebookDocument, i: number) { +async function addCellAndRun(code: string, notebook: vscode.NotebookDocument) { + const initialCellCount = notebook.cellCount; const cell = await addCell(code, notebook); + const event = asPromise(vscode.workspace.onDidChangeNotebookDocument); - await vscode.commands.executeCommand('notebook.cell.execute', { start: i, end: i + 1 }, notebook.uri); - await event; - assert.strictEqual(cell.outputs.length, 1, 'execute failed'); + await vscode.commands.executeCommand('notebook.cell.execute', { start: initialCellCount, end: initialCellCount + 1 }, notebook.uri); + try { + await event; + } catch (e) { + const result = notebook.cellAt(notebook.cellCount - 1); + assert.fail(`Notebook change event was not triggered after executing newly added cell. Initial Cell count: ${initialCellCount}. Current cell count: ${notebook.cellCount}. execution summary: ${JSON.stringify(result.executionSummary)}`); + } + assert.strictEqual(cell.outputs.length, 1, `Executed cell has no output. Initial Cell count: ${initialCellCount}. Current cell count: ${notebook.cellCount}. execution summary: ${JSON.stringify(cell.executionSummary)}`); return cell; } @@ -66,7 +76,6 @@ async function addCellAndRun(code: string, notebook: vscode.NotebookDocument, i: test('Can open an interactive window and execute from input box', async () => { assert.ok(vscode.workspace.workspaceFolders); const { notebookEditor, inputUri } = await createInteractiveWindow(defaultKernel); - assert.ok(notebookEditor); const inputBox = vscode.window.visibleTextEditors.find( (e) => e.document.uri.path === inputUri.path @@ -83,11 +92,10 @@ async function addCellAndRun(code: string, notebook: vscode.NotebookDocument, i: test('Interactive window scrolls after execute', async () => { assert.ok(vscode.workspace.workspaceFolders); const { notebookEditor } = await createInteractiveWindow(defaultKernel); - assert.ok(notebookEditor); // Run and add a bunch of cells for (let i = 0; i < 10; i++) { - await addCellAndRun(`print ${i}`, notebookEditor.notebook, i); + await addCellAndRun(`print ${i}`, notebookEditor.notebook); } // Verify visible range has the last cell @@ -97,19 +105,18 @@ async function addCellAndRun(code: string, notebook: vscode.NotebookDocument, i: test('Interactive window has the correct kernel', async () => { assert.ok(vscode.workspace.workspaceFolders); - const { notebookEditor } = await createInteractiveWindow(defaultKernel); - assert.ok(notebookEditor); + await createInteractiveWindow(defaultKernel); await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); // Create a new interactive window with a different kernel - const { notebookEditor: notebookEditor2 } = await createInteractiveWindow(secondKernel); - assert.ok(notebookEditor2); + const { notebookEditor } = await createInteractiveWindow(secondKernel); + assert.ok(notebookEditor); // Verify the kernel is the secondary one - await addCellAndRun(`print`, notebookEditor2.notebook, 0); + await addCellAndRun(`print`, notebookEditor.notebook); - assert.strictEqual(secondKernel.associatedNotebooks.has(notebookEditor2.notebook.uri.toString()), true, `Secondary kernel was not set as the kernel for the interactive window`); + assert.strictEqual(secondKernel.associatedNotebooks.has(notebookEditor.notebook.uri.toString()), true, `Secondary kernel was not set as the kernel for the interactive window`); }); }); diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/readonlyFileSystem.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/readonlyFileSystem.test.ts new file mode 100644 index 00000000000..745eba859fb --- /dev/null +++ b/extensions/vscode-api-tests/src/singlefolder-tests/readonlyFileSystem.test.ts @@ -0,0 +1,63 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import * as vscode from 'vscode'; +import { TestFS } from '../memfs'; +import { assertNoRpc, closeAllEditors } from '../utils'; + +suite('vscode API - file system', () => { + + teardown(async function () { + assertNoRpc(); + await closeAllEditors(); + }); + + test('readonly file system - boolean', async function () { + const fs = new TestFS('this-fs', false); + const reg = vscode.workspace.registerFileSystemProvider(fs.scheme, fs, { isReadonly: true }); + let error: any | undefined; + try { + await vscode.workspace.fs.writeFile(vscode.Uri.parse('this-fs:/foo.txt'), Buffer.from('Hello World')); + } catch (e) { + error = e; + } + assert.strictEqual(vscode.workspace.fs.isWritableFileSystem('this-fs'), false); + assert.strictEqual(error instanceof vscode.FileSystemError, true); + const fileError: vscode.FileSystemError = error; + assert.strictEqual(fileError.code, 'NoPermissions'); + reg.dispose(); + }); + + test('readonly file system - markdown', async function () { + const fs = new TestFS('this-fs', false); + const reg = vscode.workspace.registerFileSystemProvider(fs.scheme, fs, { isReadonly: new vscode.MarkdownString('This file is readonly.') }); + let error: any | undefined; + try { + await vscode.workspace.fs.writeFile(vscode.Uri.parse('this-fs:/foo.txt'), Buffer.from('Hello World')); + } catch (e) { + error = e; + } + assert.strictEqual(vscode.workspace.fs.isWritableFileSystem('this-fs'), false); + assert.strictEqual(error instanceof vscode.FileSystemError, true); + const fileError: vscode.FileSystemError = error; + assert.strictEqual(fileError.code, 'NoPermissions'); + reg.dispose(); + }); + + test('writeable file system', async function () { + const fs = new TestFS('this-fs', false); + const reg = vscode.workspace.registerFileSystemProvider(fs.scheme, fs); + let error: any | undefined; + try { + await vscode.workspace.fs.writeFile(vscode.Uri.parse('this-fs:/foo.txt'), Buffer.from('Hello World')); + } catch (e) { + error = e; + } + assert.strictEqual(vscode.workspace.fs.isWritableFileSystem('this-fs'), true); + assert.strictEqual(error, undefined); + reg.dispose(); + }); +}); diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts index b76e348e02e..b2a8bb3a9cc 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { deepStrictEqual, doesNotThrow, equal, strictEqual, throws } from 'assert'; -import { ConfigurationTarget, Disposable, env, EnvironmentVariableMutator, EnvironmentVariableMutatorType, EventEmitter, ExtensionContext, extensions, ExtensionTerminalOptions, Pseudoterminal, Terminal, TerminalDimensions, TerminalExitReason, TerminalOptions, TerminalState, UIKind, window, workspace } from 'vscode'; +import { deepStrictEqual, doesNotThrow, equal, ok, strictEqual, throws } from 'assert'; +import { ConfigurationTarget, Disposable, env, EnvironmentVariableCollection, EnvironmentVariableMutator, EnvironmentVariableMutatorOptions, EnvironmentVariableMutatorType, EnvironmentVariableScope, EventEmitter, ExtensionContext, extensions, ExtensionTerminalOptions, Pseudoterminal, Terminal, TerminalDimensions, TerminalExitReason, TerminalOptions, TerminalState, UIKind, Uri, window, workspace } from 'vscode'; import { assertNoRpc, poll } from '../utils'; // Disable terminal tests: @@ -368,11 +368,12 @@ import { assertNoRpc, poll } from '../utils'; try { if (closeEvents.length === 1) { deepStrictEqual(openEvents, ['test1']); - deepStrictEqual(dataEvents, [{ name: 'test1', data: 'write1' }]); + ok(dataEvents.some(e => e.name === 'test1' && e.data === 'write1')); deepStrictEqual(closeEvents, ['test1']); } else if (closeEvents.length === 2) { deepStrictEqual(openEvents, ['test1', 'test2']); - deepStrictEqual(dataEvents, [{ name: 'test1', data: 'write1' }, { name: 'test2', data: 'write2' }]); + ok(dataEvents.some(e => e.name === 'test1' && e.data === 'write1')); + ok(dataEvents.some(e => e.name === 'test2' && e.data === 'write2')); deepStrictEqual(closeEvents, ['test1', 'test2']); } resolveOnceClosed!(); @@ -848,19 +849,53 @@ import { assertNoRpc, poll } from '../utils'; collection.replace('A', '~a2~'); collection.append('B', '~b2~'); collection.prepend('C', '~c2~'); - // Verify get - deepStrictEqual(collection.get('A'), { value: '~a2~', type: EnvironmentVariableMutatorType.Replace }); - deepStrictEqual(collection.get('B'), { value: '~b2~', type: EnvironmentVariableMutatorType.Append }); - deepStrictEqual(collection.get('C'), { value: '~c2~', type: EnvironmentVariableMutatorType.Prepend }); - + const defaultOptions: Required = { + applyAtProcessCreation: true, + applyAtShellIntegration: false + }; + deepStrictEqual(collection.get('A'), { value: '~a2~', type: EnvironmentVariableMutatorType.Replace, options: defaultOptions }); + deepStrictEqual(collection.get('B'), { value: '~b2~', type: EnvironmentVariableMutatorType.Append, options: defaultOptions }); + deepStrictEqual(collection.get('C'), { value: '~c2~', type: EnvironmentVariableMutatorType.Prepend, options: defaultOptions }); // Verify forEach const entries: [string, EnvironmentVariableMutator][] = []; collection.forEach((v, m) => entries.push([v, m])); deepStrictEqual(entries, [ - ['A', { value: '~a2~', type: EnvironmentVariableMutatorType.Replace }], - ['B', { value: '~b2~', type: EnvironmentVariableMutatorType.Append }], - ['C', { value: '~c2~', type: EnvironmentVariableMutatorType.Prepend }] + ['A', { value: '~a2~', type: EnvironmentVariableMutatorType.Replace, options: defaultOptions }], + ['B', { value: '~b2~', type: EnvironmentVariableMutatorType.Append, options: defaultOptions }], + ['C', { value: '~c2~', type: EnvironmentVariableMutatorType.Prepend, options: defaultOptions }] + ]); + }); + + test('get and forEach should work (scope)', () => { + // TODO: Remove cast once `envCollectionWorkspace` API is finalized. + const collection = extensionContext.environmentVariableCollection as (EnvironmentVariableCollection & { getScopedEnvironmentVariableCollection(scope: EnvironmentVariableScope): EnvironmentVariableCollection }); + disposables.push({ dispose: () => collection.clear() }); + const scope = { workspaceFolder: { uri: Uri.file('workspace1'), name: 'workspace1', index: 0 } }; + const scopedCollection = collection.getScopedEnvironmentVariableCollection(scope); + scopedCollection.replace('A', 'scoped~a2~'); + scopedCollection.append('B', 'scoped~b2~'); + scopedCollection.prepend('C', 'scoped~c2~'); + collection.replace('A', '~a2~'); + collection.append('B', '~b2~'); + collection.prepend('C', '~c2~'); + // Verify get for scope + const defaultOptions: Required = { + applyAtProcessCreation: true, + applyAtShellIntegration: false + }; + const expectedScopedCollection = collection.getScopedEnvironmentVariableCollection(scope); + deepStrictEqual(expectedScopedCollection.get('A'), { value: 'scoped~a2~', type: EnvironmentVariableMutatorType.Replace, options: defaultOptions }); + deepStrictEqual(expectedScopedCollection.get('B'), { value: 'scoped~b2~', type: EnvironmentVariableMutatorType.Append, options: defaultOptions }); + deepStrictEqual(expectedScopedCollection.get('C'), { value: 'scoped~c2~', type: EnvironmentVariableMutatorType.Prepend, options: defaultOptions }); + + // Verify forEach + const entries: [string, EnvironmentVariableMutator][] = []; + expectedScopedCollection.forEach((v, m) => entries.push([v, m])); + deepStrictEqual(entries.map(v => v[1]), [ + { value: 'scoped~a2~', type: EnvironmentVariableMutatorType.Replace, options: defaultOptions }, + { value: 'scoped~b2~', type: EnvironmentVariableMutatorType.Append, options: defaultOptions }, + { value: 'scoped~c2~', type: EnvironmentVariableMutatorType.Prepend, options: defaultOptions } ]); }); }); diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts index 2e116ac844b..2a9fe97c144 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts @@ -1036,4 +1036,28 @@ suite('vscode API - window', () => { statusBarEntryWithId.name = 'Test Name'; assert.strictEqual(statusBarEntryWithId.name, 'Test Name'); }); + + test('createStatusBar - static', async function () { + + const item = window.createStatusBarItem('myStaticItem'); + + assert.strictEqual(item.alignment, StatusBarAlignment.Right); + assert.strictEqual(item.priority, 17); + assert.strictEqual(item.name, 'My Static Item'); + assert.strictEqual(item.text, 'Hello $(globe)'); + assert.strictEqual(item.tooltip, 'Hover World'); + assert.deepStrictEqual(item.accessibilityInformation, { label: 'Hello World', role: 'button' }); + + item.dispose(); + }); + + test('createStatusBar - static, CANNOT change some props', async function () { + + const item = window.createStatusBarItem('myStaticItem', StatusBarAlignment.Left, 12); + + assert.strictEqual(item.alignment, StatusBarAlignment.Right); + assert.strictEqual(item.priority, 17); + + item.dispose(); + }); }); diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.fs.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.fs.test.ts index 16e7c793f8e..ad79f159bfc 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.fs.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.fs.test.ts @@ -57,7 +57,7 @@ suite('vscode API - workspace-fs', () => { } }); - test('fs.write/stat/delete', async function () { + test('fs.write/stat/read/delete', async function () { const uri = root.with({ path: posix.join(root.path, 'new.file') }); await vscode.workspace.fs.writeFile(uri, Buffer.from('HELLO')); @@ -65,6 +65,9 @@ suite('vscode API - workspace-fs', () => { const stat = await vscode.workspace.fs.stat(uri); assert.strictEqual(stat.type, vscode.FileType.File); + const contents = await vscode.workspace.fs.readFile(uri); + assert.strictEqual(Buffer.from(contents).toString(), 'HELLO'); + await vscode.workspace.fs.delete(uri); try { @@ -122,7 +125,7 @@ suite('vscode API - workspace-fs', () => { } }); - test('throws FileSystemError', async function () { + test('throws FileSystemError (1)', async function () { try { await vscode.workspace.fs.stat(vscode.Uri.file(`/c468bf16-acfd-4591-825e-2bcebba508a3/71b1f274-91cb-4c19-af00-8495eaab4b73/4b60cb48-a6f2-40ea-9085-0936f4a8f59a.tx6`)); @@ -133,7 +136,7 @@ suite('vscode API - workspace-fs', () => { } }); - test('throws FileSystemError', async function () { + test('throws FileSystemError (2)', async function () { try { await vscode.workspace.fs.stat(vscode.Uri.parse('foo:/bar')); @@ -144,7 +147,7 @@ suite('vscode API - workspace-fs', () => { } }); - test('vscode.workspace.fs.remove() (and copy()) succeed unexpectedly. #84177', async function () { + test('vscode.workspace.fs.remove() (and copy()) succeed unexpectedly. #84177 (1)', async function () { const entries = await vscode.workspace.fs.readDirectory(root); assert.ok(entries.length > 0); @@ -158,7 +161,7 @@ suite('vscode API - workspace-fs', () => { } }); - test('vscode.workspace.fs.remove() (and copy()) succeed unexpectedly. #84177', async function () { + test('vscode.workspace.fs.remove() (and copy()) succeed unexpectedly. #84177 (2)', async function () { const entries = await vscode.workspace.fs.readDirectory(root); assert.ok(entries.length > 0); @@ -184,7 +187,6 @@ suite('vscode API - workspace-fs', () => { test('vscode.workspace.fs error reporting is weird #132981', async function () { - const uri = await createRandomFile(); const source = vscode.Uri.joinPath(uri, `./${Math.random().toString(16).slice(2, 8)}`); @@ -214,4 +216,48 @@ suite('vscode API - workspace-fs', () => { assert.strictEqual(err.code, 'FileNotFound'); } }); + + test('fs.createFolder creates recursively', async function () { + + const folder = root.with({ path: posix.join(root.path, 'deeply', 'nested', 'folder') }); + await vscode.workspace.fs.createDirectory(folder); + + let stat = await vscode.workspace.fs.stat(folder); + assert.strictEqual(stat.type, vscode.FileType.Directory); + + await vscode.workspace.fs.delete(folder, { recursive: true, useTrash: false }); + + await vscode.workspace.fs.createDirectory(folder); // calling on existing folder is also ok! + + const file = root.with({ path: posix.join(folder.path, 'file.txt') }); + await vscode.workspace.fs.writeFile(file, Buffer.from('Hello World')); + const folder2 = root.with({ path: posix.join(file.path, 'invalid') }); + let e; + try { + await vscode.workspace.fs.createDirectory(folder2); // cannot create folder on file path + } catch (error) { + e = error; + } + assert.ok(e); + + const folder3 = root.with({ path: posix.join(root.path, 'DEEPLY', 'NESTED', 'FOLDER') }); + await vscode.workspace.fs.createDirectory(folder3); // calling on different cased folder is ok! + stat = await vscode.workspace.fs.stat(folder3); + assert.strictEqual(stat.type, vscode.FileType.Directory); + + await vscode.workspace.fs.delete(folder, { recursive: true, useTrash: false }); + }); + + test('fs.writeFile creates parents recursively', async function () { + + const folder = root.with({ path: posix.join(root.path, 'other-deeply', 'nested', 'folder') }); + const file = root.with({ path: posix.join(folder.path, 'file.txt') }); + + await vscode.workspace.fs.writeFile(file, Buffer.from('Hello World')); + + const stat = await vscode.workspace.fs.stat(file); + assert.strictEqual(stat.type, vscode.FileType.File); + + await vscode.workspace.fs.delete(folder, { recursive: true, useTrash: false }); + }); }); diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts index 5632c7e96d3..6e0c8e59404 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts @@ -939,7 +939,7 @@ suite('vscode API - workspace', () => { } } - test('The api workspace.applyEdit failed for some case of mixing resourceChange and textEdit #80688', async function () { + test('The api workspace.applyEdit failed for some case of mixing resourceChange and textEdit #80688, 1/2', async function () { const file1 = await createRandomFile(); const file2 = await createRandomFile(); const we = new vscode.WorkspaceEdit(); @@ -958,7 +958,7 @@ suite('vscode API - workspace', () => { assert.strictEqual(document.getText(), expected2); }); - test('The api workspace.applyEdit failed for some case of mixing resourceChange and textEdit #80688', async function () { + test('The api workspace.applyEdit failed for some case of mixing resourceChange and textEdit #80688, 2/2', async function () { const file1 = await createRandomFile(); const file2 = await createRandomFile(); const we = new vscode.WorkspaceEdit(); @@ -1171,7 +1171,6 @@ suite('vscode API - workspace', () => { assert.deepStrictEqual(edt.selections, [new vscode.Selection(0, 0, 0, 3)]); }); - test('Support creating binary files in a WorkspaceEdit', async function (): Promise { const fileUri = vscode.Uri.parse(`${testFs.scheme}:/${rndName()}`); @@ -1187,4 +1186,46 @@ suite('vscode API - workspace', () => { assert.deepStrictEqual(actual, data); }); + + test('saveAll', async () => { + await testSave(true); + }); + + test('save', async () => { + await testSave(false); + }); + + async function testSave(saveAll: boolean) { + const file = await createRandomFile(); + const disposables: vscode.Disposable[] = []; + + await revertAllDirty(); // needed for a clean state for `onDidSaveTextDocument` (#102365) + + const onDidSaveTextDocument = new Set(); + + disposables.push(vscode.workspace.onDidSaveTextDocument(e => { + onDidSaveTextDocument.add(e); + })); + + const doc = await vscode.workspace.openTextDocument(file); + await vscode.window.showTextDocument(doc); + + if (saveAll) { + const edit = new vscode.WorkspaceEdit(); + edit.insert(doc.uri, new vscode.Position(0, 0), 'Hello World'); + + await vscode.workspace.applyEdit(edit); + assert.ok(doc.isDirty); + + await vscode.workspace.saveAll(false); // requires dirty documents + } else { + const res = await vscode.workspace.save(doc.uri); // enforces to save even when not dirty + assert.ok(res?.toString() === doc.uri.toString()); + } + + assert.ok(onDidSaveTextDocument); + assert.ok(Array.from(onDidSaveTextDocument).find(e => e.uri.toString() === file.toString()), 'did Save: ' + file.toString()); + disposeAll(disposables); + return deleteFile(file); + } }); diff --git a/extensions/python/test/colorize-fixtures/test-freeze-56377.py b/extensions/vscode-colorize-tests/test/colorize-fixtures/test-freeze-56377.py similarity index 100% rename from extensions/python/test/colorize-fixtures/test-freeze-56377.py rename to extensions/vscode-colorize-tests/test/colorize-fixtures/test-freeze-56377.py diff --git a/extensions/python/test/colorize-fixtures/test.py b/extensions/vscode-colorize-tests/test/colorize-fixtures/test.py similarity index 100% rename from extensions/python/test/colorize-fixtures/test.py rename to extensions/vscode-colorize-tests/test/colorize-fixtures/test.py diff --git a/extensions/vscode-colorize-tests/test/colorize-results/12750_html.json b/extensions/vscode-colorize-tests/test/colorize-results/12750_html.json index 9995b89e0ce..2b8a1e05fc7 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/12750_html.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/12750_html.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -162,9 +162,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -190,9 +190,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -400,9 +400,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -428,9 +428,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -456,9 +456,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -470,9 +470,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -484,9 +484,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/13448_html.json b/extensions/vscode-colorize-tests/test/colorize-results/13448_html.json index ebe403925c7..659360a9f42 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/13448_html.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/13448_html.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file 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 69544dc9875..befc3ca8321 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json @@ -8,9 +8,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -22,9 +22,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/25920_html.json b/extensions/vscode-colorize-tests/test/colorize-results/25920_html.json index d3139a2ec60..0c325bffb21 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/25920_html.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/25920_html.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -162,9 +162,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -596,9 +596,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -652,9 +652,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -736,9 +736,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -778,9 +778,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -806,9 +806,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -820,9 +820,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -834,9 +834,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -946,9 +946,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -960,9 +960,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -974,9 +974,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/COMMIT_EDITMSG.json b/extensions/vscode-colorize-tests/test/colorize-results/COMMIT_EDITMSG.json index 315744dc177..c8ca0791cb3 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/COMMIT_EDITMSG.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/COMMIT_EDITMSG.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "markup.deleted: #CE9178", "light_vs": "markup.deleted: #A31515", "hc_black": "markup.deleted: #CE9178", - "dark_plus_experimental": "markup.deleted: #CE9178", + "dark_modern": "markup.deleted: #CE9178", "hc_light": "markup.deleted: #5A5A5A", - "light_plus_experimental": "markup.deleted: #A31515" + "light_modern": "markup.deleted: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "markup.changed: #569CD6", "light_vs": "markup.changed: #0451A5", "hc_black": "markup.changed: #569CD6", - "dark_plus_experimental": "markup.changed: #569CD6", + "dark_modern": "markup.changed: #569CD6", "hc_light": "markup.changed: #0451A5", - "light_plus_experimental": "markup.changed: #0451A5" + "light_modern": "markup.changed: #0451A5" } }, { @@ -176,9 +176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "markup.inserted: #B5CEA8", "light_vs": "markup.inserted: #098658", "hc_black": "markup.inserted: #B5CEA8", - "dark_plus_experimental": "markup.inserted: #B5CEA8", + "dark_modern": "markup.inserted: #B5CEA8", "hc_light": "markup.inserted: #096D48", - "light_plus_experimental": "markup.inserted: #098658" + "light_modern": "markup.inserted: #098658" } }, { @@ -204,9 +204,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/Dockerfile.json b/extensions/vscode-colorize-tests/test/colorize-results/Dockerfile.json index 7d866d2d6b6..3a43a8a39fb 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/Dockerfile.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/Dockerfile.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/basic_java.json b/extensions/vscode-colorize-tests/test/colorize-results/basic_java.json index 1b0318071eb..71a5a901280 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/basic_java.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/basic_java.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "storage.modifier.package.java: #D4D4D4", "light_vs": "storage.modifier.package.java: #000000", "hc_black": "storage.modifier.package.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.package.java: #D4D4D4", + "dark_modern": "storage.modifier.package.java: #D4D4D4", "hc_light": "storage.modifier.package.java: #000000", - "light_plus_experimental": "storage.modifier.package.java: #000000" + "light_modern": "storage.modifier.package.java: #000000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "storage.modifier.import.java: #D4D4D4", "light_vs": "storage.modifier.import.java: #000000", "hc_black": "storage.modifier.import.java: #D4D4D4", - "dark_plus_experimental": "storage.modifier.import.java: #D4D4D4", + "dark_modern": "storage.modifier.import.java: #D4D4D4", "hc_light": "storage.modifier.import.java: #000000", - "light_plus_experimental": "storage.modifier.import.java: #000000" + "light_modern": "storage.modifier.import.java: #000000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "variable.language.wildcard.java: #D4D4D4", "light_vs": "variable.language.wildcard.java: #000000", "hc_black": "variable.language.wildcard.java: #D4D4D4", - "dark_plus_experimental": "variable.language.wildcard.java: #D4D4D4", + "dark_modern": "variable.language.wildcard.java: #D4D4D4", "hc_light": "variable.language.wildcard.java: #000000", - "light_plus_experimental": "variable.language.wildcard.java: #000000" + "light_modern": "variable.language.wildcard.java: #000000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.java: #4EC9B0", - "dark_plus_experimental": "storage.type.java: #4EC9B0", + "dark_modern": "storage.type.java: #4EC9B0", "hc_light": "storage.type.java: #185E73", - "light_plus_experimental": "storage.type.java: #267F99" + "light_modern": "storage.type.java: #267F99" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -666,9 +666,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.annotation.java: #4EC9B0", - "dark_plus_experimental": "storage.type.annotation.java: #4EC9B0", + "dark_modern": "storage.type.annotation.java: #4EC9B0", "hc_light": "storage.type.annotation.java: #185E73", - "light_plus_experimental": "storage.type.annotation.java: #267F99" + "light_modern": "storage.type.annotation.java: #267F99" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.annotation.java: #4EC9B0", - "dark_plus_experimental": "storage.type.annotation.java: #4EC9B0", + "dark_modern": "storage.type.annotation.java: #4EC9B0", "hc_light": "storage.type.annotation.java: #185E73", - "light_plus_experimental": "storage.type.annotation.java: #267F99" + "light_modern": "storage.type.annotation.java: #267F99" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.java: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.java: #4EC9B0", + "dark_modern": "storage.type.primitive.java: #4EC9B0", "hc_light": "storage.type.primitive.java: #185E73", - "light_plus_experimental": "storage.type.primitive.java: #267F99" + "light_modern": "storage.type.primitive.java: #267F99" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.java: #4EC9B0", - "dark_plus_experimental": "storage.type.java: #4EC9B0", + "dark_modern": "storage.type.java: #4EC9B0", "hc_light": "storage.type.java: #185E73", - "light_plus_experimental": "storage.type.java: #267F99" + "light_modern": "storage.type.java: #267F99" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.generic.java: #4EC9B0", - "dark_plus_experimental": "storage.type.generic.java: #4EC9B0", + "dark_modern": "storage.type.generic.java: #4EC9B0", "hc_light": "storage.type.generic.java: #185E73", - "light_plus_experimental": "storage.type.generic.java: #267F99" + "light_modern": "storage.type.generic.java: #267F99" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/git-rebase-todo.json b/extensions/vscode-colorize-tests/test/colorize-results/git-rebase-todo.json index e292568d7e6..0ee7e4c7e7b 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/git-rebase-todo.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/git-rebase-todo.json @@ -8,9 +8,9 @@ "dark_vs": "support.function.git-rebase: #9CDCFE", "light_vs": "support.function.git-rebase: #0451A5", "hc_black": "support.function.git-rebase: #D4D4D4", - "dark_plus_experimental": "support.function.git-rebase: #9CDCFE", + "dark_modern": "support.function.git-rebase: #9CDCFE", "hc_light": "support.function.git-rebase: #0451A5", - "light_plus_experimental": "support.function.git-rebase: #0451A5" + "light_modern": "support.function.git-rebase: #0451A5" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "constant.sha.git-rebase: #B5CEA8", "light_vs": "constant.sha.git-rebase: #098658", "hc_black": "constant.sha.git-rebase: #B5CEA8", - "dark_plus_experimental": "constant.sha.git-rebase: #B5CEA8", + "dark_modern": "constant.sha.git-rebase: #B5CEA8", "hc_light": "constant.sha.git-rebase: #096D48", - "light_plus_experimental": "constant.sha.git-rebase: #098658" + "light_modern": "constant.sha.git-rebase: #098658" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "support.function.git-rebase: #9CDCFE", "light_vs": "support.function.git-rebase: #0451A5", "hc_black": "support.function.git-rebase: #D4D4D4", - "dark_plus_experimental": "support.function.git-rebase: #9CDCFE", + "dark_modern": "support.function.git-rebase: #9CDCFE", "hc_light": "support.function.git-rebase: #0451A5", - "light_plus_experimental": "support.function.git-rebase: #0451A5" + "light_modern": "support.function.git-rebase: #0451A5" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "constant.sha.git-rebase: #B5CEA8", "light_vs": "constant.sha.git-rebase: #098658", "hc_black": "constant.sha.git-rebase: #B5CEA8", - "dark_plus_experimental": "constant.sha.git-rebase: #B5CEA8", + "dark_modern": "constant.sha.git-rebase: #B5CEA8", "hc_light": "constant.sha.git-rebase: #096D48", - "light_plus_experimental": "constant.sha.git-rebase: #098658" + "light_modern": "constant.sha.git-rebase: #098658" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "support.function.git-rebase: #9CDCFE", "light_vs": "support.function.git-rebase: #0451A5", "hc_black": "support.function.git-rebase: #D4D4D4", - "dark_plus_experimental": "support.function.git-rebase: #9CDCFE", + "dark_modern": "support.function.git-rebase: #9CDCFE", "hc_light": "support.function.git-rebase: #0451A5", - "light_plus_experimental": "support.function.git-rebase: #0451A5" + "light_modern": "support.function.git-rebase: #0451A5" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "constant.sha.git-rebase: #B5CEA8", "light_vs": "constant.sha.git-rebase: #098658", "hc_black": "constant.sha.git-rebase: #B5CEA8", - "dark_plus_experimental": "constant.sha.git-rebase: #B5CEA8", + "dark_modern": "constant.sha.git-rebase: #B5CEA8", "hc_light": "constant.sha.git-rebase: #096D48", - "light_plus_experimental": "constant.sha.git-rebase: #098658" + "light_modern": "constant.sha.git-rebase: #098658" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "support.function.git-rebase: #9CDCFE", "light_vs": "support.function.git-rebase: #0451A5", "hc_black": "support.function.git-rebase: #D4D4D4", - "dark_plus_experimental": "support.function.git-rebase: #9CDCFE", + "dark_modern": "support.function.git-rebase: #9CDCFE", "hc_light": "support.function.git-rebase: #0451A5", - "light_plus_experimental": "support.function.git-rebase: #0451A5" + "light_modern": "support.function.git-rebase: #0451A5" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "constant.sha.git-rebase: #B5CEA8", "light_vs": "constant.sha.git-rebase: #098658", "hc_black": "constant.sha.git-rebase: #B5CEA8", - "dark_plus_experimental": "constant.sha.git-rebase: #B5CEA8", + "dark_modern": "constant.sha.git-rebase: #B5CEA8", "hc_light": "constant.sha.git-rebase: #096D48", - "light_plus_experimental": "constant.sha.git-rebase: #098658" + "light_modern": "constant.sha.git-rebase: #098658" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "support.function.git-rebase: #9CDCFE", "light_vs": "support.function.git-rebase: #0451A5", "hc_black": "support.function.git-rebase: #D4D4D4", - "dark_plus_experimental": "support.function.git-rebase: #9CDCFE", + "dark_modern": "support.function.git-rebase: #9CDCFE", "hc_light": "support.function.git-rebase: #0451A5", - "light_plus_experimental": "support.function.git-rebase: #0451A5" + "light_modern": "support.function.git-rebase: #0451A5" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "constant.sha.git-rebase: #B5CEA8", "light_vs": "constant.sha.git-rebase: #098658", "hc_black": "constant.sha.git-rebase: #B5CEA8", - "dark_plus_experimental": "constant.sha.git-rebase: #B5CEA8", + "dark_modern": "constant.sha.git-rebase: #B5CEA8", "hc_light": "constant.sha.git-rebase: #096D48", - "light_plus_experimental": "constant.sha.git-rebase: #098658" + "light_modern": "constant.sha.git-rebase: #098658" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "support.function.git-rebase: #9CDCFE", "light_vs": "support.function.git-rebase: #0451A5", "hc_black": "support.function.git-rebase: #D4D4D4", - "dark_plus_experimental": "support.function.git-rebase: #9CDCFE", + "dark_modern": "support.function.git-rebase: #9CDCFE", "hc_light": "support.function.git-rebase: #0451A5", - "light_plus_experimental": "support.function.git-rebase: #0451A5" + "light_modern": "support.function.git-rebase: #0451A5" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "constant.sha.git-rebase: #B5CEA8", "light_vs": "constant.sha.git-rebase: #098658", "hc_black": "constant.sha.git-rebase: #B5CEA8", - "dark_plus_experimental": "constant.sha.git-rebase: #B5CEA8", + "dark_modern": "constant.sha.git-rebase: #B5CEA8", "hc_light": "constant.sha.git-rebase: #096D48", - "light_plus_experimental": "constant.sha.git-rebase: #098658" + "light_modern": "constant.sha.git-rebase: #098658" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "support.function.git-rebase: #9CDCFE", "light_vs": "support.function.git-rebase: #0451A5", "hc_black": "support.function.git-rebase: #D4D4D4", - "dark_plus_experimental": "support.function.git-rebase: #9CDCFE", + "dark_modern": "support.function.git-rebase: #9CDCFE", "hc_light": "support.function.git-rebase: #0451A5", - "light_plus_experimental": "support.function.git-rebase: #0451A5" + "light_modern": "support.function.git-rebase: #0451A5" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "constant.sha.git-rebase: #B5CEA8", "light_vs": "constant.sha.git-rebase: #098658", "hc_black": "constant.sha.git-rebase: #B5CEA8", - "dark_plus_experimental": "constant.sha.git-rebase: #B5CEA8", + "dark_modern": "constant.sha.git-rebase: #B5CEA8", "hc_light": "constant.sha.git-rebase: #096D48", - "light_plus_experimental": "constant.sha.git-rebase: #098658" + "light_modern": "constant.sha.git-rebase: #098658" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/issue-1550_yaml.json b/extensions/vscode-colorize-tests/test/colorize-results/issue-1550_yaml.json index 1cbe9e0ffb5..dac84162b3c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/issue-1550_yaml.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/issue-1550_yaml.json @@ -8,9 +8,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/issue-28354_php.json b/extensions/vscode-colorize-tests/test/colorize-results/issue-28354_php.json index c66c80829e3..77914003b54 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/issue-28354_php.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/issue-28354_php.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "punctuation.section.embedded.begin.php: #569CD6", "light_vs": "punctuation.section.embedded.begin.php: #800000", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded.begin.php: #569CD6", + "dark_modern": "punctuation.section.embedded.begin.php: #569CD6", "hc_light": "punctuation.section.embedded.begin.php: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded.begin.php: #800000" + "light_modern": "punctuation.section.embedded.begin.php: #800000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -162,9 +162,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -176,9 +176,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -232,9 +232,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -246,9 +246,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -316,9 +316,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -344,9 +344,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -358,9 +358,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -428,9 +428,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -470,9 +470,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -526,9 +526,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "punctuation.section.embedded.end.php: #569CD6", "light_vs": "punctuation.section.embedded.end.php: #800000", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded.end.php: #569CD6", + "dark_modern": "punctuation.section.embedded.end.php: #569CD6", "hc_light": "punctuation.section.embedded.end.php: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded.end.php: #800000" + "light_modern": "punctuation.section.embedded.end.php: #800000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "punctuation.section.embedded.end.php: #569CD6", "light_vs": "punctuation.section.embedded.end.php: #800000", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded.end.php: #569CD6", + "dark_modern": "punctuation.section.embedded.end.php: #569CD6", "hc_light": "punctuation.section.embedded.end.php: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded.end.php: #800000" + "light_modern": "punctuation.section.embedded.end.php: #800000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/issue-4008_yaml.json b/extensions/vscode-colorize-tests/test/colorize-results/issue-4008_yaml.json index 26331392500..e1aa82e9ca3 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/issue-4008_yaml.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/issue-4008_yaml.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/issue-6303_yaml.json b/extensions/vscode-colorize-tests/test/colorize-results/issue-6303_yaml.json index 578b7f38f9b..2066b677e2c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/issue-6303_yaml.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/issue-6303_yaml.json @@ -8,9 +8,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.yaml: #0F4A85", - "light_plus_experimental": "string.quoted.single.yaml: #0000FF" + "light_modern": "string.quoted.single.yaml: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/issue-76997_php.json b/extensions/vscode-colorize-tests/test/colorize-results/issue-76997_php.json index 12846f594f6..60bff0cddfc 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/issue-76997_php.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/issue-76997_php.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/makefile.json b/extensions/vscode-colorize-tests/test/colorize-results/makefile.json index a06a8f18c88..b03ac95a7f9 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/makefile.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/makefile.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -274,9 +274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -288,9 +288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -330,9 +330,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -344,9 +344,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -358,9 +358,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -666,9 +666,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -680,9 +680,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -778,9 +778,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -792,9 +792,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4922,9 +4922,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4936,9 +4936,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4950,9 +4950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4964,9 +4964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4978,9 +4978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4992,9 +4992,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5006,9 +5006,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/md-math_md.json b/extensions/vscode-colorize-tests/test/colorize-results/md-math_md.json index a811aa95d1d..1f650e7f45e 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/md-math_md.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/md-math_md.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -120,9 +120,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -134,9 +134,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -190,9 +190,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -274,9 +274,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -288,9 +288,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -344,9 +344,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -414,9 +414,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -470,9 +470,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -512,9 +512,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -610,9 +610,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -624,9 +624,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -652,9 +652,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -708,9 +708,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -736,9 +736,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -750,9 +750,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -778,9 +778,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -792,9 +792,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -806,9 +806,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -848,9 +848,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -862,9 +862,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -932,9 +932,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -946,9 +946,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4922,9 +4922,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4936,9 +4936,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4950,9 +4950,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4964,9 +4964,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4978,9 +4978,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4992,9 +4992,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5006,9 +5006,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5020,9 +5020,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5034,9 +5034,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5048,9 +5048,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5062,9 +5062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5076,9 +5076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5090,9 +5090,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5104,9 +5104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5118,9 +5118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5132,9 +5132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5146,9 +5146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5160,9 +5160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5174,9 +5174,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5188,9 +5188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5202,9 +5202,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5216,9 +5216,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5230,9 +5230,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5244,9 +5244,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -5258,9 +5258,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5272,9 +5272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5286,9 +5286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5300,9 +5300,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -5314,9 +5314,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -5328,9 +5328,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -5342,9 +5342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5356,9 +5356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5370,9 +5370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5384,9 +5384,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5398,9 +5398,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5412,9 +5412,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5426,9 +5426,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5440,9 +5440,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5454,9 +5454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5468,9 +5468,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5482,9 +5482,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5496,9 +5496,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5510,9 +5510,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5524,9 +5524,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5538,9 +5538,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5552,9 +5552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5566,9 +5566,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5580,9 +5580,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5594,9 +5594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5608,9 +5608,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5622,9 +5622,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5636,9 +5636,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5650,9 +5650,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5664,9 +5664,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5678,9 +5678,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5692,9 +5692,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5706,9 +5706,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5720,9 +5720,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5734,9 +5734,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5748,9 +5748,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5762,9 +5762,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5776,9 +5776,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5790,9 +5790,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5804,9 +5804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5818,9 +5818,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5832,9 +5832,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -5846,9 +5846,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -5860,9 +5860,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -5874,9 +5874,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5888,9 +5888,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5902,9 +5902,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5916,9 +5916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5930,9 +5930,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5944,9 +5944,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5958,9 +5958,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5972,9 +5972,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -5986,9 +5986,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6000,9 +6000,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6014,9 +6014,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6028,9 +6028,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6042,9 +6042,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6056,9 +6056,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6070,9 +6070,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6084,9 +6084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6098,9 +6098,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6112,9 +6112,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6126,9 +6126,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6140,9 +6140,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6154,9 +6154,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6168,9 +6168,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6182,9 +6182,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6196,9 +6196,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6210,9 +6210,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6224,9 +6224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6238,9 +6238,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6252,9 +6252,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6266,9 +6266,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6280,9 +6280,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6294,9 +6294,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6308,9 +6308,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6322,9 +6322,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6336,9 +6336,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6350,9 +6350,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6364,9 +6364,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6378,9 +6378,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6392,9 +6392,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6406,9 +6406,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6420,9 +6420,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6434,9 +6434,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6448,9 +6448,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6462,9 +6462,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6476,9 +6476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6490,9 +6490,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6504,9 +6504,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6518,9 +6518,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6532,9 +6532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6546,9 +6546,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6560,9 +6560,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6574,9 +6574,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6588,9 +6588,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6602,9 +6602,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6616,9 +6616,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6630,9 +6630,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6644,9 +6644,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6658,9 +6658,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6672,9 +6672,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6686,9 +6686,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6700,9 +6700,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6714,9 +6714,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6728,9 +6728,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6742,9 +6742,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6756,9 +6756,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6770,9 +6770,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6784,9 +6784,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6798,9 +6798,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6812,9 +6812,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6826,9 +6826,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6840,9 +6840,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6854,9 +6854,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6868,9 +6868,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6882,9 +6882,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -6896,9 +6896,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6910,9 +6910,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6924,9 +6924,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6938,9 +6938,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6952,9 +6952,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6966,9 +6966,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6980,9 +6980,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -6994,9 +6994,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7008,9 +7008,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7022,9 +7022,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7036,9 +7036,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7050,9 +7050,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7064,9 +7064,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7078,9 +7078,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7092,9 +7092,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7106,9 +7106,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7120,9 +7120,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7134,9 +7134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7148,9 +7148,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7162,9 +7162,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7176,9 +7176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7190,9 +7190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7204,9 +7204,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7218,9 +7218,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7232,9 +7232,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7246,9 +7246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7260,9 +7260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7274,9 +7274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7288,9 +7288,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7302,9 +7302,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7316,9 +7316,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7330,9 +7330,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7344,9 +7344,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7358,9 +7358,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7372,9 +7372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7386,9 +7386,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7400,9 +7400,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7414,9 +7414,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7428,9 +7428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7442,9 +7442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7456,9 +7456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7470,9 +7470,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7484,9 +7484,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7498,9 +7498,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7512,9 +7512,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7526,9 +7526,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7540,9 +7540,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7554,9 +7554,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7568,9 +7568,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7582,9 +7582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7596,9 +7596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7610,9 +7610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7624,9 +7624,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7638,9 +7638,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7652,9 +7652,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7666,9 +7666,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7680,9 +7680,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7694,9 +7694,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7708,9 +7708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7722,9 +7722,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7736,9 +7736,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7750,9 +7750,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7764,9 +7764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7778,9 +7778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7792,9 +7792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7806,9 +7806,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7820,9 +7820,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7834,9 +7834,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7848,9 +7848,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7862,9 +7862,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7876,9 +7876,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7890,9 +7890,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7904,9 +7904,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -7918,9 +7918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7932,9 +7932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7946,9 +7946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7960,9 +7960,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7974,9 +7974,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -7988,9 +7988,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -8002,9 +8002,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8016,9 +8016,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8030,9 +8030,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8044,9 +8044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8058,9 +8058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8072,9 +8072,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -8086,9 +8086,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -8100,9 +8100,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -8114,9 +8114,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8128,9 +8128,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -8142,9 +8142,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -8156,9 +8156,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8170,9 +8170,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -8184,9 +8184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8198,9 +8198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8212,9 +8212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8226,9 +8226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8240,9 +8240,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8254,9 +8254,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8268,9 +8268,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8282,9 +8282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8296,9 +8296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8310,9 +8310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8324,9 +8324,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8338,9 +8338,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8352,9 +8352,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8366,9 +8366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8380,9 +8380,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -8394,9 +8394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-13777_go.json b/extensions/vscode-colorize-tests/test/colorize-results/test-13777_go.json index 0fad4d65894..dbbcbe73add 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-13777_go.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-13777_go.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-173216_sh.json b/extensions/vscode-colorize-tests/test/colorize-results/test-173216_sh.json index b4506179a82..c24aadf2ed9 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-173216_sh.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-173216_sh.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,107 +22,107 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { "c": "declare", - "t": "source.shell meta.statement.shell meta.command.shell meta.command_name.shell storage.modifier.declare.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell storage.modifier.declare.shell", "r": { "dark_plus": "storage.modifier: #569CD6", "light_plus": "storage.modifier: #0000FF", "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "-", - "t": "source.shell meta.statement.shell meta.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": "A", - "t": "source.shell meta.statement.shell meta.command.shell string.unquoted.argument constant.other.option", + "t": "source.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument constant.other.option", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "juices=", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "(", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,65 +204,65 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell keyword.operator.assignment.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell", "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_plus_experimental": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_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.shell meta.statement.shell meta.expression.assignment.shell string.quoted.single.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "Apple Juice", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.quoted.single.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.single entity.name.function.call entity.name.command", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "'", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.quoted.single.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell string.quoted.single.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -330,9 +330,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -344,65 +344,65 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell keyword.operator.assignment.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell", "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_plus_experimental": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_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.shell meta.statement.shell meta.expression.assignment.shell string.quoted.single.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "Orange Juice", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.quoted.single.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.single entity.name.function.call entity.name.command", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "'", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.quoted.single.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell string.quoted.single.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -442,163 +442,163 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { "c": "echo", - "t": "source.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "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_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "{", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "juices", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion variable.other.normal.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "[", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.array.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion punctuation.section.array.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "'apple'", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "]", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.array.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion punctuation.section.array.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "}", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.end.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "\"", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-173224_sh.json b/extensions/vscode-colorize-tests/test/colorize-results/test-173224_sh.json index cc9fa142543..2009a29baad 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-173224_sh.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-173224_sh.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -106,9 +106,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-173336_sh.json b/extensions/vscode-colorize-tests/test/colorize-results/test-173336_sh.json index 55f5a27eb5f..198ace22005 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-173336_sh.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-173336_sh.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,121 +260,121 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.definition.variable.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.definition.variable.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "{", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "#", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell keyword.operator.expansion.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell meta.parameter-expansion keyword.operator.expansion.shell", "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_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { "c": "cmd", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell meta.parameter-expansion variable.other.normal.shell", "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "[", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.section.array.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell meta.parameter-expansion punctuation.section.array.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "@", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell meta.parameter-expansion", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "]", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.section.array.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell meta.parameter-expansion punctuation.section.array.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "}", - "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.section.bracket.curly.variable.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.arithmetic.shell punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -456,135 +456,135 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.continuation string.quoted.double entity.name.command punctuation.definition.variable.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command punctuation.definition.variable.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "{", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.continuation string.quoted.double entity.name.command punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "cmd", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.continuation string.quoted.double entity.name.command", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command meta.parameter-expansion variable.other.normal.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "[", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.continuation string.quoted.double entity.name.command punctuation.section.array.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command meta.parameter-expansion punctuation.section.array.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "@", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.continuation string.quoted.double entity.name.command", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command meta.parameter-expansion", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "]", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.continuation string.quoted.double entity.name.command punctuation.section.array.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command meta.parameter-expansion punctuation.section.array.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "}", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.command_name.continuation string.quoted.double entity.name.command punctuation.section.bracket.curly.variable.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell punctuation.definition.string.end.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell string.quoted.double.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -596,219 +596,219 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "printf", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "'", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.single.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.single.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "%s", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.single.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.single.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "'", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.single.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.single.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "{", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "cmd", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion variable.other.normal.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "[", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.array.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion punctuation.section.array.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "@", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "]", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.array.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion punctuation.section.array.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "}", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -820,9 +820,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-23630_cpp.json b/extensions/vscode-colorize-tests/test/colorize-results/test-23630_cpp.json index 38f4610efcd..79e4727a417 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-23630_cpp.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-23630_cpp.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -106,9 +106,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-23850_cpp.json b/extensions/vscode-colorize-tests/test/colorize-results/test-23850_cpp.json index b618cd3383d..a5e6addc3b1 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-23850_cpp.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-23850_cpp.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -92,9 +92,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-33886_md.json b/extensions/vscode-colorize-tests/test/colorize-results/test-33886_md.json index a011190e871..645a855fc16 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-33886_md.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-33886_md.json @@ -8,9 +8,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-4287_pug.json b/extensions/vscode-colorize-tests/test/colorize-results/test-4287_pug.json index 0b4101aa160..0dc90cecce7 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-4287_pug.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-4287_pug.json @@ -1,16 +1,16 @@ [ { "c": ".ssdsd", - "t": "text.pug entity.other.attribute-name.class.pug", + "t": "text.pug meta.selector.css entity.other.attribute-name.class.css.pug", "r": { - "dark_plus": "entity.other.attribute-name: #9CDCFE", - "light_plus": "entity.other.attribute-name: #E50000", - "dark_vs": "entity.other.attribute-name: #9CDCFE", - "light_vs": "entity.other.attribute-name: #E50000", - "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", - "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "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" } }, { @@ -22,9 +22,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.comment.buffered.block.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.comment.buffered.block.pug: #0F4A85", - "light_plus_experimental": "string.comment.buffered.block.pug: #0000FF" + "light_modern": "string.comment.buffered.block.pug: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-6611_rs.json b/extensions/vscode-colorize-tests/test/colorize-results/test-6611_rs.json index 4e36a69f4e3..9897e09a654 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-6611_rs.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-6611_rs.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -484,9 +484,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -988,9 +988,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-7115_xml.json b/extensions/vscode-colorize-tests/test/colorize-results/test-7115_xml.json index e19207a8c79..3c4f2e0571d 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-7115_xml.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-7115_xml.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -414,9 +414,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -428,9 +428,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -736,9 +736,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-78769_cpp.json b/extensions/vscode-colorize-tests/test/colorize-results/test-78769_cpp.json index 384ab0f8b35..16438692b78 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-78769_cpp.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-78769_cpp.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -92,9 +92,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -134,9 +134,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -162,9 +162,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -176,9 +176,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -204,9 +204,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -316,9 +316,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -358,9 +358,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -372,9 +372,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -386,9 +386,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -400,9 +400,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -414,9 +414,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -428,9 +428,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -484,9 +484,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -498,9 +498,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -540,9 +540,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -554,9 +554,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -596,9 +596,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -610,9 +610,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -624,9 +624,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -652,9 +652,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -666,9 +666,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -680,9 +680,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -708,9 +708,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -722,9 +722,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -736,9 +736,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -750,9 +750,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -778,9 +778,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -792,9 +792,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -806,9 +806,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -820,9 +820,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -834,9 +834,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -848,9 +848,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -862,9 +862,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -876,9 +876,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -890,9 +890,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -904,9 +904,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -918,9 +918,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -946,9 +946,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -960,9 +960,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -974,9 +974,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.scope-resolution: #4EC9B0", - "dark_plus_experimental": "entity.name.scope-resolution: #4EC9B0", + "dark_modern": "entity.name.scope-resolution: #4EC9B0", "hc_light": "entity.name.scope-resolution: #185E73", - "light_plus_experimental": "entity.name.scope-resolution: #267F99" + "light_modern": "entity.name.scope-resolution: #267F99" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-80644_cpp.json b/extensions/vscode-colorize-tests/test/colorize-results/test-80644_cpp.json index 5828221dc84..c3eebff0ef4 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-80644_cpp.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-80644_cpp.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.scope-resolution: #4EC9B0", - "dark_plus_experimental": "entity.name.scope-resolution: #4EC9B0", + "dark_modern": "entity.name.scope-resolution: #4EC9B0", "hc_light": "entity.name.scope-resolution: #185E73", - "light_plus_experimental": "entity.name.scope-resolution: #267F99" + "light_modern": "entity.name.scope-resolution: #267F99" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-brackets_tsx.json b/extensions/vscode-colorize-tests/test/colorize-results/test-brackets_tsx.json index 00234033ef7..2b5d45b6adb 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-brackets_tsx.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-brackets_tsx.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file 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 8e79bc84869..859e808c155 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 @@ -8,9 +8,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -22,9 +22,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -680,9 +680,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file 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 48d43e55e0b..f5cddc27d06 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 @@ -8,9 +8,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -22,9 +22,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -652,9 +652,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-embedding_html.json b/extensions/vscode-colorize-tests/test/colorize-results/test-embedding_html.json index fea9685a5b7..5e41ff044b4 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-embedding_html.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-embedding_html.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -64,9 +64,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -92,9 +92,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -372,9 +372,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -652,9 +652,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -666,9 +666,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.html: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -736,9 +736,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.html: #0F4A85", - "light_plus_experimental": "string.unquoted.html: #0000FF" + "light_modern": "string.unquoted.html: #0000FF" } }, { @@ -750,9 +750,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -778,9 +778,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -806,9 +806,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -890,9 +890,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -904,9 +904,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -918,9 +918,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -946,9 +946,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.html: #0F4A85", - "light_plus_experimental": "string.unquoted.html: #0000FF" + "light_modern": "string.unquoted.html: #0000FF" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/python/test/colorize-results/test-freeze-56377_py.json b/extensions/vscode-colorize-tests/test/colorize-results/test-freeze-56377_py.json similarity index 62% rename from extensions/python/test/colorize-results/test-freeze-56377_py.json rename to extensions/vscode-colorize-tests/test/colorize-results/test-freeze-56377_py.json index 3eb0f85a2a1..432ecde8cce 100644 --- a/extensions/python/test/colorize-results/test-freeze-56377_py.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-freeze-56377_py.json @@ -7,7 +7,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -18,7 +21,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -29,7 +35,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -40,7 +49,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -51,7 +63,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -62,7 +77,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -73,7 +91,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -84,7 +105,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -95,7 +119,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -106,7 +133,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -117,7 +147,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -128,7 +161,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -139,7 +175,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -150,7 +189,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -161,7 +203,10 @@ "light_plus": "support.type: #267F99", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.type: #4EC9B0" + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { @@ -172,7 +217,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -183,7 +231,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -194,7 +245,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -205,7 +259,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -216,7 +273,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -227,7 +287,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -238,7 +301,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -249,7 +315,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -260,7 +329,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -271,7 +343,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -282,7 +357,10 @@ "light_plus": "variable.language: #0000FF", "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable.language: #569CD6", + "hc_light": "variable.language: #0F4A85", + "light_modern": "variable.language: #0000FF" } }, { @@ -293,7 +371,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -304,7 +385,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -315,7 +399,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -326,7 +413,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -337,7 +427,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -348,7 +441,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -359,7 +455,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -370,7 +469,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -381,7 +483,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -392,7 +497,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -403,7 +511,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -414,7 +525,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -425,7 +539,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -436,7 +553,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -447,7 +567,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -458,7 +581,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -469,7 +595,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -480,7 +609,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -491,7 +623,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -502,7 +637,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -513,7 +651,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -524,7 +665,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -535,7 +679,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -546,7 +693,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -557,7 +707,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -568,7 +721,10 @@ "light_plus": "constant.character.escape: #EE0000", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "constant.character: #569CD6" + "hc_black": "constant.character: #569CD6", + "dark_modern": "constant.character.escape: #D7BA7D", + "hc_light": "constant.character.escape: #EE0000", + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -579,7 +735,10 @@ "light_plus": "constant.character: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "constant.character: #569CD6" + "hc_black": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", + "hc_light": "constant.character: #0F4A85", + "light_modern": "constant.character: #0000FF" } }, { @@ -590,7 +749,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -601,7 +763,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -612,7 +777,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -623,7 +791,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -634,7 +805,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -645,7 +819,10 @@ "light_plus": "invalid: #CD3131", "dark_vs": "invalid: #F44747", "light_vs": "invalid: #CD3131", - "hc_black": "invalid: #F44747" + "hc_black": "invalid: #F44747", + "dark_modern": "invalid: #F44747", + "hc_light": "invalid: #B5200D", + "light_modern": "invalid: #CD3131" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-freeze-56476_ps1.json b/extensions/vscode-colorize-tests/test/colorize-results/test-freeze-56476_ps1.json index f0ecf0249e1..50919dc27de 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-freeze-56476_ps1.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-freeze-56476_ps1.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-function-inv_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-function-inv_ts.json index c94617a7bdd..a45de974884 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-function-inv_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-function-inv_ts.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "keyword.operator.new: #569CD6", - "dark_plus_experimental": "keyword.operator.new: #569CD6", + "dark_modern": "keyword.operator.new: #569CD6", "hc_light": "keyword.operator.new: #0F4A85", - "light_plus_experimental": "keyword.operator.new: #0000FF" + "light_modern": "keyword.operator.new: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-issue11_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-issue11_ts.json index a2ec95bc126..68717cc4939 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-issue11_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-issue11_ts.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -554,9 +554,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -694,9 +694,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -834,9 +834,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -904,9 +904,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -974,9 +974,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-issue5431_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-issue5431_ts.json index da5c1d12c28..c1988500c97 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-issue5431_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-issue5431_ts.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -372,9 +372,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -456,9 +456,9 @@ "dark_vs": "punctuation.definition.template-expression.begin: #569CD6", "light_vs": "punctuation.definition.template-expression.begin: #0000FF", "hc_black": "punctuation.definition.template-expression.begin: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.begin: #569CD6", + "dark_modern": "punctuation.definition.template-expression.begin: #569CD6", "hc_light": "punctuation.definition.template-expression.begin: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.begin: #0000FF" + "light_modern": "punctuation.definition.template-expression.begin: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -484,9 +484,9 @@ "dark_vs": "punctuation.definition.template-expression.end: #569CD6", "light_vs": "punctuation.definition.template-expression.end: #0000FF", "hc_black": "punctuation.definition.template-expression.end: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.end: #569CD6", + "dark_modern": "punctuation.definition.template-expression.end: #569CD6", "hc_light": "punctuation.definition.template-expression.end: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.end: #0000FF" + "light_modern": "punctuation.definition.template-expression.end: #0000FF" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -512,9 +512,9 @@ "dark_vs": "punctuation.definition.template-expression.begin: #569CD6", "light_vs": "punctuation.definition.template-expression.begin: #0000FF", "hc_black": "punctuation.definition.template-expression.begin: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.begin: #569CD6", + "dark_modern": "punctuation.definition.template-expression.begin: #569CD6", "hc_light": "punctuation.definition.template-expression.begin: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.begin: #0000FF" + "light_modern": "punctuation.definition.template-expression.begin: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "punctuation.definition.template-expression.end: #569CD6", "light_vs": "punctuation.definition.template-expression.end: #0000FF", "hc_black": "punctuation.definition.template-expression.end: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.end: #569CD6", + "dark_modern": "punctuation.definition.template-expression.end: #569CD6", "hc_light": "punctuation.definition.template-expression.end: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.end: #0000FF" + "light_modern": "punctuation.definition.template-expression.end: #0000FF" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-issue5465_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-issue5465_ts.json index 28b6177b810..4282511c5e8 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-issue5465_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-issue5465_ts.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -246,9 +246,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-issue5566_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-issue5566_ts.json index 0881c013846..177ea3c978c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-issue5566_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-issue5566_ts.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -372,9 +372,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -442,9 +442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -456,9 +456,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-jsdoc-multiline-type_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-jsdoc-multiline-type_ts.json index 726fd6cc039..130b3a92fcc 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-jsdoc-multiline-type_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-jsdoc-multiline-type_ts.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -92,9 +92,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -134,9 +134,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -162,9 +162,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -190,9 +190,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -218,9 +218,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -498,9 +498,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -512,9 +512,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -540,9 +540,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -568,9 +568,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -596,9 +596,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -624,9 +624,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -652,9 +652,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -680,9 +680,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -694,9 +694,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -722,9 +722,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -736,9 +736,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-keywords_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-keywords_ts.json index 6a8235404fb..a365ac3d098 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-keywords_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-keywords_ts.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "keyword.operator.new: #569CD6", - "dark_plus_experimental": "keyword.operator.new: #569CD6", + "dark_modern": "keyword.operator.new: #569CD6", "hc_light": "keyword.operator.new: #0F4A85", - "light_plus_experimental": "keyword.operator.new: #0000FF" + "light_modern": "keyword.operator.new: #0000FF" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-members_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-members_ts.json index 72780554932..748ac943c3c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-members_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-members_ts.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.other.inherited-class: #4EC9B0", - "dark_plus_experimental": "entity.other.inherited-class: #4EC9B0", + "dark_modern": "entity.other.inherited-class: #4EC9B0", "hc_light": "entity.other.inherited-class: #185E73", - "light_plus_experimental": "entity.other.inherited-class: #267F99" + "light_modern": "entity.other.inherited-class: #267F99" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-object-literals_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-object-literals_ts.json index e044831ffb9..1b1f1bb887c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-object-literals_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-object-literals_ts.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-regex_coffee.json b/extensions/vscode-colorize-tests/test/colorize-results/test-regex_coffee.json index 014e5d5723a..64a84418eb3 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-regex_coffee.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-regex_coffee.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "punctuation.definition.group.regexp: #CE9178", + "dark_modern": "punctuation.definition.group.regexp: #CE9178", "hc_light": "punctuation.definition.group.regexp: #D16969", - "light_plus_experimental": "punctuation.definition.group.regexp: #D16969" + "light_modern": "punctuation.definition.group.regexp: #D16969" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.character-class.regexp: #D16969", + "dark_modern": "constant.character.character-class.regexp: #D16969", "hc_light": "constant.character.character-class.regexp: #811F3F", - "light_plus_experimental": "constant.character.character-class.regexp: #811F3F" + "light_modern": "constant.character.character-class.regexp: #811F3F" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator.quantifier.regexp: #D7BA7D", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", "hc_light": "keyword.operator.quantifier.regexp: #000000", - "light_plus_experimental": "keyword.operator.quantifier.regexp: #000000" + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "punctuation.definition.group.regexp: #CE9178", + "dark_modern": "punctuation.definition.group.regexp: #CE9178", "hc_light": "punctuation.definition.group.regexp: #D16969", - "light_plus_experimental": "punctuation.definition.group.regexp: #D16969" + "light_modern": "punctuation.definition.group.regexp: #D16969" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -190,9 +190,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -260,9 +260,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -274,9 +274,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -470,9 +470,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -568,9 +568,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -582,9 +582,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -596,9 +596,9 @@ "dark_vs": "source.coffee.embedded: #9CDCFE", "light_vs": "source.coffee.embedded: #E50000", "hc_black": "source.coffee.embedded: #D4D4D4", - "dark_plus_experimental": "source.coffee.embedded: #9CDCFE", + "dark_modern": "source.coffee.embedded: #9CDCFE", "hc_light": "source.coffee.embedded: #264F78", - "light_plus_experimental": "source.coffee.embedded: #E50000" + "light_modern": "source.coffee.embedded: #E50000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -624,9 +624,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -638,9 +638,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-strings_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-strings_ts.json index 72cf1ed35ee..8c1a7f610c2 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-strings_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-strings_ts.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "punctuation.definition.template-expression.begin: #569CD6", "light_vs": "punctuation.definition.template-expression.begin: #0000FF", "hc_black": "punctuation.definition.template-expression.begin: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.begin: #569CD6", + "dark_modern": "punctuation.definition.template-expression.begin: #569CD6", "hc_light": "punctuation.definition.template-expression.begin: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.begin: #0000FF" + "light_modern": "punctuation.definition.template-expression.begin: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -148,9 +148,9 @@ "dark_vs": "punctuation.definition.template-expression.end: #569CD6", "light_vs": "punctuation.definition.template-expression.end: #0000FF", "hc_black": "punctuation.definition.template-expression.end: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.end: #569CD6", + "dark_modern": "punctuation.definition.template-expression.end: #569CD6", "hc_light": "punctuation.definition.template-expression.end: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.end: #0000FF" + "light_modern": "punctuation.definition.template-expression.end: #0000FF" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -274,9 +274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -288,9 +288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -414,9 +414,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -428,9 +428,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -442,9 +442,9 @@ "dark_vs": "punctuation.definition.template-expression.begin: #569CD6", "light_vs": "punctuation.definition.template-expression.begin: #0000FF", "hc_black": "punctuation.definition.template-expression.begin: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.begin: #569CD6", + "dark_modern": "punctuation.definition.template-expression.begin: #569CD6", "hc_light": "punctuation.definition.template-expression.begin: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.begin: #0000FF" + "light_modern": "punctuation.definition.template-expression.begin: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -484,9 +484,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "punctuation.definition.template-expression.end: #569CD6", "light_vs": "punctuation.definition.template-expression.end: #0000FF", "hc_black": "punctuation.definition.template-expression.end: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.end: #569CD6", + "dark_modern": "punctuation.definition.template-expression.end: #569CD6", "hc_light": "punctuation.definition.template-expression.end: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.end: #0000FF" + "light_modern": "punctuation.definition.template-expression.end: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -582,9 +582,9 @@ "dark_vs": "punctuation.definition.template-expression.begin: #569CD6", "light_vs": "punctuation.definition.template-expression.begin: #0000FF", "hc_black": "punctuation.definition.template-expression.begin: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.begin: #569CD6", + "dark_modern": "punctuation.definition.template-expression.begin: #569CD6", "hc_light": "punctuation.definition.template-expression.begin: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.begin: #0000FF" + "light_modern": "punctuation.definition.template-expression.begin: #0000FF" } }, { @@ -596,9 +596,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -624,9 +624,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -680,9 +680,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "punctuation.definition.template-expression.end: #569CD6", "light_vs": "punctuation.definition.template-expression.end: #0000FF", "hc_black": "punctuation.definition.template-expression.end: #569CD6", - "dark_plus_experimental": "punctuation.definition.template-expression.end: #569CD6", + "dark_modern": "punctuation.definition.template-expression.end: #569CD6", "hc_light": "punctuation.definition.template-expression.end: #0F4A85", - "light_plus_experimental": "punctuation.definition.template-expression.end: #0000FF" + "light_modern": "punctuation.definition.template-expression.end: #0000FF" } }, { @@ -708,9 +708,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-this_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test-this_ts.json index 9a33c4fa099..c138146ccbc 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-this_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-this_ts.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file 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 f2be50195dd..8819269523a 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 @@ -8,9 +8,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -22,9 +22,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "variable.css: #9CDCFE", "light_vs": "variable.css: #E50000", "hc_black": "variable.css: #D4D4D4", - "dark_plus_experimental": "variable.css: #9CDCFE", + "dark_modern": "variable.css: #9CDCFE", "hc_light": "variable.css: #264F78", - "light_plus_experimental": "variable.css: #E50000" + "light_modern": "variable.css: #E50000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "variable.css: #9CDCFE", "light_vs": "variable.css: #E50000", "hc_black": "variable.css: #D4D4D4", - "dark_plus_experimental": "variable.css: #9CDCFE", + "dark_modern": "variable.css: #9CDCFE", "hc_light": "variable.css: #264F78", - "light_plus_experimental": "variable.css: #E50000" + "light_modern": "variable.css: #E50000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test2_pl.json b/extensions/vscode-colorize-tests/test/colorize-results/test2_pl.json index ff5b189b970..7d7b3bbe3e5 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test2_pl.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test2_pl.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -50,9 +50,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -274,9 +274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -288,9 +288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -330,9 +330,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -344,9 +344,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -358,9 +358,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -596,9 +596,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -610,9 +610,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -848,9 +848,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test6916_js.json b/extensions/vscode-colorize-tests/test/colorize-results/test6916_js.json index ca3ff25e802..4fa10b042fa 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test6916_js.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test6916_js.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -470,9 +470,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_bat.json b/extensions/vscode-colorize-tests/test/colorize-results/test_bat.json index ac71a8e8157..db82378582b 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_bat.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_bat.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -680,9 +680,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_bib.json b/extensions/vscode-colorize-tests/test/colorize-results/test_bib.json index 5b38da10f3d..05b234780ac 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_bib.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_bib.json @@ -1,30 +1,44 @@ [ { - "c": "% a sample bibliography file", - "t": "text.bibtex comment.block.bibtex", + "c": "%", + "t": "text.bibtex comment.line.percentage.bibtex punctuation.definition.comment.bibtex", "r": { "dark_plus": "comment: #6A9955", "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" + } + }, + { + "c": " a sample bibliography file", + "t": "text.bibtex comment.line.percentage.bibtex", + "r": { + "dark_plus": "comment: #6A9955", + "light_plus": "comment: #008000", + "dark_vs": "comment: #6A9955", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { "c": "%", - "t": "text.bibtex comment.block.bibtex", + "t": "text.bibtex comment.line.percentage.bibtex punctuation.definition.comment.bibtex", "r": { "dark_plus": "comment: #6A9955", "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +50,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -50,9 +64,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -64,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -92,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -120,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -232,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -344,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -456,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +512,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -512,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -540,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -652,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +778,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -778,9 +792,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -792,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -820,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -848,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -960,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1072,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1184,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1240,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1240,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1268,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,37 +1380,65 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "% The authors mentioned here are almost, but not quite,", - "t": "text.bibtex comment.block.bibtex", + "c": "%", + "t": "text.bibtex comment.line.percentage.bibtex punctuation.definition.comment.bibtex", "r": { "dark_plus": "comment: #6A9955", "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { - "c": "% entirely unrelated to Matt Groening.", - "t": "text.bibtex comment.block.bibtex", + "c": " The authors mentioned here are almost, but not quite,", + "t": "text.bibtex comment.line.percentage.bibtex", "r": { "dark_plus": "comment: #6A9955", "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" + } + }, + { + "c": "%", + "t": "text.bibtex comment.line.percentage.bibtex punctuation.definition.comment.bibtex", + "r": { + "dark_plus": "comment: #6A9955", + "light_plus": "comment: #008000", + "dark_vs": "comment: #6A9955", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" + } + }, + { + "c": " entirely unrelated to Matt Groening.", + "t": "text.bibtex comment.line.percentage.bibtex", + "r": { + "dark_plus": "comment: #6A9955", + "light_plus": "comment: #008000", + "dark_vs": "comment: #6A9955", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_c.json b/extensions/vscode-colorize-tests/test/colorize-results/test_c.json index 2abe20e8149..fbbf86a1c70 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_c.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_c.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -120,9 +120,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -204,9 +204,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -708,9 +708,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -722,9 +722,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -820,9 +820,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -834,9 +834,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_cc.json b/extensions/vscode-colorize-tests/test/colorize-results/test_cc.json index edc7db81c65..19e19cec621 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_cc.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_cc.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -568,9 +568,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -582,9 +582,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -778,9 +778,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -792,9 +792,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -848,9 +848,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.scope-resolution: #4EC9B0", - "dark_plus_experimental": "entity.name.scope-resolution: #4EC9B0", + "dark_modern": "entity.name.scope-resolution: #4EC9B0", "hc_light": "entity.name.scope-resolution: #185E73", - "light_plus_experimental": "entity.name.scope-resolution: #267F99" + "light_modern": "entity.name.scope-resolution: #267F99" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "source.cpp keyword.operator.new: #C586C0", - "dark_plus_experimental": "source.cpp keyword.operator.new: #C586C0", + "dark_modern": "source.cpp keyword.operator.new: #C586C0", "hc_light": "source.cpp keyword.operator.new: #B5200D", - "light_plus_experimental": "source.cpp keyword.operator.new: #AF00DB" + "light_modern": "source.cpp keyword.operator.new: #AF00DB" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "meta.embedded.assembly: #CE9178", "light_vs": "meta.embedded.assembly: #A31515", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded.assembly: #CE9178", + "dark_modern": "meta.embedded.assembly: #CE9178", "hc_light": "meta.embedded.assembly: #0F4A85", - "light_plus_experimental": "meta.embedded.assembly: #A31515" + "light_modern": "meta.embedded.assembly: #A31515" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_clj.json b/extensions/vscode-colorize-tests/test/colorize-results/test_clj.json index 76b6aa9f573..23597c44358 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_clj.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_clj.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -974,9 +974,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -988,9 +988,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "storage: #569CD6", "light_vs": "storage: #0000FF", "hc_black": "storage: #569CD6", - "dark_plus_experimental": "storage: #569CD6", + "dark_modern": "storage: #569CD6", "hc_light": "storage: #0F4A85", - "light_plus_experimental": "storage: #0000FF" + "light_modern": "storage: #0000FF" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_coffee.json b/extensions/vscode-colorize-tests/test/colorize-results/test_coffee.json index 44754d67572..52efa92c373 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_coffee.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_coffee.json @@ -8,9 +8,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -22,9 +22,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -36,9 +36,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -50,9 +50,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -246,9 +246,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -400,9 +400,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -414,9 +414,9 @@ "dark_vs": "source.coffee.embedded: #9CDCFE", "light_vs": "source.coffee.embedded: #E50000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -428,9 +428,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -456,9 +456,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.other.inherited-class: #4EC9B0", - "dark_plus_experimental": "entity.other.inherited-class: #4EC9B0", + "dark_modern": "entity.other.inherited-class: #4EC9B0", "hc_light": "entity.other.inherited-class: #185E73", - "light_plus_experimental": "entity.other.inherited-class: #267F99" + "light_modern": "entity.other.inherited-class: #267F99" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -722,9 +722,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -736,9 +736,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -750,9 +750,9 @@ "dark_vs": "source.coffee.embedded: #9CDCFE", "light_vs": "source.coffee.embedded: #E50000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -764,9 +764,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -778,9 +778,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "keyword.operator.new: #569CD6", - "dark_plus_experimental": "keyword.operator.new: #569CD6", + "dark_modern": "keyword.operator.new: #569CD6", "hc_light": "keyword.operator.new: #0F4A85", - "light_plus_experimental": "keyword.operator.new: #0000FF" + "light_modern": "keyword.operator.new: #0000FF" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -918,9 +918,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -932,9 +932,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -946,9 +946,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "keyword.operator.new: #569CD6", - "dark_plus_experimental": "keyword.operator.new: #569CD6", + "dark_modern": "keyword.operator.new: #569CD6", "hc_light": "keyword.operator.new: #0F4A85", - "light_plus_experimental": "keyword.operator.new: #0000FF" + "light_modern": "keyword.operator.new: #0000FF" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "punctuation.definition.group.regexp: #CE9178", + "dark_modern": "punctuation.definition.group.regexp: #CE9178", "hc_light": "punctuation.definition.group.regexp: #D16969", - "light_plus_experimental": "punctuation.definition.group.regexp: #D16969" + "light_modern": "punctuation.definition.group.regexp: #D16969" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.character-class.regexp: #D16969", + "dark_modern": "constant.character.character-class.regexp: #D16969", "hc_light": "constant.character.character-class.regexp: #811F3F", - "light_plus_experimental": "constant.character.character-class.regexp: #811F3F" + "light_modern": "constant.character.character-class.regexp: #811F3F" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator.quantifier.regexp: #D7BA7D", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", "hc_light": "keyword.operator.quantifier.regexp: #000000", - "light_plus_experimental": "keyword.operator.quantifier.regexp: #000000" + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "punctuation.definition.group.regexp: #CE9178", + "dark_modern": "punctuation.definition.group.regexp: #CE9178", "hc_light": "punctuation.definition.group.regexp: #D16969", - "light_plus_experimental": "punctuation.definition.group.regexp: #D16969" + "light_modern": "punctuation.definition.group.regexp: #D16969" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "punctuation.definition.group.regexp: #CE9178", + "dark_modern": "punctuation.definition.group.regexp: #CE9178", "hc_light": "punctuation.definition.group.regexp: #D16969", - "light_plus_experimental": "punctuation.definition.group.regexp: #D16969" + "light_modern": "punctuation.definition.group.regexp: #D16969" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.character-class.regexp: #D16969", + "dark_modern": "constant.character.character-class.regexp: #D16969", "hc_light": "constant.character.character-class.regexp: #811F3F", - "light_plus_experimental": "constant.character.character-class.regexp: #811F3F" + "light_modern": "constant.character.character-class.regexp: #811F3F" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator.quantifier.regexp: #D7BA7D", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", "hc_light": "keyword.operator.quantifier.regexp: #000000", - "light_plus_experimental": "keyword.operator.quantifier.regexp: #000000" + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "punctuation.definition.group.regexp: #CE9178", + "dark_modern": "punctuation.definition.group.regexp: #CE9178", "hc_light": "punctuation.definition.group.regexp: #D16969", - "light_plus_experimental": "punctuation.definition.group.regexp: #D16969" + "light_modern": "punctuation.definition.group.regexp: #D16969" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control.anchor.regexp: #DCDCAA", + "dark_modern": "keyword.control.anchor.regexp: #DCDCAA", "hc_light": "keyword.control.anchor.regexp: #EE0000", - "light_plus_experimental": "keyword.control.anchor.regexp: #EE0000" + "light_modern": "keyword.control.anchor.regexp: #EE0000" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_cpp.json b/extensions/vscode-colorize-tests/test/colorize-results/test_cpp.json index 8e8c4af6701..652cc4824eb 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_cpp.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_cpp.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -64,9 +64,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword.other.using: #C586C0", - "dark_plus_experimental": "keyword.other.using: #C586C0", + "dark_modern": "keyword.other.using: #C586C0", "hc_light": "keyword.other.using: #B5200D", - "light_plus_experimental": "keyword.other.using: #AF00DB" + "light_modern": "keyword.other.using: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.namespace: #4EC9B0", - "dark_plus_experimental": "entity.name.namespace: #4EC9B0", + "dark_modern": "entity.name.namespace: #4EC9B0", "hc_light": "entity.name.namespace: #185E73", - "light_plus_experimental": "entity.name.namespace: #267F99" + "light_modern": "entity.name.namespace: #267F99" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -218,9 +218,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -232,9 +232,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -330,9 +330,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -344,9 +344,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.scope-resolution: #4EC9B0", - "dark_plus_experimental": "entity.name.scope-resolution: #4EC9B0", + "dark_modern": "entity.name.scope-resolution: #4EC9B0", "hc_light": "entity.name.scope-resolution: #185E73", - "light_plus_experimental": "entity.name.scope-resolution: #267F99" + "light_modern": "entity.name.scope-resolution: #267F99" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword.other.operator: #C586C0", - "dark_plus_experimental": "keyword.other.operator: #C586C0", + "dark_modern": "keyword.other.operator: #C586C0", "hc_light": "keyword.other.operator: #B5200D", - "light_plus_experimental": "keyword.other.operator: #AF00DB" + "light_modern": "keyword.other.operator: #AF00DB" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.operator.custom-literal: #DCDCAA", + "dark_modern": "entity.name.operator.custom-literal: #DCDCAA", "hc_light": "entity.name.operator.custom-literal: #5E2CBC", - "light_plus_experimental": "entity.name.operator.custom-literal: #795E26" + "light_modern": "entity.name.operator.custom-literal: #795E26" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.operator.custom-literal: #DCDCAA", + "dark_modern": "entity.name.operator.custom-literal: #DCDCAA", "hc_light": "entity.name.operator.custom-literal: #5E2CBC", - "light_plus_experimental": "entity.name.operator.custom-literal: #795E26" + "light_modern": "entity.name.operator.custom-literal: #795E26" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "meta.embedded.assembly: #CE9178", "light_vs": "meta.embedded.assembly: #A31515", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded.assembly: #CE9178", + "dark_modern": "meta.embedded.assembly: #CE9178", "hc_light": "meta.embedded.assembly: #0F4A85", - "light_plus_experimental": "meta.embedded.assembly: #A31515" + "light_modern": "meta.embedded.assembly: #A31515" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.scope-resolution: #4EC9B0", - "dark_plus_experimental": "entity.name.scope-resolution: #4EC9B0", + "dark_modern": "entity.name.scope-resolution: #4EC9B0", "hc_light": "entity.name.scope-resolution: #185E73", - "light_plus_experimental": "entity.name.scope-resolution: #267F99" + "light_modern": "entity.name.scope-resolution: #267F99" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_cs.json b/extensions/vscode-colorize-tests/test/colorize-results/test_cs.json index 7ec3ae1752c..34a6e9e8654 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_cs.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_cs.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword.other.using: #C586C0", - "dark_plus_experimental": "keyword.other.using: #C586C0", + "dark_modern": "keyword.other.using: #C586C0", "hc_light": "keyword.other.using: #B5200D", - "light_plus_experimental": "keyword.other.using: #AF00DB" + "light_modern": "keyword.other.using: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -932,9 +932,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -946,9 +946,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_cshtml.json b/extensions/vscode-colorize-tests/test/colorize-results/test_cshtml.json index f5cfc6d729e..5945550fd4e 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_cshtml.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_cshtml.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -274,9 +274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -344,9 +344,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -694,9 +694,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -708,9 +708,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "entity.name.variable: #9CDCFE", + "dark_modern": "entity.name.variable: #9CDCFE", "hc_light": "entity.name.variable: #001080", - "light_plus_experimental": "entity.name.variable: #001080" + "light_modern": "entity.name.variable: #001080" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -890,9 +890,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -904,9 +904,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file 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 1749314b071..78a5ca00d07 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_css.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_css.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -358,9 +358,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -372,9 +372,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -414,9 +414,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -554,9 +554,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -624,9 +624,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -638,9 +638,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "invalid: #F44747", "light_vs": "invalid: #CD3131", "hc_black": "invalid: #F44747", - "dark_plus_experimental": "invalid: #F44747", + "dark_modern": "invalid: #F44747", "hc_light": "invalid: #B5200D", - "light_plus_experimental": "invalid: #CD3131" + "light_modern": "invalid: #CD3131" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "invalid: #F44747", "light_vs": "invalid: #CD3131", "hc_black": "invalid: #F44747", - "dark_plus_experimental": "invalid: #F44747", + "dark_modern": "invalid: #F44747", "hc_light": "invalid: #B5200D", - "light_plus_experimental": "invalid: #CD3131" + "light_modern": "invalid: #CD3131" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -764,9 +764,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "invalid: #F44747", "light_vs": "invalid: #CD3131", "hc_black": "invalid: #F44747", - "dark_plus_experimental": "invalid: #F44747", + "dark_modern": "invalid: #F44747", "hc_light": "invalid: #B5200D", - "light_plus_experimental": "invalid: #CD3131" + "light_modern": "invalid: #CD3131" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "invalid: #F44747", "light_vs": "invalid: #CD3131", "hc_black": "invalid: #F44747", - "dark_plus_experimental": "invalid: #F44747", + "dark_modern": "invalid: #F44747", "hc_light": "invalid: #B5200D", - "light_plus_experimental": "invalid: #CD3131" + "light_modern": "invalid: #CD3131" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "invalid: #F44747", "light_vs": "invalid: #CD3131", "hc_black": "invalid: #F44747", - "dark_plus_experimental": "invalid: #F44747", + "dark_modern": "invalid: #F44747", "hc_light": "invalid: #B5200D", - "light_plus_experimental": "invalid: #CD3131" + "light_modern": "invalid: #CD3131" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3606,9 +3606,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -3620,9 +3620,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3956,9 +3956,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -3970,9 +3970,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4390,9 +4390,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -4404,9 +4404,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4446,9 +4446,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -4460,9 +4460,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4502,9 +4502,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -4516,9 +4516,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4922,9 +4922,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4936,9 +4936,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -4950,9 +4950,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -4964,9 +4964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4978,9 +4978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4992,9 +4992,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5006,9 +5006,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5020,9 +5020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5034,9 +5034,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5048,9 +5048,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -5062,9 +5062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5076,9 +5076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5090,9 +5090,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5104,9 +5104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5118,9 +5118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -5132,9 +5132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5146,9 +5146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -5160,9 +5160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5174,9 +5174,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -5188,9 +5188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5202,9 +5202,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5216,9 +5216,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5230,9 +5230,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5244,9 +5244,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5258,9 +5258,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5272,9 +5272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5286,9 +5286,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5300,9 +5300,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5314,9 +5314,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5328,9 +5328,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5342,9 +5342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5356,9 +5356,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5370,9 +5370,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5384,9 +5384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5398,9 +5398,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5412,9 +5412,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5426,9 +5426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5440,9 +5440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5454,9 +5454,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5468,9 +5468,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5482,9 +5482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5496,9 +5496,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5510,9 +5510,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5524,9 +5524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5538,9 +5538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -5552,9 +5552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5566,9 +5566,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5580,9 +5580,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -5594,9 +5594,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -5608,9 +5608,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5622,9 +5622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5636,9 +5636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5650,9 +5650,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5664,9 +5664,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5678,9 +5678,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5692,9 +5692,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5706,9 +5706,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5720,9 +5720,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5734,9 +5734,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5748,9 +5748,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5762,9 +5762,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5776,9 +5776,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5790,9 +5790,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5804,9 +5804,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5818,9 +5818,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5832,9 +5832,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5846,9 +5846,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -5860,9 +5860,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5874,9 +5874,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -5888,9 +5888,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5902,9 +5902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5916,9 +5916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5930,9 +5930,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5944,9 +5944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5958,9 +5958,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5972,9 +5972,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -5986,9 +5986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6000,9 +6000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -6014,9 +6014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6028,9 +6028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6042,9 +6042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6056,9 +6056,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6070,9 +6070,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6084,9 +6084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6098,9 +6098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6112,9 +6112,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6126,9 +6126,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6140,9 +6140,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6154,9 +6154,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6168,9 +6168,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6182,9 +6182,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6196,9 +6196,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6210,9 +6210,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6224,9 +6224,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6238,9 +6238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6252,9 +6252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6266,9 +6266,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6280,9 +6280,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6294,9 +6294,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6308,9 +6308,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6322,9 +6322,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6336,9 +6336,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6350,9 +6350,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6364,9 +6364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6378,9 +6378,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6392,9 +6392,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6406,9 +6406,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6420,9 +6420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6434,9 +6434,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6448,9 +6448,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6462,9 +6462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6476,9 +6476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6490,9 +6490,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6504,9 +6504,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6518,9 +6518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6532,9 +6532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6546,9 +6546,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6560,9 +6560,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6574,9 +6574,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6588,9 +6588,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6602,9 +6602,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6616,9 +6616,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6630,9 +6630,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6644,9 +6644,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6658,9 +6658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6672,9 +6672,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6686,9 +6686,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6700,9 +6700,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6714,9 +6714,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6728,9 +6728,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6742,9 +6742,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6756,9 +6756,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6770,9 +6770,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6784,9 +6784,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6798,9 +6798,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6812,9 +6812,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6826,9 +6826,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6840,9 +6840,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6854,9 +6854,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6868,9 +6868,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6882,9 +6882,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6896,9 +6896,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -6910,9 +6910,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6924,9 +6924,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6938,9 +6938,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6952,9 +6952,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6966,9 +6966,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6980,9 +6980,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6994,9 +6994,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7008,9 +7008,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7022,9 +7022,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7036,9 +7036,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7050,9 +7050,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -7064,9 +7064,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7078,9 +7078,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7092,9 +7092,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7106,9 +7106,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7120,9 +7120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7134,9 +7134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7148,9 +7148,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -7162,9 +7162,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -7176,9 +7176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7190,9 +7190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7204,9 +7204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7218,9 +7218,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -7232,9 +7232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7246,9 +7246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7260,9 +7260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -7274,9 +7274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7288,9 +7288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7302,9 +7302,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -7316,9 +7316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7330,9 +7330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7344,9 +7344,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7358,9 +7358,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7372,9 +7372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7386,9 +7386,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7400,9 +7400,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7414,9 +7414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7428,9 +7428,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7442,9 +7442,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7456,9 +7456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7470,9 +7470,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7484,9 +7484,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7498,9 +7498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7512,9 +7512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7526,9 +7526,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -7540,9 +7540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7554,9 +7554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7568,9 +7568,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7582,9 +7582,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7596,9 +7596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7610,9 +7610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7624,9 +7624,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -7638,9 +7638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7652,9 +7652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7666,9 +7666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -7680,9 +7680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7694,9 +7694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7708,9 +7708,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -7722,9 +7722,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -7736,9 +7736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7750,9 +7750,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -7764,9 +7764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7778,9 +7778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7792,9 +7792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7806,9 +7806,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -7820,9 +7820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7834,9 +7834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7848,9 +7848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -7862,9 +7862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7876,9 +7876,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7890,9 +7890,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7904,9 +7904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7918,9 +7918,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7932,9 +7932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7946,9 +7946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -7960,9 +7960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7974,9 +7974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7988,9 +7988,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8002,9 +8002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8016,9 +8016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8030,9 +8030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -8044,9 +8044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8058,9 +8058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8072,9 +8072,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -8086,9 +8086,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -8100,9 +8100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8114,9 +8114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8128,9 +8128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8142,9 +8142,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8156,9 +8156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8170,9 +8170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8184,9 +8184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -8198,9 +8198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8212,9 +8212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8226,9 +8226,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8240,9 +8240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8254,9 +8254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8268,9 +8268,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8282,9 +8282,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -8296,9 +8296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8310,9 +8310,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8324,9 +8324,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -8338,9 +8338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8352,9 +8352,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8366,9 +8366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8380,9 +8380,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8394,9 +8394,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -8408,9 +8408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8422,9 +8422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8436,9 +8436,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -8450,9 +8450,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -8464,9 +8464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8478,9 +8478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8492,9 +8492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8506,9 +8506,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8520,9 +8520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8534,9 +8534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8548,9 +8548,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8562,9 +8562,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -8576,9 +8576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8590,9 +8590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8604,9 +8604,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8618,9 +8618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8632,9 +8632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8646,9 +8646,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8660,9 +8660,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -8674,9 +8674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8688,9 +8688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8702,9 +8702,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -8716,9 +8716,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -8730,9 +8730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8744,9 +8744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8758,9 +8758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8772,9 +8772,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8786,9 +8786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8800,9 +8800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8814,9 +8814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -8828,9 +8828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8842,9 +8842,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -8856,9 +8856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8870,9 +8870,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -8884,9 +8884,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -8898,9 +8898,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -8912,9 +8912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8926,9 +8926,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -8940,9 +8940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8954,9 +8954,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -8968,9 +8968,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -8982,9 +8982,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -8996,9 +8996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9010,9 +9010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9024,9 +9024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9038,9 +9038,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9052,9 +9052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9066,9 +9066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9080,9 +9080,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9094,9 +9094,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -9108,9 +9108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9122,9 +9122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9136,9 +9136,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9150,9 +9150,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9164,9 +9164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9178,9 +9178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9192,9 +9192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9206,9 +9206,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9220,9 +9220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9234,9 +9234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9248,9 +9248,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9262,9 +9262,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -9276,9 +9276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9290,9 +9290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9304,9 +9304,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9318,9 +9318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9332,9 +9332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9346,9 +9346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -9360,9 +9360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9374,9 +9374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9388,9 +9388,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9402,9 +9402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9416,9 +9416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9430,9 +9430,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9444,9 +9444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9458,9 +9458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9472,9 +9472,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9486,9 +9486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9500,9 +9500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9514,9 +9514,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9528,9 +9528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9542,9 +9542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9556,9 +9556,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9570,9 +9570,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9584,9 +9584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9598,9 +9598,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9612,9 +9612,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9626,9 +9626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9640,9 +9640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9654,9 +9654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9668,9 +9668,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9682,9 +9682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9696,9 +9696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9710,9 +9710,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9724,9 +9724,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -9738,9 +9738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9752,9 +9752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -9766,9 +9766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9780,9 +9780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9794,9 +9794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -9808,9 +9808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9822,9 +9822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9836,9 +9836,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9850,9 +9850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9864,9 +9864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9878,9 +9878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -9892,9 +9892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9906,9 +9906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -9920,9 +9920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9934,9 +9934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9948,9 +9948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9962,9 +9962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9976,9 +9976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -9990,9 +9990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10004,9 +10004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -10018,9 +10018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10032,9 +10032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -10046,9 +10046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10060,9 +10060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10074,9 +10074,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -10088,9 +10088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10102,9 +10102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10116,9 +10116,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10130,9 +10130,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -10144,9 +10144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10158,9 +10158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10172,9 +10172,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -10186,9 +10186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10200,9 +10200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10214,9 +10214,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10228,9 +10228,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -10242,9 +10242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10256,9 +10256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10270,9 +10270,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -10284,9 +10284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10298,9 +10298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10312,9 +10312,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10326,9 +10326,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -10340,9 +10340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10354,9 +10354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10368,9 +10368,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10382,9 +10382,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10396,9 +10396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10410,9 +10410,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -10424,9 +10424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10438,9 +10438,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -10452,9 +10452,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -10466,9 +10466,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -10480,9 +10480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10494,9 +10494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10508,9 +10508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10522,9 +10522,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -10536,9 +10536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10550,9 +10550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10564,9 +10564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -10578,9 +10578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -10592,9 +10592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10606,9 +10606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10620,9 +10620,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10634,9 +10634,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10648,9 +10648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10662,9 +10662,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -10676,9 +10676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10690,9 +10690,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -10704,9 +10704,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -10718,9 +10718,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -10732,9 +10732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10746,9 +10746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10760,9 +10760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10774,9 +10774,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -10788,9 +10788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10802,9 +10802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10816,9 +10816,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10830,9 +10830,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10844,9 +10844,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10858,9 +10858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10872,9 +10872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10886,9 +10886,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10900,9 +10900,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10914,9 +10914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10928,9 +10928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10942,9 +10942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10956,9 +10956,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -10970,9 +10970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10984,9 +10984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10998,9 +10998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -11012,9 +11012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11026,9 +11026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -11040,9 +11040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11054,9 +11054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11068,9 +11068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11082,9 +11082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11096,9 +11096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -11110,9 +11110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11124,9 +11124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -11138,9 +11138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11152,9 +11152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -11166,9 +11166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11180,9 +11180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11194,9 +11194,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11208,9 +11208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11222,9 +11222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11236,9 +11236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -11250,9 +11250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11264,9 +11264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11278,9 +11278,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11292,9 +11292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11306,9 +11306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11320,9 +11320,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11334,9 +11334,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -11348,9 +11348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11362,9 +11362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11376,9 +11376,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11390,9 +11390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11404,9 +11404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11418,9 +11418,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11432,9 +11432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11446,9 +11446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11460,9 +11460,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11474,9 +11474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11488,9 +11488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11502,9 +11502,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11516,9 +11516,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -11530,9 +11530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11544,9 +11544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11558,9 +11558,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11572,9 +11572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11586,9 +11586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11600,9 +11600,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11614,9 +11614,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -11628,9 +11628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11642,9 +11642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_cu.json b/extensions/vscode-colorize-tests/test/colorize-results/test_cu.json index 77eeae823b0..e926933337e 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_cu.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_cu.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -120,9 +120,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -204,9 +204,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -274,9 +274,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -288,9 +288,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -330,9 +330,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -344,9 +344,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -358,9 +358,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -372,9 +372,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -400,9 +400,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -414,9 +414,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -428,9 +428,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -456,9 +456,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -470,9 +470,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -484,9 +484,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -526,9 +526,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -554,9 +554,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -596,9 +596,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -610,9 +610,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -624,9 +624,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -666,9 +666,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -680,9 +680,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -694,9 +694,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -708,9 +708,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -722,9 +722,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -736,9 +736,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -764,9 +764,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -778,9 +778,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -806,9 +806,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -820,9 +820,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -834,9 +834,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -848,9 +848,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -862,9 +862,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -876,9 +876,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -890,9 +890,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -918,9 +918,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -932,9 +932,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -946,9 +946,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -960,9 +960,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -974,9 +974,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -988,9 +988,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "entity.name.function.preprocessor: #569CD6", "light_vs": "entity.name.function.preprocessor: #0000FF", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function.preprocessor: #569CD6", + "dark_modern": "entity.name.function.preprocessor: #569CD6", "hc_light": "entity.name.function.preprocessor: #0F4A85", - "light_plus_experimental": "entity.name.function.preprocessor: #0000FF" + "light_modern": "entity.name.function.preprocessor: #0000FF" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4922,9 +4922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4936,9 +4936,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -4950,9 +4950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4964,9 +4964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4978,9 +4978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4992,9 +4992,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5006,9 +5006,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5020,9 +5020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5034,9 +5034,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5048,9 +5048,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5062,9 +5062,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5076,9 +5076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5090,9 +5090,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5104,9 +5104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5118,9 +5118,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5132,9 +5132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5146,9 +5146,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5160,9 +5160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5174,9 +5174,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5188,9 +5188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5202,9 +5202,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5216,9 +5216,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5230,9 +5230,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5244,9 +5244,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5258,9 +5258,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5272,9 +5272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5286,9 +5286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5300,9 +5300,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5314,9 +5314,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5328,9 +5328,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5342,9 +5342,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5356,9 +5356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5370,9 +5370,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5384,9 +5384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5398,9 +5398,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5412,9 +5412,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5426,9 +5426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5440,9 +5440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5454,9 +5454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5468,9 +5468,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5482,9 +5482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5496,9 +5496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5510,9 +5510,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5524,9 +5524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5538,9 +5538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5552,9 +5552,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5566,9 +5566,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5580,9 +5580,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5594,9 +5594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5608,9 +5608,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5622,9 +5622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5636,9 +5636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5650,9 +5650,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5664,9 +5664,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5678,9 +5678,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5692,9 +5692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5706,9 +5706,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5720,9 +5720,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5734,9 +5734,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5748,9 +5748,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5762,9 +5762,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5776,9 +5776,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5790,9 +5790,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5804,9 +5804,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5818,9 +5818,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5832,9 +5832,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5846,9 +5846,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5860,9 +5860,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5874,9 +5874,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5888,9 +5888,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5902,9 +5902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5916,9 +5916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5930,9 +5930,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5944,9 +5944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5958,9 +5958,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5972,9 +5972,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5986,9 +5986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6000,9 +6000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6014,9 +6014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6028,9 +6028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6042,9 +6042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6056,9 +6056,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6070,9 +6070,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6084,9 +6084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6098,9 +6098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6112,9 +6112,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6126,9 +6126,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6140,9 +6140,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6154,9 +6154,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6168,9 +6168,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6182,9 +6182,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6196,9 +6196,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6210,9 +6210,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6224,9 +6224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6238,9 +6238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6252,9 +6252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6266,9 +6266,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6280,9 +6280,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6294,9 +6294,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6308,9 +6308,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6322,9 +6322,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6336,9 +6336,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6350,9 +6350,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6364,9 +6364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6378,9 +6378,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6392,9 +6392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6406,9 +6406,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6420,9 +6420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6434,9 +6434,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6448,9 +6448,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6462,9 +6462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6476,9 +6476,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6490,9 +6490,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6504,9 +6504,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -6518,9 +6518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6532,9 +6532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6546,9 +6546,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6560,9 +6560,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6574,9 +6574,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6588,9 +6588,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6602,9 +6602,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6616,9 +6616,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6630,9 +6630,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6644,9 +6644,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6658,9 +6658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6672,9 +6672,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6686,9 +6686,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6700,9 +6700,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6714,9 +6714,9 @@ "dark_vs": "keyword.operator.cast: #569CD6", "light_vs": "keyword.operator.cast: #0000FF", "hc_black": "keyword.operator.cast: #569CD6", - "dark_plus_experimental": "keyword.operator.cast: #569CD6", + "dark_modern": "keyword.operator.cast: #569CD6", "hc_light": "keyword.operator.cast: #0F4A85", - "light_plus_experimental": "keyword.operator.cast: #0000FF" + "light_modern": "keyword.operator.cast: #0000FF" } }, { @@ -6728,9 +6728,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6742,9 +6742,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6756,9 +6756,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6770,9 +6770,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6784,9 +6784,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6798,9 +6798,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6812,9 +6812,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6826,9 +6826,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6840,9 +6840,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6854,9 +6854,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6868,9 +6868,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6882,9 +6882,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6896,9 +6896,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6910,9 +6910,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6924,9 +6924,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6938,9 +6938,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6952,9 +6952,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6966,9 +6966,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6980,9 +6980,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6994,9 +6994,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7008,9 +7008,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7022,9 +7022,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7036,9 +7036,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7050,9 +7050,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7064,9 +7064,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7078,9 +7078,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7092,9 +7092,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7106,9 +7106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7120,9 +7120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7134,9 +7134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7148,9 +7148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7162,9 +7162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7176,9 +7176,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7190,9 +7190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7204,9 +7204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7218,9 +7218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7232,9 +7232,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7246,9 +7246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7260,9 +7260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7274,9 +7274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7288,9 +7288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7302,9 +7302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7316,9 +7316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7330,9 +7330,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7344,9 +7344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7358,9 +7358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7372,9 +7372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7386,9 +7386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7400,9 +7400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7414,9 +7414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7428,9 +7428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7442,9 +7442,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7456,9 +7456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7470,9 +7470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7484,9 +7484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7498,9 +7498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7512,9 +7512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7526,9 +7526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7540,9 +7540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7554,9 +7554,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7568,9 +7568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7582,9 +7582,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7596,9 +7596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7610,9 +7610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7624,9 +7624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7638,9 +7638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7652,9 +7652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7666,9 +7666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7680,9 +7680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7694,9 +7694,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7708,9 +7708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7722,9 +7722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7736,9 +7736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7750,9 +7750,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7764,9 +7764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7778,9 +7778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7792,9 +7792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7806,9 +7806,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7820,9 +7820,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7834,9 +7834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7848,9 +7848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7862,9 +7862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7876,9 +7876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7890,9 +7890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7904,9 +7904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7918,9 +7918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7932,9 +7932,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7946,9 +7946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7960,9 +7960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7974,9 +7974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7988,9 +7988,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -8002,9 +8002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8016,9 +8016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8030,9 +8030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8044,9 +8044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8058,9 +8058,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8072,9 +8072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8086,9 +8086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8100,9 +8100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8114,9 +8114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8128,9 +8128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -8142,9 +8142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8156,9 +8156,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8170,9 +8170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8184,9 +8184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8198,9 +8198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8212,9 +8212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8226,9 +8226,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8240,9 +8240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8254,9 +8254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8268,9 +8268,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -8282,9 +8282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8296,9 +8296,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8310,9 +8310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8324,9 +8324,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8338,9 +8338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8352,9 +8352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8366,9 +8366,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8380,9 +8380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8394,9 +8394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8408,9 +8408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8422,9 +8422,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8436,9 +8436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8450,9 +8450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8464,9 +8464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8478,9 +8478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8492,9 +8492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8506,9 +8506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8520,9 +8520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8534,9 +8534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8548,9 +8548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8562,9 +8562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8576,9 +8576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8590,9 +8590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8604,9 +8604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8618,9 +8618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8632,9 +8632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8646,9 +8646,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8660,9 +8660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8674,9 +8674,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8688,9 +8688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8702,9 +8702,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8716,9 +8716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8730,9 +8730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8744,9 +8744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8758,9 +8758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8772,9 +8772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8786,9 +8786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8800,9 +8800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8814,9 +8814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8828,9 +8828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8842,9 +8842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8856,9 +8856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8870,9 +8870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8884,9 +8884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8898,9 +8898,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8912,9 +8912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8926,9 +8926,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8940,9 +8940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8954,9 +8954,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8968,9 +8968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8982,9 +8982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8996,9 +8996,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -9010,9 +9010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9024,9 +9024,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -9038,9 +9038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9052,9 +9052,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9066,9 +9066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9080,9 +9080,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9094,9 +9094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9108,9 +9108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9122,9 +9122,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9136,9 +9136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9150,9 +9150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -9164,9 +9164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9178,9 +9178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9192,9 +9192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9206,9 +9206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9220,9 +9220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9234,9 +9234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9248,9 +9248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9262,9 +9262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9276,9 +9276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9290,9 +9290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9304,9 +9304,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9318,9 +9318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9332,9 +9332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9346,9 +9346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9360,9 +9360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9374,9 +9374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9388,9 +9388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9402,9 +9402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9416,9 +9416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9430,9 +9430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9444,9 +9444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9458,9 +9458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9472,9 +9472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9486,9 +9486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9500,9 +9500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9514,9 +9514,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9528,9 +9528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9542,9 +9542,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9556,9 +9556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9570,9 +9570,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9584,9 +9584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9598,9 +9598,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9612,9 +9612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9626,9 +9626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9640,9 +9640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9654,9 +9654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9668,9 +9668,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -9682,9 +9682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9696,9 +9696,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -9710,9 +9710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9724,9 +9724,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9738,9 +9738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9752,9 +9752,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9766,9 +9766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9780,9 +9780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9794,9 +9794,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9808,9 +9808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9822,9 +9822,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -9836,9 +9836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9850,9 +9850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9864,9 +9864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9878,9 +9878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9892,9 +9892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9906,9 +9906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9920,9 +9920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9934,9 +9934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9948,9 +9948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9962,9 +9962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9976,9 +9976,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9990,9 +9990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10004,9 +10004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10018,9 +10018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10032,9 +10032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10046,9 +10046,9 @@ "dark_vs": "keyword.operator.cast: #569CD6", "light_vs": "keyword.operator.cast: #0000FF", "hc_black": "keyword.operator.cast: #569CD6", - "dark_plus_experimental": "keyword.operator.cast: #569CD6", + "dark_modern": "keyword.operator.cast: #569CD6", "hc_light": "keyword.operator.cast: #0F4A85", - "light_plus_experimental": "keyword.operator.cast: #0000FF" + "light_modern": "keyword.operator.cast: #0000FF" } }, { @@ -10060,9 +10060,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10074,9 +10074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10088,9 +10088,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10102,9 +10102,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10116,9 +10116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10130,9 +10130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10144,9 +10144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10158,9 +10158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10172,9 +10172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10186,9 +10186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10200,9 +10200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10214,9 +10214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10228,9 +10228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10242,9 +10242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10256,9 +10256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10270,9 +10270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10284,9 +10284,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10298,9 +10298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10312,9 +10312,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10326,9 +10326,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10340,9 +10340,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10354,9 +10354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10368,9 +10368,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10382,9 +10382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10396,9 +10396,9 @@ "dark_vs": "keyword.operator.cast: #569CD6", "light_vs": "keyword.operator.cast: #0000FF", "hc_black": "keyword.operator.cast: #569CD6", - "dark_plus_experimental": "keyword.operator.cast: #569CD6", + "dark_modern": "keyword.operator.cast: #569CD6", "hc_light": "keyword.operator.cast: #0F4A85", - "light_plus_experimental": "keyword.operator.cast: #0000FF" + "light_modern": "keyword.operator.cast: #0000FF" } }, { @@ -10410,9 +10410,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10424,9 +10424,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -10438,9 +10438,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10452,9 +10452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10466,9 +10466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10480,9 +10480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10494,9 +10494,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10508,9 +10508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10522,9 +10522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10536,9 +10536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10550,9 +10550,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10564,9 +10564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10578,9 +10578,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10592,9 +10592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10606,9 +10606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10620,9 +10620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10634,9 +10634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10648,9 +10648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10662,9 +10662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10676,9 +10676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10690,9 +10690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10704,9 +10704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10718,9 +10718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10732,9 +10732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10746,9 +10746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10760,9 +10760,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10774,9 +10774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10788,9 +10788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10802,9 +10802,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10816,9 +10816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10830,9 +10830,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10844,9 +10844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10858,9 +10858,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10872,9 +10872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10886,9 +10886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10900,9 +10900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10914,9 +10914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10928,9 +10928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10942,9 +10942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10956,9 +10956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10970,9 +10970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10984,9 +10984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10998,9 +10998,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11012,9 +11012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11026,9 +11026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11040,9 +11040,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11054,9 +11054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11068,9 +11068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11082,9 +11082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11096,9 +11096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11110,9 +11110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11124,9 +11124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11138,9 +11138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11152,9 +11152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11166,9 +11166,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11180,9 +11180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11194,9 +11194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11208,9 +11208,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11222,9 +11222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11236,9 +11236,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11250,9 +11250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11264,9 +11264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11278,9 +11278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11292,9 +11292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11306,9 +11306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11320,9 +11320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11334,9 +11334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11348,9 +11348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11362,9 +11362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11376,9 +11376,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11390,9 +11390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11404,9 +11404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11418,9 +11418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11432,9 +11432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11446,9 +11446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11460,9 +11460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11474,9 +11474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11488,9 +11488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11502,9 +11502,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11516,9 +11516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11530,9 +11530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11544,9 +11544,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11558,9 +11558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11572,9 +11572,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11586,9 +11586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11600,9 +11600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11614,9 +11614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11628,9 +11628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11642,9 +11642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -11656,9 +11656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11670,9 +11670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -11684,9 +11684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11698,9 +11698,9 @@ "dark_vs": "keyword.operator.cast: #569CD6", "light_vs": "keyword.operator.cast: #0000FF", "hc_black": "keyword.operator.cast: #569CD6", - "dark_plus_experimental": "keyword.operator.cast: #569CD6", + "dark_modern": "keyword.operator.cast: #569CD6", "hc_light": "keyword.operator.cast: #0F4A85", - "light_plus_experimental": "keyword.operator.cast: #0000FF" + "light_modern": "keyword.operator.cast: #0000FF" } }, { @@ -11712,9 +11712,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11726,9 +11726,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -11740,9 +11740,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11754,9 +11754,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11768,9 +11768,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11782,9 +11782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11796,9 +11796,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11810,9 +11810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11824,9 +11824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11838,9 +11838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11852,9 +11852,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11866,9 +11866,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -11880,9 +11880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11894,9 +11894,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -11908,9 +11908,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11922,9 +11922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11936,9 +11936,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11950,9 +11950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11964,9 +11964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11978,9 +11978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11992,9 +11992,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12006,9 +12006,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12020,9 +12020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12034,9 +12034,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12048,9 +12048,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12062,9 +12062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12076,9 +12076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12090,9 +12090,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12104,9 +12104,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12118,9 +12118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12132,9 +12132,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -12146,9 +12146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12160,9 +12160,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12174,9 +12174,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12188,9 +12188,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12202,9 +12202,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12216,9 +12216,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12230,9 +12230,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12244,9 +12244,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12258,9 +12258,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12272,9 +12272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12286,9 +12286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12300,9 +12300,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12314,9 +12314,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12328,9 +12328,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12342,9 +12342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12356,9 +12356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12370,9 +12370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12384,9 +12384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12398,9 +12398,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12412,9 +12412,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12426,9 +12426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12440,9 +12440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12454,9 +12454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12468,9 +12468,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12482,9 +12482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12496,9 +12496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12510,9 +12510,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12524,9 +12524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12538,9 +12538,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12552,9 +12552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12566,9 +12566,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -12580,9 +12580,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12594,9 +12594,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12608,9 +12608,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12622,9 +12622,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12636,9 +12636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12650,9 +12650,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12664,9 +12664,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12678,9 +12678,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12692,9 +12692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12706,9 +12706,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12720,9 +12720,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12734,9 +12734,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12748,9 +12748,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12762,9 +12762,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12776,9 +12776,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12790,9 +12790,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12804,9 +12804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12818,9 +12818,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12832,9 +12832,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12846,9 +12846,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12860,9 +12860,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12874,9 +12874,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12888,9 +12888,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12902,9 +12902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12916,9 +12916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12930,9 +12930,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12944,9 +12944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12958,9 +12958,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12972,9 +12972,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12986,9 +12986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13000,9 +13000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13014,9 +13014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13028,9 +13028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13042,9 +13042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13056,9 +13056,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13070,9 +13070,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13084,9 +13084,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13098,9 +13098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13112,9 +13112,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13126,9 +13126,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13140,9 +13140,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13154,9 +13154,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13168,9 +13168,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13182,9 +13182,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13196,9 +13196,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13210,9 +13210,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -13224,9 +13224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13238,9 +13238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13252,9 +13252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13266,9 +13266,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13280,9 +13280,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13294,9 +13294,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13308,9 +13308,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13322,9 +13322,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13336,9 +13336,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13350,9 +13350,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13364,9 +13364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13378,9 +13378,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13392,9 +13392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13406,9 +13406,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13420,9 +13420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13434,9 +13434,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -13448,9 +13448,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13462,9 +13462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13476,9 +13476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13490,9 +13490,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13504,9 +13504,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13518,9 +13518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13532,9 +13532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13546,9 +13546,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13560,9 +13560,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13574,9 +13574,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13588,9 +13588,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13602,9 +13602,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13616,9 +13616,9 @@ "dark_vs": "keyword.operator.sizeof: #569CD6", "light_vs": "keyword.operator.sizeof: #0000FF", "hc_black": "keyword.operator.sizeof: #569CD6", - "dark_plus_experimental": "keyword.operator.sizeof: #569CD6", + "dark_modern": "keyword.operator.sizeof: #569CD6", "hc_light": "keyword.operator.sizeof: #0F4A85", - "light_plus_experimental": "keyword.operator.sizeof: #0000FF" + "light_modern": "keyword.operator.sizeof: #0000FF" } }, { @@ -13630,9 +13630,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13644,9 +13644,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13658,9 +13658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13672,9 +13672,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13686,9 +13686,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13700,9 +13700,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13714,9 +13714,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13728,9 +13728,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13742,9 +13742,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13756,9 +13756,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13770,9 +13770,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13784,9 +13784,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13798,9 +13798,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13812,9 +13812,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13826,9 +13826,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13840,9 +13840,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13854,9 +13854,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13868,9 +13868,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13882,9 +13882,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13896,9 +13896,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13910,9 +13910,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13924,9 +13924,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13938,9 +13938,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -13952,9 +13952,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13966,9 +13966,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13980,9 +13980,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13994,9 +13994,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -14008,9 +14008,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14022,9 +14022,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14036,9 +14036,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -14050,9 +14050,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14064,9 +14064,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14078,9 +14078,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14092,9 +14092,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -14106,9 +14106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14120,9 +14120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14134,9 +14134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14148,9 +14148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14162,9 +14162,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -14176,9 +14176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14190,9 +14190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14204,9 +14204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14218,9 +14218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14232,9 +14232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14246,9 +14246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14260,9 +14260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14274,9 +14274,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -14288,9 +14288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14302,9 +14302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14316,9 +14316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14330,9 +14330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14344,9 +14344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -14358,9 +14358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14372,9 +14372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14386,9 +14386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14400,9 +14400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14414,9 +14414,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14428,9 +14428,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14442,9 +14442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -14456,9 +14456,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14470,9 +14470,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -14484,9 +14484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14498,9 +14498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -14512,9 +14512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -14526,9 +14526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14540,9 +14540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14554,9 +14554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14568,9 +14568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14582,9 +14582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14596,9 +14596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14610,9 +14610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14624,9 +14624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14638,9 +14638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14652,9 +14652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14666,9 +14666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14680,9 +14680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14694,9 +14694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14708,9 +14708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14722,9 +14722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -14736,9 +14736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14750,9 +14750,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -14764,9 +14764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14778,9 +14778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14792,9 +14792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14806,9 +14806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14820,9 +14820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14834,9 +14834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14848,9 +14848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14862,9 +14862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -14876,9 +14876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14890,9 +14890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -14904,9 +14904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14918,9 +14918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14932,9 +14932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14946,9 +14946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14960,9 +14960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14974,9 +14974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -14988,9 +14988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15002,9 +15002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -15016,9 +15016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15030,9 +15030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15044,9 +15044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15058,9 +15058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15072,9 +15072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15086,9 +15086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -15100,9 +15100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15114,9 +15114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15128,9 +15128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15142,9 +15142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15156,9 +15156,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -15170,9 +15170,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -15184,9 +15184,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -15198,9 +15198,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -15212,9 +15212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15226,9 +15226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15240,9 +15240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15254,9 +15254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -15268,9 +15268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15282,9 +15282,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -15296,9 +15296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15310,9 +15310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15324,9 +15324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_dart.json b/extensions/vscode-colorize-tests/test/colorize-results/test_dart.json index b44a0e74abf..dc43f74e3c8 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_dart.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_dart.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_diff.json b/extensions/vscode-colorize-tests/test/colorize-results/test_diff.json index b88ea4c7665..238ca7a5d02 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_diff.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_diff.json @@ -8,9 +8,9 @@ "dark_vs": "meta.diff.header: #569CD6", "light_vs": "meta.diff.header: #000080", "hc_black": "meta.diff.header: #000080", - "dark_plus_experimental": "meta.diff.header: #569CD6", + "dark_modern": "meta.diff.header: #569CD6", "hc_light": "meta.diff.header: #062F4A", - "light_plus_experimental": "meta.diff.header: #000080" + "light_modern": "meta.diff.header: #000080" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "meta.diff.header: #569CD6", "light_vs": "meta.diff.header: #000080", "hc_black": "meta.diff.header: #000080", - "dark_plus_experimental": "meta.diff.header: #569CD6", + "dark_modern": "meta.diff.header: #569CD6", "hc_light": "meta.diff.header: #062F4A", - "light_plus_experimental": "meta.diff.header: #000080" + "light_modern": "meta.diff.header: #000080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "meta.diff.header: #569CD6", "light_vs": "meta.diff.header: #000080", "hc_black": "meta.diff.header: #000080", - "dark_plus_experimental": "meta.diff.header: #569CD6", + "dark_modern": "meta.diff.header: #569CD6", "hc_light": "meta.diff.header: #062F4A", - "light_plus_experimental": "meta.diff.header: #000080" + "light_modern": "meta.diff.header: #000080" } }, { @@ -64,9 +64,9 @@ "dark_vs": "meta.diff.header: #569CD6", "light_vs": "meta.diff.header: #000080", "hc_black": "meta.diff.header: #000080", - "dark_plus_experimental": "meta.diff.header: #569CD6", + "dark_modern": "meta.diff.header: #569CD6", "hc_light": "meta.diff.header: #062F4A", - "light_plus_experimental": "meta.diff.header: #000080" + "light_modern": "meta.diff.header: #000080" } }, { @@ -78,9 +78,9 @@ "dark_vs": "meta.diff.header: #569CD6", "light_vs": "meta.diff.header: #000080", "hc_black": "meta.diff.header: #000080", - "dark_plus_experimental": "meta.diff.header: #569CD6", + "dark_modern": "meta.diff.header: #569CD6", "hc_light": "meta.diff.header: #062F4A", - "light_plus_experimental": "meta.diff.header: #000080" + "light_modern": "meta.diff.header: #000080" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "markup.deleted: #CE9178", "light_vs": "markup.deleted: #A31515", "hc_black": "markup.deleted: #CE9178", - "dark_plus_experimental": "markup.deleted: #CE9178", + "dark_modern": "markup.deleted: #CE9178", "hc_light": "markup.deleted: #5A5A5A", - "light_plus_experimental": "markup.deleted: #A31515" + "light_modern": "markup.deleted: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "markup.deleted: #CE9178", "light_vs": "markup.deleted: #A31515", "hc_black": "markup.deleted: #CE9178", - "dark_plus_experimental": "markup.deleted: #CE9178", + "dark_modern": "markup.deleted: #CE9178", "hc_light": "markup.deleted: #5A5A5A", - "light_plus_experimental": "markup.deleted: #A31515" + "light_modern": "markup.deleted: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "markup.inserted: #B5CEA8", "light_vs": "markup.inserted: #098658", "hc_black": "markup.inserted: #B5CEA8", - "dark_plus_experimental": "markup.inserted: #B5CEA8", + "dark_modern": "markup.inserted: #B5CEA8", "hc_light": "markup.inserted: #096D48", - "light_plus_experimental": "markup.inserted: #098658" + "light_modern": "markup.inserted: #098658" } }, { @@ -204,9 +204,9 @@ "dark_vs": "markup.inserted: #B5CEA8", "light_vs": "markup.inserted: #098658", "hc_black": "markup.inserted: #B5CEA8", - "dark_plus_experimental": "markup.inserted: #B5CEA8", + "dark_modern": "markup.inserted: #B5CEA8", "hc_light": "markup.inserted: #096D48", - "light_plus_experimental": "markup.inserted: #098658" + "light_modern": "markup.inserted: #098658" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_fs.json b/extensions/vscode-colorize-tests/test/colorize-results/test_fs.json index 42443910bc6..078717226a7 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_fs.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_fs.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -302,23 +302,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.fsharp binding.fsharp keyword.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,23 +344,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "new", - "t": "source.fsharp keyword.symbol.new", + "t": "source.fsharp keyword.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -372,9 +372,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -554,9 +554,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -624,23 +624,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.fsharp binding.fsharp keyword.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -778,23 +778,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "()", - "t": "source.fsharp binding.fsharp constant.language.unit.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { - "dark_plus": "constant.language: #569CD6", - "light_plus": "constant.language: #0000FF", - "dark_vs": "constant.language: #569CD6", - "light_vs": "constant.language: #0000FF", - "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", - "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "dark_plus": "keyword: #569CD6", + "light_plus": "keyword: #0000FF", + "dark_vs": "keyword: #569CD6", + "light_vs": "keyword: #0000FF", + "hc_black": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", + "hc_light": "keyword: #0F4A85", + "light_modern": "keyword: #0000FF" } }, { @@ -806,23 +806,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.fsharp binding.fsharp keyword.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -904,9 +904,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -932,9 +932,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -946,23 +946,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.fsharp binding.fsharp keyword.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -974,23 +974,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "<-", - "t": "source.fsharp keyword.symbol.fsharp", + "t": "source.fsharp keyword.symbol.arrow.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1072,23 +1072,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "()", - "t": "source.fsharp binding.fsharp constant.language.unit.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { - "dark_plus": "constant.language: #569CD6", - "light_plus": "constant.language: #0000FF", - "dark_vs": "constant.language: #569CD6", - "light_vs": "constant.language: #0000FF", - "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", - "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "dark_plus": "keyword: #569CD6", + "light_plus": "keyword: #0000FF", + "dark_vs": "keyword: #569CD6", + "light_vs": "keyword: #0000FF", + "hc_black": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", + "hc_light": "keyword: #0F4A85", + "light_modern": "keyword: #0000FF" } }, { @@ -1100,23 +1100,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.fsharp binding.fsharp keyword.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1128,23 +1128,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "<-", - "t": "source.fsharp keyword.symbol.fsharp", + "t": "source.fsharp keyword.symbol.arrow.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1268,23 +1268,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "=", - "t": "source.fsharp binding.fsharp keyword.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1394,23 +1394,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "()", - "t": "source.fsharp binding.fsharp constant.language.unit.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { - "dark_plus": "constant.language: #569CD6", - "light_plus": "constant.language: #0000FF", - "dark_vs": "constant.language: #569CD6", - "light_vs": "constant.language: #0000FF", - "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", - "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "dark_plus": "keyword: #569CD6", + "light_plus": "keyword: #0000FF", + "dark_vs": "keyword: #569CD6", + "light_vs": "keyword: #0000FF", + "hc_black": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", + "hc_light": "keyword: #0F4A85", + "light_modern": "keyword: #0000FF" } }, { @@ -1422,23 +1422,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "=", - "t": "source.fsharp binding.fsharp keyword.fsharp", + "t": "source.fsharp binding.fsharp keyword.symbol.fsharp", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character: #569CD6", + "dark_modern": "constant.character: #569CD6", "hc_light": "constant.character: #0F4A85", - "light_plus_experimental": "constant.character: #0000FF" + "light_modern": "constant.character: #0000FF" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_go.json b/extensions/vscode-colorize-tests/test/colorize-results/test_go.json index b097b1adbb7..5258e4f205c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_go.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_go.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -400,9 +400,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -414,9 +414,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type.numeric.go: #4EC9B0", + "dark_modern": "storage.type.numeric.go: #4EC9B0", "hc_light": "storage.type.numeric.go: #185E73", - "light_plus_experimental": "storage.type.numeric.go: #267F99" + "light_modern": "storage.type.numeric.go: #267F99" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -862,9 +862,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -876,9 +876,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -932,9 +932,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "constant.other.placeholder: #9CDCFE", + "dark_modern": "constant.other.placeholder: #9CDCFE", "hc_light": "constant.other.placeholder: #001080", - "light_plus_experimental": "constant.other.placeholder: #001080" + "light_modern": "constant.other.placeholder: #001080" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_groovy.json b/extensions/vscode-colorize-tests/test/colorize-results/test_groovy.json index 665fdede87c..2fb630ed130 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_groovy.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_groovy.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -638,9 +638,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -652,9 +652,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -736,9 +736,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -4922,9 +4922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4936,9 +4936,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -4950,9 +4950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4964,9 +4964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4978,9 +4978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4992,9 +4992,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5006,9 +5006,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5020,9 +5020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5034,9 +5034,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -5048,9 +5048,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5062,9 +5062,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -5076,9 +5076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5090,9 +5090,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -5104,9 +5104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5118,9 +5118,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5132,9 +5132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5146,9 +5146,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5160,9 +5160,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5174,9 +5174,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5188,9 +5188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5202,9 +5202,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5216,9 +5216,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5230,9 +5230,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5244,9 +5244,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -5258,9 +5258,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5272,9 +5272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -5286,9 +5286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5300,9 +5300,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -5314,9 +5314,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5328,9 +5328,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.groovy: #4EC9B0", + "dark_modern": "storage.type.primitive.groovy: #4EC9B0", "hc_light": "storage.type.primitive.groovy: #185E73", - "light_plus_experimental": "storage.type.primitive.groovy: #267F99" + "light_modern": "storage.type.primitive.groovy: #267F99" } }, { @@ -5342,9 +5342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5356,9 +5356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5370,9 +5370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5384,9 +5384,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -5398,9 +5398,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5412,9 +5412,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5426,9 +5426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5440,9 +5440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5454,9 +5454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5468,9 +5468,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -5482,9 +5482,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5496,9 +5496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5510,9 +5510,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5524,9 +5524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5538,9 +5538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5552,9 +5552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5566,9 +5566,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5580,9 +5580,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5594,9 +5594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5608,9 +5608,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5622,9 +5622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5636,9 +5636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -5650,9 +5650,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5664,9 +5664,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5678,9 +5678,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5692,9 +5692,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5706,9 +5706,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5720,9 +5720,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5734,9 +5734,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5748,9 +5748,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5762,9 +5762,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -5776,9 +5776,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5790,9 +5790,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5804,9 +5804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5818,9 +5818,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5832,9 +5832,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5846,9 +5846,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5860,9 +5860,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5874,9 +5874,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5888,9 +5888,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5902,9 +5902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5916,9 +5916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -5930,9 +5930,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5944,9 +5944,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5958,9 +5958,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5972,9 +5972,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5986,9 +5986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6000,9 +6000,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6014,9 +6014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6028,9 +6028,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6042,9 +6042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6056,9 +6056,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6070,9 +6070,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6084,9 +6084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6098,9 +6098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6112,9 +6112,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -6126,9 +6126,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6140,9 +6140,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6154,9 +6154,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6168,9 +6168,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6182,9 +6182,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6196,9 +6196,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6210,9 +6210,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6224,9 +6224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6238,9 +6238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -6252,9 +6252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6266,9 +6266,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6280,9 +6280,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6294,9 +6294,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6308,9 +6308,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6322,9 +6322,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6336,9 +6336,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6350,9 +6350,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6364,9 +6364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6378,9 +6378,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -6392,9 +6392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6406,9 +6406,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6420,9 +6420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6434,9 +6434,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6448,9 +6448,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6462,9 +6462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6476,9 +6476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -6490,9 +6490,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6504,9 +6504,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6518,9 +6518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6532,9 +6532,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6546,9 +6546,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6560,9 +6560,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6574,9 +6574,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6588,9 +6588,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6602,9 +6602,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6616,9 +6616,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6630,9 +6630,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6644,9 +6644,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6658,9 +6658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6672,9 +6672,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6686,9 +6686,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6700,9 +6700,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6714,9 +6714,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6728,9 +6728,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6742,9 +6742,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6756,9 +6756,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6770,9 +6770,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6784,9 +6784,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6798,9 +6798,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6812,9 +6812,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6826,9 +6826,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6840,9 +6840,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6854,9 +6854,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6868,9 +6868,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6882,9 +6882,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6896,9 +6896,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6910,9 +6910,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6924,9 +6924,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6938,9 +6938,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6952,9 +6952,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6966,9 +6966,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6980,9 +6980,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6994,9 +6994,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7008,9 +7008,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7022,9 +7022,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7036,9 +7036,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7050,9 +7050,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7064,9 +7064,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7078,9 +7078,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7092,9 +7092,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7106,9 +7106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7120,9 +7120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7134,9 +7134,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7148,9 +7148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7162,9 +7162,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7176,9 +7176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7190,9 +7190,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7204,9 +7204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7218,9 +7218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7232,9 +7232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7246,9 +7246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7260,9 +7260,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7274,9 +7274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7288,9 +7288,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7302,9 +7302,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7316,9 +7316,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7330,9 +7330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7344,9 +7344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -7358,9 +7358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7372,9 +7372,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7386,9 +7386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7400,9 +7400,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7414,9 +7414,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7428,9 +7428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7442,9 +7442,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7456,9 +7456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7470,9 +7470,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7484,9 +7484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7498,9 +7498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7512,9 +7512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7526,9 +7526,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7540,9 +7540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7554,9 +7554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7568,9 +7568,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7582,9 +7582,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7596,9 +7596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7610,9 +7610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7624,9 +7624,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7638,9 +7638,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7652,9 +7652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7666,9 +7666,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7680,9 +7680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7694,9 +7694,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7708,9 +7708,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7722,9 +7722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7736,9 +7736,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7750,9 +7750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7764,9 +7764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7778,9 +7778,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7792,9 +7792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7806,9 +7806,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7820,9 +7820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7834,9 +7834,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7848,9 +7848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7862,9 +7862,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7876,9 +7876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7890,9 +7890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7904,9 +7904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7918,9 +7918,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7932,9 +7932,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7946,9 +7946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7960,9 +7960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7974,9 +7974,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7988,9 +7988,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8002,9 +8002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8016,9 +8016,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8030,9 +8030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8044,9 +8044,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8058,9 +8058,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8072,9 +8072,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8086,9 +8086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8100,9 +8100,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8114,9 +8114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8128,9 +8128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8142,9 +8142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8156,9 +8156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8170,9 +8170,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8184,9 +8184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8198,9 +8198,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8212,9 +8212,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8226,9 +8226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8240,9 +8240,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8254,9 +8254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8268,9 +8268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8282,9 +8282,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8296,9 +8296,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8310,9 +8310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8324,9 +8324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8338,9 +8338,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8352,9 +8352,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8366,9 +8366,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -8380,9 +8380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8394,9 +8394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -8408,9 +8408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8422,9 +8422,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8436,9 +8436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8450,9 +8450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8464,9 +8464,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8478,9 +8478,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8492,9 +8492,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8506,9 +8506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8520,9 +8520,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8534,9 +8534,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8548,9 +8548,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8562,9 +8562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8576,9 +8576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8590,9 +8590,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8604,9 +8604,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8618,9 +8618,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8632,9 +8632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8646,9 +8646,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8660,9 +8660,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8674,9 +8674,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8688,9 +8688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8702,9 +8702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8716,9 +8716,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8730,9 +8730,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8744,9 +8744,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8758,9 +8758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8772,9 +8772,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8786,9 +8786,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8800,9 +8800,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8814,9 +8814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8828,9 +8828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8842,9 +8842,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8856,9 +8856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8870,9 +8870,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8884,9 +8884,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8898,9 +8898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8912,9 +8912,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8926,9 +8926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8940,9 +8940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8954,9 +8954,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8968,9 +8968,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8982,9 +8982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8996,9 +8996,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9010,9 +9010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9024,9 +9024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9038,9 +9038,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -9052,9 +9052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9066,9 +9066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -9080,9 +9080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9094,9 +9094,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9108,9 +9108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9122,9 +9122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9136,9 +9136,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9150,9 +9150,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9164,9 +9164,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9178,9 +9178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9192,9 +9192,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9206,9 +9206,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9220,9 +9220,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9234,9 +9234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9248,9 +9248,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9262,9 +9262,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9276,9 +9276,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9290,9 +9290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9304,9 +9304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9318,9 +9318,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9332,9 +9332,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9346,9 +9346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9360,9 +9360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9374,9 +9374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9388,9 +9388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9402,9 +9402,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -9416,9 +9416,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -9430,9 +9430,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -9444,9 +9444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9458,9 +9458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -9472,9 +9472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9486,9 +9486,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9500,9 +9500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9514,9 +9514,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -9528,9 +9528,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9542,9 +9542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9556,9 +9556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9570,9 +9570,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9584,9 +9584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9598,9 +9598,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -9612,9 +9612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9626,9 +9626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -9640,9 +9640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9654,9 +9654,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9668,9 +9668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9682,9 +9682,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9696,9 +9696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9710,9 +9710,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -9724,9 +9724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9738,9 +9738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -9752,9 +9752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9766,9 +9766,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9780,9 +9780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9794,9 +9794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -9808,9 +9808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9822,9 +9822,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9836,9 +9836,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9850,9 +9850,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -9864,9 +9864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9878,9 +9878,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -9892,9 +9892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9906,9 +9906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -9920,9 +9920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9934,9 +9934,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9948,9 +9948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9962,9 +9962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9976,9 +9976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9990,9 +9990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10004,9 +10004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10018,9 +10018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10032,9 +10032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10046,9 +10046,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10060,9 +10060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10074,9 +10074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -10088,9 +10088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10102,9 +10102,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10116,9 +10116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10130,9 +10130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10144,9 +10144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10158,9 +10158,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10172,9 +10172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10186,9 +10186,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10200,9 +10200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10214,9 +10214,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -10228,9 +10228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10242,9 +10242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -10256,9 +10256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10270,9 +10270,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10284,9 +10284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10298,9 +10298,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10312,9 +10312,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -10326,9 +10326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10340,9 +10340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -10354,9 +10354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10368,9 +10368,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10382,9 +10382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10396,9 +10396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10410,9 +10410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10424,9 +10424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10438,9 +10438,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10452,9 +10452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10466,9 +10466,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10480,9 +10480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10494,9 +10494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -10508,9 +10508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10522,9 +10522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10536,9 +10536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10550,9 +10550,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10564,9 +10564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10578,9 +10578,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -10592,9 +10592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10606,9 +10606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -10620,9 +10620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10634,9 +10634,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10648,9 +10648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10662,9 +10662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -10676,9 +10676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10690,9 +10690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10704,9 +10704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10718,9 +10718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10732,9 +10732,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10746,9 +10746,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10760,9 +10760,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10774,9 +10774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10788,9 +10788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10802,9 +10802,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -10816,9 +10816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10830,9 +10830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.definition.variable.name: #9CDCFE", - "dark_plus_experimental": "meta.definition.variable.name: #9CDCFE", + "dark_modern": "meta.definition.variable.name: #9CDCFE", "hc_light": "meta.definition.variable.name: #001080", - "light_plus_experimental": "meta.definition.variable.name: #001080" + "light_modern": "meta.definition.variable.name: #001080" } }, { @@ -10844,9 +10844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10858,9 +10858,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10872,9 +10872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10886,9 +10886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10900,9 +10900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10914,9 +10914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10928,9 +10928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10942,9 +10942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10956,9 +10956,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10970,9 +10970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10984,9 +10984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10998,9 +10998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11012,9 +11012,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11026,9 +11026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11040,9 +11040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11054,9 +11054,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11068,9 +11068,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11082,9 +11082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11096,9 +11096,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11110,9 +11110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11124,9 +11124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11138,9 +11138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11152,9 +11152,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11166,9 +11166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11180,9 +11180,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11194,9 +11194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11208,9 +11208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11222,9 +11222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11236,9 +11236,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -11250,9 +11250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11264,9 +11264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -11278,9 +11278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11292,9 +11292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11306,9 +11306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11320,9 +11320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11334,9 +11334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11348,9 +11348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11362,9 +11362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11376,9 +11376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11390,9 +11390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11404,9 +11404,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -11418,9 +11418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11432,9 +11432,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11446,9 +11446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11460,9 +11460,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -11474,9 +11474,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11488,9 +11488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11502,9 +11502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11516,9 +11516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11530,9 +11530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11544,9 +11544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11558,9 +11558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11572,9 +11572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11586,9 +11586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11600,9 +11600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11614,9 +11614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11628,9 +11628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11642,9 +11642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -11656,9 +11656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11670,9 +11670,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11684,9 +11684,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11698,9 +11698,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11712,9 +11712,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11726,9 +11726,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11740,9 +11740,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11754,9 +11754,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -11768,9 +11768,9 @@ "dark_vs": "source.groovy.embedded: #D4D4D4", "light_vs": "source.groovy.embedded: #000000", "hc_black": "source.groovy.embedded: #FFFFFF", - "dark_plus_experimental": "source.groovy.embedded: #D4D4D4", + "dark_modern": "source.groovy.embedded: #D4D4D4", "hc_light": "source.groovy.embedded: #292929", - "light_plus_experimental": "source.groovy.embedded: #000000" + "light_modern": "source.groovy.embedded: #000000" } }, { @@ -11782,9 +11782,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -11796,9 +11796,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11810,9 +11810,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11824,9 +11824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11838,9 +11838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11852,9 +11852,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11866,9 +11866,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11880,9 +11880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11894,9 +11894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11908,9 +11908,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11922,9 +11922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11936,9 +11936,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11950,9 +11950,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11964,9 +11964,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -11978,9 +11978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11992,9 +11992,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12006,9 +12006,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12020,9 +12020,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12034,9 +12034,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12048,9 +12048,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12062,9 +12062,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.annotation.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.annotation.groovy: #4EC9B0", + "dark_modern": "storage.type.annotation.groovy: #4EC9B0", "hc_light": "storage.type.annotation.groovy: #185E73", - "light_plus_experimental": "storage.type.annotation.groovy: #267F99" + "light_modern": "storage.type.annotation.groovy: #267F99" } }, { @@ -12076,9 +12076,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -12090,9 +12090,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12104,9 +12104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12118,9 +12118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12132,9 +12132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12146,9 +12146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12160,9 +12160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12174,9 +12174,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -12188,9 +12188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12202,9 +12202,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12216,9 +12216,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12230,9 +12230,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -12244,9 +12244,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -12258,9 +12258,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -12272,9 +12272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12286,9 +12286,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.object.array.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.object.array.groovy: #4EC9B0", + "dark_modern": "storage.type.object.array.groovy: #4EC9B0", "hc_light": "storage.type.object.array.groovy: #185E73", - "light_plus_experimental": "storage.type.object.array.groovy: #267F99" + "light_modern": "storage.type.object.array.groovy: #267F99" } }, { @@ -12300,9 +12300,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12314,9 +12314,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12328,9 +12328,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12342,9 +12342,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12356,9 +12356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12370,9 +12370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12384,9 +12384,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12398,9 +12398,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12412,9 +12412,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12426,9 +12426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12440,9 +12440,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12454,9 +12454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12468,9 +12468,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12482,9 +12482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12496,9 +12496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12510,9 +12510,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.groovy: #4EC9B0", + "dark_modern": "storage.type.groovy: #4EC9B0", "hc_light": "storage.type.groovy: #185E73", - "light_plus_experimental": "storage.type.groovy: #267F99" + "light_modern": "storage.type.groovy: #267F99" } }, { @@ -12524,9 +12524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12538,9 +12538,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12552,9 +12552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12566,9 +12566,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12580,9 +12580,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12594,9 +12594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12608,9 +12608,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12622,9 +12622,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12636,9 +12636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12650,9 +12650,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -12664,9 +12664,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -12678,9 +12678,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -12692,9 +12692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12706,9 +12706,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -12720,9 +12720,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -12734,9 +12734,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -12748,9 +12748,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12762,9 +12762,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12776,9 +12776,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12790,9 +12790,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12804,9 +12804,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12818,9 +12818,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12832,9 +12832,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.annotation.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.annotation.groovy: #4EC9B0", + "dark_modern": "storage.type.annotation.groovy: #4EC9B0", "hc_light": "storage.type.annotation.groovy: #185E73", - "light_plus_experimental": "storage.type.annotation.groovy: #267F99" + "light_modern": "storage.type.annotation.groovy: #267F99" } }, { @@ -12846,9 +12846,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.groovy: #4EC9B0", + "dark_modern": "storage.type.primitive.groovy: #4EC9B0", "hc_light": "storage.type.primitive.groovy: #185E73", - "light_plus_experimental": "storage.type.primitive.groovy: #267F99" + "light_modern": "storage.type.primitive.groovy: #267F99" } }, { @@ -12860,9 +12860,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12874,9 +12874,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12888,9 +12888,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12902,9 +12902,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.groovy: #4EC9B0", + "dark_modern": "storage.type.primitive.groovy: #4EC9B0", "hc_light": "storage.type.primitive.groovy: #185E73", - "light_plus_experimental": "storage.type.primitive.groovy: #267F99" + "light_modern": "storage.type.primitive.groovy: #267F99" } }, { @@ -12916,9 +12916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12930,9 +12930,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12944,9 +12944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12958,9 +12958,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12972,9 +12972,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type.primitive.groovy: #4EC9B0", - "dark_plus_experimental": "storage.type.primitive.groovy: #4EC9B0", + "dark_modern": "storage.type.primitive.groovy: #4EC9B0", "hc_light": "storage.type.primitive.groovy: #185E73", - "light_plus_experimental": "storage.type.primitive.groovy: #267F99" + "light_modern": "storage.type.primitive.groovy: #267F99" } }, { @@ -12986,9 +12986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13000,9 +13000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13014,9 +13014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13028,9 +13028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13042,9 +13042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13056,9 +13056,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13070,9 +13070,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13084,9 +13084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13098,9 +13098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13112,9 +13112,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13126,9 +13126,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13140,9 +13140,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13154,9 +13154,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13168,9 +13168,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13182,9 +13182,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13196,9 +13196,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13210,9 +13210,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13224,9 +13224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13238,9 +13238,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13252,9 +13252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13266,9 +13266,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_handlebars.json b/extensions/vscode-colorize-tests/test/colorize-results/test_handlebars.json index 33d3c1637ae..2ee4ccd1f3b 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_handlebars.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_handlebars.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -232,9 +232,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -302,9 +302,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -512,9 +512,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -834,9 +834,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -890,9 +890,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_hbs.json b/extensions/vscode-colorize-tests/test/colorize-results/test_hbs.json index 149c4d79297..b79247facaa 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_hbs.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_hbs.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -568,9 +568,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -582,9 +582,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -638,9 +638,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -820,9 +820,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -890,9 +890,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -946,9 +946,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.handlebars: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.handlebars: #0F4A85", - "light_plus_experimental": "string.quoted.double.handlebars: #0000FF" + "light_modern": "string.quoted.double.handlebars: #0000FF" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.constant.handlebars: #DCDCAA", - "dark_plus_experimental": "support.constant.handlebars: #DCDCAA", + "dark_modern": "support.constant.handlebars: #DCDCAA", "hc_light": "support.constant.handlebars: #5E2CBC", - "light_plus_experimental": "support.constant.handlebars: #795E26" + "light_modern": "support.constant.handlebars: #795E26" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_hlsl.json b/extensions/vscode-colorize-tests/test/colorize-results/test_hlsl.json index 3a5d8d64bd2..5325987d5da 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_hlsl.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_hlsl.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_html.json b/extensions/vscode-colorize-tests/test/colorize-results/test_html.json index e4fab060509..6257a7ad456 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_html.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_html.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -680,9 +680,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -694,9 +694,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -708,9 +708,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -736,9 +736,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -778,9 +778,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -806,9 +806,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -848,9 +848,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -932,9 +932,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -946,9 +946,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.html: #0F4A85", - "light_plus_experimental": "string.unquoted.html: #0000FF" + "light_modern": "string.unquoted.html: #0000FF" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_ini.json b/extensions/vscode-colorize-tests/test/colorize-results/test_ini.json index dc11beb4bcd..c4babf18a6a 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_ini.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_ini.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -358,9 +358,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -372,9 +372,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_jl.json b/extensions/vscode-colorize-tests/test/colorize-results/test_jl.json index 05bc4802fbb..a559ba6edfc 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_jl.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_jl.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_js.json b/extensions/vscode-colorize-tests/test/colorize-results/test_js.json index 9e9a6176b93..c4bb55a1e22 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_js.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_js.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -400,9 +400,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -414,9 +414,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -582,9 +582,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -596,9 +596,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -764,9 +764,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -778,9 +778,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -946,9 +946,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -960,9 +960,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_json.json b/extensions/vscode-colorize-tests/test/colorize-results/test_json.json index 61640e774dc..60a9755e349 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_json.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_json.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -92,9 +92,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -106,9 +106,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -190,9 +190,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -204,9 +204,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -302,9 +302,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -316,9 +316,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -414,9 +414,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -428,9 +428,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -568,9 +568,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -582,9 +582,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -680,9 +680,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -694,9 +694,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -792,9 +792,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -806,9 +806,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -932,9 +932,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -946,9 +946,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_jsx.json b/extensions/vscode-colorize-tests/test/colorize-results/test_jsx.json index e6c4700423a..ed8845d9816 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_jsx.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_jsx.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -806,9 +806,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file 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 7cbb24253be..6937f0e26dc 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_less.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -78,9 +78,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -246,9 +246,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -316,9 +316,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.rgb-value: #0451A5", "hc_black": "constant.other.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.rgb-value: #CE9178", + "dark_modern": "constant.other.rgb-value: #CE9178", "hc_light": "constant.other.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.rgb-value: #0451A5" + "light_modern": "constant.other.rgb-value: #0451A5" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.mixin.css: #800000" + "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.mixin.css: #800000" + "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.mixin.css: #800000" + "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -1590,9 +1590,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.mixin.css: #800000" + "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -2360,9 +2360,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.parent-selector.css: #800000" + "light_modern": "entity.other.attribute-name.parent-selector.css: #800000" } }, { @@ -2990,9 +2990,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -3004,9 +3004,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.rgb-value: #0451A5", "hc_black": "constant.other.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.rgb-value: #CE9178", + "dark_modern": "constant.other.rgb-value: #CE9178", "hc_light": "constant.other.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.rgb-value: #0451A5" + "light_modern": "constant.other.rgb-value: #0451A5" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.rgb-value: #0451A5", "hc_black": "constant.other.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.rgb-value: #CE9178", + "dark_modern": "constant.other.rgb-value: #CE9178", "hc_light": "constant.other.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.rgb-value: #0451A5" + "light_modern": "constant.other.rgb-value: #0451A5" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -3508,9 +3508,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -4040,9 +4040,9 @@ "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_plus_experimental": "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_plus_experimental": "source.css.less entity.other.attribute-name.id: #800000" + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.rgb-value: #0451A5", "hc_black": "constant.other.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.rgb-value: #CE9178", + "dark_modern": "constant.other.rgb-value: #CE9178", "hc_light": "constant.other.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.rgb-value: #0451A5" + "light_modern": "constant.other.rgb-value: #0451A5" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "variable.other.less: #9CDCFE", "light_vs": "variable.other.less: #E50000", "hc_black": "variable.other.less: #D4D4D4", - "dark_plus_experimental": "variable.other.less: #9CDCFE", + "dark_modern": "variable.other.less: #9CDCFE", "hc_light": "variable.other.less: #264F78", - "light_plus_experimental": "variable.other.less: #E50000" + "light_modern": "variable.other.less: #E50000" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_log.json b/extensions/vscode-colorize-tests/test/colorize-results/test_log.json index 5680f24acb6..f75b3a1731a 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_log.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_log.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_lua.json b/extensions/vscode-colorize-tests/test/colorize-results/test_lua.json index d0efedccff6..c7a93a0446f 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_lua.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_lua.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -526,9 +526,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -680,9 +680,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -694,9 +694,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -834,9 +834,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -848,9 +848,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_m.json b/extensions/vscode-colorize-tests/test/colorize-results/test_m.json index 342d9d8fc84..c6c7e2d6278 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_m.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_m.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -92,9 +92,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -162,9 +162,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -176,9 +176,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -316,9 +316,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "keyword.operator.minus.exponent: #B5CEA8", "light_vs": "keyword.operator.minus.exponent: #098658", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator.minus.exponent: #B5CEA8", + "dark_modern": "keyword.operator.minus.exponent: #B5CEA8", "hc_light": "keyword.operator.minus.exponent: #096D48", - "light_plus_experimental": "keyword.operator.minus.exponent: #098658" + "light_modern": "keyword.operator.minus.exponent: #098658" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_md.json b/extensions/vscode-colorize-tests/test/colorize-results/test_md.json index 179bf535a31..d28d9c74747 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_md.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_md.json @@ -8,9 +8,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -624,9 +624,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -652,9 +652,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -694,9 +694,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -708,9 +708,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -778,9 +778,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -890,9 +890,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -904,9 +904,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.single.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.single.html: #0F4A85", - "light_plus_experimental": "string.quoted.single.html: #0000FF" + "light_modern": "string.quoted.single.html: #0000FF" } }, { @@ -918,9 +918,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -946,9 +946,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.html: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.html: #0F4A85", - "light_plus_experimental": "string.quoted.double.html: #0000FF" + "light_modern": "string.quoted.double.html: #0000FF" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "markup.inline.raw: #CE9178", "light_vs": "markup.inline.raw: #800000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.inline.raw: #CE9178", + "dark_modern": "markup.inline.raw: #CE9178", "hc_light": "markup.inline.raw: #0F4A85", - "light_plus_experimental": "markup.inline.raw: #800000" + "light_modern": "markup.inline.raw: #800000" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "markup.inline.raw: #CE9178", "light_vs": "markup.inline.raw: #800000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.inline.raw: #CE9178", + "dark_modern": "markup.inline.raw: #CE9178", "hc_light": "markup.inline.raw: #0F4A85", - "light_plus_experimental": "markup.inline.raw: #800000" + "light_modern": "markup.inline.raw: #800000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "markup.inline.raw: #CE9178", "light_vs": "markup.inline.raw: #800000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.inline.raw: #CE9178", + "dark_modern": "markup.inline.raw: #CE9178", "hc_light": "markup.inline.raw: #0F4A85", - "light_plus_experimental": "markup.inline.raw: #800000" + "light_modern": "markup.inline.raw: #800000" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "punctuation.definition.quote.begin.markdown: #6A9955", "light_vs": "punctuation.definition.quote.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.quote.begin.markdown: #6A9955", + "dark_modern": "punctuation.definition.quote.begin.markdown: #6A9955", "hc_light": "punctuation.definition.quote.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.quote.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.quote.begin.markdown: #0451A5" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "punctuation.definition.quote.begin.markdown: #6A9955", "light_vs": "punctuation.definition.quote.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.quote.begin.markdown: #6A9955", + "dark_modern": "punctuation.definition.quote.begin.markdown: #6A9955", "hc_light": "punctuation.definition.quote.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.quote.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.quote.begin.markdown: #0451A5" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "punctuation.definition.quote.begin.markdown: #6A9955", "light_vs": "punctuation.definition.quote.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.quote.begin.markdown: #6A9955", + "dark_modern": "punctuation.definition.quote.begin.markdown: #6A9955", "hc_light": "punctuation.definition.quote.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.quote.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.quote.begin.markdown: #0451A5" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "punctuation.definition.quote.begin.markdown: #6A9955", "light_vs": "punctuation.definition.quote.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.quote.begin.markdown: #6A9955", + "dark_modern": "punctuation.definition.quote.begin.markdown: #6A9955", "hc_light": "punctuation.definition.quote.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.quote.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.quote.begin.markdown: #0451A5" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,23 +2710,23 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "text.html.markdown meta.paragraph.markdown meta.image.inline.markdown string.other.link.description.title.markdown punctuation.definition.string.markdown", + "t": "text.html.markdown meta.paragraph.markdown meta.image.inline.markdown string.other.link.description.title.markdown punctuation.definition.string.begin.markdown", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2738,23 +2738,23 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "\"", - "t": "text.html.markdown meta.paragraph.markdown meta.image.inline.markdown string.other.link.description.title.markdown punctuation.definition.string.markdown", + "t": "text.html.markdown meta.paragraph.markdown meta.image.inline.markdown string.other.link.description.title.markdown punctuation.definition.string.end.markdown", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "punctuation.definition.list.begin.markdown: #6796E6", "light_vs": "punctuation.definition.list.begin.markdown: #0451A5", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "punctuation.definition.list.begin.markdown: #6796E6", + "dark_modern": "punctuation.definition.list.begin.markdown: #6796E6", "hc_light": "punctuation.definition.list.begin.markdown: #0451A5", - "light_plus_experimental": "punctuation.definition.list.begin.markdown: #0451A5" + "light_modern": "punctuation.definition.list.begin.markdown: #0451A5" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_mm.json b/extensions/vscode-colorize-tests/test/colorize-results/test_mm.json index 8a6c7929f7b..eeb16d5b737 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_mm.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_mm.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -92,9 +92,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -162,9 +162,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -176,9 +176,9 @@ "dark_vs": "meta.preprocessor: #569CD6", "light_vs": "meta.preprocessor: #0000FF", "hc_black": "meta.preprocessor: #569CD6", - "dark_plus_experimental": "meta.preprocessor: #569CD6", + "dark_modern": "meta.preprocessor: #569CD6", "hc_light": "meta.preprocessor: #0F4A85", - "light_plus_experimental": "meta.preprocessor: #0000FF" + "light_modern": "meta.preprocessor: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -316,9 +316,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "keyword.operator.minus.exponent: #B5CEA8", "light_vs": "keyword.operator.minus.exponent: #098658", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator.minus.exponent: #B5CEA8", + "dark_modern": "keyword.operator.minus.exponent: #B5CEA8", "hc_light": "keyword.operator.minus.exponent: #096D48", - "light_plus_experimental": "keyword.operator.minus.exponent: #098658" + "light_modern": "keyword.operator.minus.exponent: #098658" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_php.json b/extensions/vscode-colorize-tests/test/colorize-results/test_php.json index ddd12ae8d5c..ea79b0e2006 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_php.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_php.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -204,9 +204,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "punctuation.section.embedded.begin.php: #569CD6", "light_vs": "punctuation.section.embedded.begin.php: #800000", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded.begin.php: #569CD6", + "dark_modern": "punctuation.section.embedded.begin.php: #569CD6", "hc_light": "punctuation.section.embedded.begin.php: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded.begin.php: #800000" + "light_modern": "punctuation.section.embedded.begin.php: #800000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -330,9 +330,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -358,9 +358,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -414,9 +414,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -582,9 +582,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -596,9 +596,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -652,9 +652,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -680,9 +680,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -694,9 +694,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -708,9 +708,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -736,9 +736,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -750,9 +750,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -764,9 +764,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -778,9 +778,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -806,9 +806,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -820,9 +820,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -834,9 +834,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -848,9 +848,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -890,9 +890,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -904,9 +904,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -918,9 +918,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -946,9 +946,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -960,9 +960,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -974,9 +974,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -988,9 +988,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "meta.embedded: #FFFFFF", - "dark_plus_experimental": "meta.embedded: #D4D4D4", + "dark_modern": "meta.embedded: #D4D4D4", "hc_light": "meta.embedded: #292929", - "light_plus_experimental": "meta.embedded: #000000" + "light_modern": "meta.embedded: #000000" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "punctuation.section.embedded.end.php: #569CD6", "light_vs": "punctuation.section.embedded.end.php: #800000", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded.end.php: #569CD6", + "dark_modern": "punctuation.section.embedded.end.php: #569CD6", "hc_light": "punctuation.section.embedded.end.php: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded.end.php: #800000" + "light_modern": "punctuation.section.embedded.end.php: #800000" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "punctuation.section.embedded.end.php: #569CD6", "light_vs": "punctuation.section.embedded.end.php: #800000", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded.end.php: #569CD6", + "dark_modern": "punctuation.section.embedded.end.php: #569CD6", "hc_light": "punctuation.section.embedded.end.php: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded.end.php: #800000" + "light_modern": "punctuation.section.embedded.end.php: #800000" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_pl.json b/extensions/vscode-colorize-tests/test/colorize-results/test_pl.json index 35ff3df0e7e..1a80edc135c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_pl.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_pl.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -484,9 +484,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -554,9 +554,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -582,9 +582,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -610,9 +610,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -638,9 +638,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -848,9 +848,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -862,9 +862,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_ps1.json b/extensions/vscode-colorize-tests/test/colorize-results/test_ps1.json index 3d67e45b5a2..7fee15950e9 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_ps1.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_ps1.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "source.powershell variable.other.member: #DCDCAA", - "dark_plus_experimental": "source.powershell variable.other.member: #DCDCAA", + "dark_modern": "source.powershell variable.other.member: #DCDCAA", "hc_light": "source.powershell variable.other.member: #5E2CBC", - "light_plus_experimental": "source.powershell variable.other.member: #795E26" + "light_modern": "source.powershell variable.other.member: #795E26" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -848,9 +848,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -862,9 +862,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_pug.json b/extensions/vscode-colorize-tests/test/colorize-results/test_pug.json index 02989476982..eb506aa3365 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_pug.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_pug.json @@ -8,9 +8,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.comment.buffered.block.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.comment.buffered.block.pug: #0F4A85", - "light_plus_experimental": "string.comment.buffered.block.pug: #0000FF" + "light_modern": "string.comment.buffered.block.pug: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.comment.buffered.block.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.comment.buffered.block.pug: #0F4A85", - "light_plus_experimental": "string.comment.buffered.block.pug: #0000FF" + "light_modern": "string.comment.buffered.block.pug: #0000FF" } }, { @@ -36,9 +36,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.comment.buffered.block.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.comment.buffered.block.pug: #0F4A85", - "light_plus_experimental": "string.comment.buffered.block.pug: #0000FF" + "light_modern": "string.comment.buffered.block.pug: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -148,23 +148,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "'width: '", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "width: ", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -176,9 +204,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -190,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +232,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -218,9 +246,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -232,9 +260,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -246,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,23 +288,51 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { - "c": "'%'", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "%", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -288,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +358,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -316,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +386,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -344,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +414,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -372,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -414,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -442,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +512,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -470,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +540,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -498,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +568,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -526,23 +582,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "'width: '", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "width: ", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -554,9 +638,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -568,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +666,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -596,9 +680,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -610,9 +694,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -624,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,23 +722,51 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { - "c": "'%'", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "%", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "'", + "t": "text.pug meta.tag.other attribute_value string.quoted.single.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -666,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +792,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -694,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +820,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -722,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +848,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -750,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -792,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -820,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +946,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -848,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -876,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +1002,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -904,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -960,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "meta.object-literal.key: #9CDCFE", - "dark_plus_experimental": "meta.object-literal.key: #9CDCFE", + "dark_modern": "meta.object-literal.key: #9CDCFE", "hc_light": "meta.object-literal.key: #001080", - "light_plus_experimental": "meta.object-literal.key: #001080" + "light_modern": "meta.object-literal.key: #001080" } }, { @@ -974,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +1100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1002,9 +1114,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1016,9 +1128,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1030,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1170,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1072,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1100,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,23 +1226,23 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { "c": ".welcomebox", - "t": "text.pug entity.other.attribute-name.class.pug", + "t": "text.pug meta.selector.css entity.other.attribute-name.class.css.pug", "r": { - "dark_plus": "entity.other.attribute-name: #9CDCFE", - "light_plus": "entity.other.attribute-name: #E50000", - "dark_vs": "entity.other.attribute-name: #9CDCFE", - "light_vs": "entity.other.attribute-name: #E50000", - "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", - "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "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" } }, { @@ -1142,9 +1254,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.comment.buffered.block.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.comment.buffered.block.pug: #0F4A85", - "light_plus_experimental": "string.comment.buffered.block.pug: #0000FF" + "light_modern": "string.comment.buffered.block.pug: #0000FF" } }, { @@ -1156,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1282,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1184,9 +1296,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1198,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1324,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.interpolated.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.interpolated.pug: #0F4A85", - "light_plus_experimental": "string.interpolated.pug: #0000FF" + "light_modern": "string.interpolated.pug: #0000FF" } }, { @@ -1226,9 +1338,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.interpolated.pug: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1240,9 +1352,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.interpolated.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.interpolated.pug: #0F4A85", - "light_plus_experimental": "string.interpolated.pug: #0000FF" + "light_modern": "string.interpolated.pug: #0000FF" } }, { @@ -1254,9 +1366,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.interpolated.pug: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1268,9 +1380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.interpolated.pug: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.interpolated.pug: #0F4A85", - "light_plus_experimental": "string.interpolated.pug: #0000FF" + "light_modern": "string.interpolated.pug: #0000FF" } }, { @@ -1282,9 +1394,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1296,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,23 +1422,23 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { "c": ".loginbox", - "t": "text.pug entity.other.attribute-name.class.pug", + "t": "text.pug meta.selector.css entity.other.attribute-name.class.css.pug", "r": { - "dark_plus": "entity.other.attribute-name: #9CDCFE", - "light_plus": "entity.other.attribute-name: #E50000", - "dark_vs": "entity.other.attribute-name: #9CDCFE", - "light_vs": "entity.other.attribute-name: #E50000", - "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", - "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "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" } }, { @@ -1338,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1464,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1366,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1492,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1394,23 +1506,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"login\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "login", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1422,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1576,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1450,23 +1590,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"/login\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "/login", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1478,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1660,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1506,23 +1674,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"post\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "post", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1534,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1758,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1576,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1786,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1604,23 +1800,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"text\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "text", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1632,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1870,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1660,23 +1884,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"user\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "user", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1688,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1968,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1730,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1996,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1758,23 +2010,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"password\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "password", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1786,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +2080,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1814,23 +2094,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"pass\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "pass", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1842,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +2178,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1884,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +2206,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1912,23 +2220,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"submit\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "submit", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1940,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +2290,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1968,23 +2304,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "\"login\"", - "t": "text.pug meta.tag.other attribute_value string.quoted.pug", + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.begin.js", "r": { "dark_plus": "string: #CE9178", - "light_plus": "string.quoted.pug: #0000FF", + "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", - "light_vs": "string.quoted.pug: #0000FF", + "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string.quoted.pug: #0F4A85", - "light_plus_experimental": "string.quoted.pug: #0000FF" + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "login", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" + } + }, + { + "c": "\"", + "t": "text.pug meta.tag.other attribute_value string.quoted.double.js punctuation.definition.string.end.js", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -1996,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2374,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2024,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2052,9 +2416,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2066,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2094,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2122,9 +2486,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2136,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -2164,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/python/test/colorize-results/test_py.json b/extensions/vscode-colorize-tests/test/colorize-results/test_py.json similarity index 60% rename from extensions/python/test/colorize-results/test_py.json rename to extensions/vscode-colorize-tests/test/colorize-results/test_py.json index c0a14453646..9d40766533d 100644 --- a/extensions/python/test/colorize-results/test_py.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_py.json @@ -7,7 +7,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -18,7 +21,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -29,7 +35,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -40,7 +49,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -51,7 +63,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -62,7 +77,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -73,7 +91,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -84,7 +105,10 @@ "light_plus": "entity.name.type: #267F99", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.type: #4EC9B0" + "hc_black": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", + "hc_light": "entity.name.type: #185E73", + "light_modern": "entity.name.type: #267F99" } }, { @@ -95,7 +119,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -106,7 +133,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -117,7 +147,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -128,7 +161,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -139,7 +175,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -150,7 +189,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -161,7 +203,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -172,7 +217,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -183,7 +231,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -194,7 +245,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -205,7 +259,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -216,7 +273,10 @@ "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.function: #DCDCAA" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -227,7 +287,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -238,7 +301,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -249,7 +315,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -260,7 +329,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -271,7 +343,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -282,7 +357,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -293,7 +371,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -304,40 +385,52 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { "c": "'''", "t": "source.python string.quoted.docstring.multi.python punctuation.definition.string.begin.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": "Make the monkey eat N bananas!", "t": "source.python string.quoted.docstring.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": "'''", "t": "source.python string.quoted.docstring.multi.python punctuation.definition.string.end.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { @@ -348,7 +441,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -359,7 +455,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -370,7 +469,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -381,7 +483,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -392,7 +497,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -403,7 +511,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -414,7 +525,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -425,7 +539,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -436,7 +553,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -447,7 +567,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -458,7 +581,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -469,7 +595,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -480,7 +609,10 @@ "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.function: #DCDCAA" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -491,7 +623,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -502,7 +637,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -513,7 +651,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -524,7 +665,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -535,7 +679,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -546,7 +693,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -557,7 +707,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -568,7 +721,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -579,7 +735,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -590,7 +749,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -601,7 +763,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -612,7 +777,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -623,7 +791,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -634,7 +805,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -645,7 +819,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -656,7 +833,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -667,7 +847,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -678,7 +861,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -689,7 +875,10 @@ "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.function: #DCDCAA" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -700,7 +889,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -711,7 +903,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -722,7 +917,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -733,7 +931,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -744,7 +945,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -755,7 +959,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -766,7 +973,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -777,7 +987,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -788,7 +1001,10 @@ "light_plus": "constant.language: #0000FF", "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", - "hc_black": "constant.language: #569CD6" + "hc_black": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", + "hc_light": "constant.language: #0F4A85", + "light_modern": "constant.language: #0000FF" } }, { @@ -799,7 +1015,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -810,7 +1029,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -821,7 +1043,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -832,7 +1057,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -843,7 +1071,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -854,7 +1085,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -865,7 +1099,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -876,7 +1113,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -887,7 +1127,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -898,7 +1141,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -909,7 +1155,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -920,7 +1169,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -931,7 +1183,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -942,7 +1197,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -953,7 +1211,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -964,7 +1225,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -975,7 +1239,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -986,7 +1253,10 @@ "light_plus": "keyword.operator.logical.python: #0000FF", "dark_vs": "keyword.operator.logical.python: #569CD6", "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" + "hc_black": "keyword.operator.logical.python: #569CD6", + "dark_modern": "keyword.operator.logical.python: #569CD6", + "hc_light": "keyword.operator.logical.python: #0F4A85", + "light_modern": "keyword.operator.logical.python: #0000FF" } }, { @@ -997,7 +1267,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1008,7 +1281,10 @@ "light_plus": "keyword.operator.logical.python: #0000FF", "dark_vs": "keyword.operator.logical.python: #569CD6", "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" + "hc_black": "keyword.operator.logical.python: #569CD6", + "dark_modern": "keyword.operator.logical.python: #569CD6", + "hc_light": "keyword.operator.logical.python: #0F4A85", + "light_modern": "keyword.operator.logical.python: #0000FF" } }, { @@ -1019,7 +1295,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1030,7 +1309,10 @@ "light_plus": "constant.language: #0000FF", "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", - "hc_black": "constant.language: #569CD6" + "hc_black": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", + "hc_light": "constant.language: #0F4A85", + "light_modern": "constant.language: #0000FF" } }, { @@ -1041,7 +1323,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1052,7 +1337,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1063,7 +1351,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1074,7 +1365,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1085,7 +1379,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1096,7 +1393,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1107,7 +1407,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1118,7 +1421,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1129,7 +1435,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -1140,7 +1449,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -1151,7 +1463,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1162,7 +1477,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1173,7 +1491,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1184,788 +1505,24 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { - "c": "if", + "c": "pass", "t": "source.python keyword.control.flow.python", "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "1900", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " year ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "2100", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "and", - "t": "source.python keyword.operator.logical.python", - "r": { - "dark_plus": "keyword.operator.logical.python: #569CD6", - "light_plus": "keyword.operator.logical.python: #0000FF", - "dark_vs": "keyword.operator.logical.python: #569CD6", - "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "1", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<=", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " month ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<=", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "12", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "\\", - "t": "source.python punctuation.separator.continuation.line.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "and", - "t": "source.python keyword.operator.logical.python", - "r": { - "dark_plus": "keyword.operator.logical.python: #569CD6", - "light_plus": "keyword.operator.logical.python: #0000FF", - "dark_vs": "keyword.operator.logical.python: #569CD6", - "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "1", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<=", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " day ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<=", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "31", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "and", - "t": "source.python keyword.operator.logical.python", - "r": { - "dark_plus": "keyword.operator.logical.python: #569CD6", - "light_plus": "keyword.operator.logical.python: #0000FF", - "dark_vs": "keyword.operator.logical.python: #569CD6", - "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "0", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<=", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " hour ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "24", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "\\", - "t": "source.python punctuation.separator.continuation.line.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "and", - "t": "source.python keyword.operator.logical.python", - "r": { - "dark_plus": "keyword.operator.logical.python: #569CD6", - "light_plus": "keyword.operator.logical.python: #0000FF", - "dark_vs": "keyword.operator.logical.python: #569CD6", - "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "0", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<=", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " minute ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "60", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "and", - "t": "source.python keyword.operator.logical.python", - "r": { - "dark_plus": "keyword.operator.logical.python: #569CD6", - "light_plus": "keyword.operator.logical.python: #0000FF", - "dark_vs": "keyword.operator.logical.python: #569CD6", - "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "0", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<=", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " second ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "<", - "t": "source.python keyword.operator.comparison.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "60", - "t": "source.python constant.numeric.dec.python", - "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" - } - }, - { - "c": ":", - "t": "source.python punctuation.separator.colon.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "#", - "t": "source.python comment.line.number-sign.python punctuation.definition.comment.python", - "r": { - "dark_plus": "comment: #6A9955", - "light_plus": "comment: #008000", - "dark_vs": "comment: #6A9955", - "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" - } - }, - { - "c": " Looks like a valid date", - "t": "source.python comment.line.number-sign.python", - "r": { - "dark_plus": "comment: #6A9955", - "light_plus": "comment: #008000", - "dark_vs": "comment: #6A9955", - "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "return", - "t": "source.python keyword.control.flow.python", - "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" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "1", - "t": "source.python constant.numeric.dec.python", - "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" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1976,7 +1533,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -1987,7 +1547,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -1998,7 +1561,10 @@ "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.function: #DCDCAA" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -2009,7 +1575,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2020,7 +1589,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -2031,7 +1603,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2042,7 +1617,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2053,7 +1631,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -2064,7 +1645,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2075,7 +1659,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2086,7 +1673,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2097,18 +1687,24 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { - "c": " i ", + "c": " _ ", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2119,7 +1715,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2130,7 +1729,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2141,7 +1743,10 @@ "light_plus": "support.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA" + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" } }, { @@ -2152,7 +1757,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2163,7 +1771,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2174,7 +1785,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2185,7 +1799,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2196,7 +1813,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2207,7 +1827,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2218,7 +1841,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2229,7 +1855,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2240,7 +1869,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2251,7 +1883,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2262,7 +1897,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2273,7 +1911,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -2284,7 +1925,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2295,7 +1939,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -2306,7 +1953,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2317,7 +1967,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -2328,7 +1981,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2339,7 +1995,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -2350,7 +2009,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2361,7 +2023,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2372,7 +2037,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -2383,7 +2051,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2394,7 +2065,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2405,7 +2079,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2416,7 +2093,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2427,7 +2107,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -2438,7 +2121,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2449,7 +2135,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -2460,7 +2149,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2471,7 +2163,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -2482,7 +2177,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2493,7 +2191,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -2504,7 +2205,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2515,7 +2219,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2526,7 +2233,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2537,7 +2247,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -2548,7 +2261,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2559,7 +2275,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2570,7 +2289,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2581,7 +2303,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2592,7 +2317,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2603,7 +2331,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2614,7 +2345,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2625,7 +2359,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2636,7 +2373,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2647,7 +2387,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2658,7 +2401,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2669,7 +2415,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2680,7 +2429,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2691,7 +2443,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2702,7 +2457,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2713,7 +2471,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2724,7 +2485,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2735,7 +2499,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2746,7 +2513,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2757,7 +2527,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2768,7 +2541,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2779,7 +2555,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2790,7 +2569,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2801,7 +2583,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2812,7 +2597,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2823,7 +2611,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2834,7 +2625,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2845,7 +2639,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2856,7 +2653,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2867,7 +2667,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2878,7 +2681,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2889,7 +2695,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -2900,7 +2709,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2911,7 +2723,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2922,7 +2737,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2933,7 +2751,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2944,7 +2765,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2955,7 +2779,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -2966,7 +2793,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2977,7 +2807,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2988,7 +2821,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -2999,7 +2835,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3010,7 +2849,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3021,7 +2863,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -3032,7 +2877,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -3043,7 +2891,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3054,7 +2905,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -3065,7 +2919,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -3076,7 +2933,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -3087,7 +2947,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3098,7 +2961,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3109,7 +2975,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -3120,7 +2989,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -3131,7 +3003,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -3142,7 +3017,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3153,7 +3031,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -3164,7 +3045,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -3175,7 +3059,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3186,7 +3073,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -3197,7 +3087,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3208,7 +3101,10 @@ "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.function: #DCDCAA" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -3219,7 +3115,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3230,7 +3129,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -3241,7 +3143,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3252,62 +3157,80 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": " ", + "c": "\t", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { "c": "\"\"\"", "t": "source.python string.quoted.docstring.multi.python punctuation.definition.string.begin.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": "Berechnung der zu zahlenden Steuern fuer ein zu versteuerndes Einkommen von x", "t": "source.python string.quoted.docstring.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": "\"\"\"", "t": "source.python string.quoted.docstring.multi.python punctuation.definition.string.end.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { - "c": " ", + "c": "\t", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3318,7 +3241,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3329,7 +3255,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3340,7 +3269,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3351,7 +3283,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3362,7 +3297,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -3373,29 +3311,38 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": " steuer ", + "c": "\t\t", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": "=", - "t": "source.python keyword.operator.assignment.python", + "c": "return", + "t": "source.python keyword.control.flow.python", "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_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" } }, { @@ -3406,7 +3353,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3417,18 +3367,24 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { - "c": " ", + "c": "\t", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3439,7 +3395,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3450,7 +3409,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3461,7 +3423,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3472,7 +3437,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3483,7 +3451,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -3494,18 +3465,24 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": " y ", + "c": "\t\ty ", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3516,7 +3493,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3527,7 +3507,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3538,7 +3521,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3549,7 +3535,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3560,7 +3549,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3571,7 +3563,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -3582,7 +3577,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3593,7 +3591,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3604,29 +3605,38 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { - "c": " steuer ", + "c": "\t\t", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": "=", - "t": "source.python keyword.operator.assignment.python", + "c": "return", + "t": "source.python keyword.control.flow.python", "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_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" } }, { @@ -3637,7 +3647,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3648,7 +3661,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3659,7 +3675,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -3670,7 +3689,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3681,7 +3703,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3692,7 +3717,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3703,7 +3731,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3714,7 +3745,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3725,7 +3759,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -3736,7 +3773,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3747,7 +3787,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3758,18 +3801,24 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": " ", + "c": "\t", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3780,7 +3829,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3791,29 +3843,38 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": " steuer ", + "c": "\t\t", "t": "source.python", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { - "c": "=", - "t": "source.python keyword.operator.assignment.python", + "c": "return", + "t": "source.python keyword.control.flow.python", "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_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" } }, { @@ -3824,7 +3885,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3835,7 +3899,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3846,7 +3913,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3857,7 +3927,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -3868,7 +3941,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3879,7 +3955,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -3890,7 +3969,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3901,40 +3983,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" - } - }, - { - "c": " ", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "return", - "t": "source.python keyword.control.flow.python", - "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" - } - }, - { - "c": " steuer", - "t": "source.python", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -3945,7 +3997,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -3956,7 +4011,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3967,7 +4025,10 @@ "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.function: #DCDCAA" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { @@ -3978,7 +4039,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -3989,7 +4053,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -4000,7 +4067,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4011,7 +4081,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4022,7 +4095,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -4033,7 +4109,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4044,7 +4123,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4055,7 +4137,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -4066,7 +4151,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -4077,7 +4165,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4088,7 +4179,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4099,7 +4193,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4110,7 +4207,10 @@ "light_plus": "support.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA" + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" } }, { @@ -4121,7 +4221,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4132,7 +4235,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4143,7 +4249,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4154,7 +4263,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4165,7 +4277,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4176,7 +4291,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4187,7 +4305,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4198,7 +4319,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4209,7 +4333,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4220,7 +4347,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4231,7 +4361,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4242,7 +4375,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4253,7 +4389,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4264,7 +4403,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4275,7 +4417,10 @@ "light_plus": "support.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA" + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" } }, { @@ -4286,7 +4431,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4297,7 +4445,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4308,7 +4459,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4319,7 +4473,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -4330,7 +4487,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4341,7 +4501,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4352,7 +4515,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -4363,7 +4529,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4374,7 +4543,10 @@ "light_plus": "entity.name.type: #267F99", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "entity.name.type: #4EC9B0" + "hc_black": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", + "hc_light": "entity.name.type: #185E73", + "light_modern": "entity.name.type: #267F99" } }, { @@ -4385,7 +4557,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4396,7 +4571,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4407,7 +4585,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -4418,7 +4599,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4429,7 +4613,10 @@ "light_plus": "support.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA" + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" } }, { @@ -4440,7 +4627,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4451,7 +4641,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -4462,7 +4655,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4473,7 +4669,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4484,7 +4683,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -4495,7 +4697,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4506,7 +4711,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4517,7 +4725,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4528,7 +4739,10 @@ "light_plus": "variable.language: #0000FF", "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable.language: #569CD6", + "hc_light": "variable.language: #0F4A85", + "light_modern": "variable.language: #0000FF" } }, { @@ -4539,7 +4753,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4550,7 +4767,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4561,7 +4781,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4572,7 +4795,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -4583,7 +4809,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4594,7 +4823,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4605,7 +4837,10 @@ "light_plus": "variable.language: #0000FF", "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable.language: #569CD6", + "hc_light": "variable.language: #0F4A85", + "light_modern": "variable.language: #0000FF" } }, { @@ -4616,7 +4851,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4627,7 +4865,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4638,7 +4879,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4649,7 +4893,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -4660,7 +4907,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4671,7 +4921,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4682,7 +4935,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4693,7 +4949,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4704,7 +4963,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -4715,7 +4977,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4726,7 +4991,10 @@ "light_plus": "support.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA" + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" } }, { @@ -4737,7 +5005,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4748,7 +5019,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -4759,7 +5033,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4770,7 +5047,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4781,7 +5061,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -4792,7 +5075,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -4803,7 +5089,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4814,7 +5103,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4825,7 +5117,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4836,7 +5131,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4847,7 +5145,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4858,7 +5159,10 @@ "light_plus": "keyword.operator.logical.python: #0000FF", "dark_vs": "keyword.operator.logical.python: #569CD6", "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" + "hc_black": "keyword.operator.logical.python: #569CD6", + "dark_modern": "keyword.operator.logical.python: #569CD6", + "hc_light": "keyword.operator.logical.python: #0F4A85", + "light_modern": "keyword.operator.logical.python: #0000FF" } }, { @@ -4869,7 +5173,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4880,7 +5187,10 @@ "light_plus": "keyword.operator.logical.python: #0000FF", "dark_vs": "keyword.operator.logical.python: #569CD6", "light_vs": "keyword.operator.logical.python: #0000FF", - "hc_black": "keyword.operator.logical.python: #569CD6" + "hc_black": "keyword.operator.logical.python: #569CD6", + "dark_modern": "keyword.operator.logical.python: #569CD6", + "hc_light": "keyword.operator.logical.python: #0F4A85", + "light_modern": "keyword.operator.logical.python: #0000FF" } }, { @@ -4891,7 +5201,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4902,7 +5215,10 @@ "light_plus": "variable.language: #0000FF", "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable.language: #569CD6", + "hc_light": "variable.language: #0F4A85", + "light_modern": "variable.language: #0000FF" } }, { @@ -4913,7 +5229,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4924,7 +5243,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4935,7 +5257,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4946,7 +5271,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4957,7 +5285,10 @@ "light_plus": "variable.language: #0000FF", "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable.language: #569CD6", + "hc_light": "variable.language: #0F4A85", + "light_modern": "variable.language: #0000FF" } }, { @@ -4968,7 +5299,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4979,7 +5313,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -4990,7 +5327,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5001,7 +5341,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5012,7 +5355,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5023,7 +5369,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5034,7 +5383,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -5045,7 +5397,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5056,7 +5411,10 @@ "light_plus": "variable.language: #0000FF", "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable.language: #569CD6", + "hc_light": "variable.language: #0F4A85", + "light_modern": "variable.language: #0000FF" } }, { @@ -5067,7 +5425,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5078,7 +5439,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5089,7 +5453,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5100,7 +5467,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -5111,7 +5481,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5122,7 +5495,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5133,7 +5509,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5144,7 +5523,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5155,7 +5537,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5166,7 +5551,10 @@ "light_plus": "variable.language: #0000FF", "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable.language: #569CD6", + "hc_light": "variable.language: #0F4A85", + "light_modern": "variable.language: #0000FF" } }, { @@ -5177,7 +5565,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5188,7 +5579,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5199,7 +5593,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5210,7 +5607,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5221,7 +5621,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5232,7 +5635,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5243,7 +5649,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -5254,7 +5663,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5265,7 +5677,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5276,7 +5691,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5287,7 +5705,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5298,7 +5719,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -5309,7 +5733,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -5320,7 +5747,10 @@ "light_plus": "support.other.parenthesis.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "support.other.parenthesis.regexp: #CE9178", + "hc_light": "support.other.parenthesis.regexp: #D16969", + "light_modern": "support.other.parenthesis.regexp: #D16969" } }, { @@ -5331,7 +5761,10 @@ "light_plus": "punctuation.character.set.begin.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "punctuation.character.set.begin.regexp: #CE9178", + "hc_light": "punctuation.character.set.begin.regexp: #D16969", + "light_modern": "punctuation.character.set.begin.regexp: #D16969" } }, { @@ -5342,7 +5775,10 @@ "light_plus": "constant.character.set.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "constant.character: #569CD6" + "hc_black": "constant.character: #569CD6", + "dark_modern": "constant.character.set.regexp: #D16969", + "hc_light": "constant.character.set.regexp: #811F3F", + "light_modern": "constant.character.set.regexp: #811F3F" } }, { @@ -5353,7 +5789,10 @@ "light_plus": "punctuation.character.set.end.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "punctuation.character.set.end.regexp: #CE9178", + "hc_light": "punctuation.character.set.end.regexp: #D16969", + "light_modern": "punctuation.character.set.end.regexp: #D16969" } }, { @@ -5364,7 +5803,10 @@ "light_plus": "keyword.operator.quantifier.regexp: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", + "hc_light": "keyword.operator.quantifier.regexp: #000000", + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -5375,7 +5817,10 @@ "light_plus": "support.other.parenthesis.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "support.other.parenthesis.regexp: #CE9178", + "hc_light": "support.other.parenthesis.regexp: #D16969", + "light_modern": "support.other.parenthesis.regexp: #D16969" } }, { @@ -5386,7 +5831,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -5397,7 +5845,10 @@ "light_plus": "keyword.operator.quantifier.regexp: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", + "hc_light": "keyword.operator.quantifier.regexp: #000000", + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -5408,7 +5859,10 @@ "light_plus": "support.other.parenthesis.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "support.other.parenthesis.regexp: #CE9178", + "hc_light": "support.other.parenthesis.regexp: #D16969", + "light_modern": "support.other.parenthesis.regexp: #D16969" } }, { @@ -5419,7 +5873,10 @@ "light_plus": "punctuation.character.set.begin.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "punctuation.character.set.begin.regexp: #CE9178", + "hc_light": "punctuation.character.set.begin.regexp: #D16969", + "light_modern": "punctuation.character.set.begin.regexp: #D16969" } }, { @@ -5430,7 +5887,10 @@ "light_plus": "constant.character.set.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "constant.character: #569CD6" + "hc_black": "constant.character: #569CD6", + "dark_modern": "constant.character.set.regexp: #D16969", + "hc_light": "constant.character.set.regexp: #811F3F", + "light_modern": "constant.character.set.regexp: #811F3F" } }, { @@ -5441,7 +5901,10 @@ "light_plus": "punctuation.character.set.end.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "punctuation.character.set.end.regexp: #CE9178", + "hc_light": "punctuation.character.set.end.regexp: #D16969", + "light_modern": "punctuation.character.set.end.regexp: #D16969" } }, { @@ -5452,7 +5915,10 @@ "light_plus": "keyword.operator.quantifier.regexp: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", + "hc_light": "keyword.operator.quantifier.regexp: #000000", + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -5463,7 +5929,10 @@ "light_plus": "support.other.parenthesis.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "support.other.parenthesis.regexp: #CE9178", + "hc_light": "support.other.parenthesis.regexp: #D16969", + "light_modern": "support.other.parenthesis.regexp: #D16969" } }, { @@ -5474,7 +5943,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -5485,7 +5957,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -5496,7 +5971,10 @@ "light_plus": "keyword.operator.quantifier.regexp: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", + "hc_light": "keyword.operator.quantifier.regexp: #000000", + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -5507,7 +5985,10 @@ "light_plus": "support.other.parenthesis.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "support.other.parenthesis.regexp: #CE9178", + "hc_light": "support.other.parenthesis.regexp: #D16969", + "light_modern": "support.other.parenthesis.regexp: #D16969" } }, { @@ -5518,7 +5999,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -5529,7 +6013,10 @@ "light_plus": "keyword.operator.quantifier.regexp: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator.quantifier.regexp: #D7BA7D", + "hc_light": "keyword.operator.quantifier.regexp: #000000", + "light_modern": "keyword.operator.quantifier.regexp: #000000" } }, { @@ -5540,7 +6027,10 @@ "light_plus": "support.other.parenthesis.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "support.other.parenthesis.regexp: #CE9178", + "hc_light": "support.other.parenthesis.regexp: #D16969", + "light_modern": "support.other.parenthesis.regexp: #D16969" } }, { @@ -5551,7 +6041,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -5562,7 +6055,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5573,7 +6069,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5584,7 +6083,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5595,7 +6097,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5606,7 +6111,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5617,7 +6125,10 @@ "light_plus": "constant.language: #0000FF", "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", - "hc_black": "constant.language: #569CD6" + "hc_black": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", + "hc_light": "constant.language: #0F4A85", + "light_modern": "constant.language: #0000FF" } }, { @@ -5628,7 +6139,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5639,7 +6153,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5650,7 +6167,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5661,7 +6181,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5672,7 +6195,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5683,7 +6209,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -5694,7 +6223,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5705,7 +6237,10 @@ "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { @@ -5716,7 +6251,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5727,7 +6265,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -5738,7 +6279,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -5749,7 +6293,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -5760,7 +6307,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5771,7 +6321,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5782,7 +6335,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -5793,7 +6349,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5804,7 +6363,10 @@ "light_plus": "support.type: #267F99", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.type: #4EC9B0" + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { @@ -5815,7 +6377,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5826,7 +6391,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5837,7 +6405,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5848,7 +6419,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5859,7 +6433,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5870,7 +6447,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5881,7 +6461,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5892,7 +6475,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5903,7 +6489,10 @@ "light_plus": "support.type: #267F99", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.type: #4EC9B0" + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { @@ -5914,7 +6503,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5925,7 +6517,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5936,7 +6531,10 @@ "light_plus": "support.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA" + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" } }, { @@ -5947,7 +6545,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -5958,7 +6559,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -5969,7 +6573,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -5980,7 +6587,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -5991,7 +6601,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6002,7 +6615,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6013,7 +6629,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6024,7 +6643,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6035,7 +6657,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6046,7 +6671,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6057,7 +6685,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6068,7 +6699,10 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6079,7 +6713,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6090,7 +6727,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6101,7 +6741,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6112,7 +6755,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6123,7 +6769,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6134,7 +6783,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6145,7 +6797,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6156,7 +6811,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6167,7 +6825,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -6178,7 +6839,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6189,7 +6853,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6200,7 +6867,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6211,7 +6881,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6222,7 +6895,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6233,7 +6909,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6244,7 +6923,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6255,7 +6937,10 @@ "light_plus": "constant.numeric: #098658", "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", - "hc_black": "constant.numeric: #B5CEA8" + "hc_black": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", + "hc_light": "constant.numeric: #096D48", + "light_modern": "constant.numeric: #098658" } }, { @@ -6266,7 +6951,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6277,7 +6965,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6288,7 +6979,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6299,7 +6993,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6310,7 +7007,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6321,7 +7021,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6332,7 +7035,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6343,7 +7049,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6354,7 +7063,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6365,7 +7077,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6376,7 +7091,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6387,7 +7105,10 @@ "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "hc_black": "string: #CE9178", + "dark_modern": "string: #CE9178", + "hc_light": "string: #0F4A85", + "light_modern": "string: #A31515" } }, { @@ -6398,7 +7119,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6409,7 +7133,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6420,7 +7147,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6431,7 +7161,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6442,7 +7175,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6453,7 +7189,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6464,7 +7203,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6475,7 +7217,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -6486,7 +7231,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6497,7 +7245,10 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { @@ -6508,7 +7259,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -6519,7 +7273,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -6530,7 +7287,10 @@ "light_plus": "punctuation.character.set.begin.regexp: #D16969", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "punctuation.character.set.begin.regexp: #CE9178", + "hc_light": "punctuation.character.set.begin.regexp: #D16969", + "light_modern": "punctuation.character.set.begin.regexp: #D16969" } }, { @@ -6541,7 +7301,10 @@ "light_plus": "constant.character.set.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "constant.character: #569CD6" + "hc_black": "constant.character: #569CD6", + "dark_modern": "constant.character.set.regexp: #D16969", + "hc_light": "constant.character.set.regexp: #811F3F", + "light_modern": "constant.character.set.regexp: #811F3F" } }, { @@ -6552,7 +7315,10 @@ "light_plus": "string.regexp: #811F3F", "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", - "hc_black": "string.regexp: #D16969" + "hc_black": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", + "hc_light": "string.regexp: #811F3F", + "light_modern": "string.regexp: #811F3F" } }, { @@ -6563,7 +7329,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6574,7 +7343,10 @@ "light_plus": "keyword.operator: #000000", "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { @@ -6585,7 +7357,10 @@ "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -6596,7 +7371,10 @@ "light_plus": "constant.language: #0000FF", "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", - "hc_black": "constant.language: #569CD6" + "hc_black": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", + "hc_light": "constant.language: #0F4A85", + "light_modern": "constant.language: #0000FF" } }, { @@ -6607,7 +7385,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6618,7 +7399,10 @@ "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "hc_black": "comment: #7CA668", + "dark_modern": "comment: #6A9955", + "hc_light": "comment: #515151", + "light_modern": "comment: #008000" } }, { @@ -6629,51 +7413,66 @@ "light_plus": "storage.type: #0000FF", "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", - "hc_black": "storage.type: #569CD6" + "hc_black": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", + "hc_light": "storage.type: #0F4A85", + "light_modern": "storage.type: #0000FF" } }, { "c": "'''", "t": "source.python string.quoted.docstring.raw.multi.python punctuation.definition.string.begin.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": "Module docstring", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": " Some text followed by code sample:", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": " ", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { @@ -6684,29 +7483,38 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { "c": "for a in foo(2, b=1,", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": " ", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { @@ -6717,29 +7525,38 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { "c": " c=3):", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": " ", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { @@ -6750,51 +7567,66 @@ "light_plus": "keyword.control: #AF00DB", "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" } }, { "c": " print(a)", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": " 0", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": " 1", "t": "source.python string.quoted.docstring.raw.multi.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } }, { "c": "'''", "t": "source.python string.quoted.docstring.raw.multi.python punctuation.definition.string.end.python", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" + "dark_plus": "string.quoted.docstring: #6A9955", + "light_plus": "string.quoted.docstring: #008000", + "dark_vs": "string.quoted.docstring: #6A9955", + "light_vs": "string.quoted.docstring: #008000", + "hc_black": "string.quoted.docstring: #7CA668", + "dark_modern": "string.quoted.docstring: #6A9955", + "hc_light": "string.quoted.docstring: #515151", + "light_modern": "string.quoted.docstring: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_r.json b/extensions/vscode-colorize-tests/test/colorize-results/test_r.json index ac5499422fa..128918635b5 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_r.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_r.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -120,9 +120,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -134,9 +134,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -148,9 +148,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -162,9 +162,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -204,9 +204,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -302,9 +302,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -344,9 +344,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -960,9 +960,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -974,9 +974,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_rb.json b/extensions/vscode-colorize-tests/test/colorize-results/test_rb.json index 68adda281b2..d36726f9866 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_rb.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_rb.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.other.inherited-class: #4EC9B0", - "dark_plus_experimental": "entity.other.inherited-class: #4EC9B0", + "dark_modern": "entity.other.inherited-class: #4EC9B0", "hc_light": "entity.other.inherited-class: #185E73", - "light_plus_experimental": "entity.other.inherited-class: #267F99" + "light_modern": "entity.other.inherited-class: #267F99" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.other.inherited-class: #4EC9B0", - "dark_plus_experimental": "entity.other.inherited-class: #4EC9B0", + "dark_modern": "entity.other.inherited-class: #4EC9B0", "hc_light": "entity.other.inherited-class: #185E73", - "light_plus_experimental": "entity.other.inherited-class: #267F99" + "light_modern": "entity.other.inherited-class: #267F99" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.other.inherited-class: #4EC9B0", - "dark_plus_experimental": "entity.other.inherited-class: #4EC9B0", + "dark_modern": "entity.other.inherited-class: #4EC9B0", "hc_light": "entity.other.inherited-class: #185E73", - "light_plus_experimental": "entity.other.inherited-class: #267F99" + "light_modern": "entity.other.inherited-class: #267F99" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.other.inherited-class: #4EC9B0", - "dark_plus_experimental": "entity.other.inherited-class: #4EC9B0", + "dark_modern": "entity.other.inherited-class: #4EC9B0", "hc_light": "entity.other.inherited-class: #185E73", - "light_plus_experimental": "entity.other.inherited-class: #267F99" + "light_modern": "entity.other.inherited-class: #267F99" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.other.inherited-class: #4EC9B0", - "dark_plus_experimental": "entity.other.inherited-class: #4EC9B0", + "dark_modern": "entity.other.inherited-class: #4EC9B0", "hc_light": "entity.other.inherited-class: #185E73", - "light_plus_experimental": "entity.other.inherited-class: #267F99" + "light_modern": "entity.other.inherited-class: #267F99" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -792,9 +792,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "meta.embedded: #D4D4D4", "light_vs": "meta.embedded: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable.other.constant: #4FC1FF", + "dark_modern": "variable.other.constant: #4FC1FF", "hc_light": "variable.other.constant: #02715D", - "light_plus_experimental": "variable.other.constant: #0070C1" + "light_modern": "variable.other.constant: #0070C1" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "punctuation.section.embedded: #569CD6", "light_vs": "punctuation.section.embedded: #0000FF", "hc_black": "punctuation.section.embedded: #569CD6", - "dark_plus_experimental": "punctuation.section.embedded: #569CD6", + "dark_modern": "punctuation.section.embedded: #569CD6", "hc_light": "punctuation.section.embedded: #0F4A85", - "light_plus_experimental": "punctuation.section.embedded: #0000FF" + "light_modern": "punctuation.section.embedded: #0000FF" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "string.regexp: #D16969", "light_vs": "string.regexp: #811F3F", "hc_black": "string.regexp: #D16969", - "dark_plus_experimental": "string.regexp: #D16969", + "dark_modern": "string.regexp: #D16969", "hc_light": "string.regexp: #811F3F", - "light_plus_experimental": "string.regexp: #811F3F" + "light_modern": "string.regexp: #811F3F" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_rs.json b/extensions/vscode-colorize-tests/test/colorize-results/test_rs.json index 461c0b1eb67..01f18f457a2 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_rs.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_rs.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.namespace: #4EC9B0", - "dark_plus_experimental": "entity.name.namespace: #4EC9B0", + "dark_modern": "entity.name.namespace: #4EC9B0", "hc_light": "entity.name.namespace: #185E73", - "light_plus_experimental": "entity.name.namespace: #267F99" + "light_modern": "entity.name.namespace: #267F99" } }, { @@ -50,9 +50,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -344,9 +344,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -358,9 +358,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.namespace: #4EC9B0", - "dark_plus_experimental": "entity.name.namespace: #4EC9B0", + "dark_modern": "entity.name.namespace: #4EC9B0", "hc_light": "entity.name.namespace: #185E73", - "light_plus_experimental": "entity.name.namespace: #267F99" + "light_modern": "entity.name.namespace: #267F99" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -722,9 +722,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -904,9 +904,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -918,9 +918,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_rst.json b/extensions/vscode-colorize-tests/test/colorize-results/test_rst.json index bbeafc1d999..aa8468c4d8a 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_rst.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_rst.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "markup.bold: #569CD6", "light_vs": "markup.bold: #000080", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "markup.bold: #569CD6", + "dark_modern": "markup.bold: #569CD6", "hc_light": "markup.bold: #000080", - "light_plus_experimental": "markup.bold: #000080" + "light_modern": "markup.bold: #000080" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "markup.heading: #569CD6", "light_vs": "markup.heading: #800000", "hc_black": "markup.heading: #6796E6", - "dark_plus_experimental": "markup.heading: #569CD6", + "dark_modern": "markup.heading: #569CD6", "hc_light": "markup.heading: #0F4A85", - "light_plus_experimental": "markup.heading: #800000" + "light_modern": "markup.heading: #800000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -554,9 +554,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -624,9 +624,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -638,9 +638,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -708,9 +708,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -722,9 +722,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -904,9 +904,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1254,23 +1254,23 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { "c": " :module: mod", - "t": "source.rst comment.block", + "t": "source.rst comment.block comment.block", "r": { "dark_plus": "comment: #6A9955", "light_plus": "comment: #008000", "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file 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 b23e24b0a7c..843cf288784 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -106,9 +106,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -386,9 +386,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -568,9 +568,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -918,9 +918,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1338,9 +1338,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -1352,9 +1352,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.pseudo-class.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1590,9 +1590,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -1604,9 +1604,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2150,9 +2150,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -2164,9 +2164,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -2612,9 +2612,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -4586,9 +4586,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4922,9 +4922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4936,9 +4936,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -4950,9 +4950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4964,9 +4964,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -4978,9 +4978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4992,9 +4992,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5006,9 +5006,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5020,9 +5020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5034,9 +5034,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5048,9 +5048,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5062,9 +5062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5076,9 +5076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5090,9 +5090,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5104,9 +5104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5118,9 +5118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5132,9 +5132,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -5146,9 +5146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5160,9 +5160,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5174,9 +5174,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5188,9 +5188,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -5202,9 +5202,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -5216,9 +5216,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5230,9 +5230,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5244,9 +5244,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5258,9 +5258,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5272,9 +5272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5286,9 +5286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5300,9 +5300,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5314,9 +5314,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5328,9 +5328,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5342,9 +5342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5356,9 +5356,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5370,9 +5370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5384,9 +5384,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5398,9 +5398,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5412,9 +5412,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5426,9 +5426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5440,9 +5440,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5454,9 +5454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5468,9 +5468,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5482,9 +5482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5496,9 +5496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5510,9 +5510,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5524,9 +5524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5538,9 +5538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5552,9 +5552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -5566,9 +5566,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -5580,9 +5580,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5594,9 +5594,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5608,9 +5608,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5622,9 +5622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -5636,9 +5636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -5650,9 +5650,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5664,9 +5664,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5678,9 +5678,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5692,9 +5692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5706,9 +5706,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5720,9 +5720,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5734,9 +5734,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5748,9 +5748,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5762,9 +5762,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5776,9 +5776,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5790,9 +5790,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -5804,9 +5804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5818,9 +5818,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5832,9 +5832,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -5846,9 +5846,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5860,9 +5860,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5874,9 +5874,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5888,9 +5888,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5902,9 +5902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5916,9 +5916,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5930,9 +5930,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5944,9 +5944,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -5958,9 +5958,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -5972,9 +5972,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5986,9 +5986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -6000,9 +6000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6014,9 +6014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6028,9 +6028,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -6042,9 +6042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6056,9 +6056,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6070,9 +6070,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6084,9 +6084,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6098,9 +6098,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6112,9 +6112,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6126,9 +6126,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6140,9 +6140,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6154,9 +6154,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6168,9 +6168,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6182,9 +6182,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6196,9 +6196,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6210,9 +6210,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -6224,9 +6224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6238,9 +6238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6252,9 +6252,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6266,9 +6266,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6280,9 +6280,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6294,9 +6294,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -6308,9 +6308,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6322,9 +6322,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6336,9 +6336,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6350,9 +6350,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6364,9 +6364,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6378,9 +6378,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6392,9 +6392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6406,9 +6406,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6420,9 +6420,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6434,9 +6434,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6448,9 +6448,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6462,9 +6462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6476,9 +6476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6490,9 +6490,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -6504,9 +6504,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6518,9 +6518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6532,9 +6532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -6546,9 +6546,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6560,9 +6560,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -6574,9 +6574,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6588,9 +6588,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6602,9 +6602,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6616,9 +6616,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6630,9 +6630,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6644,9 +6644,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -6658,9 +6658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6672,9 +6672,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6686,9 +6686,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6700,9 +6700,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6714,9 +6714,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6728,9 +6728,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6742,9 +6742,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -6756,9 +6756,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6770,9 +6770,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6784,9 +6784,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6798,9 +6798,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6812,9 +6812,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6826,9 +6826,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6840,9 +6840,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6854,9 +6854,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6868,9 +6868,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6882,9 +6882,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -6896,9 +6896,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -6910,9 +6910,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6924,9 +6924,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6938,9 +6938,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6952,9 +6952,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -6966,9 +6966,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6980,9 +6980,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -6994,9 +6994,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7008,9 +7008,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7022,9 +7022,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7036,9 +7036,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -7050,9 +7050,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7064,9 +7064,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7078,9 +7078,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7092,9 +7092,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7106,9 +7106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -7120,9 +7120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7134,9 +7134,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -7148,9 +7148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7162,9 +7162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7176,9 +7176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7190,9 +7190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7204,9 +7204,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7218,9 +7218,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7232,9 +7232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7246,9 +7246,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -7260,9 +7260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7274,9 +7274,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7288,9 +7288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7302,9 +7302,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -7316,9 +7316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7330,9 +7330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7344,9 +7344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7358,9 +7358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7372,9 +7372,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -7386,9 +7386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7400,9 +7400,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7414,9 +7414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7428,9 +7428,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7442,9 +7442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7456,9 +7456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7470,9 +7470,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7484,9 +7484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7498,9 +7498,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -7512,9 +7512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7526,9 +7526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7540,9 +7540,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -7554,9 +7554,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -7568,9 +7568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7582,9 +7582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7596,9 +7596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7610,9 +7610,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -7624,9 +7624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7638,9 +7638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7652,9 +7652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -7666,9 +7666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7680,9 +7680,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7694,9 +7694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7708,9 +7708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7722,9 +7722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7736,9 +7736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7750,9 +7750,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7764,9 +7764,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7778,9 +7778,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -7792,9 +7792,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7806,9 +7806,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7820,9 +7820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7834,9 +7834,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7848,9 +7848,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7862,9 +7862,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7876,9 +7876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7890,9 +7890,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -7904,9 +7904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7918,9 +7918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7932,9 +7932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -7946,9 +7946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7960,9 +7960,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7974,9 +7974,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -7988,9 +7988,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8002,9 +8002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8016,9 +8016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8030,9 +8030,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8044,9 +8044,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8058,9 +8058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8072,9 +8072,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8086,9 +8086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8100,9 +8100,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8114,9 +8114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8128,9 +8128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -8142,9 +8142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8156,9 +8156,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8170,9 +8170,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8184,9 +8184,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8198,9 +8198,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -8212,9 +8212,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8226,9 +8226,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8240,9 +8240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8254,9 +8254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8268,9 +8268,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -8282,9 +8282,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -8296,9 +8296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8310,9 +8310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8324,9 +8324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8338,9 +8338,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8352,9 +8352,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8366,9 +8366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8380,9 +8380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8394,9 +8394,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8408,9 +8408,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -8422,9 +8422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8436,9 +8436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8450,9 +8450,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8464,9 +8464,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8478,9 +8478,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -8492,9 +8492,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -8506,9 +8506,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -8520,9 +8520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8534,9 +8534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8548,9 +8548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8562,9 +8562,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8576,9 +8576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8590,9 +8590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8604,9 +8604,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8618,9 +8618,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -8632,9 +8632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8646,9 +8646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8660,9 +8660,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8674,9 +8674,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8688,9 +8688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8702,9 +8702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.media: #0451A5", "hc_black": "support.constant.media: #CE9178", - "dark_plus_experimental": "support.constant.media: #CE9178", + "dark_modern": "support.constant.media: #CE9178", "hc_light": "support.constant.media: #0451A5", - "light_plus_experimental": "support.constant.media: #0451A5" + "light_modern": "support.constant.media: #0451A5" } }, { @@ -8716,9 +8716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8730,9 +8730,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8744,9 +8744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8758,9 +8758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8772,9 +8772,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8786,9 +8786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8800,9 +8800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8814,9 +8814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -8828,9 +8828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8842,9 +8842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8856,9 +8856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8870,9 +8870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8884,9 +8884,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -8898,9 +8898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8912,9 +8912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8926,9 +8926,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8940,9 +8940,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -8954,9 +8954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8968,9 +8968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8982,9 +8982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8996,9 +8996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9010,9 +9010,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -9024,9 +9024,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -9038,9 +9038,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -9052,9 +9052,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9066,9 +9066,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9080,9 +9080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9094,9 +9094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9108,9 +9108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9122,9 +9122,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9136,9 +9136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9150,9 +9150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9164,9 +9164,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9178,9 +9178,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -9192,9 +9192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9206,9 +9206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -9220,9 +9220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -9234,9 +9234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9248,9 +9248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9262,9 +9262,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9276,9 +9276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9290,9 +9290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9304,9 +9304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -9318,9 +9318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -9332,9 +9332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9346,9 +9346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9360,9 +9360,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9374,9 +9374,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9388,9 +9388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9402,9 +9402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9416,9 +9416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9430,9 +9430,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -9444,9 +9444,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -9458,9 +9458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9472,9 +9472,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9486,9 +9486,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -9500,9 +9500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9514,9 +9514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9528,9 +9528,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9542,9 +9542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9556,9 +9556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9570,9 +9570,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9584,9 +9584,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -9598,9 +9598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9612,9 +9612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9626,9 +9626,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -9640,9 +9640,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -9654,9 +9654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9668,9 +9668,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -9682,9 +9682,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -9696,9 +9696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9710,9 +9710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9724,9 +9724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9738,9 +9738,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9752,9 +9752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9766,9 +9766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9780,9 +9780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -9794,9 +9794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9808,9 +9808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9822,9 +9822,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9836,9 +9836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9850,9 +9850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9864,9 +9864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -9878,9 +9878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9892,9 +9892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9906,9 +9906,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -9920,9 +9920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9934,9 +9934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9948,9 +9948,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9962,9 +9962,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -9976,9 +9976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9990,9 +9990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10004,9 +10004,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10018,9 +10018,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -10032,9 +10032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10046,9 +10046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10060,9 +10060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10074,9 +10074,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10088,9 +10088,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10102,9 +10102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10116,9 +10116,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -10130,9 +10130,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -10144,9 +10144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10158,9 +10158,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -10172,9 +10172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10186,9 +10186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10200,9 +10200,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -10214,9 +10214,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -10228,9 +10228,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -10242,9 +10242,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10256,9 +10256,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10270,9 +10270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10284,9 +10284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10298,9 +10298,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10312,9 +10312,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10326,9 +10326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10340,9 +10340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -10354,9 +10354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10368,9 +10368,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -10382,9 +10382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10396,9 +10396,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -10410,9 +10410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10424,9 +10424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10438,9 +10438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10452,9 +10452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10466,9 +10466,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10480,9 +10480,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10494,9 +10494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10508,9 +10508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -10522,9 +10522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10536,9 +10536,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -10550,9 +10550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10564,9 +10564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10578,9 +10578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10592,9 +10592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10606,9 +10606,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10620,9 +10620,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10634,9 +10634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10648,9 +10648,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10662,9 +10662,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10676,9 +10676,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10690,9 +10690,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -10704,9 +10704,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10718,9 +10718,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10732,9 +10732,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -10746,9 +10746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10760,9 +10760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10774,9 +10774,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -10788,9 +10788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10802,9 +10802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10816,9 +10816,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10830,9 +10830,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -10844,9 +10844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10858,9 +10858,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10872,9 +10872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10886,9 +10886,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -10900,9 +10900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10914,9 +10914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10928,9 +10928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10942,9 +10942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10956,9 +10956,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10970,9 +10970,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10984,9 +10984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10998,9 +10998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -11012,9 +11012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11026,9 +11026,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -11040,9 +11040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11054,9 +11054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11068,9 +11068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11082,9 +11082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11096,9 +11096,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -11110,9 +11110,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -11124,9 +11124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11138,9 +11138,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11152,9 +11152,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11166,9 +11166,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11180,9 +11180,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -11194,9 +11194,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11208,9 +11208,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11222,9 +11222,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -11236,9 +11236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11250,9 +11250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11264,9 +11264,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -11278,9 +11278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11292,9 +11292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11306,9 +11306,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11320,9 +11320,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -11334,9 +11334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11348,9 +11348,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11362,9 +11362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11376,9 +11376,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -11390,9 +11390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11404,9 +11404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11418,9 +11418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11432,9 +11432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11446,9 +11446,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11460,9 +11460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11474,9 +11474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11488,9 +11488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -11502,9 +11502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11516,9 +11516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11530,9 +11530,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11544,9 +11544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11558,9 +11558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11572,9 +11572,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -11586,9 +11586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11600,9 +11600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11614,9 +11614,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -11628,9 +11628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11642,9 +11642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11656,9 +11656,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -11670,9 +11670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11684,9 +11684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11698,9 +11698,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11712,9 +11712,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11726,9 +11726,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11740,9 +11740,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11754,9 +11754,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11768,9 +11768,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -11782,9 +11782,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -11796,9 +11796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11810,9 +11810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11824,9 +11824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11838,9 +11838,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -11852,9 +11852,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -11866,9 +11866,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11880,9 +11880,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11894,9 +11894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11908,9 +11908,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11922,9 +11922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11936,9 +11936,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11950,9 +11950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11964,9 +11964,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11978,9 +11978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11992,9 +11992,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12006,9 +12006,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12020,9 +12020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12034,9 +12034,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12048,9 +12048,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -12062,9 +12062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12076,9 +12076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12090,9 +12090,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12104,9 +12104,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -12118,9 +12118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12132,9 +12132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -12146,9 +12146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12160,9 +12160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12174,9 +12174,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12188,9 +12188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12202,9 +12202,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12216,9 +12216,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12230,9 +12230,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12244,9 +12244,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12258,9 +12258,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12272,9 +12272,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12286,9 +12286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12300,9 +12300,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12314,9 +12314,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12328,9 +12328,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12342,9 +12342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12356,9 +12356,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -12370,9 +12370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12384,9 +12384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12398,9 +12398,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12412,9 +12412,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -12426,9 +12426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12440,9 +12440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -12454,9 +12454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12468,9 +12468,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12482,9 +12482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12496,9 +12496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12510,9 +12510,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12524,9 +12524,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12538,9 +12538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12552,9 +12552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12566,9 +12566,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12580,9 +12580,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -12594,9 +12594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12608,9 +12608,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12622,9 +12622,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12636,9 +12636,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -12650,9 +12650,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12664,9 +12664,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -12678,9 +12678,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12692,9 +12692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12706,9 +12706,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12720,9 +12720,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12734,9 +12734,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -12748,9 +12748,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -12762,9 +12762,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -12776,9 +12776,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -12790,9 +12790,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12804,9 +12804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12818,9 +12818,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12832,9 +12832,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -12846,9 +12846,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12860,9 +12860,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12874,9 +12874,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12888,9 +12888,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12902,9 +12902,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12916,9 +12916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12930,9 +12930,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -12944,9 +12944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12958,9 +12958,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12972,9 +12972,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12986,9 +12986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13000,9 +13000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13014,9 +13014,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -13028,9 +13028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13042,9 +13042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13056,9 +13056,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -13070,9 +13070,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13084,9 +13084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13098,9 +13098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13112,9 +13112,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13126,9 +13126,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13140,9 +13140,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13154,9 +13154,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13168,9 +13168,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13182,9 +13182,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -13196,9 +13196,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13210,9 +13210,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13224,9 +13224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -13238,9 +13238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13252,9 +13252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13266,9 +13266,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13280,9 +13280,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13294,9 +13294,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -13308,9 +13308,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -13322,9 +13322,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -13336,9 +13336,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13350,9 +13350,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13364,9 +13364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13378,9 +13378,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -13392,9 +13392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13406,9 +13406,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13420,9 +13420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13434,9 +13434,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13448,9 +13448,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13462,9 +13462,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13476,9 +13476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13490,9 +13490,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13504,9 +13504,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13518,9 +13518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13532,9 +13532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13546,9 +13546,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -13560,9 +13560,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -13574,9 +13574,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13588,9 +13588,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -13602,9 +13602,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13616,9 +13616,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13630,9 +13630,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13644,9 +13644,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13658,9 +13658,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -13672,9 +13672,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13686,9 +13686,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13700,9 +13700,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -13714,9 +13714,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -13728,9 +13728,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13742,9 +13742,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13756,9 +13756,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13770,9 +13770,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -13784,9 +13784,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13798,9 +13798,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13812,9 +13812,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13826,9 +13826,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13840,9 +13840,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -13854,9 +13854,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -13868,9 +13868,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -13882,9 +13882,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13896,9 +13896,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13910,9 +13910,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13924,9 +13924,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -13938,9 +13938,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13952,9 +13952,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -13966,9 +13966,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13980,9 +13980,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -13994,9 +13994,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14008,9 +14008,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14022,9 +14022,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14036,9 +14036,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -14050,9 +14050,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14064,9 +14064,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14078,9 +14078,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14092,9 +14092,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -14106,9 +14106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14120,9 +14120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14134,9 +14134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14148,9 +14148,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -14162,9 +14162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14176,9 +14176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14190,9 +14190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -14204,9 +14204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14218,9 +14218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14232,9 +14232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14246,9 +14246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14260,9 +14260,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14274,9 +14274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14288,9 +14288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14302,9 +14302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -14316,9 +14316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14330,9 +14330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14344,9 +14344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14358,9 +14358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14372,9 +14372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14386,9 +14386,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -14400,9 +14400,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -14414,9 +14414,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -14428,9 +14428,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14442,9 +14442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14456,9 +14456,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -14470,9 +14470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14484,9 +14484,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -14498,9 +14498,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -14512,9 +14512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14526,9 +14526,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14540,9 +14540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14554,9 +14554,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -14568,9 +14568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14582,9 +14582,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -14596,9 +14596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14610,9 +14610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14624,9 +14624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14638,9 +14638,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -14652,9 +14652,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -14666,9 +14666,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14680,9 +14680,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14694,9 +14694,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14708,9 +14708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14722,9 +14722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14736,9 +14736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14750,9 +14750,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -14764,9 +14764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14778,9 +14778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14792,9 +14792,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -14806,9 +14806,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -14820,9 +14820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14834,9 +14834,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -14848,9 +14848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14862,9 +14862,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14876,9 +14876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14890,9 +14890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14904,9 +14904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14918,9 +14918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14932,9 +14932,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14946,9 +14946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14960,9 +14960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14974,9 +14974,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -14988,9 +14988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15002,9 +15002,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -15016,9 +15016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15030,9 +15030,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -15044,9 +15044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15058,9 +15058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15072,9 +15072,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -15086,9 +15086,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -15100,9 +15100,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -15114,9 +15114,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15128,9 +15128,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15142,9 +15142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15156,9 +15156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -15170,9 +15170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15184,9 +15184,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15198,9 +15198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15212,9 +15212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15226,9 +15226,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15240,9 +15240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15254,9 +15254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15268,9 +15268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15282,9 +15282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15296,9 +15296,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15310,9 +15310,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15324,9 +15324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15338,9 +15338,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15352,9 +15352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15366,9 +15366,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15380,9 +15380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15394,9 +15394,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -15408,9 +15408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15422,9 +15422,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15436,9 +15436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15450,9 +15450,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15464,9 +15464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15478,9 +15478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15492,9 +15492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15506,9 +15506,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15520,9 +15520,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -15534,9 +15534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15548,9 +15548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15562,9 +15562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -15576,9 +15576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15590,9 +15590,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15604,9 +15604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15618,9 +15618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15632,9 +15632,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -15646,9 +15646,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -15660,9 +15660,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -15674,9 +15674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15688,9 +15688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15702,9 +15702,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -15716,9 +15716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15730,9 +15730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15744,9 +15744,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15758,9 +15758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15772,9 +15772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15786,9 +15786,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15800,9 +15800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15814,9 +15814,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -15828,9 +15828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15842,9 +15842,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -15856,9 +15856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15870,9 +15870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15884,9 +15884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15898,9 +15898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15912,9 +15912,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -15926,9 +15926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15940,9 +15940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15954,9 +15954,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -15968,9 +15968,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -15982,9 +15982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -15996,9 +15996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16010,9 +16010,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16024,9 +16024,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16038,9 +16038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16052,9 +16052,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -16066,9 +16066,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -16080,9 +16080,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -16094,9 +16094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16108,9 +16108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16122,9 +16122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16136,9 +16136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16150,9 +16150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16164,9 +16164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16178,9 +16178,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16192,9 +16192,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16206,9 +16206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16220,9 +16220,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -16234,9 +16234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16248,9 +16248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16262,9 +16262,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -16276,9 +16276,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -16290,9 +16290,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -16304,9 +16304,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16318,9 +16318,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16332,9 +16332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16346,9 +16346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -16360,9 +16360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16374,9 +16374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16388,9 +16388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16402,9 +16402,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -16416,9 +16416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16430,9 +16430,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16444,9 +16444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16458,9 +16458,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -16472,9 +16472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16486,9 +16486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16500,9 +16500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.font-name: #0451A5", "hc_black": "support.constant.font-name: #CE9178", - "dark_plus_experimental": "support.constant.font-name: #CE9178", + "dark_modern": "support.constant.font-name: #CE9178", "hc_light": "support.constant.font-name: #0451A5", - "light_plus_experimental": "support.constant.font-name: #0451A5" + "light_modern": "support.constant.font-name: #0451A5" } }, { @@ -16514,9 +16514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16528,9 +16528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16542,9 +16542,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -16556,9 +16556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16570,9 +16570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16584,9 +16584,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -16598,9 +16598,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -16612,9 +16612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16626,9 +16626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16640,9 +16640,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -16654,9 +16654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16668,9 +16668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16682,9 +16682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -16696,9 +16696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16710,9 +16710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16724,9 +16724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16738,9 +16738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16752,9 +16752,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -16766,9 +16766,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16780,9 +16780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16794,9 +16794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -16808,9 +16808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -16822,9 +16822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16836,9 +16836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16850,9 +16850,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -16864,9 +16864,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -16878,9 +16878,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16892,9 +16892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16906,9 +16906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16920,9 +16920,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16934,9 +16934,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -16948,9 +16948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16962,9 +16962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -16976,9 +16976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -16990,9 +16990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17004,9 +17004,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -17018,9 +17018,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17032,9 +17032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17046,9 +17046,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -17060,9 +17060,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -17074,9 +17074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17088,9 +17088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17102,9 +17102,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -17116,9 +17116,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -17130,9 +17130,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -17144,9 +17144,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -17158,9 +17158,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -17172,9 +17172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17186,9 +17186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -17200,9 +17200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17214,9 +17214,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -17228,9 +17228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17242,9 +17242,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -17256,9 +17256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17270,9 +17270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17284,9 +17284,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -17298,9 +17298,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -17312,9 +17312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17326,9 +17326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17340,9 +17340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17354,9 +17354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17368,9 +17368,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -17382,9 +17382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17396,9 +17396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17410,9 +17410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17424,9 +17424,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -17438,9 +17438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17452,9 +17452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17466,9 +17466,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -17480,9 +17480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17494,9 +17494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17508,9 +17508,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -17522,9 +17522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17536,9 +17536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17550,9 +17550,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -17564,9 +17564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17578,9 +17578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17592,9 +17592,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -17606,9 +17606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17620,9 +17620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17634,9 +17634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -17648,9 +17648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17662,9 +17662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17676,9 +17676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17690,9 +17690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17704,9 +17704,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -17718,9 +17718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17732,9 +17732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17746,9 +17746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17760,9 +17760,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -17774,9 +17774,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -17788,9 +17788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17802,9 +17802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -17816,9 +17816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17830,9 +17830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -17844,9 +17844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17858,9 +17858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17872,9 +17872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17886,9 +17886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17900,9 +17900,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -17914,9 +17914,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -17928,9 +17928,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -17942,9 +17942,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -17956,9 +17956,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -17970,9 +17970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -17984,9 +17984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -17998,9 +17998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18012,9 +18012,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -18026,9 +18026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18040,9 +18040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18054,9 +18054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18068,9 +18068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18082,9 +18082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18096,9 +18096,9 @@ "dark_vs": "support.type.vendored.property-name: #9CDCFE", "light_vs": "support.type.vendored.property-name: #E50000", "hc_black": "support.type.vendored.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.vendored.property-name: #9CDCFE", + "dark_modern": "support.type.vendored.property-name: #9CDCFE", "hc_light": "support.type.vendored.property-name: #264F78", - "light_plus_experimental": "support.type.vendored.property-name: #E50000" + "light_modern": "support.type.vendored.property-name: #E50000" } }, { @@ -18110,9 +18110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18124,9 +18124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18138,9 +18138,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -18152,9 +18152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18166,9 +18166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18180,9 +18180,9 @@ "dark_vs": "support.type.vendored.property-name: #9CDCFE", "light_vs": "support.type.vendored.property-name: #E50000", "hc_black": "support.type.vendored.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.vendored.property-name: #9CDCFE", + "dark_modern": "support.type.vendored.property-name: #9CDCFE", "hc_light": "support.type.vendored.property-name: #264F78", - "light_plus_experimental": "support.type.vendored.property-name: #E50000" + "light_modern": "support.type.vendored.property-name: #E50000" } }, { @@ -18194,9 +18194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18208,9 +18208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18222,9 +18222,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -18236,9 +18236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18250,9 +18250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18264,9 +18264,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -18278,9 +18278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18292,9 +18292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18306,9 +18306,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -18320,9 +18320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18334,9 +18334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18348,9 +18348,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -18362,9 +18362,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -18376,9 +18376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18390,9 +18390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18404,9 +18404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18418,9 +18418,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -18432,9 +18432,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -18446,9 +18446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18460,9 +18460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -18474,9 +18474,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18488,9 +18488,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -18502,9 +18502,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -18516,9 +18516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18530,9 +18530,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -18544,9 +18544,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -18558,9 +18558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18572,9 +18572,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -18586,9 +18586,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -18600,9 +18600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18614,9 +18614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -18628,9 +18628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -18642,9 +18642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18656,9 +18656,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -18670,9 +18670,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -18684,9 +18684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18698,9 +18698,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -18712,9 +18712,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -18726,9 +18726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18740,9 +18740,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -18754,9 +18754,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -18768,9 +18768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18782,9 +18782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -18796,9 +18796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -18810,9 +18810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18824,9 +18824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18838,9 +18838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18852,9 +18852,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -18866,9 +18866,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -18880,9 +18880,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -18894,9 +18894,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -18908,9 +18908,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -18922,9 +18922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18936,9 +18936,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -18950,9 +18950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18964,9 +18964,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -18978,9 +18978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -18992,9 +18992,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -19006,9 +19006,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19020,9 +19020,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -19034,9 +19034,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19048,9 +19048,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19062,9 +19062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19076,9 +19076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19090,9 +19090,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -19104,9 +19104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19118,9 +19118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19132,9 +19132,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -19146,9 +19146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19160,9 +19160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19174,9 +19174,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -19188,9 +19188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19202,9 +19202,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19216,9 +19216,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -19230,9 +19230,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19244,9 +19244,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19258,9 +19258,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -19272,9 +19272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19286,9 +19286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19300,9 +19300,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -19314,9 +19314,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19328,9 +19328,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19342,9 +19342,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -19356,9 +19356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19370,9 +19370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -19384,9 +19384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -19398,9 +19398,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19412,9 +19412,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -19426,9 +19426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -19440,9 +19440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19454,9 +19454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -19468,9 +19468,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -19482,9 +19482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19496,9 +19496,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -19510,9 +19510,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -19524,9 +19524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19538,9 +19538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19552,9 +19552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19566,9 +19566,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -19580,9 +19580,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -19594,9 +19594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19608,9 +19608,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -19622,9 +19622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19636,9 +19636,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -19650,9 +19650,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19664,9 +19664,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19678,9 +19678,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19692,9 +19692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19706,9 +19706,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -19720,9 +19720,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -19734,9 +19734,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -19748,9 +19748,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -19762,9 +19762,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -19776,9 +19776,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19790,9 +19790,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -19804,9 +19804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19818,9 +19818,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19832,9 +19832,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19846,9 +19846,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -19860,9 +19860,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19874,9 +19874,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -19888,9 +19888,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19902,9 +19902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19916,9 +19916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19930,9 +19930,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -19944,9 +19944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19958,9 +19958,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19972,9 +19972,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -19986,9 +19986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20000,9 +20000,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20014,9 +20014,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20028,9 +20028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20042,9 +20042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -20056,9 +20056,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20070,9 +20070,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20084,9 +20084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20098,9 +20098,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -20112,9 +20112,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -20126,9 +20126,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20140,9 +20140,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20154,9 +20154,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20168,9 +20168,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -20182,9 +20182,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20196,9 +20196,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20210,9 +20210,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -20224,9 +20224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20238,9 +20238,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -20252,9 +20252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -20266,9 +20266,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20280,9 +20280,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20294,9 +20294,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20308,9 +20308,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20322,9 +20322,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20336,9 +20336,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20350,9 +20350,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20364,9 +20364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20378,9 +20378,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -20392,9 +20392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20406,9 +20406,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20420,9 +20420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20434,9 +20434,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20448,9 +20448,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20462,9 +20462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20476,9 +20476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -20490,9 +20490,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20504,9 +20504,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20518,9 +20518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20532,9 +20532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20546,9 +20546,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20560,9 +20560,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -20574,9 +20574,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -20588,9 +20588,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -20602,9 +20602,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20616,9 +20616,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -20630,9 +20630,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -20644,9 +20644,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -20658,9 +20658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20672,9 +20672,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -20686,9 +20686,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20700,9 +20700,9 @@ "dark_vs": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "light_vs": "entity.other.attribute-name.pseudo-element.css: #800000", "hc_black": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "hc_light": "entity.other.attribute-name.pseudo-element.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-element.css: #800000" } }, { @@ -20714,9 +20714,9 @@ "dark_vs": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "light_vs": "entity.other.attribute-name.pseudo-element.css: #800000", "hc_black": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "hc_light": "entity.other.attribute-name.pseudo-element.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-element.css: #800000" } }, { @@ -20728,9 +20728,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20742,9 +20742,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20756,9 +20756,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20770,9 +20770,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -20784,9 +20784,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20798,9 +20798,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20812,9 +20812,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -20826,9 +20826,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -20840,9 +20840,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -20854,9 +20854,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20868,9 +20868,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20882,9 +20882,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -20896,9 +20896,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -20910,9 +20910,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -20924,9 +20924,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20938,9 +20938,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -20952,9 +20952,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20966,9 +20966,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -20980,9 +20980,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -20994,9 +20994,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21008,9 +21008,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21022,9 +21022,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -21036,9 +21036,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21050,9 +21050,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21064,9 +21064,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -21078,9 +21078,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -21092,9 +21092,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21106,9 +21106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21120,9 +21120,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -21134,9 +21134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21148,9 +21148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21162,9 +21162,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -21176,9 +21176,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -21190,9 +21190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21204,9 +21204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21218,9 +21218,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -21232,9 +21232,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -21246,9 +21246,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -21260,9 +21260,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -21274,9 +21274,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21288,9 +21288,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21302,9 +21302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21316,9 +21316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21330,9 +21330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21344,9 +21344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21358,9 +21358,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21372,9 +21372,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21386,9 +21386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21400,9 +21400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21414,9 +21414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21428,9 +21428,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -21442,9 +21442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21456,9 +21456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21470,9 +21470,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -21484,9 +21484,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -21498,9 +21498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21512,9 +21512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21526,9 +21526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21540,9 +21540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21554,9 +21554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21568,9 +21568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21582,9 +21582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21596,9 +21596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21610,9 +21610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21624,9 +21624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21638,9 +21638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21652,9 +21652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -21666,9 +21666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21680,9 +21680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21694,9 +21694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21708,9 +21708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21722,9 +21722,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21736,9 +21736,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21750,9 +21750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21764,9 +21764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21778,9 +21778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21792,9 +21792,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -21806,9 +21806,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -21820,9 +21820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21834,9 +21834,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -21848,9 +21848,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21862,9 +21862,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21876,9 +21876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21890,9 +21890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21904,9 +21904,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21918,9 +21918,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -21932,9 +21932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21946,9 +21946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -21960,9 +21960,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -21974,9 +21974,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -21988,9 +21988,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -22002,9 +22002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22016,9 +22016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22030,9 +22030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.color: #0451A5", "hc_black": "support.constant.color: #CE9178", - "dark_plus_experimental": "support.constant.color: #CE9178", + "dark_modern": "support.constant.color: #CE9178", "hc_light": "support.constant.color: #0451A5", - "light_plus_experimental": "support.constant.color: #0451A5" + "light_modern": "support.constant.color: #0451A5" } }, { @@ -22044,9 +22044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22058,9 +22058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22072,9 +22072,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -22086,9 +22086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22100,9 +22100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "support.constant.property-value: #0451A5", "hc_black": "support.constant.property-value: #CE9178", - "dark_plus_experimental": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", "hc_light": "support.constant.property-value: #0451A5", - "light_plus_experimental": "support.constant.property-value: #0451A5" + "light_modern": "support.constant.property-value: #0451A5" } }, { @@ -22114,9 +22114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22128,9 +22128,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -22142,9 +22142,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -22156,9 +22156,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -22170,9 +22170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22184,9 +22184,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -22198,9 +22198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22212,9 +22212,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -22226,9 +22226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22240,9 +22240,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -22254,9 +22254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22268,9 +22268,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -22282,9 +22282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22296,9 +22296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -22310,9 +22310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "constant.other.color.rgb-value: #0451A5", "hc_black": "constant.other.color.rgb-value: #CE9178", - "dark_plus_experimental": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", "hc_light": "constant.other.color.rgb-value: #0451A5", - "light_plus_experimental": "constant.other.color.rgb-value: #0451A5" + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { @@ -22324,9 +22324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22338,9 +22338,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -22352,9 +22352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22366,9 +22366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -22380,9 +22380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22394,9 +22394,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -22408,9 +22408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22422,9 +22422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22436,9 +22436,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22450,9 +22450,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22464,9 +22464,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22478,9 +22478,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22492,9 +22492,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22506,9 +22506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22520,9 +22520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -22534,9 +22534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22548,9 +22548,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -22562,9 +22562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22576,9 +22576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22590,9 +22590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22604,9 +22604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22618,9 +22618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22632,9 +22632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22646,9 +22646,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22660,9 +22660,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22674,9 +22674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22688,9 +22688,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -22702,9 +22702,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -22716,9 +22716,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -22730,9 +22730,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -22744,9 +22744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22758,9 +22758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22772,9 +22772,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22786,9 +22786,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22800,9 +22800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22814,9 +22814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -22828,9 +22828,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -22842,9 +22842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -22856,9 +22856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22870,9 +22870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22884,9 +22884,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -22898,9 +22898,9 @@ "dark_vs": "entity.other.attribute-name.id.css: #D7BA7D", "light_vs": "entity.other.attribute-name.id.css: #800000", "hc_black": "entity.other.attribute-name.id.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.id.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.id.css: #D7BA7D", "hc_light": "entity.other.attribute-name.id.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.id.css: #800000" + "light_modern": "entity.other.attribute-name.id.css: #800000" } }, { @@ -22912,9 +22912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22926,9 +22926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22940,9 +22940,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -22954,9 +22954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22968,9 +22968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22982,9 +22982,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -22996,9 +22996,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -23010,9 +23010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23024,9 +23024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23038,9 +23038,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -23052,9 +23052,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -23066,9 +23066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23080,9 +23080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23094,9 +23094,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -23108,9 +23108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23122,9 +23122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23136,9 +23136,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -23150,9 +23150,9 @@ "dark_vs": "keyword.other.unit: #B5CEA8", "light_vs": "keyword.other.unit: #098658", "hc_black": "keyword.other.unit: #B5CEA8", - "dark_plus_experimental": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", "hc_light": "keyword.other.unit: #096D48", - "light_plus_experimental": "keyword.other.unit: #098658" + "light_modern": "keyword.other.unit: #098658" } }, { @@ -23164,9 +23164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23178,9 +23178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23192,9 +23192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23206,9 +23206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23220,9 +23220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23234,9 +23234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23248,9 +23248,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -23262,9 +23262,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -23276,9 +23276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23290,9 +23290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -23304,9 +23304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23318,9 +23318,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -23332,9 +23332,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -23346,9 +23346,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -23360,9 +23360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23374,9 +23374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23388,9 +23388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23402,9 +23402,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -23416,9 +23416,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -23430,9 +23430,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -23444,9 +23444,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -23458,9 +23458,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -23472,9 +23472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23486,9 +23486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23500,9 +23500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23514,9 +23514,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -23528,9 +23528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23542,9 +23542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23556,9 +23556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23570,9 +23570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23584,9 +23584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23598,9 +23598,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -23612,9 +23612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23626,9 +23626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23640,9 +23640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -23654,9 +23654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23668,9 +23668,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -23682,9 +23682,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -23696,9 +23696,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -23710,9 +23710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23724,9 +23724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23738,9 +23738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23752,9 +23752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23766,9 +23766,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -23780,9 +23780,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -23794,9 +23794,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -23808,9 +23808,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -23822,9 +23822,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -23836,9 +23836,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -23850,9 +23850,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -23864,9 +23864,9 @@ "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", "light_vs": "entity.other.attribute-name.class.css: #800000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -23878,9 +23878,9 @@ "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_plus_experimental": "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_plus_experimental": "entity.other.attribute-name.class.css: #800000" + "light_modern": "entity.other.attribute-name.class.css: #800000" } }, { @@ -23892,9 +23892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23906,9 +23906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23920,9 +23920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23934,9 +23934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -23948,9 +23948,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -23962,9 +23962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -23976,9 +23976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -23990,9 +23990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24004,9 +24004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24018,9 +24018,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -24032,9 +24032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24046,9 +24046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24060,9 +24060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24074,9 +24074,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24088,9 +24088,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -24102,9 +24102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24116,9 +24116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24130,9 +24130,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24144,9 +24144,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -24158,9 +24158,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24172,9 +24172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24186,9 +24186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24200,9 +24200,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -24214,9 +24214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24228,9 +24228,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24242,9 +24242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24256,9 +24256,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -24270,9 +24270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24284,9 +24284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24298,9 +24298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24312,9 +24312,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -24326,9 +24326,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24340,9 +24340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24354,9 +24354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24368,9 +24368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24382,9 +24382,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -24396,9 +24396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -24410,9 +24410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24424,9 +24424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24438,9 +24438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24452,9 +24452,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -24466,9 +24466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24480,9 +24480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24494,9 +24494,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -24508,9 +24508,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -24522,9 +24522,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -24536,9 +24536,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -24550,9 +24550,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -24564,9 +24564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24578,9 +24578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24592,9 +24592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24606,9 +24606,9 @@ "dark_vs": "entity.other.attribute-name.scss: #D7BA7D", "light_vs": "entity.other.attribute-name.scss: #800000", "hc_black": "entity.other.attribute-name.scss: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.scss: #D7BA7D", + "dark_modern": "entity.other.attribute-name.scss: #D7BA7D", "hc_light": "entity.other.attribute-name.scss: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.scss: #800000" + "light_modern": "entity.other.attribute-name.scss: #800000" } }, { @@ -24620,9 +24620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24634,9 +24634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24648,9 +24648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24662,9 +24662,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -24676,9 +24676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24690,9 +24690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24704,9 +24704,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -24718,9 +24718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24732,9 +24732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24746,9 +24746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24760,9 +24760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24774,9 +24774,9 @@ "dark_vs": "entity.other.attribute-name.scss: #D7BA7D", "light_vs": "entity.other.attribute-name.scss: #800000", "hc_black": "entity.other.attribute-name.scss: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.scss: #D7BA7D", + "dark_modern": "entity.other.attribute-name.scss: #D7BA7D", "hc_light": "entity.other.attribute-name.scss: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.scss: #800000" + "light_modern": "entity.other.attribute-name.scss: #800000" } }, { @@ -24788,9 +24788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24802,9 +24802,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24816,9 +24816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24830,9 +24830,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -24844,9 +24844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24858,9 +24858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24872,9 +24872,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -24886,9 +24886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24900,9 +24900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24914,9 +24914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24928,9 +24928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24942,9 +24942,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -24956,9 +24956,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -24970,9 +24970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24984,9 +24984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -24998,9 +24998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25012,9 +25012,9 @@ "dark_vs": "entity.other.attribute-name.scss: #D7BA7D", "light_vs": "entity.other.attribute-name.scss: #800000", "hc_black": "entity.other.attribute-name.scss: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.scss: #D7BA7D", + "dark_modern": "entity.other.attribute-name.scss: #D7BA7D", "hc_light": "entity.other.attribute-name.scss: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.scss: #800000" + "light_modern": "entity.other.attribute-name.scss: #800000" } }, { @@ -25026,9 +25026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25040,9 +25040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25054,9 +25054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25068,9 +25068,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -25082,9 +25082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25096,9 +25096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25110,9 +25110,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -25124,9 +25124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25138,9 +25138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25152,9 +25152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25166,9 +25166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25180,9 +25180,9 @@ "dark_vs": "entity.other.attribute-name.scss: #D7BA7D", "light_vs": "entity.other.attribute-name.scss: #800000", "hc_black": "entity.other.attribute-name.scss: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.scss: #D7BA7D", + "dark_modern": "entity.other.attribute-name.scss: #D7BA7D", "hc_light": "entity.other.attribute-name.scss: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.scss: #800000" + "light_modern": "entity.other.attribute-name.scss: #800000" } }, { @@ -25194,9 +25194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25208,9 +25208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25222,9 +25222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25236,9 +25236,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -25250,9 +25250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25264,9 +25264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25278,9 +25278,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -25292,9 +25292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25306,9 +25306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25320,9 +25320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25334,9 +25334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25348,9 +25348,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25362,9 +25362,9 @@ "dark_vs": "support.type.vendored.property-name: #9CDCFE", "light_vs": "support.type.vendored.property-name: #E50000", "hc_black": "support.type.vendored.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.vendored.property-name: #9CDCFE", + "dark_modern": "support.type.vendored.property-name: #9CDCFE", "hc_light": "support.type.vendored.property-name: #264F78", - "light_plus_experimental": "support.type.vendored.property-name: #E50000" + "light_modern": "support.type.vendored.property-name: #E50000" } }, { @@ -25376,9 +25376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25390,9 +25390,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -25404,9 +25404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25418,9 +25418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25432,9 +25432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25446,9 +25446,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25460,9 +25460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25474,9 +25474,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -25488,9 +25488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25502,9 +25502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25516,9 +25516,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -25530,9 +25530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25544,9 +25544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25558,9 +25558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25572,9 +25572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25586,9 +25586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25600,9 +25600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25614,9 +25614,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -25628,9 +25628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25642,9 +25642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25656,9 +25656,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -25670,9 +25670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25684,9 +25684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25698,9 +25698,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25712,9 +25712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25726,9 +25726,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -25740,9 +25740,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -25754,9 +25754,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25768,9 +25768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -25782,9 +25782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25796,9 +25796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25810,9 +25810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25824,9 +25824,9 @@ "dark_vs": "entity.other.attribute-name.scss: #D7BA7D", "light_vs": "entity.other.attribute-name.scss: #800000", "hc_black": "entity.other.attribute-name.scss: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.scss: #D7BA7D", + "dark_modern": "entity.other.attribute-name.scss: #D7BA7D", "hc_light": "entity.other.attribute-name.scss: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.scss: #800000" + "light_modern": "entity.other.attribute-name.scss: #800000" } }, { @@ -25838,9 +25838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25852,9 +25852,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25866,9 +25866,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25880,9 +25880,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -25894,9 +25894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25908,9 +25908,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25922,9 +25922,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -25936,9 +25936,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25950,9 +25950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25964,9 +25964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25978,9 +25978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -25992,9 +25992,9 @@ "dark_vs": "entity.other.attribute-name.scss: #D7BA7D", "light_vs": "entity.other.attribute-name.scss: #800000", "hc_black": "entity.other.attribute-name.scss: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.scss: #D7BA7D", + "dark_modern": "entity.other.attribute-name.scss: #D7BA7D", "hc_light": "entity.other.attribute-name.scss: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.scss: #800000" + "light_modern": "entity.other.attribute-name.scss: #800000" } }, { @@ -26006,9 +26006,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26020,9 +26020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26034,9 +26034,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26048,9 +26048,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name: #E50000", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name: #264F78", - "light_plus_experimental": "support.type.property-name: #E50000" + "light_modern": "support.type.property-name: #E50000" } }, { @@ -26062,9 +26062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26076,9 +26076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26090,9 +26090,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -26104,9 +26104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26118,9 +26118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26132,9 +26132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26146,9 +26146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26160,9 +26160,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26174,9 +26174,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26188,9 +26188,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26202,9 +26202,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26216,9 +26216,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -26230,9 +26230,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -26244,9 +26244,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26258,9 +26258,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26272,9 +26272,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26286,9 +26286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26300,9 +26300,9 @@ "dark_vs": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "light_vs": "entity.other.attribute-name.pseudo-element.css: #800000", "hc_black": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "hc_light": "entity.other.attribute-name.pseudo-element.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-element.css: #800000" } }, { @@ -26314,9 +26314,9 @@ "dark_vs": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "light_vs": "entity.other.attribute-name.pseudo-element.css: #800000", "hc_black": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", - "dark_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", + "dark_modern": "entity.other.attribute-name.pseudo-element.css: #D7BA7D", "hc_light": "entity.other.attribute-name.pseudo-element.css: #0F4A85", - "light_plus_experimental": "entity.other.attribute-name.pseudo-element.css: #800000" + "light_modern": "entity.other.attribute-name.pseudo-element.css: #800000" } }, { @@ -26328,9 +26328,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26342,9 +26342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26356,9 +26356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26370,9 +26370,9 @@ "dark_vs": "entity.name.tag.css: #D7BA7D", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_plus_experimental": "entity.name.tag.css: #D7BA7D", + "dark_modern": "entity.name.tag.css: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -26384,9 +26384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26398,9 +26398,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26412,9 +26412,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -26426,9 +26426,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26440,9 +26440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26454,9 +26454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26468,9 +26468,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26482,9 +26482,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26496,9 +26496,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26510,9 +26510,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -26524,9 +26524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26538,9 +26538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26552,9 +26552,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26566,9 +26566,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -26580,9 +26580,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26594,9 +26594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26608,9 +26608,9 @@ "dark_vs": "variable.scss: #9CDCFE", "light_vs": "variable.scss: #E50000", "hc_black": "variable.scss: #D4D4D4", - "dark_plus_experimental": "variable.scss: #9CDCFE", + "dark_modern": "variable.scss: #9CDCFE", "hc_light": "variable.scss: #264F78", - "light_plus_experimental": "variable.scss: #E50000" + "light_modern": "variable.scss: #E50000" } }, { @@ -26622,9 +26622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26636,9 +26636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26650,9 +26650,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26664,9 +26664,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -26678,9 +26678,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -26692,9 +26692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -26706,9 +26706,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26720,9 +26720,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -26734,9 +26734,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_sh.json b/extensions/vscode-colorize-tests/test/colorize-results/test_sh.json index 2da8eabe682..b725f8255df 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_sh.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_sh.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -106,9 +106,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -120,9 +120,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,107 +596,107 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "echo", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "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_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "1", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -722,205 +722,205 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "echo", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "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_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.other.normal.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.other.normal.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "PWD", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell variable.other.normal.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell variable.other.normal.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "/", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "{", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell variable.parameter.positional.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "1", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion variable.parameter.positional.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "#", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell keyword.operator.expansion.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion keyword.operator.expansion.shell", "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_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { "c": ".", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "/", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell keyword.operator.expansion.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell meta.parameter-expansion keyword.operator.expansion.shell", "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_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { "c": "}", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell variable.parameter.positional.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", + "hc_light": "variable: #001080", + "light_modern": "variable: #001080" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1016,205 +1016,205 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "dirname", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$(", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "dirname", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$(", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "realpath", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "0", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "\"", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": ")", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": ")", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1296,219 +1296,219 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "dirname", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$(", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "dirname", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$(", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "readlink", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "-", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": "f", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument constant.other.option", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument constant.other.option", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": " ", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell punctuation.definition.variable.shell variable.parameter.positional.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell punctuation.definition.variable.shell variable.parameter.positional.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "0", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell variable.parameter.positional.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell variable.parameter.positional.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": ")", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": ")", - "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", + "t": "source.shell meta.scope.if-block.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.interpolated.dollar.shell punctuation.definition.evaluation.parens.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1576,65 +1576,65 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "xcode-select", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "-", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": "print-path", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument constant.other.option", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument constant.other.option", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1688,163 +1688,163 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "xcrun", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", - "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", - "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "-", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": "sdk", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument constant.other.option", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument constant.other.option", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "iphoneos", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "-", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": "find", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell string.unquoted.argument constant.other.option", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument constant.other.option", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "lipo", - "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.statement.shell meta.expression.assignment.shell string.interpolated.dollar.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -1856,181 +1856,181 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "cat", - "t": "source.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "<<-", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell keyword.operator.heredoc.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell keyword.operator.heredoc.shell", "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_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { "c": "EOF", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell punctuation.definition.string.heredoc.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell punctuation.definition.string.heredoc.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": ">", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell keyword.operator.redirect.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell keyword.operator.redirect.shell", "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_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { "c": " /path/file", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\t# A heredoc with a variable ", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.heredoc.indent", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.heredoc.indent", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.heredoc.indent punctuation.definition.variable.shell variable.other.normal.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.heredoc.indent punctuation.definition.variable.shell variable.other.normal.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "DEVELOPER", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.heredoc.indent variable.other.normal.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.heredoc.indent variable.other.normal.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "\tsome more file", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.heredoc.indent", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.heredoc.indent", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "EOF", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell punctuation.definition.string.heredoc.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell punctuation.definition.string.heredoc.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": "function ", + "c": "function", "t": "source.shell meta.function.shell storage.type.function.shell", "r": { "dark_plus": "storage.type: #569CD6", @@ -2038,37 +2038,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" - } - }, - { - "c": "code", - "t": "source.shell meta.function.shell entity.name.function.shell", - "r": { - "dark_plus": "entity.name.function: #DCDCAA", - "light_plus": "entity.name.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", - "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" - } - }, - { - "c": "()", - "t": "source.shell meta.function.shell punctuation.definition.arguments.shell", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "storage.type: #0000FF" } }, { @@ -2080,9 +2052,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "code", + "t": "source.shell meta.function.shell entity.name.function.shell", + "r": { + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" + } + }, + { + "c": "()", + "t": "source.shell meta.function.shell punctuation.definition.arguments.shell", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_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.shell meta.function.shell", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2108,65 +2122,65 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "cd", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "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_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "$", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell punctuation.definition.variable.shell variable.other.normal.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell punctuation.definition.variable.shell variable.other.normal.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "ROOT", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell variable.other.normal.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell variable.other.normal.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2178,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2206,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2206,9 +2220,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2220,107 +2234,107 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "test", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "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_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "-", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument.shell constant.other.option.dash.shell", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": "d", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell string.unquoted.argument constant.other.option", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell string.unquoted.argument constant.other.option", "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", + "dark_plus": "constant.other.option: #569CD6", + "light_plus": "constant.other.option: #0000FF", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "constant.other.option: #569CD6", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "constant.other.option: #0000FF" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "node_modules", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2346,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2346,65 +2360,51 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { - "c": ".", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "c": "./scripts/npm.sh", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" - } - }, - { - "c": "/scripts/npm.sh", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell entity.name.command.shell", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "install", - "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2878,149 +2878,149 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "exec", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "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_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "./.build/electron/Electron.app/Contents/MacOS/Electron", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": ".", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.all.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.all.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "@", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.all.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.all.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "\"", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3060,149 +3060,149 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "exec", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell entity.name.command.shell support.function.builtin.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell", "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_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "./.build/electron/electron", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": ".", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.unquoted.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.unquoted.argument.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": " ", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.all.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.all.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "@", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.all.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.all.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "\"", - "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.function.shell meta.function.body.shell meta.scope.if-block.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -3242,93 +3242,93 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "code", - "t": "source.shell meta.statement.shell meta.command.shell entity.name.command.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.statement.command.name.shell entity.name.function.call.shell entity.name.command.shell", "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", - "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "hc_black": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", + "hc_light": "entity.name.function: #5E2CBC", + "light_modern": "entity.name.function: #795E26" } }, { "c": " ", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { "c": "\"", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.begin.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { "c": "$", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.all.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.variable.shell variable.parameter.positional.all.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "@", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.all.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell variable.parameter.positional.all.shell", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { "c": "\"", - "t": "source.shell meta.statement.shell meta.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", + "t": "source.shell meta.statement.shell meta.statement.command.shell meta.argument.shell string.quoted.double.shell punctuation.definition.string.end.shell", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_shader.json b/extensions/vscode-colorize-tests/test/colorize-results/test_shader.json index 90e6e94983a..7221ff4e3dd 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_shader.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_shader.json @@ -8,9 +8,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -232,9 +232,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.variable: #9CDCFE", - "dark_plus_experimental": "support.variable: #9CDCFE", + "dark_modern": "support.variable: #9CDCFE", "hc_light": "support.variable: #001080", - "light_plus_experimental": "support.variable: #001080" + "light_modern": "support.variable: #001080" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_sql.json b/extensions/vscode-colorize-tests/test/colorize-results/test_sql.json index 93b9a0656c2..6c6cc4c26eb 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_sql.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_sql.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -442,13 +442,13 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { - "c": " STATS;", + "c": " ", "t": "source.sql", "r": { "dark_plus": "default: #D4D4D4", @@ -456,9 +456,37 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" + } + }, + { + "c": "STATS", + "t": "source.sql keyword.other.sql", + "r": { + "dark_plus": "keyword: #569CD6", + "light_plus": "keyword: #0000FF", + "dark_vs": "keyword: #569CD6", + "light_vs": "keyword: #0000FF", + "hc_black": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", + "hc_light": "keyword: #0F4A85", + "light_modern": "keyword: #0000FF" + } + }, + { + "c": ";", + "t": "source.sql", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF", + "dark_modern": "default: #CCCCCC", + "hc_light": "default: #292929", + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_sty.json b/extensions/vscode-colorize-tests/test/colorize-results/test_sty.json index 809e8a84f48..13d83201f14 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_sty.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_sty.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "constant.character: #569CD6", - "dark_plus_experimental": "constant.character.escape: #D7BA7D", + "dark_modern": "constant.character.escape: #D7BA7D", "hc_light": "constant.character.escape: #EE0000", - "light_plus_experimental": "constant.character.escape: #EE0000" + "light_modern": "constant.character.escape: #EE0000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_swift.json b/extensions/vscode-colorize-tests/test/colorize-results/test_swift.json index cdbbedbfc32..8b1b64f71f5 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_swift.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_swift.json @@ -8,9 +8,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -78,9 +78,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword: #569CD6", "light_vs": "keyword: #0000FF", "hc_black": "keyword: #569CD6", - "dark_plus_experimental": "keyword: #569CD6", + "dark_modern": "keyword: #569CD6", "hc_light": "keyword: #0F4A85", - "light_plus_experimental": "keyword: #0000FF" + "light_modern": "keyword: #0000FF" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -260,9 +260,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -274,9 +274,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_tex.json b/extensions/vscode-colorize-tests/test/colorize-results/test_tex.json index fb0f1a0ffc8..7cc786089fd 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_tex.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_tex.json @@ -8,9 +8,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -22,9 +22,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -204,9 +204,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.class: #4EC9B0", - "dark_plus_experimental": "support.class: #4EC9B0", + "dark_modern": "support.class: #4EC9B0", "hc_light": "support.class: #185E73", - "light_plus_experimental": "support.class: #267F99" + "light_modern": "support.class: #267F99" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_ts.json b/extensions/vscode-colorize-tests/test/colorize-results/test_ts.json index 1252ab32f8d..68504d08d8e 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_ts.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_ts.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -64,9 +64,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -176,9 +176,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -330,9 +330,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -344,9 +344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -442,9 +442,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -554,9 +554,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -666,9 +666,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -750,9 +750,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -834,9 +834,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2780,9 +2780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2794,9 +2794,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2808,9 +2808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2822,9 +2822,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2836,9 +2836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2850,9 +2850,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2864,9 +2864,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2878,9 +2878,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -2892,9 +2892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2906,9 +2906,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2920,9 +2920,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -2934,9 +2934,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2948,9 +2948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2962,9 +2962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2976,9 +2976,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2990,9 +2990,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3004,9 +3004,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3018,9 +3018,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3032,9 +3032,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3046,9 +3046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3060,9 +3060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3074,9 +3074,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3088,9 +3088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3102,9 +3102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3116,9 +3116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3130,9 +3130,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3144,9 +3144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3158,9 +3158,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3172,9 +3172,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3186,9 +3186,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -3200,9 +3200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3214,9 +3214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3228,9 +3228,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3242,9 +3242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3256,9 +3256,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3270,9 +3270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3284,9 +3284,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3298,9 +3298,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3312,9 +3312,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3326,9 +3326,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3340,9 +3340,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3354,9 +3354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3368,9 +3368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3382,9 +3382,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3396,9 +3396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3410,9 +3410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3424,9 +3424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3438,9 +3438,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3452,9 +3452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3466,9 +3466,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3480,9 +3480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3494,9 +3494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3508,9 +3508,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3522,9 +3522,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3536,9 +3536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3550,9 +3550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3564,9 +3564,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3578,9 +3578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3592,9 +3592,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -3606,9 +3606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3620,9 +3620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3634,9 +3634,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3648,9 +3648,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3662,9 +3662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -3676,9 +3676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3690,9 +3690,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -3704,9 +3704,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3718,9 +3718,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3732,9 +3732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3746,9 +3746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3760,9 +3760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3774,9 +3774,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3788,9 +3788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3802,9 +3802,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -3816,9 +3816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3830,9 +3830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3844,9 +3844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3858,9 +3858,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3872,9 +3872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3886,9 +3886,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3900,9 +3900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3914,9 +3914,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -3928,9 +3928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3942,9 +3942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -3956,9 +3956,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3970,9 +3970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3984,9 +3984,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -3998,9 +3998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4012,9 +4012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4026,9 +4026,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4040,9 +4040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4054,9 +4054,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -4068,9 +4068,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4082,9 +4082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4096,9 +4096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4110,9 +4110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4124,9 +4124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4138,9 +4138,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4152,9 +4152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4166,9 +4166,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4180,9 +4180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4194,9 +4194,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -4208,9 +4208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4222,9 +4222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4236,9 +4236,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -4250,9 +4250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4264,9 +4264,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4278,9 +4278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4292,9 +4292,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4306,9 +4306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4320,9 +4320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4334,9 +4334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4348,9 +4348,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4362,9 +4362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4376,9 +4376,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4390,9 +4390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4404,9 +4404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4418,9 +4418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4432,9 +4432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4446,9 +4446,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4460,9 +4460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4474,9 +4474,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -4488,9 +4488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4502,9 +4502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4516,9 +4516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4530,9 +4530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4544,9 +4544,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -4558,9 +4558,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4572,9 +4572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4586,9 +4586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4600,9 +4600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4614,9 +4614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4628,9 +4628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4642,9 +4642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4656,9 +4656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4670,9 +4670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4684,9 +4684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4698,9 +4698,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -4712,9 +4712,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4726,9 +4726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4740,9 +4740,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4754,9 +4754,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4768,9 +4768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4782,9 +4782,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4796,9 +4796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4810,9 +4810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -4824,9 +4824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4838,9 +4838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4852,9 +4852,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4866,9 +4866,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -4880,9 +4880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4894,9 +4894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -4908,9 +4908,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4922,9 +4922,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -4936,9 +4936,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4950,9 +4950,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -4964,9 +4964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -4978,9 +4978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -4992,9 +4992,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5006,9 +5006,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5020,9 +5020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5034,9 +5034,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5048,9 +5048,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5062,9 +5062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5076,9 +5076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -5090,9 +5090,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5104,9 +5104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5118,9 +5118,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5132,9 +5132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5146,9 +5146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5160,9 +5160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5174,9 +5174,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5188,9 +5188,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5202,9 +5202,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -5216,9 +5216,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5230,9 +5230,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -5244,9 +5244,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5258,9 +5258,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5272,9 +5272,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5286,9 +5286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5300,9 +5300,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5314,9 +5314,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5328,9 +5328,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5342,9 +5342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5356,9 +5356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5370,9 +5370,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5384,9 +5384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5398,9 +5398,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5412,9 +5412,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5426,9 +5426,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -5440,9 +5440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5454,9 +5454,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5468,9 +5468,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5482,9 +5482,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5496,9 +5496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5510,9 +5510,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5524,9 +5524,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5538,9 +5538,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -5552,9 +5552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5566,9 +5566,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -5580,9 +5580,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5594,9 +5594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5608,9 +5608,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5622,9 +5622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -5636,9 +5636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5650,9 +5650,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5664,9 +5664,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5678,9 +5678,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5692,9 +5692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5706,9 +5706,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5720,9 +5720,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5734,9 +5734,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5748,9 +5748,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5762,9 +5762,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5776,9 +5776,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5790,9 +5790,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5804,9 +5804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5818,9 +5818,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -5832,9 +5832,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5846,9 +5846,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5860,9 +5860,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -5874,9 +5874,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5888,9 +5888,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -5902,9 +5902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5916,9 +5916,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5930,9 +5930,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5944,9 +5944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5958,9 +5958,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -5972,9 +5972,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -5986,9 +5986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6000,9 +6000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6014,9 +6014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6028,9 +6028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6042,9 +6042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6056,9 +6056,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6070,9 +6070,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -6084,9 +6084,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6098,9 +6098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6112,9 +6112,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6126,9 +6126,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6140,9 +6140,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6154,9 +6154,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6168,9 +6168,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6182,9 +6182,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -6196,9 +6196,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6210,9 +6210,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6224,9 +6224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6238,9 +6238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6252,9 +6252,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6266,9 +6266,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6280,9 +6280,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6294,9 +6294,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6308,9 +6308,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6322,9 +6322,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6336,9 +6336,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -6350,9 +6350,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6364,9 +6364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6378,9 +6378,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6392,9 +6392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6406,9 +6406,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6420,9 +6420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6434,9 +6434,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6448,9 +6448,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -6462,9 +6462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6476,9 +6476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6490,9 +6490,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6504,9 +6504,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6518,9 +6518,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6532,9 +6532,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "keyword.operator.new: #569CD6", - "dark_plus_experimental": "keyword.operator.new: #569CD6", + "dark_modern": "keyword.operator.new: #569CD6", "hc_light": "keyword.operator.new: #0F4A85", - "light_plus_experimental": "keyword.operator.new: #0000FF" + "light_modern": "keyword.operator.new: #0000FF" } }, { @@ -6546,9 +6546,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6560,9 +6560,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -6574,9 +6574,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6588,9 +6588,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6602,9 +6602,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6616,9 +6616,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6630,9 +6630,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6644,9 +6644,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6658,9 +6658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6672,9 +6672,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6686,9 +6686,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6700,9 +6700,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6714,9 +6714,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6728,9 +6728,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6742,9 +6742,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6756,9 +6756,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6770,9 +6770,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6784,9 +6784,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6798,9 +6798,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6812,9 +6812,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -6826,9 +6826,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6840,9 +6840,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6854,9 +6854,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6868,9 +6868,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6882,9 +6882,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6896,9 +6896,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -6910,9 +6910,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6924,9 +6924,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6938,9 +6938,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6952,9 +6952,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -6966,9 +6966,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -6980,9 +6980,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -6994,9 +6994,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7008,9 +7008,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7022,9 +7022,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7036,9 +7036,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7050,9 +7050,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7064,9 +7064,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7078,9 +7078,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7092,9 +7092,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7106,9 +7106,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7120,9 +7120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7134,9 +7134,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -7148,9 +7148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7162,9 +7162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7176,9 +7176,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7190,9 +7190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7204,9 +7204,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7218,9 +7218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7232,9 +7232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7246,9 +7246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7260,9 +7260,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7274,9 +7274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7288,9 +7288,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7302,9 +7302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7316,9 +7316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7330,9 +7330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7344,9 +7344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7358,9 +7358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7372,9 +7372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7386,9 +7386,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7400,9 +7400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7414,9 +7414,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -7428,9 +7428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7442,9 +7442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7456,9 +7456,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7470,9 +7470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7484,9 +7484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7498,9 +7498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7512,9 +7512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7526,9 +7526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7540,9 +7540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7554,9 +7554,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -7568,9 +7568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7582,9 +7582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -7596,9 +7596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7610,9 +7610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7624,9 +7624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7638,9 +7638,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7652,9 +7652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7666,9 +7666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -7680,9 +7680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7694,9 +7694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7708,9 +7708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7722,9 +7722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7736,9 +7736,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7750,9 +7750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7764,9 +7764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7778,9 +7778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7792,9 +7792,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7806,9 +7806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7820,9 +7820,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -7834,9 +7834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7848,9 +7848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7862,9 +7862,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -7876,9 +7876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7890,9 +7890,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -7904,9 +7904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7918,9 +7918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -7932,9 +7932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7946,9 +7946,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7960,9 +7960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -7974,9 +7974,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -7988,9 +7988,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8002,9 +8002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8016,9 +8016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8030,9 +8030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8044,9 +8044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8058,9 +8058,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8072,9 +8072,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8086,9 +8086,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8100,9 +8100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8114,9 +8114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8128,9 +8128,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8142,9 +8142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8156,9 +8156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8170,9 +8170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8184,9 +8184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8198,9 +8198,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8212,9 +8212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8226,9 +8226,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -8240,9 +8240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8254,9 +8254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8268,9 +8268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8282,9 +8282,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8296,9 +8296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8310,9 +8310,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8324,9 +8324,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8338,9 +8338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8352,9 +8352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8366,9 +8366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8380,9 +8380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8394,9 +8394,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8408,9 +8408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8422,9 +8422,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8436,9 +8436,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8450,9 +8450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8464,9 +8464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8478,9 +8478,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8492,9 +8492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8506,9 +8506,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8520,9 +8520,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8534,9 +8534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8548,9 +8548,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8562,9 +8562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8576,9 +8576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8590,9 +8590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8604,9 +8604,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8618,9 +8618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8632,9 +8632,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8646,9 +8646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8660,9 +8660,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8674,9 +8674,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8688,9 +8688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8702,9 +8702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8716,9 +8716,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8730,9 +8730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8744,9 +8744,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -8758,9 +8758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8772,9 +8772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8786,9 +8786,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8800,9 +8800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8814,9 +8814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8828,9 +8828,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -8842,9 +8842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8856,9 +8856,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -8870,9 +8870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8884,9 +8884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -8898,9 +8898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8912,9 +8912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8926,9 +8926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8940,9 +8940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -8954,9 +8954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8968,9 +8968,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -8982,9 +8982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -8996,9 +8996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9010,9 +9010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9024,9 +9024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9038,9 +9038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9052,9 +9052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9066,9 +9066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9080,9 +9080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9094,9 +9094,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9108,9 +9108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9122,9 +9122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9136,9 +9136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9150,9 +9150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9164,9 +9164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9178,9 +9178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9192,9 +9192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9206,9 +9206,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9220,9 +9220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9234,9 +9234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9248,9 +9248,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9262,9 +9262,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9276,9 +9276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9290,9 +9290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9304,9 +9304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9318,9 +9318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9332,9 +9332,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -9346,9 +9346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9360,9 +9360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9374,9 +9374,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9388,9 +9388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9402,9 +9402,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9416,9 +9416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9430,9 +9430,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -9444,9 +9444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9458,9 +9458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -9472,9 +9472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9486,9 +9486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9500,9 +9500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9514,9 +9514,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9528,9 +9528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9542,9 +9542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -9556,9 +9556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9570,9 +9570,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9584,9 +9584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9598,9 +9598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9612,9 +9612,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9626,9 +9626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9640,9 +9640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -9654,9 +9654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9668,9 +9668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9682,9 +9682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9696,9 +9696,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9710,9 +9710,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -9724,9 +9724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9738,9 +9738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9752,9 +9752,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9766,9 +9766,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9780,9 +9780,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9794,9 +9794,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9808,9 +9808,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9822,9 +9822,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9836,9 +9836,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9850,9 +9850,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9864,9 +9864,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9878,9 +9878,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9892,9 +9892,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9906,9 +9906,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -9920,9 +9920,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9934,9 +9934,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -9948,9 +9948,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9962,9 +9962,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -9976,9 +9976,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -9990,9 +9990,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10004,9 +10004,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10018,9 +10018,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -10032,9 +10032,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10046,9 +10046,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10060,9 +10060,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10074,9 +10074,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10088,9 +10088,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10102,9 +10102,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10116,9 +10116,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10130,9 +10130,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10144,9 +10144,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10158,9 +10158,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -10172,9 +10172,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10186,9 +10186,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10200,9 +10200,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10214,9 +10214,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10228,9 +10228,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10242,9 +10242,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10256,9 +10256,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -10270,9 +10270,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10284,9 +10284,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10298,9 +10298,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10312,9 +10312,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10326,9 +10326,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -10340,9 +10340,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10354,9 +10354,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10368,9 +10368,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10382,9 +10382,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10396,9 +10396,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10410,9 +10410,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10424,9 +10424,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10438,9 +10438,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10452,9 +10452,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10466,9 +10466,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10480,9 +10480,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10494,9 +10494,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10508,9 +10508,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10522,9 +10522,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -10536,9 +10536,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10550,9 +10550,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -10564,9 +10564,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10578,9 +10578,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10592,9 +10592,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10606,9 +10606,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10620,9 +10620,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10634,9 +10634,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10648,9 +10648,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -10662,9 +10662,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10676,9 +10676,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10690,9 +10690,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10704,9 +10704,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10718,9 +10718,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10732,9 +10732,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10746,9 +10746,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10760,9 +10760,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10774,9 +10774,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -10788,9 +10788,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10802,9 +10802,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -10816,9 +10816,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10830,9 +10830,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10844,9 +10844,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10858,9 +10858,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10872,9 +10872,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10886,9 +10886,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -10900,9 +10900,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10914,9 +10914,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10928,9 +10928,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -10942,9 +10942,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10956,9 +10956,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -10970,9 +10970,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -10984,9 +10984,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -10998,9 +10998,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11012,9 +11012,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11026,9 +11026,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11040,9 +11040,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11054,9 +11054,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11068,9 +11068,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11082,9 +11082,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11096,9 +11096,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11110,9 +11110,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11124,9 +11124,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11138,9 +11138,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -11152,9 +11152,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11166,9 +11166,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11180,9 +11180,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11194,9 +11194,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11208,9 +11208,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11222,9 +11222,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11236,9 +11236,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11250,9 +11250,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11264,9 +11264,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -11278,9 +11278,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11292,9 +11292,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -11306,9 +11306,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11320,9 +11320,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11334,9 +11334,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11348,9 +11348,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11362,9 +11362,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11376,9 +11376,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -11390,9 +11390,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11404,9 +11404,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11418,9 +11418,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11432,9 +11432,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11446,9 +11446,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11460,9 +11460,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11474,9 +11474,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -11488,9 +11488,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11502,9 +11502,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11516,9 +11516,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11530,9 +11530,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11544,9 +11544,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11558,9 +11558,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -11572,9 +11572,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11586,9 +11586,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11600,9 +11600,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11614,9 +11614,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11628,9 +11628,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11642,9 +11642,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11656,9 +11656,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -11670,9 +11670,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11684,9 +11684,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -11698,9 +11698,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11712,9 +11712,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "keyword.operator.new: #569CD6", - "dark_plus_experimental": "keyword.operator.new: #569CD6", + "dark_modern": "keyword.operator.new: #569CD6", "hc_light": "keyword.operator.new: #0F4A85", - "light_plus_experimental": "keyword.operator.new: #0000FF" + "light_modern": "keyword.operator.new: #0000FF" } }, { @@ -11726,9 +11726,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11740,9 +11740,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -11754,9 +11754,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11768,9 +11768,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11782,9 +11782,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11796,9 +11796,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11810,9 +11810,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11824,9 +11824,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11838,9 +11838,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11852,9 +11852,9 @@ "dark_vs": "constant.language: #569CD6", "light_vs": "constant.language: #0000FF", "hc_black": "constant.language: #569CD6", - "dark_plus_experimental": "constant.language: #569CD6", + "dark_modern": "constant.language: #569CD6", "hc_light": "constant.language: #0F4A85", - "light_plus_experimental": "constant.language: #0000FF" + "light_modern": "constant.language: #0000FF" } }, { @@ -11866,9 +11866,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11880,9 +11880,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11894,9 +11894,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11908,9 +11908,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11922,9 +11922,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11936,9 +11936,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11950,9 +11950,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -11964,9 +11964,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -11978,9 +11978,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -11992,9 +11992,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12006,9 +12006,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12020,9 +12020,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12034,9 +12034,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12048,9 +12048,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12062,9 +12062,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12076,9 +12076,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12090,9 +12090,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12104,9 +12104,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12118,9 +12118,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12132,9 +12132,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12146,9 +12146,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12160,9 +12160,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12174,9 +12174,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12188,9 +12188,9 @@ "dark_vs": "storage.modifier: #569CD6", "light_vs": "storage.modifier: #0000FF", "hc_black": "storage.modifier: #569CD6", - "dark_plus_experimental": "storage.modifier: #569CD6", + "dark_modern": "storage.modifier: #569CD6", "hc_light": "storage.modifier: #0F4A85", - "light_plus_experimental": "storage.modifier: #0000FF" + "light_modern": "storage.modifier: #0000FF" } }, { @@ -12202,9 +12202,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12216,9 +12216,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12230,9 +12230,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12244,9 +12244,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12258,9 +12258,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12272,9 +12272,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12286,9 +12286,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12300,9 +12300,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -12314,9 +12314,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12328,9 +12328,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12342,9 +12342,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12356,9 +12356,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12370,9 +12370,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -12384,9 +12384,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12398,9 +12398,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -12412,9 +12412,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12426,9 +12426,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12440,9 +12440,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12454,9 +12454,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12468,9 +12468,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12482,9 +12482,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -12496,9 +12496,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12510,9 +12510,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12524,9 +12524,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -12538,9 +12538,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12552,9 +12552,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12566,9 +12566,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12580,9 +12580,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12594,9 +12594,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12608,9 +12608,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -12622,9 +12622,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12636,9 +12636,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12650,9 +12650,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12664,9 +12664,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -12678,9 +12678,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12692,9 +12692,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12706,9 +12706,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12720,9 +12720,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12734,9 +12734,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -12748,9 +12748,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12762,9 +12762,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12776,9 +12776,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12790,9 +12790,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12804,9 +12804,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12818,9 +12818,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -12832,9 +12832,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12846,9 +12846,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -12860,9 +12860,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12874,9 +12874,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12888,9 +12888,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12902,9 +12902,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12916,9 +12916,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -12930,9 +12930,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12944,9 +12944,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -12958,9 +12958,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -12972,9 +12972,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -12986,9 +12986,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13000,9 +13000,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13014,9 +13014,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13028,9 +13028,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13042,9 +13042,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13056,9 +13056,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13070,9 +13070,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13084,9 +13084,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13098,9 +13098,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13112,9 +13112,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13126,9 +13126,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13140,9 +13140,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13154,9 +13154,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13168,9 +13168,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13182,9 +13182,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13196,9 +13196,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13210,9 +13210,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13224,9 +13224,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13238,9 +13238,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13252,9 +13252,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13266,9 +13266,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13280,9 +13280,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13294,9 +13294,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13308,9 +13308,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13322,9 +13322,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13336,9 +13336,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13350,9 +13350,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13364,9 +13364,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13378,9 +13378,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13392,9 +13392,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13406,9 +13406,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13420,9 +13420,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13434,9 +13434,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13448,9 +13448,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13462,9 +13462,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13476,9 +13476,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13490,9 +13490,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13504,9 +13504,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13518,9 +13518,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13532,9 +13532,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13546,9 +13546,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13560,9 +13560,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13574,9 +13574,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13588,9 +13588,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13602,9 +13602,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13616,9 +13616,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13630,9 +13630,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13644,9 +13644,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13658,9 +13658,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13672,9 +13672,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13686,9 +13686,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13700,9 +13700,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13714,9 +13714,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13728,9 +13728,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13742,9 +13742,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13756,9 +13756,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13770,9 +13770,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13784,9 +13784,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13798,9 +13798,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13812,9 +13812,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13826,9 +13826,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13840,9 +13840,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -13854,9 +13854,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13868,9 +13868,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13882,9 +13882,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13896,9 +13896,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13910,9 +13910,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13924,9 +13924,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -13938,9 +13938,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13952,9 +13952,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -13966,9 +13966,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -13980,9 +13980,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -13994,9 +13994,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14008,9 +14008,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14022,9 +14022,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14036,9 +14036,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14050,9 +14050,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14064,9 +14064,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -14078,9 +14078,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -14092,9 +14092,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14106,9 +14106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14120,9 +14120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14134,9 +14134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14148,9 +14148,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -14162,9 +14162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14176,9 +14176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14190,9 +14190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14204,9 +14204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14218,9 +14218,9 @@ "dark_vs": "variable.language: #569CD6", "light_vs": "variable.language: #0000FF", "hc_black": "variable.language.this: #569CD6", - "dark_plus_experimental": "variable.language: #569CD6", + "dark_modern": "variable.language: #569CD6", "hc_light": "variable.language: #0F4A85", - "light_plus_experimental": "variable.language: #0000FF" + "light_modern": "variable.language: #0000FF" } }, { @@ -14232,9 +14232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14246,9 +14246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14260,9 +14260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14274,9 +14274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14288,9 +14288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14302,9 +14302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14316,9 +14316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14330,9 +14330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14344,9 +14344,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14358,9 +14358,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -14372,9 +14372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14386,9 +14386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14400,9 +14400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14414,9 +14414,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -14428,9 +14428,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14442,9 +14442,9 @@ "dark_vs": "keyword.operator.new: #569CD6", "light_vs": "keyword.operator.new: #0000FF", "hc_black": "keyword.operator.new: #569CD6", - "dark_plus_experimental": "keyword.operator.new: #569CD6", + "dark_modern": "keyword.operator.new: #569CD6", "hc_light": "keyword.operator.new: #0F4A85", - "light_plus_experimental": "keyword.operator.new: #0000FF" + "light_modern": "keyword.operator.new: #0000FF" } }, { @@ -14456,9 +14456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14470,9 +14470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -14484,9 +14484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14498,9 +14498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -14512,9 +14512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -14526,9 +14526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_vb.json b/extensions/vscode-colorize-tests/test/colorize-results/test_vb.json index ea817681ce9..2d8b7a5fbf2 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_vb.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_vb.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -386,9 +386,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -470,9 +470,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -484,9 +484,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -526,9 +526,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -568,9 +568,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -610,9 +610,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } }, { @@ -694,9 +694,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -736,9 +736,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -750,9 +750,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.type: #4EC9B0", - "dark_plus_experimental": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", "hc_light": "support.type: #185E73", - "light_plus_experimental": "support.type: #267F99" + "light_modern": "support.type: #267F99" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -806,9 +806,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -820,9 +820,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -988,9 +988,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "support.function: #DCDCAA", - "dark_plus_experimental": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", "hc_light": "support.function: #5E2CBC", - "light_plus_experimental": "support.function: #795E26" + "light_modern": "support.function: #795E26" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.function: #DCDCAA", - "dark_plus_experimental": "entity.name.function: #DCDCAA", + "dark_modern": "entity.name.function: #DCDCAA", "hc_light": "entity.name.function: #5E2CBC", - "light_plus_experimental": "entity.name.function: #795E26" + "light_modern": "entity.name.function: #795E26" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2304,9 +2304,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2318,9 +2318,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2332,9 +2332,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2346,9 +2346,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2360,9 +2360,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2374,9 +2374,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2388,9 +2388,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2402,9 +2402,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2416,9 +2416,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2430,9 +2430,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2444,9 +2444,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2458,9 +2458,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2472,9 +2472,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2486,9 +2486,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2500,9 +2500,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2514,9 +2514,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2528,9 +2528,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2542,9 +2542,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2556,9 +2556,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2570,9 +2570,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2584,9 +2584,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2598,9 +2598,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2612,9 +2612,9 @@ "dark_vs": "keyword.operator: #D4D4D4", "light_vs": "keyword.operator: #000000", "hc_black": "keyword.operator: #D4D4D4", - "dark_plus_experimental": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", "hc_light": "keyword.operator: #000000", - "light_plus_experimental": "keyword.operator: #000000" + "light_modern": "keyword.operator: #000000" } }, { @@ -2626,9 +2626,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -2640,9 +2640,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2654,9 +2654,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2668,9 +2668,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2682,9 +2682,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2696,9 +2696,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2710,9 +2710,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2724,9 +2724,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2738,9 +2738,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2752,9 +2752,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -2766,9 +2766,9 @@ "dark_vs": "storage.type: #569CD6", "light_vs": "storage.type: #0000FF", "hc_black": "storage.type: #569CD6", - "dark_plus_experimental": "storage.type: #569CD6", + "dark_modern": "storage.type: #569CD6", "hc_light": "storage.type: #0F4A85", - "light_plus_experimental": "storage.type: #0000FF" + "light_modern": "storage.type: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_xml.json b/extensions/vscode-colorize-tests/test/colorize-results/test_xml.json index abd60714514..117ad95d8b2 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_xml.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_xml.json @@ -8,9 +8,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -78,9 +78,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -148,9 +148,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -162,9 +162,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -176,9 +176,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -288,9 +288,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -302,9 +302,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -316,9 +316,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -428,9 +428,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -442,9 +442,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -498,9 +498,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -512,9 +512,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -526,9 +526,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -540,9 +540,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -596,9 +596,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -610,9 +610,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -624,9 +624,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -638,9 +638,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -652,9 +652,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -666,9 +666,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -708,9 +708,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -722,9 +722,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -792,9 +792,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -806,9 +806,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -820,9 +820,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -862,9 +862,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -918,9 +918,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -932,9 +932,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -946,9 +946,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -960,9 +960,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -974,9 +974,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -988,9 +988,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1450,9 +1450,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1464,9 +1464,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1478,9 +1478,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1492,9 +1492,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1506,9 +1506,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1520,9 +1520,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1534,9 +1534,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1548,9 +1548,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1562,9 +1562,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1576,9 +1576,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1590,9 +1590,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1604,9 +1604,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1618,9 +1618,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1632,9 +1632,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1646,9 +1646,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1660,9 +1660,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1674,9 +1674,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1688,9 +1688,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1702,9 +1702,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1716,9 +1716,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1730,9 +1730,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1744,9 +1744,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1758,9 +1758,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1772,9 +1772,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1786,9 +1786,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1800,9 +1800,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1814,9 +1814,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1828,9 +1828,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1842,9 +1842,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1856,9 +1856,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1870,9 +1870,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1884,9 +1884,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1898,9 +1898,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -1912,9 +1912,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1926,9 +1926,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1940,9 +1940,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1954,9 +1954,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -1968,9 +1968,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -1982,9 +1982,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1996,9 +1996,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2010,9 +2010,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2024,9 +2024,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2038,9 +2038,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2052,9 +2052,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2066,9 +2066,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -2080,9 +2080,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -2094,9 +2094,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -2108,9 +2108,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2122,9 +2122,9 @@ "dark_vs": "entity.other.attribute-name: #9CDCFE", "light_vs": "entity.other.attribute-name: #E50000", "hc_black": "entity.other.attribute-name: #9CDCFE", - "dark_plus_experimental": "entity.other.attribute-name: #9CDCFE", + "dark_modern": "entity.other.attribute-name: #9CDCFE", "hc_light": "entity.other.attribute-name: #264F78", - "light_plus_experimental": "entity.other.attribute-name: #E50000" + "light_modern": "entity.other.attribute-name: #E50000" } }, { @@ -2136,9 +2136,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2150,9 +2150,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -2164,9 +2164,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -2178,9 +2178,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.quoted.double.xml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.quoted.double.xml: #0F4A85", - "light_plus_experimental": "string.quoted.double.xml: #0000FF" + "light_modern": "string.quoted.double.xml: #0000FF" } }, { @@ -2192,9 +2192,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2206,9 +2206,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -2220,9 +2220,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2234,9 +2234,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2248,9 +2248,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2262,9 +2262,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } }, { @@ -2276,9 +2276,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -2290,9 +2290,9 @@ "dark_vs": "punctuation.definition.tag: #808080", "light_vs": "punctuation.definition.tag: #800000", "hc_black": "punctuation.definition.tag: #808080", - "dark_plus_experimental": "punctuation.definition.tag: #808080", + "dark_modern": "punctuation.definition.tag: #808080", "hc_light": "punctuation.definition.tag: #0F4A85", - "light_plus_experimental": "punctuation.definition.tag: #800000" + "light_modern": "punctuation.definition.tag: #800000" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_yaml.json b/extensions/vscode-colorize-tests/test/colorize-results/test_yaml.json index 473f08ce007..407cc7c7a1a 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_yaml.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_yaml.json @@ -8,9 +8,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -22,9 +22,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -36,9 +36,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -50,9 +50,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -64,9 +64,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -78,9 +78,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -134,9 +134,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "entity.name.type: #4EC9B0", - "dark_plus_experimental": "entity.name.type: #4EC9B0", + "dark_modern": "entity.name.type: #4EC9B0", "hc_light": "entity.name.type: #185E73", - "light_plus_experimental": "entity.name.type: #267F99" + "light_modern": "entity.name.type: #267F99" } }, { @@ -148,9 +148,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -162,9 +162,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -176,9 +176,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -218,9 +218,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -232,9 +232,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -246,9 +246,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -288,9 +288,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -302,9 +302,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -316,9 +316,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -330,9 +330,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -344,9 +344,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -358,9 +358,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -372,9 +372,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -386,9 +386,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -400,9 +400,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -414,9 +414,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -428,9 +428,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -442,9 +442,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -456,9 +456,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -470,9 +470,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -484,9 +484,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -498,9 +498,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -512,9 +512,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -526,9 +526,9 @@ "dark_vs": "comment: #6A9955", "light_vs": "comment: #008000", "hc_black": "comment: #7CA668", - "dark_plus_experimental": "comment: #6A9955", + "dark_modern": "comment: #6A9955", "hc_light": "comment: #515151", - "light_plus_experimental": "comment: #008000" + "light_modern": "comment: #008000" } }, { @@ -540,9 +540,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -554,9 +554,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -568,9 +568,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -582,9 +582,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -596,9 +596,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -610,9 +610,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -624,9 +624,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -638,9 +638,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -652,9 +652,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -666,9 +666,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -680,9 +680,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -694,9 +694,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -708,9 +708,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -722,9 +722,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -736,9 +736,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -750,9 +750,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -764,9 +764,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -778,9 +778,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -792,9 +792,9 @@ "dark_vs": "keyword.control: #569CD6", "light_vs": "keyword.control: #0000FF", "hc_black": "keyword.control: #C586C0", - "dark_plus_experimental": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", "hc_light": "keyword.control: #B5200D", - "light_plus_experimental": "keyword.control: #AF00DB" + "light_modern": "keyword.control: #AF00DB" } }, { @@ -806,9 +806,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "variable: #9CDCFE", - "dark_plus_experimental": "variable: #9CDCFE", + "dark_modern": "variable: #9CDCFE", "hc_light": "variable: #001080", - "light_plus_experimental": "variable: #001080" + "light_modern": "variable: #001080" } }, { @@ -820,9 +820,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -834,9 +834,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -848,9 +848,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -862,9 +862,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -876,9 +876,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -890,9 +890,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -904,9 +904,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.in.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.in.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.in.yaml: #0000FF" + "light_modern": "string.unquoted.plain.in.yaml: #0000FF" } }, { @@ -918,9 +918,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -932,9 +932,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -946,9 +946,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -960,9 +960,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -974,9 +974,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -988,9 +988,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1002,9 +1002,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1016,9 +1016,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1030,9 +1030,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1044,9 +1044,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1058,9 +1058,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1072,9 +1072,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1086,9 +1086,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -1100,9 +1100,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1114,9 +1114,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1128,9 +1128,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1142,9 +1142,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1156,9 +1156,9 @@ "dark_vs": "constant.numeric: #B5CEA8", "light_vs": "constant.numeric: #098658", "hc_black": "constant.numeric: #B5CEA8", - "dark_plus_experimental": "constant.numeric: #B5CEA8", + "dark_modern": "constant.numeric: #B5CEA8", "hc_light": "constant.numeric: #096D48", - "light_plus_experimental": "constant.numeric: #098658" + "light_modern": "constant.numeric: #098658" } }, { @@ -1170,9 +1170,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1184,9 +1184,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1198,9 +1198,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1212,9 +1212,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1226,9 +1226,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1240,9 +1240,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.in.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.in.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.in.yaml: #0000FF" + "light_modern": "string.unquoted.plain.in.yaml: #0000FF" } }, { @@ -1254,9 +1254,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1268,9 +1268,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1282,9 +1282,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.in.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.in.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.in.yaml: #0000FF" + "light_modern": "string.unquoted.plain.in.yaml: #0000FF" } }, { @@ -1296,9 +1296,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1310,9 +1310,9 @@ "dark_vs": "entity.name.tag: #569CD6", "light_vs": "entity.name.tag: #800000", "hc_black": "entity.name.tag: #569CD6", - "dark_plus_experimental": "entity.name.tag: #569CD6", + "dark_modern": "entity.name.tag: #569CD6", "hc_light": "entity.name.tag: #0F4A85", - "light_plus_experimental": "entity.name.tag: #800000" + "light_modern": "entity.name.tag: #800000" } }, { @@ -1324,9 +1324,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1338,9 +1338,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1352,9 +1352,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1366,9 +1366,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1380,9 +1380,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } }, { @@ -1394,9 +1394,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1408,9 +1408,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1422,9 +1422,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -1436,9 +1436,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string.unquoted.plain.out.yaml: #0000FF", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string.unquoted.plain.out.yaml: #0F4A85", - "light_plus_experimental": "string.unquoted.plain.out.yaml: #0000FF" + "light_modern": "string.unquoted.plain.out.yaml: #0000FF" } } ] \ No newline at end of file diff --git a/extensions/vscode-colorize-tests/test/colorize-results/tsconfig_off_json.json b/extensions/vscode-colorize-tests/test/colorize-results/tsconfig_off_json.json index d4f8bf6b243..a547a91a352 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/tsconfig_off_json.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/tsconfig_off_json.json @@ -8,9 +8,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -22,9 +22,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -36,9 +36,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -50,9 +50,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -64,9 +64,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -78,9 +78,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -92,9 +92,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -106,9 +106,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -120,9 +120,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -134,9 +134,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -148,9 +148,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -162,9 +162,9 @@ "dark_vs": "support.type.property-name: #9CDCFE", "light_vs": "support.type.property-name.json: #0451A5", "hc_black": "support.type.property-name: #D4D4D4", - "dark_plus_experimental": "support.type.property-name: #9CDCFE", + "dark_modern": "support.type.property-name: #9CDCFE", "hc_light": "support.type.property-name.json: #0451A5", - "light_plus_experimental": "support.type.property-name.json: #0451A5" + "light_modern": "support.type.property-name.json: #0451A5" } }, { @@ -176,9 +176,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -190,9 +190,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -204,9 +204,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -218,9 +218,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -232,9 +232,9 @@ "dark_vs": "string: #CE9178", "light_vs": "string: #A31515", "hc_black": "string: #CE9178", - "dark_plus_experimental": "string: #CE9178", + "dark_modern": "string: #CE9178", "hc_light": "string: #0F4A85", - "light_plus_experimental": "string: #A31515" + "light_modern": "string: #A31515" } }, { @@ -246,9 +246,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -260,9 +260,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } }, { @@ -274,9 +274,9 @@ "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", "hc_black": "default: #FFFFFF", - "dark_plus_experimental": "default: #CCCCCC", + "dark_modern": "default: #CCCCCC", "hc_light": "default: #292929", - "light_plus_experimental": "default: #3B3B3B" + "light_modern": "default: #3B3B3B" } } ] \ No newline at end of file diff --git a/extensions/vscode-test-resolver/extension-browser.webpack.config.js b/extensions/vscode-test-resolver/extension-browser.webpack.config.js new file mode 100644 index 00000000000..ff7972a1aee --- /dev/null +++ b/extensions/vscode-test-resolver/extension-browser.webpack.config.js @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +//@ts-check + +'use strict'; + +const withBrowserDefaults = require('../shared.webpack.config').browser; + +module.exports = withBrowserDefaults({ + context: __dirname, + entry: { + extension: './src/extension.browser.ts' + }, + output: { + filename: 'testResolverMain.js' + } +}); diff --git a/extensions/vscode-test-resolver/package.json b/extensions/vscode-test-resolver/package.json index 167275aa275..e721c65567a 100644 --- a/extensions/vscode-test-resolver/package.json +++ b/extensions/vscode-test-resolver/package.json @@ -4,10 +4,9 @@ "version": "0.0.1", "publisher": "vscode", "license": "MIT", - "enableProposedApi": true, "enabledApiProposals": [ "resolvers", - "tunnels" + "tunnels" ], "private": true, "engines": { @@ -32,6 +31,7 @@ "onCommand:vscode-testresolver.toggleConnectionPause" ], "main": "./out/extension", + "browser": "./dist/browser/testResolverMain", "devDependencies": { "@types/node": "16.x" }, @@ -66,6 +66,11 @@ "category": "Remote-TestResolver", "command": "vscode-testresolver.currentWindow" }, + { + "title": "Connect to TestResolver in Current Window with Managed Connection", + "category": "Remote-TestResolver", + "command": "vscode-testresolver.currentWindowManaged" + }, { "title": "Show TestResolver Log", "category": "Remote-TestResolver", @@ -90,6 +95,11 @@ "title": "Pause Connection (Test Reconnect)", "category": "Remote-TestResolver", "command": "vscode-testresolver.toggleConnectionPause" + }, + { + "title": "Slowdown Connection (Test Slow Down Indicator)", + "category": "Remote-TestResolver", + "command": "vscode-testresolver.toggleConnectionSlowdown" } ], "menus": { diff --git a/extensions/vscode-test-resolver/src/extension.browser.ts b/extensions/vscode-test-resolver/src/extension.browser.ts new file mode 100644 index 00000000000..93703fde4df --- /dev/null +++ b/extensions/vscode-test-resolver/src/extension.browser.ts @@ -0,0 +1,133 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; + +export function activate(_context: vscode.ExtensionContext) { + vscode.workspace.registerRemoteAuthorityResolver('test', { + async resolve(_authority: string): Promise { + console.log(`Resolving ${_authority}`); + console.log(`Activating vscode.github-authentication to simulate auth`); + await vscode.extensions.getExtension('vscode.github-authentication')?.activate(); + return new vscode.ManagedResolvedAuthority(async () => { + return new InitialManagedMessagePassing(); + }); + } + }); +} + +/** + * The initial message passing is a bit special because we need to + * wait for the HTTP headers to arrive before we can create the + * actual WebSocket. + */ +class InitialManagedMessagePassing implements vscode.ManagedMessagePassing { + private readonly dataEmitter = new vscode.EventEmitter(); + private readonly closeEmitter = new vscode.EventEmitter(); + private readonly endEmitter = new vscode.EventEmitter(); + + public readonly onDidReceiveMessage = this.dataEmitter.event; + public readonly onDidClose = this.closeEmitter.event; + public readonly onDidEnd = this.endEmitter.event; + + private _actual: OpeningManagedMessagePassing | null = null; + private _isDisposed = false; + + public send(d: Uint8Array): void { + if (this._actual) { + // we already got the HTTP headers + this._actual.send(d); + return; + } + + if (this._isDisposed) { + // got disposed in the meantime, ignore + return; + } + + // we now received the HTTP headers + const decoder = new TextDecoder(); + const str = decoder.decode(d); + + // example str GET ws://localhost/oss-dev?reconnectionToken=4354a323-a45a-452c-b5d7-d8d586e1cd5c&reconnection=false&skipWebSocketFrames=true HTTP/1.1 + const match = str.match(/GET\s+(\S+)\s+HTTP/); + if (!match) { + console.error(`Coult not parse ${str}`); + this.closeEmitter.fire(new Error(`Coult not parse ${str}`)); + return; + } + + // example url ws://localhost/oss-dev?reconnectionToken=4354a323-a45a-452c-b5d7-d8d586e1cd5c&reconnection=false&skipWebSocketFrames=true + const url = new URL(match[1]); + + // extract path and query from url using browser's URL + const parsedUrl = new URL(url); + this._actual = new OpeningManagedMessagePassing(parsedUrl, this.dataEmitter, this.closeEmitter, this.endEmitter); + } + + public end(): void { + if (this._actual) { + this._actual.end(); + return; + } + this._isDisposed = true; + } +} + +class OpeningManagedMessagePassing { + + private readonly socket: WebSocket; + private isOpen = false; + private bufferedData: Uint8Array[] = []; + + constructor( + url: URL, + dataEmitter: vscode.EventEmitter, + closeEmitter: vscode.EventEmitter, + _endEmitter: vscode.EventEmitter + ) { + this.socket = new WebSocket(`ws://localhost:9888${url.pathname}${url.search.replace(/skipWebSocketFrames=true/, 'skipWebSocketFrames=false')}`); + this.socket.addEventListener('close', () => closeEmitter.fire(undefined)); + this.socket.addEventListener('error', (e) => closeEmitter.fire(new Error(String(e)))); + this.socket.addEventListener('message', async (e) => { + const arrayBuffer = await e.data.arrayBuffer(); + dataEmitter.fire(new Uint8Array(arrayBuffer)); + }); + this.socket.addEventListener('open', () => { + while (this.bufferedData.length > 0) { + const first = this.bufferedData.shift()!; + this.socket.send(first); + } + this.isOpen = true; + + // https://tools.ietf.org/html/rfc6455#section-4 + // const requestNonce = req.headers['sec-websocket-key']; + // const hash = crypto.createHash('sha1'); + // hash.update(requestNonce + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'); + // const responseNonce = hash.digest('base64'); + const responseHeaders = [ + `HTTP/1.1 101 Switching Protocols`, + `Upgrade: websocket`, + `Connection: Upgrade`, + `Sec-WebSocket-Accept: TODO` + ]; + const textEncoder = new TextEncoder(); + textEncoder.encode(responseHeaders.join('\r\n') + '\r\n\r\n'); + dataEmitter.fire(textEncoder.encode(responseHeaders.join('\r\n') + '\r\n\r\n')); + }); + } + + public send(d: Uint8Array): void { + if (!this.isOpen) { + this.bufferedData.push(d); + return; + } + this.socket.send(d); + } + + public end(): void { + this.socket.close(); + } +} diff --git a/extensions/vscode-test-resolver/src/extension.ts b/extensions/vscode-test-resolver/src/extension.ts index 05fd267d2bc..8e12e622e05 100644 --- a/extensions/vscode-test-resolver/src/extension.ts +++ b/extensions/vscode-test-resolver/src/extension.ts @@ -22,12 +22,65 @@ const enum CharCode { let outputChannel: vscode.OutputChannel; +const SLOWED_DOWN_CONNECTION_DELAY = 800; + export function activate(context: vscode.ExtensionContext) { let connectionPaused = false; const connectionPausedEvent = new vscode.EventEmitter(); - function doResolve(_authority: string, progress: vscode.Progress<{ message?: string; increment?: number }>): Promise { + let connectionSlowedDown = false; + const connectionSlowedDownEvent = new vscode.EventEmitter(); + const slowedDownConnections = new Set(); + connectionSlowedDownEvent.event(slowed => { + if (!slowed) { + for (const cb of slowedDownConnections) { + cb(); + } + slowedDownConnections.clear(); + } + }); + + function getTunnelFeatures(): vscode.TunnelInformation['tunnelFeatures'] { + return { + elevation: true, + privacyOptions: vscode.workspace.getConfiguration('testresolver').get('supportPublicPorts') ? [ + { + id: 'public', + label: 'Public', + themeIcon: 'eye' + }, + { + id: 'other', + label: 'Other', + themeIcon: 'circuit-board' + }, + { + id: 'private', + label: 'Private', + themeIcon: 'eye-closed' + } + ] : [] + }; + } + + function maybeSlowdown(): Promise | void { + if (connectionSlowedDown) { + return new Promise(resolve => { + const handle = setTimeout(() => { + resolve(); + slowedDownConnections.delete(resolve); + }, SLOWED_DOWN_CONNECTION_DELAY); + + slowedDownConnections.add(() => { + resolve(); + clearTimeout(handle); + }); + }); + } + } + + function doResolve(authority: string, progress: vscode.Progress<{ message?: string; increment?: number }>): Promise { if (connectionPaused) { throw vscode.RemoteAuthorityResolverError.TemporarilyNotAvailable('Not available right now'); } @@ -150,7 +203,35 @@ export function activate(context: vscode.ExtensionContext) { } }); }); - return serverPromise.then(serverAddr => { + + return serverPromise.then((serverAddr): Promise => { + if (authority.includes('managed')) { + console.log('Connecting via a managed authority'); + return Promise.resolve(new vscode.ManagedResolvedAuthority(async () => { + const remoteSocket = net.createConnection({ port: serverAddr.port }); + const dataEmitter = new vscode.EventEmitter(); + const closeEmitter = new vscode.EventEmitter(); + const endEmitter = new vscode.EventEmitter(); + + await new Promise((res, rej) => { + remoteSocket.on('data', d => dataEmitter.fire(d)) + .on('error', err => { rej(); closeEmitter.fire(err); }) + .on('close', () => endEmitter.fire()) + .on('end', () => endEmitter.fire()) + .on('connect', res); + }); + + + return { + onDidReceiveMessage: dataEmitter.event, + onDidClose: closeEmitter.event, + onDidEnd: endEmitter.event, + send: d => remoteSocket.write(d), + end: () => remoteSocket.end(), + }; + }, connectionToken)); + } + return new Promise((res, _rej) => { const proxyServer = net.createServer(proxySocket => { outputChannel.appendLine(`Proxy connection accepted`); @@ -186,13 +267,15 @@ export function activate(context: vscode.ExtensionContext) { connectionPausedEvent.event(_ => handleConnectionPause()); handleConnectionPause(); - proxySocket.on('data', (data) => { + proxySocket.on('data', async (data) => { + await maybeSlowdown(); remoteReady = remoteSocket.write(data); if (!remoteReady) { proxySocket.pause(); } }); - remoteSocket.on('data', (data) => { + remoteSocket.on('data', async (data) => { + await maybeSlowdown(); localReady = proxySocket.write(data); if (!localReady) { remoteSocket.pause(); @@ -228,28 +311,7 @@ export function activate(context: vscode.ExtensionContext) { proxyServer.listen(0, '127.0.0.1', () => { const port = (proxyServer.address()).port; outputChannel.appendLine(`Going through proxy at port ${port}`); - const r: vscode.ResolverResult = new vscode.ResolvedAuthority('127.0.0.1', port, connectionToken); - r.tunnelFeatures = { - elevation: true, - privacyOptions: vscode.workspace.getConfiguration('testresolver').get('supportPublicPorts') ? [ - { - id: 'public', - label: 'Public', - themeIcon: 'eye' - }, - { - id: 'other', - label: 'Other', - themeIcon: 'circuit-board' - }, - { - id: 'private', - label: 'Private', - themeIcon: 'eye-closed' - } - ] : [] - }; - res(r); + res(new vscode.ResolvedAuthority('127.0.0.1', port, connectionToken)); }); context.subscriptions.push({ dispose: () => { @@ -264,12 +326,16 @@ export function activate(context: vscode.ExtensionContext) { async getCanonicalURI(uri: vscode.Uri): Promise { return vscode.Uri.file(uri.path); }, - resolve(_authority: string): Thenable { + resolve(_authority: string): Thenable { return vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: 'Open TestResolver Remote ([details](command:vscode-testresolver.showLog))', cancellable: false - }, (progress) => doResolve(_authority, progress)); + }, async (progress) => { + const rr = await doResolve(_authority, progress); + rr.tunnelFeatures = getTunnelFeatures(); + return rr; + }); }, tunnelFactory, showCandidatePort @@ -282,6 +348,9 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.commands.registerCommand('vscode-testresolver.currentWindow', () => { return vscode.commands.executeCommand('vscode.newWindow', { remoteAuthority: 'test+test', reuseWindow: true }); })); + context.subscriptions.push(vscode.commands.registerCommand('vscode-testresolver.currentWindowManaged', () => { + return vscode.commands.executeCommand('vscode.newWindow', { remoteAuthority: 'test+managed', reuseWindow: true }); + })); context.subscriptions.push(vscode.commands.registerCommand('vscode-testresolver.newWindowWithError', () => { return vscode.commands.executeCommand('vscode.newWindow', { remoteAuthority: 'test+error' }); })); @@ -321,6 +390,22 @@ export function activate(context: vscode.ExtensionContext) { connectionPausedEvent.fire(connectionPaused); })); + const slowdownStatusBarEntry = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); + slowdownStatusBarEntry.text = 'Remote connection slowed down. Click to undo'; + slowdownStatusBarEntry.command = 'vscode-testresolver.toggleConnectionSlowdown'; + slowdownStatusBarEntry.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground'); + + context.subscriptions.push(vscode.commands.registerCommand('vscode-testresolver.toggleConnectionSlowdown', () => { + if (!connectionSlowedDown) { + connectionSlowedDown = true; + slowdownStatusBarEntry.show(); + } else { + connectionSlowedDown = false; + slowdownStatusBarEntry.hide(); + } + connectionSlowedDownEvent.fire(connectionSlowedDown); + })); + context.subscriptions.push(vscode.commands.registerCommand('vscode-testresolver.openTunnel', async () => { const result = await vscode.window.showInputBox({ prompt: 'Enter the remote port for the tunnel', diff --git a/extensions/vscode-test-resolver/tsconfig.json b/extensions/vscode-test-resolver/tsconfig.json index 4a8025df9b5..d1c0f9d9f50 100644 --- a/extensions/vscode-test-resolver/tsconfig.json +++ b/extensions/vscode-test-resolver/tsconfig.json @@ -4,6 +4,9 @@ "outDir": "./out", "types": [ "node" + ], + "lib": [ + "WebWorker" ] }, "include": [ diff --git a/extensions/yarn.lock b/extensions/yarn.lock index 4a948958d5c..50070eb668f 100644 --- a/extensions/yarn.lock +++ b/extensions/yarn.lock @@ -2,15 +2,115 @@ # yarn lockfile v1 -"@esbuild/android-arm@0.15.14": - version "0.15.14" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.14.tgz#5d0027f920eeeac313c01fd6ecb8af50c306a466" - integrity sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA== +"@esbuild/android-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.14.tgz#4624cea3c8941c91f9e9c1228f550d23f1cef037" + integrity sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg== -"@esbuild/linux-loong64@0.15.14": - version "0.15.14" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz#1221684955c44385f8af34f7240088b7dc08d19d" - integrity sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg== +"@esbuild/android-arm@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.14.tgz#74fae60fcab34c3f0e15cb56473a6091ba2b53a6" + integrity sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g== + +"@esbuild/android-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.14.tgz#f002fbc08d5e939d8314bd23bcfb1e95d029491f" + integrity sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng== + +"@esbuild/darwin-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.14.tgz#b8dcd79a1dd19564950b4ca51d62999011e2e168" + integrity sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw== + +"@esbuild/darwin-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.14.tgz#4b49f195d9473625efc3c773fc757018f2c0d979" + integrity sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g== + +"@esbuild/freebsd-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.14.tgz#480923fd38f644c6342c55e916cc7c231a85eeb7" + integrity sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A== + +"@esbuild/freebsd-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.14.tgz#a6b6b01954ad8562461cb8a5e40e8a860af69cbe" + integrity sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw== + +"@esbuild/linux-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.14.tgz#1fe2f39f78183b59f75a4ad9c48d079916d92418" + integrity sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g== + +"@esbuild/linux-arm@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.14.tgz#18d594a49b64e4a3a05022c005cb384a58056a2a" + integrity sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg== + +"@esbuild/linux-ia32@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.14.tgz#f7f0182a9cfc0159e0922ed66c805c9c6ef1b654" + integrity sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ== + +"@esbuild/linux-loong64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.14.tgz#5f5305fdffe2d71dd9a97aa77d0c99c99409066f" + integrity sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ== + +"@esbuild/linux-mips64el@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.14.tgz#a602e85c51b2f71d2aedfe7f4143b2f92f97f3f5" + integrity sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg== + +"@esbuild/linux-ppc64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.14.tgz#32d918d782105cbd9345dbfba14ee018b9c7afdf" + integrity sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ== + +"@esbuild/linux-riscv64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.14.tgz#38612e7b6c037dff7022c33f49ca17f85c5dec58" + integrity sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw== + +"@esbuild/linux-s390x@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.14.tgz#4397dff354f899e72fd035d72af59a700c465ccb" + integrity sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww== + +"@esbuild/linux-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.14.tgz#6c5cb99891b6c3e0c08369da3ef465e8038ad9c2" + integrity sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw== + +"@esbuild/netbsd-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.14.tgz#5fa5255a64e9bf3947c1b3bef5e458b50b211994" + integrity sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ== + +"@esbuild/openbsd-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.14.tgz#74d14c79dcb6faf446878cc64284aa4e02f5ca6f" + integrity sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g== + +"@esbuild/sunos-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.14.tgz#5c7d1c7203781d86c2a9b2ff77bd2f8036d24cfa" + integrity sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA== + +"@esbuild/win32-arm64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.14.tgz#dc36ed84f1390e73b6019ccf0566c80045e5ca3d" + integrity sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ== + +"@esbuild/win32-ia32@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.14.tgz#0802a107afa9193c13e35de15a94fe347c588767" + integrity sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w== + +"@esbuild/win32-x64@0.17.14": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.14.tgz#e81fb49de05fed91bf74251c9ca0343f4fc77d31" + integrity sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA== "@parcel/watcher@2.1.0": version "2.1.0" @@ -41,133 +141,33 @@ cson-parser@^4.0.9: dependencies: coffeescript "1.12.7" -esbuild-android-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz#114e55b0d58fb7b45d7fa3d93516bd13fc8869cc" - integrity sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg== - -esbuild-android-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz#8541f38a9aacf88e574fb13f5ad4ca51a04c12bb" - integrity sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg== - -esbuild-darwin-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz#b40b334db81ff1e3677a6712b23761748a157c57" - integrity sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg== - -esbuild-darwin-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz#44b5c1477bb7bdb852dd905e906f68765e2828bc" - integrity sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A== - -esbuild-freebsd-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz#8c57315d238690f34b6ed0c94e5cfc04c858247a" - integrity sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA== - -esbuild-freebsd-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz#2e92acca09258daa849e635565f52469266f0b7b" - integrity sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg== - -esbuild-linux-32@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz#ca5ed3e9dff82df486ddde362d7e00775a597dfd" - integrity sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA== - -esbuild-linux-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz#42952e1d08a299d5f573c567639fb37b033befbf" - integrity sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw== - -esbuild-linux-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz#0c0d788099703327ec0ae70758cb2639ef6c5d88" - integrity sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg== - -esbuild-linux-arm@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz#751a5ca5042cd60f669b07c3bcec3dd6c4f8151c" - integrity sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q== - -esbuild-linux-mips64le@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz#da8ac35f2704de0b52bf53a99c12f604fbe9b916" - integrity sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA== - -esbuild-linux-ppc64le@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz#a315b5016917429080c3d32e03319f1ff876ac55" - integrity sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w== - -esbuild-linux-riscv64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz#9f2e0a935e5086d398fc19c7ff5d217bfefe3e12" - integrity sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q== - -esbuild-linux-s390x@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz#53108112faff5a4e1bad17f7b0b0ffa1df4b7efb" - integrity sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw== - -esbuild-netbsd-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz#5330efc41fe4f1c2bab5462bcfe7a4ffce7ba00a" - integrity sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ== - -esbuild-openbsd-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz#ee64944d863e937611fc31adf349e9bb4f5f7eac" - integrity sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA== - -esbuild-sunos-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz#29b0b20de6fe6ef50f9fbe533ec20dc4b595f9aa" - integrity sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q== - -esbuild-windows-32@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz#05e9b159d664809f7a4a8a68ed048d193457b27d" - integrity sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg== - -esbuild-windows-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz#d5ae086728ab30b72969e40ed0a7a0d9082f2cdd" - integrity sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog== - -esbuild-windows-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz#8eb50ab9a0ecaf058593fbad17502749306f801d" - integrity sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw== - -esbuild@^0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.14.tgz#09202b811f1710363d5088a3401a351351c79875" - integrity sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ== +esbuild@0.17.14: + version "0.17.14" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.14.tgz#d61a22de751a3133f3c6c7f9c1c3e231e91a3245" + integrity sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw== optionalDependencies: - "@esbuild/android-arm" "0.15.14" - "@esbuild/linux-loong64" "0.15.14" - esbuild-android-64 "0.15.14" - esbuild-android-arm64 "0.15.14" - esbuild-darwin-64 "0.15.14" - esbuild-darwin-arm64 "0.15.14" - esbuild-freebsd-64 "0.15.14" - esbuild-freebsd-arm64 "0.15.14" - esbuild-linux-32 "0.15.14" - esbuild-linux-64 "0.15.14" - esbuild-linux-arm "0.15.14" - esbuild-linux-arm64 "0.15.14" - esbuild-linux-mips64le "0.15.14" - esbuild-linux-ppc64le "0.15.14" - esbuild-linux-riscv64 "0.15.14" - esbuild-linux-s390x "0.15.14" - esbuild-netbsd-64 "0.15.14" - esbuild-openbsd-64 "0.15.14" - esbuild-sunos-64 "0.15.14" - esbuild-windows-32 "0.15.14" - esbuild-windows-64 "0.15.14" - esbuild-windows-arm64 "0.15.14" + "@esbuild/android-arm" "0.17.14" + "@esbuild/android-arm64" "0.17.14" + "@esbuild/android-x64" "0.17.14" + "@esbuild/darwin-arm64" "0.17.14" + "@esbuild/darwin-x64" "0.17.14" + "@esbuild/freebsd-arm64" "0.17.14" + "@esbuild/freebsd-x64" "0.17.14" + "@esbuild/linux-arm" "0.17.14" + "@esbuild/linux-arm64" "0.17.14" + "@esbuild/linux-ia32" "0.17.14" + "@esbuild/linux-loong64" "0.17.14" + "@esbuild/linux-mips64el" "0.17.14" + "@esbuild/linux-ppc64" "0.17.14" + "@esbuild/linux-riscv64" "0.17.14" + "@esbuild/linux-s390x" "0.17.14" + "@esbuild/linux-x64" "0.17.14" + "@esbuild/netbsd-x64" "0.17.14" + "@esbuild/openbsd-x64" "0.17.14" + "@esbuild/sunos-x64" "0.17.14" + "@esbuild/win32-arm64" "0.17.14" + "@esbuild/win32-ia32" "0.17.14" + "@esbuild/win32-x64" "0.17.14" fast-plist@0.1.2: version "0.1.2" @@ -228,10 +228,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -typescript@^5.0.0-dev.20230224: - version "5.0.0-dev.20230224" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.0-dev.20230224.tgz#801908424fafe3f5728320348ad0dc966960fd69" - integrity sha512-ntlbPkFF0PM1+lmvLenUGwo+3EJPq5QAvAsw+6HA6KTOHpF3IcmYE57rcgpL54NLXhqz84RNTtcmb4dttBuBsA== +typescript@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" + integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== vscode-grammar-updater@^1.1.0: version "1.1.0" diff --git a/package.json b/package.json index b8cf9972928..224789cf9ec 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", - "version": "1.77.0", - "distro": "5c3ced825bd240368133d5253c94a0e5588168ae", + "version": "1.81.0", + "distro": "ce5df90ac966be777544d3f332705138a9e4d73e", "author": { "name": "Microsoft Corporation" }, @@ -45,9 +45,12 @@ "valid-layers-check": "node build/lib/layersChecker.js", "update-distro": "node build/npm/update-distro.mjs", "web": "echo 'yarn web' is replaced by './scripts/code-server' or './scripts/code-web'", + "compile-cli": "gulp compile-cli", "compile-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-web", "watch-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-web", + "watch-cli": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-cli", "eslint": "node build/eslint", + "stylelint": "node build/stylelint", "playwright-install": "node build/azure-pipelines/common/installPlaywright.js", "compile-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-build", "compile-extensions-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-extensions-build", @@ -56,8 +59,9 @@ "minify-vscode-reh-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh-web", "hygiene": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js hygiene", "core-ci": "node --max_old_space_size=8095 ./node_modules/gulp/bin/gulp.js core-ci", + "core-ci-pr": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js core-ci-pr", "extensions-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci", - "webview-generate-csp-hash": "npx github:apaatsio/csp-hash-from-html csp-hash ./src/vs/workbench/contrib/webview/browser/pre/index.html", + "extensions-ci-pr": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci-pr", "perf": "node scripts/code-perf.js" }, "dependencies": { @@ -66,44 +70,47 @@ "@parcel/watcher": "2.1.0", "@vscode/iconv-lite-umd": "0.7.0", "@vscode/policy-watcher": "^1.1.4", - "@vscode/ripgrep": "^1.14.2", - "@vscode/sqlite3": "5.1.2-vscode", + "@vscode/proxy-agent": "^0.15.0", + "@vscode/ripgrep": "^1.15.5", + "@vscode/spdlog": "^0.13.10", + "@vscode/sqlite3": "5.1.6-vscode", "@vscode/sudo-prompt": "9.3.1", "@vscode/vscode-languagedetection": "1.0.21", - "graceful-fs": "4.2.8", + "@vscode/windows-mutex": "^0.4.4", + "@vscode/windows-process-tree": "^0.5.0", + "@vscode/windows-registry": "^1.1.0", + "graceful-fs": "4.2.11", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.3", "jschardet": "3.0.0", "keytar": "7.9.0", "minimist": "^1.2.6", - "native-is-elevated": "0.4.3", - "native-keymap": "3.3.2", - "native-watchdog": "1.4.1", - "node-pty": "0.11.0-beta29", - "spdlog": "^0.13.0", - "tas-client-umd": "0.1.6", + "native-is-elevated": "0.7.0", + "native-keymap": "^3.3.2", + "native-watchdog": "^1.4.1", + "node-pty": "1.1.0-beta1", + "tas-client-umd": "0.1.8", "v8-inspect-profiler": "^0.1.0", "vscode-oniguruma": "1.7.0", - "vscode-proxy-agent": "^0.12.0", "vscode-regexpp": "^3.1.0", "vscode-textmate": "9.0.0", - "xterm": "5.2.0-beta.29", - "xterm-addon-canvas": "0.4.0-beta.7", - "xterm-addon-search": "0.11.0", - "xterm-addon-serialize": "0.9.0", + "xterm": "5.3.0-beta.3", + "xterm-addon-canvas": "0.5.0-beta.2", + "xterm-addon-image": "0.4.1", + "xterm-addon-search": "0.13.0-beta.2", + "xterm-addon-serialize": "0.11.0-beta.2", "xterm-addon-unicode11": "0.5.0", - "xterm-addon-webgl": "0.15.0-beta.7", - "xterm-headless": "5.2.0-beta.29", + "xterm-addon-webgl": "0.16.0-beta.2", + "xterm-headless": "5.3.0-beta.3", "yauzl": "^2.9.2", "yazl": "^2.4.3" }, "devDependencies": { "7zip": "0.0.6", - "@playwright/test": "1.27.1", - "@swc/cli": "0.1.57", - "@swc/core": "1.3.32", + "@playwright/test": "^1.34.3", + "@swc/cli": "0.1.62", + "@swc/core": "1.3.62", "@types/cookie": "^0.3.3", - "@types/copy-webpack-plugin": "^6.0.3", "@types/cssnano": "^4.0.0", "@types/debug": "4.1.5", "@types/graceful-fs": "4.1.2", @@ -118,43 +125,41 @@ "@types/sinon-test": "^2.4.2", "@types/trusted-types": "^1.0.6", "@types/vscode-notebook-renderer": "^1.72.0", - "@types/webpack": "^4.41.25", - "@types/wicg-file-system-access": "^2020.9.5", + "@types/webpack": "^5.28.1", + "@types/wicg-file-system-access": "^2020.9.6", "@types/windows-foreground-love": "^0.3.0", - "@types/windows-mutex": "^0.4.0", - "@types/windows-process-tree": "^0.2.0", "@types/winreg": "^1.2.30", "@types/yauzl": "^2.9.1", "@types/yazl": "^2.4.2", - "@typescript-eslint/eslint-plugin": "^5.39.0", - "@typescript-eslint/experimental-utils": "^5.39.0", - "@typescript-eslint/parser": "^5.39.0", + "@typescript-eslint/eslint-plugin": "^5.57.0", + "@typescript-eslint/experimental-utils": "^5.57.0", + "@typescript-eslint/parser": "^5.57.0", + "@vscode/gulp-electron": "^1.36.0", "@vscode/l10n-dev": "0.0.21", - "@vscode/telemetry-extractor": "^1.9.8", - "@vscode/test-web": "^0.0.34", - "@vscode/vscode-perf": "^0.0.6", + "@vscode/telemetry-extractor": "^1.9.9", + "@vscode/test-web": "^0.0.41", + "@vscode/vscode-perf": "^0.0.14", "ansi-colors": "^3.2.3", "asar": "^3.0.3", "chromium-pickle-js": "^0.2.0", "cookie": "^0.4.0", - "copy-webpack-plugin": "^6.0.3", + "copy-webpack-plugin": "^11.0.0", "cson-parser": "^1.3.3", - "css-loader": "^3.6.0", + "css-loader": "^6.7.3", "cssnano": "^4.1.11", "debounce": "^1.0.0", "deemon": "^1.8.0", - "electron": "19.1.9", - "eslint": "8.7.0", + "electron": "22.3.14", + "eslint": "8.36.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-jsdoc": "^39.3.2", "eslint-plugin-local": "^1.0.0", "event-stream": "3.3.4", "fancy-log": "^1.3.3", "fast-plist": "0.1.3", - "file-loader": "^5.1.0", + "file-loader": "^6.2.0", "glob": "^5.0.13", "gulp": "^4.0.0", - "gulp-atom-electron": "^1.33.0", "gulp-azure-storage": "^0.12.1", "gulp-bom": "^3.0.0", "gulp-buffer": "0.0.2", @@ -167,14 +172,11 @@ "gulp-json-editor": "^2.5.0", "gulp-plumber": "^1.2.0", "gulp-postcss": "^9.0.0", - "gulp-remote-retry-src": "^0.8.0", "gulp-rename": "^1.2.0", "gulp-replace": "^0.5.4", "gulp-sourcemaps": "^3.0.0", "gulp-svgmin": "^4.1.0", "gulp-untar": "^0.0.7", - "gulp-vinyl-zip": "^2.1.2", - "http-server": "^14.1.1", "husky": "^0.13.1", "innosetup": "6.0.5", "is": "^3.1.0", @@ -200,27 +202,24 @@ "pump": "^1.0.1", "queue": "3.0.6", "rcedit": "^1.1.0", - "request": "^2.85.0", "rimraf": "^2.2.8", "sinon": "^12.0.1", "sinon-test": "^3.1.3", "source-map": "0.6.1", "source-map-support": "^0.3.2", - "style-loader": "^1.3.0", - "ts-loader": "^9.2.7", + "style-loader": "^3.3.2", + "ts-loader": "^9.4.2", "ts-node": "^10.9.1", - "tsec": "0.1.4", - "typescript": "^5.0.0-dev.20230224", + "tsec": "0.2.7", + "typescript": "^5.2.0-dev.20230621", "typescript-formatter": "7.1.0", "underscore": "^1.12.1", "util": "^0.12.4", - "vinyl": "^2.0.0", - "vinyl-fs": "^3.0.0", "vscode-nls-dev": "^3.3.1", - "webpack": "^5.42.0", - "webpack-cli": "^4.7.2", - "webpack-stream": "^6.1.2", - "xml2js": "^0.4.17", + "webpack": "^5.77.0", + "webpack-cli": "^5.0.1", + "webpack-stream": "^7.0.0", + "xml2js": "^0.5.0", "yaserver": "^0.2.0" }, "repository": { @@ -231,13 +230,6 @@ "url": "https://github.com/microsoft/vscode/issues" }, "optionalDependencies": { - "@vscode/windows-registry": "1.0.6", - "windows-foreground-love": "0.4.0", - "windows-mutex": "0.4.1", - "windows-process-tree": "0.4.0" - }, - "resolutions": { - "elliptic": "^6.5.3", - "nwmatcher": "^1.4.4" + "windows-foreground-love": "0.5.0" } } diff --git a/product.json b/product.json index 9a240c460b5..6d015e98bd0 100644 --- a/product.json +++ b/product.json @@ -6,6 +6,7 @@ "win32MutexName": "vscodeoss", "licenseName": "MIT", "licenseUrl": "https://github.com/microsoft/vscode/blob/main/LICENSE.txt", + "serverLicenseUrl": "https://github.com/microsoft/vscode/blob/main/LICENSE.txt", "serverGreeting": [], "serverLicense": [], "serverLicensePrompt": "", @@ -23,16 +24,20 @@ "win32arm64UserAppId": "{{3AEBF0C8-F733-4AD4-BADE-FDB816D53D7B}", "win32AppUserModelId": "Microsoft.CodeOSS", "win32ShellNameShort": "C&ode - OSS", + "win32TunnelServiceMutex": "vscodeoss-tunnelservice", + "win32TunnelMutex": "vscodeoss-tunnel", "darwinBundleIdentifier": "com.visualstudio.code.oss", "linuxIconName": "code-oss", "licenseFileName": "LICENSE.txt", "reportIssueUrl": "https://github.com/microsoft/vscode/issues/new", + "nodejsRepository": "https://nodejs.org", "urlProtocol": "code-oss", "webviewContentExternalBaseUrlTemplate": "https://{{uuid}}.vscode-cdn.net/insider/ef65ac1ba57f57f2a3961bfe94aa20481caca4c6/out/vs/workbench/contrib/webview/browser/pre/", "builtInExtensions": [ { "name": "ms-vscode.js-debug-companion", - "version": "1.0.18", + "version": "1.1.2", + "sha256": "e034b8b41beb4e97e02c70f7175bd88abe66048374c2bd629f54bb33354bc2aa", "repo": "https://github.com/microsoft/vscode-js-debug-companion", "metadata": { "id": "99cb0b7f-7354-4278-b8da-6cc79972169d", @@ -47,7 +52,8 @@ }, { "name": "ms-vscode.js-debug", - "version": "1.76.0", + "version": "1.80.0", + "sha256": "ac75e4ecf79efafa2bb0e6c8c548a6c8359555623f677a386cbcea80630aee4f", "repo": "https://github.com/microsoft/vscode-js-debug", "metadata": { "id": "25629058-ddac-4e17-abba-74678e126c5d", @@ -63,6 +69,7 @@ { "name": "ms-vscode.vscode-js-profile-table", "version": "1.0.3", + "sha256": "b9dab017506d9e6a469a0f82b392e4cb1d7a25a4843f1db8ba396cbee209cfc5", "repo": "https://github.com/microsoft/vscode-js-profile-visualizer", "metadata": { "id": "7e52b41b-71ad-457b-ab7e-0620f1fc4feb", diff --git a/remote/.yarnrc b/remote/.yarnrc index 3a3fbdc3350..29d716339bf 100644 --- a/remote/.yarnrc +++ b/remote/.yarnrc @@ -1,4 +1,5 @@ disturl "http://nodejs.org/dist" -target "16.14.2" +target "16.17.1" +ms_build_id "220517" runtime "node" build_from_source "true" diff --git a/remote/package.json b/remote/package.json index 8dbbbd73b1e..832b8d5dbd3 100644 --- a/remote/package.json +++ b/remote/package.json @@ -7,35 +7,34 @@ "@microsoft/1ds-post-js": "^3.2.2", "@parcel/watcher": "2.1.0", "@vscode/iconv-lite-umd": "0.7.0", - "@vscode/ripgrep": "^1.14.2", + "@vscode/proxy-agent": "^0.15.0", + "@vscode/ripgrep": "^1.15.5", + "@vscode/spdlog": "^0.13.10", "@vscode/vscode-languagedetection": "1.0.21", + "@vscode/windows-process-tree": "^0.5.0", + "@vscode/windows-registry": "^1.1.0", "cookie": "^0.4.0", - "graceful-fs": "4.2.8", + "graceful-fs": "4.2.11", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.3", "jschardet": "3.0.0", "keytar": "7.9.0", "minimist": "^1.2.6", - "native-watchdog": "1.4.1", - "node-pty": "0.11.0-beta29", - "spdlog": "^0.13.0", - "tas-client-umd": "0.1.6", + "native-watchdog": "^1.4.1", + "node-pty": "1.1.0-beta1", + "tas-client-umd": "0.1.8", "vscode-oniguruma": "1.7.0", - "vscode-proxy-agent": "^0.12.0", "vscode-regexpp": "^3.1.0", "vscode-textmate": "9.0.0", - "xterm": "5.2.0-beta.29", - "xterm-addon-canvas": "0.4.0-beta.7", - "xterm-addon-search": "0.11.0", - "xterm-addon-serialize": "0.9.0", + "xterm": "5.3.0-beta.3", + "xterm-addon-canvas": "0.5.0-beta.2", + "xterm-addon-image": "0.4.1", + "xterm-addon-search": "0.13.0-beta.2", + "xterm-addon-serialize": "0.11.0-beta.2", "xterm-addon-unicode11": "0.5.0", - "xterm-addon-webgl": "0.15.0-beta.7", - "xterm-headless": "5.2.0-beta.29", + "xterm-addon-webgl": "0.16.0-beta.2", + "xterm-headless": "5.3.0-beta.3", "yauzl": "^2.9.2", "yazl": "^2.4.3" - }, - "optionalDependencies": { - "@vscode/windows-registry": "1.0.6", - "windows-process-tree": "0.4.0" } } diff --git a/remote/web/package.json b/remote/web/package.json index f2db0a6aa25..db7baab82d3 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -8,13 +8,14 @@ "@vscode/iconv-lite-umd": "0.7.0", "@vscode/vscode-languagedetection": "1.0.21", "jschardet": "3.0.0", - "tas-client-umd": "0.1.6", + "tas-client-umd": "0.1.8", "vscode-oniguruma": "1.7.0", "vscode-textmate": "9.0.0", - "xterm": "5.2.0-beta.29", - "xterm-addon-canvas": "0.4.0-beta.7", - "xterm-addon-search": "0.11.0", + "xterm": "5.3.0-beta.3", + "xterm-addon-canvas": "0.5.0-beta.2", + "xterm-addon-image": "0.4.1", + "xterm-addon-search": "0.13.0-beta.2", "xterm-addon-unicode11": "0.5.0", - "xterm-addon-webgl": "0.15.0-beta.7" + "xterm-addon-webgl": "0.16.0-beta.2" } } diff --git a/remote/web/yarn.lock b/remote/web/yarn.lock index 5d4ff870d63..2f879c22bf6 100644 --- a/remote/web/yarn.lock +++ b/remote/web/yarn.lock @@ -53,10 +53,10 @@ jschardet@3.0.0: resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-3.0.0.tgz#898d2332e45ebabbdb6bf2feece9feea9a99e882" integrity sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ== -tas-client-umd@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/tas-client-umd/-/tas-client-umd-0.1.6.tgz#a0cf70a68f50d406773457630666224f0eb545a6" - integrity sha512-eOz5IK4cuNmSZI9QlqlT0FdvgfnnHDB6rjqleFaYAbzYE4RdJzYNiM28zFIXgmOVEgESvfabMFxG8WX5M4z3HA== +tas-client-umd@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/tas-client-umd/-/tas-client-umd-0.1.8.tgz#38bd32d49545417a0ea67fb618e646298e1b67cc" + integrity sha512-0jAAujLmjjGXf9PzrNpjOrr/6CTpSOp8jX80NOHK5nlOTWWpwaZ16EOyrPdHnm2bVfPHvT0/RAD0xyiQHGQvCQ== vscode-oniguruma@1.7.0: version "1.7.0" @@ -68,27 +68,32 @@ vscode-textmate@9.0.0: resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz#313c6c8792b0507aef35aeb81b6b370b37c44d6c" integrity sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg== -xterm-addon-canvas@0.4.0-beta.7: - version "0.4.0-beta.7" - resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.7.tgz#ae365d8e10c900292186529f70f7f275ac94b3d5" - integrity sha512-r1hbQTsulI49orR5G3qWrJCwn2dKsEUCrgj6xsmgXuTeoUcGfed6lly+MvYlL3P8aPrxS2fC2TEzSM0Au4SX+w== +xterm-addon-canvas@0.5.0-beta.2: + version "0.5.0-beta.2" + resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.5.0-beta.2.tgz#1b83c2a9a306766c47a4f80b8c65cc9ee5f5a5c4" + integrity sha512-oTb/2krdbHYGxH2X6yiBZzAB/1WB+apUu4nXHdhBnht20bl8E+YVWqg95D4o0Gl+QJI+XOfB3mqmWaBx1x531A== -xterm-addon-search@0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.11.0.tgz#2a00ff7f9848f6140e7c4d1782486b0b18b06e0d" - integrity sha512-6U4uHXcQ7G5igsdaGqrJ9ehm7vep24bXqWxuy3AnIosXF2Z5uy2MvmYRyTGNembIqPV/x1YhBQ7uShtuqBHhOQ== +xterm-addon-image@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.1.tgz#ec8f750af48005ad641c1128fa1f551ac198472a" + integrity sha512-iJpYyvtbHg4oXSv+D6J73ZfCjnboZpbZ567MLplXDBlYSUknv3kvPTfVMPJATV7Zsx7+bDgyXboCh9vsDf/m/w== + +xterm-addon-search@0.13.0-beta.2: + version "0.13.0-beta.2" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.13.0-beta.2.tgz#c984a35312acad4ce768d17bc49adffa90eece61" + integrity sha512-+VoPhIRmfiX2uh2t6xD/RJtBYjVjrkNa3dKQnOYEp4UbYzDjK57rZX652mnZ82TQfk/juxf7v+jV5aRdNLZVbA== xterm-addon-unicode11@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.5.0.tgz#41c0d96acc1e3bb6c6596eee64e163b6bca74be7" integrity sha512-Jm4/g4QiTxiKiTbYICQgC791ubhIZyoIwxAIgOW8z8HWFNY+lwk+dwaKEaEeGBfM48Vk8fklsUW9u/PlenYEBg== -xterm-addon-webgl@0.15.0-beta.7: - version "0.15.0-beta.7" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.7.tgz#ab247b499f61e8eebff92e08ec5ca999d87e06af" - integrity sha512-7WCI/D6uFNp3y9TeTsbSo1h7gCy4h/yP2lWn8ZEjCaiGvO11DbKMq17fbiwaR3YmGWXoRKkcLaNIiqxFnjKO4w== +xterm-addon-webgl@0.16.0-beta.2: + version "0.16.0-beta.2" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.16.0-beta.2.tgz#30489ef235405255ee54077002c90553531870d8" + integrity sha512-DAt4E/QI1w34ToBhcDj0vaZOAHOO+ffwMt2HGDAB7amPXRcMb0LBIjLpyZhB9sD4tbIgsE0vuqZi1R9vKxZwbg== -xterm@5.2.0-beta.29: - version "5.2.0-beta.29" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.29.tgz#99764aff5cd8cdb4335f5d59466b134cfcb45e3e" - integrity sha512-zx5RKcQqo78bza4R/m3WtxAJCBAF4U61fy6cxqb1PkqXF9/qdYlySUCVOauMxv+6n6cAxt3EQWwLlgvbvQBbsw== +xterm@5.3.0-beta.3: + version "5.3.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.3.0-beta.3.tgz#1a1aaf9a57afe4dcf86e87d8dc85e80a41d68644" + integrity sha512-NGxpV25U2W/KKk6M5V2OXuLgrKY+w05ABi66ZEYuCTi7ux1Qv0z+jm7bkgzk1pGGiTVLG+90OGr2nrhbFr5Y4w== diff --git a/remote/yarn.lock b/remote/yarn.lock index 4c65e846cab..531ba983765 100644 --- a/remote/yarn.lock +++ b/remote/yarn.lock @@ -58,23 +58,60 @@ resolved "https://registry.yarnpkg.com/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz#d2f1e0664ee6036408f9743fee264ea0699b0e48" integrity sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg== -"@vscode/ripgrep@^1.14.2": - version "1.14.2" - resolved "https://registry.yarnpkg.com/@vscode/ripgrep/-/ripgrep-1.14.2.tgz#47c0eec2b64f53d8f7e1b5ffd22a62e229191c34" - integrity sha512-KDaehS8Jfdg1dqStaIPDKYh66jzKd5jy5aYEPzIv0JYFLADPsCSQPBUdsJVXnr0t72OlDcj96W05xt/rSnNFFQ== +"@vscode/proxy-agent@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.15.0.tgz#b8fb8b89180a71295a8f8682775f69ab1dcf6860" + integrity sha512-HpD4A9CUOwKbC6vLa0+MEsCo/qlgbue9U9s8Z7NzJDdf2YEGjUaYf9Mvj5T1LhJX20Hv1COvkGcc7zPhtIbgbA== + dependencies: + "@tootallnate/once" "^1.1.2" + agent-base "^6.0.2" + debug "^4.3.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + socks-proxy-agent "^5.0.0" + optionalDependencies: + "@vscode/windows-ca-certs" "^0.3.1" + +"@vscode/ripgrep@^1.15.5": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@vscode/ripgrep/-/ripgrep-1.15.5.tgz#26025884bbc3a8b40dfc29f5bda4b87b47bd7356" + integrity sha512-PVvKNEmtnlek3i4MJMaB910dz46CKQqcIY2gKR3PSlfz/ZPlSYuSuyQMS7iK20KL4hGUdSbWt964B5S5EIojqw== dependencies: https-proxy-agent "^5.0.0" proxy-from-env "^1.1.0" +"@vscode/spdlog@^0.13.10": + version "0.13.10" + resolved "https://registry.yarnpkg.com/@vscode/spdlog/-/spdlog-0.13.10.tgz#5476853b968a1bcc389b92175d11e636464858e8" + integrity sha512-BHJN/r2XurLDR0doBhyQ5b+DUjFjqwnOcD4ZjW/7MkuShO+Wn5KVKOl6x/xQLCAlOlQqVVe42n2A7FwuIFpkWw== + dependencies: + bindings "^1.5.0" + mkdirp "^0.5.5" + nan "^2.17.0" + "@vscode/vscode-languagedetection@1.0.21": version "1.0.21" resolved "https://registry.yarnpkg.com/@vscode/vscode-languagedetection/-/vscode-languagedetection-1.0.21.tgz#89b48f293f6aa3341bb888c1118d16ff13b032d3" integrity sha512-zSUH9HYCw5qsCtd7b31yqkpaCU6jhtkKLkvOOA8yTrIRfBSOFb8PPhgmMicD7B/m+t4PwOJXzU1XDtrM9Fd3/g== -"@vscode/windows-registry@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@vscode/windows-registry/-/windows-registry-1.0.6.tgz#8b9fb9a55bf5a0be4ea11849c45ae94c6910e3e4" - integrity sha512-ZW5bz9F3Ta6zsikce2dchyruF3QsRyWYKOJ2dEicS+inReD/oE8Um+KsLVcvrjIb44aSYpsm64DIUmMl15ujtg== +"@vscode/windows-ca-certs@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@vscode/windows-ca-certs/-/windows-ca-certs-0.3.1.tgz#35c88b2d2a52f7759bfb6878906c3d40421ec6a3" + integrity sha512-1B6hZAsqg125wuMsXiKIFkBgKx/J7YR4RT/ccYGkWAToPU9MVa40PRe+evLFUmLPH6NmPohEPlCzZLbqgvHCcQ== + dependencies: + node-addon-api "^3.0.2" + +"@vscode/windows-process-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@vscode/windows-process-tree/-/windows-process-tree-0.5.0.tgz#b8205b862c75a1e0ad8b7bf4350dc85036ee3a2c" + integrity sha512-y8Oliel/rBSYh9f1T4F0zQjJNPeJRgYRhEKZsjas7JXKLf46FpE3Ux8e9+7HelUD8dXFH7C7N6895nU0WhrMlg== + dependencies: + nan "^2.17.0" + +"@vscode/windows-registry@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@vscode/windows-registry/-/windows-registry-1.1.0.tgz#03dace7c29c46f658588b9885b9580e453ad21f9" + integrity sha512-5AZzuWJpGscyiMOed0IuyEwt6iKmV5Us7zuwCDCFYMIq7tsvooO9BUiciywsvuthGz6UG4LSpeDeCxvgMVhnIw== agent-base@4: version "4.2.0" @@ -301,10 +338,10 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= -graceful-fs@4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@4.2.11: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== has-unicode@^2.0.0: version "2.0.1" @@ -431,7 +468,7 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -442,11 +479,11 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" ms@2.0.0: version "2.0.0" @@ -458,11 +495,6 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nan@^2.14.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== - nan@^2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" @@ -473,10 +505,10 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -native-watchdog@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/native-watchdog/-/native-watchdog-1.4.1.tgz#f5462cb878796c75f8a6c3c71aa0aa52d4992e05" - integrity sha512-RzGXNgoe54BmkkIFwegz7eeJm7xovTj/VG5qREfF+KeSqiVzHGnVwFoLzNLlYsqSSdIOIYoCOFlEhoS+asRVyQ== +native-watchdog@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/native-watchdog/-/native-watchdog-1.4.2.tgz#cf9f913157ee992723aa372b6137293c663be9b7" + integrity sha512-iT3Uj6FFdrW5vHbQ/ybiznLus9oiUoMJ8A8nyugXv9rV3EBhIodmGs+mztrwQyyBc+PB5/CrskAH/WxaUVRRSQ== node-abi@^3.3.0: version "3.8.0" @@ -505,10 +537,10 @@ node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== -node-pty@0.11.0-beta29: - version "0.11.0-beta29" - resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.11.0-beta29.tgz#863bce79346b453ed199614686008d1a3220abe8" - integrity sha512-pkSldLXjjwFrGd3EJWI0Pu1jnxeQaW0P9i2EQtO2RaK/pZ22pf99lQ8OfptYTPK2oKZbkjwzqh05uJJ2krH9iA== +node-pty@1.1.0-beta1: + version "1.1.0-beta1" + resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.1.0-beta1.tgz#95d4baf406c043b78042f951b325e9713df2beac" + integrity sha512-h+1E/gX/brFqsp3yZKGERHOhdo1POG1rrsI+8tEuocqdEddHd029471gq8KOuiHKicd52h2pSU8Gtqb3Vo2PfQ== dependencies: nan "^2.17.0" @@ -629,9 +661,9 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -681,15 +713,6 @@ socks@^2.3.3: ip "^1.1.5" smart-buffer "^4.1.0" -spdlog@^0.13.0: - version "0.13.6" - resolved "https://registry.yarnpkg.com/spdlog/-/spdlog-0.13.6.tgz#26b2e13d46cbf8f2334c12ba2a8cc82de5a28f02" - integrity sha512-iGqDoA88G3Rv3lkbVQglTulp3nv12FzND6LDC7cOZ+OoFvWnXVb3+Ebhed60oZ6+IWWGwDtjXK6ympwr7C1XmQ== - dependencies: - bindings "^1.5.0" - mkdirp "^0.5.5" - nan "^2.14.0" - string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -762,10 +785,10 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tas-client-umd@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/tas-client-umd/-/tas-client-umd-0.1.6.tgz#a0cf70a68f50d406773457630666224f0eb545a6" - integrity sha512-eOz5IK4cuNmSZI9QlqlT0FdvgfnnHDB6rjqleFaYAbzYE4RdJzYNiM28zFIXgmOVEgESvfabMFxG8WX5M4z3HA== +tas-client-umd@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/tas-client-umd/-/tas-client-umd-0.1.8.tgz#38bd32d49545417a0ea67fb618e646298e1b67cc" + integrity sha512-0jAAujLmjjGXf9PzrNpjOrr/6CTpSOp8jX80NOHK5nlOTWWpwaZ16EOyrPdHnm2bVfPHvT0/RAD0xyiQHGQvCQ== to-regex-range@^5.0.1: version "5.0.1" @@ -791,20 +814,6 @@ vscode-oniguruma@1.7.0: resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== -vscode-proxy-agent@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/vscode-proxy-agent/-/vscode-proxy-agent-0.12.0.tgz#0775f464b9519b0c903da4dcf50851e1453f4e48" - integrity sha512-jS7950hE9Kq6T18vYewVl0N9acEBD3d+scbPew2Nti7d61THBrhVF9FQjc8TLfrUZ//UzzOFO8why+F0kHDdNw== - dependencies: - "@tootallnate/once" "^1.1.2" - agent-base "^6.0.2" - debug "^4.3.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - socks-proxy-agent "^5.0.0" - optionalDependencies: - vscode-windows-ca-certs "^0.3.0" - vscode-regexpp@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/vscode-regexpp/-/vscode-regexpp-3.1.0.tgz#42d059b6fffe99bd42939c0d013f632f0cad823f" @@ -815,13 +824,6 @@ vscode-textmate@9.0.0: resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz#313c6c8792b0507aef35aeb81b6b370b37c44d6c" integrity sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg== -vscode-windows-ca-certs@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/vscode-windows-ca-certs/-/vscode-windows-ca-certs-0.3.0.tgz#324e1f8ba842bbf048a39e7c0ee8fe655e9adfcc" - integrity sha512-CYrpCEKmAFQJoZNReOrelNL+VKyebOVRCqL9evrBlVcpWQDliliJgU5RggGS8FPGtQ3jAKLQt9frF0qlxYYPKA== - dependencies: - node-addon-api "^3.0.2" - wide-align@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -829,52 +831,50 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -windows-process-tree@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.4.0.tgz#31ac49c5da557e628ce7e37a5800972173d3349a" - integrity sha512-9LunDnc1WwuhyLeTAXMFX8wbActGJtDCBaiapQXFYk/nO4W4X9YxOKV5g/lQL3XX69QYxveDbjVVrdnTt1qqCQ== - dependencies: - nan "^2.17.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -xterm-addon-canvas@0.4.0-beta.7: - version "0.4.0-beta.7" - resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.7.tgz#ae365d8e10c900292186529f70f7f275ac94b3d5" - integrity sha512-r1hbQTsulI49orR5G3qWrJCwn2dKsEUCrgj6xsmgXuTeoUcGfed6lly+MvYlL3P8aPrxS2fC2TEzSM0Au4SX+w== +xterm-addon-canvas@0.5.0-beta.2: + version "0.5.0-beta.2" + resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.5.0-beta.2.tgz#1b83c2a9a306766c47a4f80b8c65cc9ee5f5a5c4" + integrity sha512-oTb/2krdbHYGxH2X6yiBZzAB/1WB+apUu4nXHdhBnht20bl8E+YVWqg95D4o0Gl+QJI+XOfB3mqmWaBx1x531A== -xterm-addon-search@0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.11.0.tgz#2a00ff7f9848f6140e7c4d1782486b0b18b06e0d" - integrity sha512-6U4uHXcQ7G5igsdaGqrJ9ehm7vep24bXqWxuy3AnIosXF2Z5uy2MvmYRyTGNembIqPV/x1YhBQ7uShtuqBHhOQ== +xterm-addon-image@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.1.tgz#ec8f750af48005ad641c1128fa1f551ac198472a" + integrity sha512-iJpYyvtbHg4oXSv+D6J73ZfCjnboZpbZ567MLplXDBlYSUknv3kvPTfVMPJATV7Zsx7+bDgyXboCh9vsDf/m/w== -xterm-addon-serialize@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.9.0.tgz#3eee5f5c34b16e48891ec59b213716bab2354bf4" - integrity sha512-qJju2YJFh8c8pbtCYtHaG7gDDHBpDJ4a4JQZvOzuiMxOjgeM1oCnFNjbhzMuK/fOUa59FmvIUGQyqn3WL9q7qw== +xterm-addon-search@0.13.0-beta.2: + version "0.13.0-beta.2" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.13.0-beta.2.tgz#c984a35312acad4ce768d17bc49adffa90eece61" + integrity sha512-+VoPhIRmfiX2uh2t6xD/RJtBYjVjrkNa3dKQnOYEp4UbYzDjK57rZX652mnZ82TQfk/juxf7v+jV5aRdNLZVbA== + +xterm-addon-serialize@0.11.0-beta.2: + version "0.11.0-beta.2" + resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.11.0-beta.2.tgz#fff924decfbf1bc08434317894f985fef7bb260b" + integrity sha512-tN4IT2e+EIpsoFpMONUh1OAuoVAcV7AYOLsqMKgH6GNWB1D/LKGo3cwjpw1vwRZzDJJcCcLxYgxlUzhPbDbLxQ== xterm-addon-unicode11@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.5.0.tgz#41c0d96acc1e3bb6c6596eee64e163b6bca74be7" integrity sha512-Jm4/g4QiTxiKiTbYICQgC791ubhIZyoIwxAIgOW8z8HWFNY+lwk+dwaKEaEeGBfM48Vk8fklsUW9u/PlenYEBg== -xterm-addon-webgl@0.15.0-beta.7: - version "0.15.0-beta.7" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.7.tgz#ab247b499f61e8eebff92e08ec5ca999d87e06af" - integrity sha512-7WCI/D6uFNp3y9TeTsbSo1h7gCy4h/yP2lWn8ZEjCaiGvO11DbKMq17fbiwaR3YmGWXoRKkcLaNIiqxFnjKO4w== +xterm-addon-webgl@0.16.0-beta.2: + version "0.16.0-beta.2" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.16.0-beta.2.tgz#30489ef235405255ee54077002c90553531870d8" + integrity sha512-DAt4E/QI1w34ToBhcDj0vaZOAHOO+ffwMt2HGDAB7amPXRcMb0LBIjLpyZhB9sD4tbIgsE0vuqZi1R9vKxZwbg== -xterm-headless@5.2.0-beta.29: - version "5.2.0-beta.29" - resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.2.0-beta.29.tgz#dd08312fdb4292c217e685d9e2e8b1957364e298" - integrity sha512-1P4urIeDTkl2C+zGb4WUnKJMACZMPGYHwVXMjkB0WhMISbkt6M34MH9ljxHhnL99dHwlx2Lvi6wvhnpyZucWCg== +xterm-headless@5.3.0-beta.3: + version "5.3.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.3.0-beta.3.tgz#153cf330082f4b2aae64ff736ef0b62d93c30da8" + integrity sha512-4i/bpFoAn4D4ZA4g8RKrJdhq2EcB1HN2E25yUg3omRbWCOZ2Gp9nAn+62LYzX5rvGqdNbpUTRJLX0lKwEFyLFw== -xterm@5.2.0-beta.29: - version "5.2.0-beta.29" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.29.tgz#99764aff5cd8cdb4335f5d59466b134cfcb45e3e" - integrity sha512-zx5RKcQqo78bza4R/m3WtxAJCBAF4U61fy6cxqb1PkqXF9/qdYlySUCVOauMxv+6n6cAxt3EQWwLlgvbvQBbsw== +xterm@5.3.0-beta.3: + version "5.3.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.3.0-beta.3.tgz#1a1aaf9a57afe4dcf86e87d8dc85e80a41d68644" + integrity sha512-NGxpV25U2W/KKk6M5V2OXuLgrKY+w05ABi66ZEYuCTi7ux1Qv0z+jm7bkgzk1pGGiTVLG+90OGr2nrhbFr5Y4w== yallist@^4.0.0: version "4.0.0" diff --git a/resources/completions/bash/code b/resources/completions/bash/code index c9e4b167309..9f1b3d682d3 100644 --- a/resources/completions/bash/code +++ b/resources/completions/bash/code @@ -31,7 +31,7 @@ _@@APPNAME@@() COMPREPLY=( $( compgen -W 'critical error warn info debug trace off' ) ) return ;; - --folder-uri|--disable-extension|--max-memory) + --folder-uri|--disable-extension) # argument required but no completions available return 0 ;; @@ -50,8 +50,7 @@ _@@APPNAME@@() --uninstall-extension --enable-proposed-api --verbose --log -s --status -p --performance --prof-startup --disable-extensions --disable-extension --inspect-extensions - --inspect-brk-extensions --disable-gpu - --max-memory=' -- "$cur") ) + --inspect-brk-extensions --disable-gpu' -- "$cur") ) [[ $COMPREPLY == *= ]] && compopt -o nospace return fi diff --git a/resources/completions/zsh/_code b/resources/completions/zsh/_code index 087ea61f56a..97d163c13c3 100644 --- a/resources/completions/zsh/_code +++ b/resources/completions/zsh/_code @@ -32,7 +32,6 @@ arguments=( '--inspect-extensions[allow debugging and profiling of extensions]' '--inspect-brk-extensions[allow debugging and profiling of extensions with the extension host being paused after start]' '--disable-gpu[disable GPU hardware acceleration]' - '--max-memory=[max memory size for a window (in Mbytes)]:size (Mbytes)' '*:file or directory:_files' ) diff --git a/resources/linux/snap/electron-launch b/resources/linux/snap/electron-launch index 87011928b49..873b079161a 100755 --- a/resources/linux/snap/electron-launch +++ b/resources/linux/snap/electron-launch @@ -4,6 +4,73 @@ # We need to handle that case and reset $SNAP SNAP=$(echo "$SNAP" | sed -e "s|/var/lib/snapd||g") +# +# Exports are based on https://github.com/snapcore/snapcraft/blob/master/extensions/desktop/common/desktop-exports +# + +# ensure_dir_exists calls `mkdir -p` if the given path is not a directory. +# This speeds up execution time by avoiding unnecessary calls to mkdir. +# +# Usage: ensure_dir_exists []... +# +function ensure_dir_exists() { + [ -d "$1" ] || mkdir -p "$@" +} + +declare -A PIDS +function async_exec() { + "$@" & + PIDS[$!]=$* +} +function wait_for_async_execs() { + for pid in "${!PIDS[@]}" + do + wait "$pid" && continue || echo "ERROR: ${PIDS[$pid]} exited abnormally with status $?" + done +} + +function prepend_dir() { + local -n var="$1" + local dir="$2" + # We can't check if the dir exists when the dir contains variables + if [[ "$dir" == *"\$"* || -d "$dir" ]]; then + export "${!var}=${dir}${var:+:$var}" + fi +} + +function append_dir() { + local -n var="$1" + local dir="$2" + # We can't check if the dir exists when the dir contains variables + if [[ "$dir" == *"\$"* || -d "$dir" ]]; then + export "${!var}=${var:+$var:}${dir}" + fi +} + +function copy_env_variable() { + local -n var="$1" + if [[ "+$var" ]]; then + export "${!var}_VSCODE_SNAP_ORIG=${var}" + else + export "${!var}_VSCODE_SNAP_ORIG=''" + fi +} + +# shellcheck source=/dev/null +source "$SNAP_USER_DATA/.last_revision" 2>/dev/null || true +if [ "$SNAP_DESKTOP_LAST_REVISION" = "$SNAP_VERSION" ]; then + needs_update=false +else + needs_update=true +fi + +# Set $REALHOME to the users real home directory +REALHOME=$(getent passwd $UID | cut -d ':' -f 6) + +# Set config folder to local path +ensure_dir_exists "$SNAP_USER_DATA/.config" +chmod 700 "$SNAP_USER_DATA/.config" + if [ "$SNAP_ARCH" == "amd64" ]; then ARCH="x86_64-linux-gnu" elif [ "$SNAP_ARCH" == "armhf" ]; then @@ -14,21 +81,184 @@ else ARCH="$SNAP_ARCH-linux-gnu" fi -GDK_CACHE_DIR="$SNAP_USER_COMMON/.cache" -if [[ -d "$SNAP_USER_DATA/.cache" && ! -e "$GDK_CACHE_DIR" ]]; then +export SNAP_LAUNCHER_ARCH_TRIPLET="$ARCH" + +function is_subpath() { + dir="$(realpath "$1")" + parent="$(realpath "$2")" + [ "${dir##"${parent}"/}" != "${dir}" ] && return 0 || return 1 +} + +function can_open_file() { + [ -f "$1" ] && [ -r "$1" ] +} + +# Preserve system variables that get modified below +copy_env_variable XDG_CONFIG_DIRS +copy_env_variable XDG_DATA_DIRS +copy_env_variable LOCPATH +copy_env_variable GIO_MODULE_DIR +copy_env_variable GSETTINGS_SCHEMA_DIR +copy_env_variable GDK_PIXBUF_MODULE_FILE +copy_env_variable GDK_PIXBUF_MODULEDIR +copy_env_variable GDK_BACKEND +copy_env_variable GTK_PATH +copy_env_variable GTK_EXE_PREFIX +copy_env_variable GTK_IM_MODULE_FILE + +# XDG Config +prepend_dir XDG_CONFIG_DIRS "$SNAP/etc/xdg" + +# Define snaps' own data dir +prepend_dir XDG_DATA_DIRS "$SNAP/usr/share" +prepend_dir XDG_DATA_DIRS "$SNAP/share" +prepend_dir XDG_DATA_DIRS "$SNAP/data-dir" +prepend_dir XDG_DATA_DIRS "$SNAP_USER_DATA" + +# Set XDG_DATA_HOME to local path +ensure_dir_exists "$SNAP_USER_DATA/.local/share" + +# Workaround for GLib < 2.53.2 not searching for schemas in $XDG_DATA_HOME: +# https://bugzilla.gnome.org/show_bug.cgi?id=741335 +prepend_dir XDG_DATA_DIRS "$SNAP_USER_DATA/.local/share" + +# Set cache folder to local path +if [[ -d "$SNAP_USER_DATA/.cache" && ! -e "$SNAP_USER_COMMON/.cache" ]]; then # the .cache directory used to be stored under $SNAP_USER_DATA, migrate it mv "$SNAP_USER_DATA/.cache" "$SNAP_USER_COMMON/" fi -[ ! -d "$GDK_CACHE_DIR" ] && mkdir -p "$GDK_CACHE_DIR" +ensure_dir_exists "$SNAP_USER_COMMON/.cache" -# Gdk-pixbuf loaders -export GDK_PIXBUF_MODULE_FILE="$GDK_CACHE_DIR/gdk-pixbuf-loaders.cache" -export GDK_PIXBUF_MODULEDIR="$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/2.10.0/loaders" -if [ -f "$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" ]; then - "$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" > "$GDK_PIXBUF_MODULE_FILE" +# Create $XDG_RUNTIME_DIR if not exists (to be removed when LP: #1656340 is fixed) +# shellcheck disable=SC2174 +ensure_dir_exists "$XDG_RUNTIME_DIR" -m 700 + +# Ensure the app finds locale definitions (requires locales-all to be installed) +append_dir LOCPATH "$SNAP/usr/lib/locale" + +# If detect wayland server socket, then set environment so applications prefer +# wayland, and setup compat symlink (until we use user mounts. Remember, +# XDG_RUNTIME_DIR is /run/user//snap.$SNAP so look in the parent directory +# for the socket. For details: +# https://forum.snapcraft.io/t/wayland-dconf-and-xdg-runtime-dir/186/10 +# Applications that don't support wayland natively may define DISABLE_WAYLAND +# (to any non-empty value) to skip that logic entirely. +wayland_available=false +if [[ -n "$XDG_RUNTIME_DIR" && -z "$DISABLE_WAYLAND" ]]; then + wdisplay="wayland-0" + if [ -n "$WAYLAND_DISPLAY" ]; then + wdisplay="$WAYLAND_DISPLAY" + fi + wayland_sockpath="$XDG_RUNTIME_DIR/../$wdisplay" + wayland_snappath="$XDG_RUNTIME_DIR/$wdisplay" + if [ -S "$wayland_sockpath" ]; then + # if running under wayland, use it + #export WAYLAND_DEBUG=1 + # shellcheck disable=SC2034 + wayland_available=true + # create the compat symlink for now + if [ ! -e "$wayland_snappath" ]; then + ln -s "$wayland_sockpath" "$wayland_snappath" + fi + fi fi -# Create $XDG_RUNTIME_DIR if not exists (to be removed when https://pad.lv/1656340 is fixed) -[ -n "$XDG_RUNTIME_DIR" ] && mkdir -p -m 700 "$XDG_RUNTIME_DIR" +# Keep an array of data dirs, for looping through them +IFS=':' read -r -a data_dirs_array <<< "$XDG_DATA_DIRS" + +# Build mime.cache +# needed for gtk and qt icon +if [ "$needs_update" = true ]; then + rm -rf "$SNAP_USER_DATA/.local/share/mime" + if [ ! -f "$SNAP/usr/share/mime/mime.cache" ]; then + if command -v update-mime-database >/dev/null; then + cp --preserve=timestamps -dR "$SNAP/usr/share/mime" "$SNAP_USER_DATA/.local/share" + async_exec update-mime-database "$SNAP_USER_DATA/.local/share/mime" + fi + fi +fi + +# Gio modules and cache (including gsettings module) +export GIO_MODULE_DIR="$SNAP_USER_COMMON/.cache/gio-modules" +function compile_giomodules { + if [ -f "$1/glib-2.0/gio-querymodules" ]; then + rm -rf "$GIO_MODULE_DIR" + ensure_dir_exists "$GIO_MODULE_DIR" + ln -s "$SNAP"/usr/lib/"$ARCH"/gio/modules/*.so "$GIO_MODULE_DIR" + "$1/glib-2.0/gio-querymodules" "$GIO_MODULE_DIR" + fi +} +if [ "$needs_update" = true ]; then + async_exec compile_giomodules "/snap/core20/current/usr/lib/$ARCH" +fi + +# Setup compiled gsettings schema +export GSETTINGS_SCHEMA_DIR="$SNAP_USER_DATA/.local/share/glib-2.0/schemas" +function compile_schemas { + if [ -f "$1" ]; then + rm -rf "$GSETTINGS_SCHEMA_DIR" + ensure_dir_exists "$GSETTINGS_SCHEMA_DIR" + for ((i = 0; i < ${#data_dirs_array[@]}; i++)); do + schema_dir="${data_dirs_array[$i]}/glib-2.0/schemas" + if [ -f "$schema_dir/gschemas.compiled" ]; then + # This directory already has compiled schemas + continue + fi + if [ -n "$(ls -A "$schema_dir"/*.xml 2>/dev/null)" ]; then + ln -s "$schema_dir"/*.xml "$GSETTINGS_SCHEMA_DIR" + fi + if [ -n "$(ls -A "$schema_dir"/*.override 2>/dev/null)" ]; then + ln -s "$schema_dir"/*.override "$GSETTINGS_SCHEMA_DIR" + fi + done + # Only compile schemas if we copied anything + if [ -n "$(ls -A "$GSETTINGS_SCHEMA_DIR"/*.xml "$GSETTINGS_SCHEMA_DIR"/*.override 2>/dev/null)" ]; then + "$1" "$GSETTINGS_SCHEMA_DIR" + fi + fi +} +if [ "$needs_update" = true ]; then + async_exec compile_schemas "/snap/core20/current/usr/lib/$ARCH/glib-2.0/glib-compile-schemas" +fi + +# Gdk-pixbuf loaders +export GDK_PIXBUF_MODULE_FILE="$SNAP_USER_COMMON/.cache/gdk-pixbuf-loaders.cache" +export GDK_PIXBUF_MODULEDIR="$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/2.10.0/loaders" +if [ "$needs_update" = true ] || [ ! -f "$GDK_PIXBUF_MODULE_FILE" ]; then + rm -f "$GDK_PIXBUF_MODULE_FILE" + if [ -f "$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" ]; then + async_exec "$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" > "$GDK_PIXBUF_MODULE_FILE" + fi +fi + +# shellcheck disable=SC2154 +if [ "$wayland_available" = true ]; then + export GDK_BACKEND="wayland" +fi + +append_dir GTK_PATH "$SNAP/usr/lib/$ARCH/gtk-3.0" +append_dir GTK_PATH "$SNAP/usr/lib/gtk-3.0" +# We don't have gtk libraries in this path but +# enforcing this environment variable will disallow +# gtk binaries like `gtk-query-immodules` to not search +# in system default library paths. +# Based on https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gtk/gtkmodules.c#L104-136 +export GTK_EXE_PREFIX="$SNAP/usr" + +# ibus and fcitx integration +GTK_IM_MODULE_DIR="$SNAP_USER_COMMON/.cache/immodules" +export GTK_IM_MODULE_FILE="$GTK_IM_MODULE_DIR/immodules.cache" +# shellcheck disable=SC2154 +if [ "$needs_update" = true ]; then + rm -rf "$GTK_IM_MODULE_DIR" + ensure_dir_exists "$GTK_IM_MODULE_DIR" + ln -s "$SNAP"/usr/lib/"$ARCH"/gtk-3.0/3.0.0/immodules/*.so "$GTK_IM_MODULE_DIR" + async_exec "$SNAP/usr/lib/$ARCH/libgtk-3-0/gtk-query-immodules-3.0" > "$GTK_IM_MODULE_FILE" +fi + +# shellcheck disable=SC2154 +[ "$needs_update" = true ] && echo "SNAP_DESKTOP_LAST_REVISION=$SNAP_VERSION" > "$SNAP_USER_DATA/.last_revision" + +wait_for_async_execs exec "$@" diff --git a/resources/linux/snap/snapcraft.yaml b/resources/linux/snap/snapcraft.yaml index fc775b6554f..b7b93f4c59c 100644 --- a/resources/linux/snap/snapcraft.yaml +++ b/resources/linux/snap/snapcraft.yaml @@ -1,5 +1,5 @@ name: @@NAME@@ -version: @@VERSION@@ +version: '@@VERSION@@' summary: Code editing. Redefined. description: | Visual Studio Code is a new choice of tool that combines the @@ -12,55 +12,70 @@ architectures: grade: stable confinement: classic +base: core20 +compression: lzo parts: - gnome: - plugin: nil - build-packages: - - software-properties-common - override-pull: | - add-apt-repository -y ppa:ubuntu-desktop/gnome-3-26 - apt -y update - code: - after: - - gnome plugin: dump source: . stage-packages: - - ibus-gtk3 - - fcitx-frontend-gtk3 - - gvfs-libs + - ca-certificates - libasound2 - - libgconf-2-4 - - libglib2.0-bin - - libgnome-keyring0 + - libatk-bridge2.0-0 + - libatk1.0-0 + - libatspi2.0-0 + - libcairo2 + - libcanberra-gtk3-module + - libcurl3-gnutls + - libcurl3-nss + - libcurl4 + - libdrm2 - libgbm1 + - libgl1 + - libglib2.0-0 - libgtk-3-0 - - libnotify4 - - libnspr4 + - libibus-1.0-5 - libnss3 - - libpcre3 - - libpulse0 + - libpango-1.0-0 - libsecret-1-0 + - libxcomposite1 + - libxdamage1 + - libxfixes3 + - libxkbcommon0 + - libxkbfile1 + - libxrandr2 - libxss1 - - libxtst6 - - zlib1g + - locales-all + - packagekit-gtk3-module + - xdg-utils prime: - -usr/share/doc - -usr/share/fonts - -usr/share/icons - -usr/share/lintian - -usr/share/man + override-build: | + snapcraftctl build + patchelf --force-rpath --set-rpath '$ORIGIN/../../lib/x86_64-linux-gnu:$ORIGIN:/snap/core20/current/lib/x86_64-linux-gnu' $SNAPCRAFT_PART_INSTALL/usr/share/@@NAME@@/chrome_crashpad_handler + cleanup: + after: + - code + plugin: nil + build-snaps: + - core20 + override-prime: | + set -eux + for snap in "core20"; do + cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$SNAPCRAFT_PRIME/{}" \; + done + patchelf --print-rpath $SNAPCRAFT_PRIME/usr/share/@@NAME@@/chrome_crashpad_handler + apps: @@NAME@@: command: electron-launch $SNAP/usr/share/@@NAME@@/bin/@@NAME@@ --no-sandbox common-id: @@NAME@@.desktop - environment: - GSETTINGS_SCHEMA_DIR: $SNAP/usr/share/glib-2.0/schemas url-handler: command: electron-launch $SNAP/usr/share/@@NAME@@/bin/@@NAME@@ --open-url --no-sandbox - environment: - GSETTINGS_SCHEMA_DIR: $SNAP/usr/share/glib-2.0/schemas diff --git a/resources/server/bin/server-old.cmd b/resources/server/bin/server-old.cmd deleted file mode 100644 index 3b459b30d37..00000000000 --- a/resources/server/bin/server-old.cmd +++ /dev/null @@ -1,24 +0,0 @@ -@echo off -setlocal - -set ROOT_DIR=%~dp0 - -set _FIRST_ARG=%1 -if "%_FIRST_ARG:~0,9%"=="--inspect" ( - set INSPECT=%1 - shift -) else ( - set INSPECT= -) - -:loop1 -if "%~1"=="" goto after_loop -set RESTVAR=%RESTVAR% %1 -shift -goto loop1 - -:after_loop - -"%ROOT_DIR%node.exe" %INSPECT% "%ROOT_DIR%out\server-main.js" --compatibility=1.63 %RESTVAR% - -endlocal diff --git a/resources/server/bin/server-old.sh b/resources/server/bin/server-old.sh deleted file mode 100644 index 7861d790be3..00000000000 --- a/resources/server/bin/server-old.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env sh -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -case "$1" in - --inspect*) INSPECT="$1"; shift;; -esac - -ROOT="$(dirname "$0")" - -"$ROOT/node" ${INSPECT:-} "$ROOT/out/server-main.js" --compatibility=1.63 "$@" diff --git a/scripts/code-perf.js b/scripts/code-perf.js index d4bfd72c2b4..4bc431479f3 100644 --- a/scripts/code-perf.js +++ b/scripts/code-perf.js @@ -7,13 +7,12 @@ const path = require('path'); const perf = require('@vscode/vscode-perf'); -const minimist = require('minimist'); const VSCODE_FOLDER = path.join(__dirname, '..'); async function main() { - const args = [...process.argv]; + const args = process.argv; /** @type {string | undefined} */ let build = undefined; @@ -43,10 +42,13 @@ async function main() { args.push(path.join(VSCODE_FOLDER, 'package.json')); } - await perf.run(build ? { - ...minimist(args), - build - } : undefined); + if (build) { + args.push('--build'); + args.push(build); + } + + await perf.run(); + process.exit(0); } /** diff --git a/scripts/code-web.js b/scripts/code-web.js index d91c6a08489..467f147d027 100644 --- a/scripts/code-web.js +++ b/scripts/code-web.js @@ -14,9 +14,8 @@ const cp = require('child_process'); const minimist = require('minimist'); const fancyLog = require('fancy-log'); const ansiColors = require('ansi-colors'); -const remote = require('gulp-remote-retry-src'); -const vfs = require('vinyl-fs'); const opn = require('opn'); +const https = require('https'); const APP_ROOT = path.join(__dirname, '..'); const WEB_DEV_EXTENSIONS_ROOT = path.join(APP_ROOT, '.build', 'builtInWebDevExtensions'); @@ -41,8 +40,10 @@ async function main() { if (args.help) { console.log( - './scripts/code-web.sh|bat [options]\n' + - ' --playground Include the vscode-web-playground extension (added by default if no folderPath is provided)\n' + './scripts/code-web.sh|bat[, folderMountPath[, options]]\n' + + ' Start with an empty workspace and no folder opened in explorer\n' + + ' folderMountPath Open local folder (eg: use `.` to open current directory)\n' + + ' --playground Include the vscode-web-playground extension\n' ); startServer(['--help']); return; @@ -59,7 +60,9 @@ async function main() { if (args['port'] === undefined) { serverArgs.push('--port', PORT); } - if (args['playground'] === true || (args['_'].length === 0 && !args['folder-uri'])) { + + // only use `./scripts/code-web.sh --playground` to add vscode-web-playground extension by default. + if (args['playground'] === true) { serverArgs.push('--extensionPath', WEB_DEV_EXTENSIONS_ROOT); serverArgs.push('--folder-uri', 'memfs:///sample-folder'); await ensureWebDevExtensions(args['verbose']); @@ -75,7 +78,6 @@ async function main() { serverArgs.push(...process.argv.slice(2).filter(v => !v.startsWith('--playground') && v !== '--no-playground')); - startServer(serverArgs); if (openSystemBrowser) { opn(`http://${HOST}:${PORT}/`); @@ -109,6 +111,23 @@ async function directoryExists(path) { } } +/** @return {Promise} */ +async function downloadPlaygroundFile(fileName, httpsLocation, destinationRoot) { + const destination = path.join(destinationRoot, fileName); + await fs.promises.mkdir(path.dirname(destination), { recursive: true }); + const fileStream = fs.createWriteStream(destination); + return (new Promise((resolve, reject) => { + const request = https.get(path.posix.join(httpsLocation, fileName), response => { + response.pipe(fileStream); + fileStream.on('finish', () => { + fileStream.close(); + resolve(); + }); + }); + request.on('error', reject); + })); +} + async function ensureWebDevExtensions(verbose) { // Playground (https://github.com/microsoft/vscode-web-playground) @@ -133,11 +152,11 @@ async function ensureWebDevExtensions(verbose) { if (verbose) { fancyLog(`${ansiColors.magenta('Web Development extensions')}: Downloading vscode-web-playground to ${webDevPlaygroundRoot}`); } - await new Promise((resolve, reject) => { - remote(['package.json', 'dist/extension.js', 'dist/extension.js.map'], { - base: 'https://raw.githubusercontent.com/microsoft/vscode-web-playground/main/' - }).pipe(vfs.dest(webDevPlaygroundRoot)).on('end', resolve).on('error', reject); - }); + const playgroundRepo = `https://raw.githubusercontent.com/microsoft/vscode-web-playground/main/`; + await Promise.all(['package.json', 'dist/extension.js', 'dist/extension.js.map'].map( + fileName => downloadPlaygroundFile(fileName, playgroundRepo, webDevPlaygroundRoot) + )); + } else { if (verbose) { fancyLog(`${ansiColors.magenta('Web Development extensions')}: Using existing vscode-web-playground in ${webDevPlaygroundRoot}`); @@ -145,5 +164,4 @@ async function ensureWebDevExtensions(verbose) { } } - main(); diff --git a/scripts/code.sh b/scripts/code.sh index 08fc867ca12..2b97aa42fa4 100755 --- a/scripts/code.sh +++ b/scripts/code.sh @@ -75,6 +75,12 @@ if [ "$IN_WSL" == "true" ] && [ -z "$DISPLAY" ]; then code-wsl "$@" elif [ -f /mnt/wslg/versions.txt ]; then code --disable-gpu "$@" +elif [ -f /.dockerenv ]; then + # Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1263267 + # Chromium does not release shared memory when streaming scripts + # which might exhaust the available resources in the container environment + # leading to failed script loading. + code --disable-dev-shm-usage "$@" else code "$@" fi diff --git a/scripts/playground-server.ts b/scripts/playground-server.ts new file mode 100644 index 00000000000..9468087409f --- /dev/null +++ b/scripts/playground-server.ts @@ -0,0 +1,768 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fsPromise from 'fs/promises'; +import path from 'path'; +import * as http from 'http'; +import * as parcelWatcher from '@parcel/watcher'; + +/** + * Launches the server for the monaco editor playground + */ +function main() { + const server = new HttpServer({ host: 'localhost', port: 5001, cors: true }); + server.use('/', redirectToMonacoEditorPlayground()); + + const rootDir = path.join(__dirname, '..'); + const fileServer = new FileServer(rootDir); + server.use(fileServer.handleRequest); + + const moduleIdMapper = new SimpleModuleIdPathMapper(path.join(rootDir, 'out')); + const editorMainBundle = new CachedBundle('vs/editor/editor.main', moduleIdMapper); + fileServer.overrideFileContent(editorMainBundle.entryModulePath, () => editorMainBundle.bundle()); + + const loaderPath = path.join(rootDir, 'out/vs/loader.js'); + fileServer.overrideFileContent(loaderPath, async () => + Buffer.from(new TextEncoder().encode(makeLoaderJsHotReloadable(await fsPromise.readFile(loaderPath, 'utf8'), new URL('/file-changes', server.url)))) + ); + + const watcher = DirWatcher.watchRecursively(moduleIdMapper.rootDir); + watcher.onDidChange((path, newContent) => { + editorMainBundle.setModuleContent(path, newContent); + editorMainBundle.bundle(); + console.log(`${new Date().toLocaleTimeString()}, file change: ${path}`); + }); + server.use('/file-changes', handleGetFileChangesRequest(watcher, fileServer, moduleIdMapper)); + + console.log(`Server listening on ${server.url}`); +} +setTimeout(main, 0); + +// #region Http/File Server + +type RequestHandler = (req: http.IncomingMessage, res: http.ServerResponse) => Promise; +type ChainableRequestHandler = (req: http.IncomingMessage, res: http.ServerResponse, next: RequestHandler) => Promise; + +class HttpServer { + private readonly server: http.Server; + public readonly url: URL; + + private handler: ChainableRequestHandler[] = []; + + constructor(options: { host: string; port: number; cors: boolean }) { + this.server = http.createServer(async (req, res) => { + if (options.cors) { + res.setHeader('Access-Control-Allow-Origin', '*'); + } + + let i = 0; + const next = async (req: http.IncomingMessage, res: http.ServerResponse) => { + if (i >= this.handler.length) { + res.writeHead(404, { 'Content-Type': 'text/plain' }); + res.end('404 Not Found'); + return; + } + const handler = this.handler[i]; + i++; + await handler(req, res, next); + }; + await next(req, res); + }); + this.server.listen(options.port, options.host); + this.url = new URL(`http://${options.host}:${options.port}`); + } + + use(handler: ChainableRequestHandler); + use(path: string, handler: ChainableRequestHandler); + use(...args: [path: string, handler: ChainableRequestHandler] | [handler: ChainableRequestHandler]) { + const handler = args.length === 1 ? args[0] : (req, res, next) => { + const path = args[0]; + const requestedUrl = new URL(req.url, this.url); + if (requestedUrl.pathname === path) { + return args[1](req, res, next); + } else { + return next(req, res); + } + }; + + this.handler.push(handler); + } +} + +function redirectToMonacoEditorPlayground(): ChainableRequestHandler { + return async (req, res) => { + const url = new URL('https://microsoft.github.io/monaco-editor/playground.html'); + url.searchParams.append('source', `http://${req.headers.host}/out/vs`); + res.writeHead(302, { Location: url.toString() }); + res.end(); + }; +} + +class FileServer { + private readonly overrides = new Map Promise>(); + + constructor(public readonly publicDir: string) { } + + public readonly handleRequest: ChainableRequestHandler = async (req, res, next) => { + const requestedUrl = new URL(req.url!, `http://${req.headers.host}`); + + const pathName = requestedUrl.pathname; + + const filePath = path.join(this.publicDir, pathName); + if (!filePath.startsWith(this.publicDir)) { + res.writeHead(403, { 'Content-Type': 'text/plain' }); + res.end('403 Forbidden'); + return; + } + + try { + const override = this.overrides.get(filePath); + let content: Buffer; + if (override) { + content = await override(); + } else { + content = await fsPromise.readFile(filePath); + } + + const contentType = getContentType(filePath); + res.writeHead(200, { 'Content-Type': contentType }); + res.end(content); + } catch (err) { + if (err.code === 'ENOENT') { + next(req, res); + } else { + res.writeHead(500, { 'Content-Type': 'text/plain' }); + res.end('500 Internal Server Error'); + } + } + }; + + public filePathToUrlPath(filePath: string): string | undefined { + const relative = path.relative(this.publicDir, filePath); + const isSubPath = !!relative && !relative.startsWith('..') && !path.isAbsolute(relative); + + if (!isSubPath) { + return undefined; + } + const relativePath = relative.replace(/\\/g, '/'); + return `/${relativePath}`; + } + + public overrideFileContent(filePath: string, content: () => Promise): void { + this.overrides.set(filePath, content); + } +} + +function getContentType(filePath: string): string { + const extname = path.extname(filePath); + switch (extname) { + case '.js': + return 'text/javascript'; + case '.css': + return 'text/css'; + case '.json': + return 'application/json'; + case '.png': + return 'image/png'; + case '.jpg': + return 'image/jpg'; + case '.svg': + return 'image/svg+xml'; + case '.html': + return 'text/html'; + case '.wasm': + return 'application/wasm'; + default: + return 'text/plain'; + } +} + +// #endregion + +// #region File Watching + +interface IDisposable { + dispose(): void; +} + +class DirWatcher { + public static watchRecursively(dir: string): DirWatcher { + const listeners: ((path: string, newContent: string) => void)[] = []; + const fileContents = new Map(); + const event = (handler: (path: string, newContent: string) => void) => { + listeners.push(handler); + return { + dispose: () => { + const idx = listeners.indexOf(handler); + if (idx >= 0) { + listeners.splice(idx, 1); + } + } + }; + }; + parcelWatcher.subscribe(dir, async (err, events) => { + for (const e of events) { + if (e.type === 'update') { + const newContent = await fsPromise.readFile(e.path, 'utf8'); + if (fileContents.get(e.path) !== newContent) { + fileContents.set(e.path, newContent); + listeners.forEach(l => l(e.path, newContent)); + } + } + } + }); + return new DirWatcher(event); + } + + constructor(public readonly onDidChange: (handler: (path: string, newContent: string) => void) => IDisposable) { + } +} + +function handleGetFileChangesRequest(watcher: DirWatcher, fileServer: FileServer, moduleIdMapper: SimpleModuleIdPathMapper): ChainableRequestHandler { + return async (req, res) => { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + const d = watcher.onDidChange(fsPath => { + const path = fileServer.filePathToUrlPath(fsPath); + if (path) { + res.write(JSON.stringify({ changedPath: path, moduleId: moduleIdMapper.getModuleId(fsPath) }) + '\n'); + } + }); + res.on('close', () => d.dispose()); + }; +} +function makeLoaderJsHotReloadable(loaderJsCode: string, fileChangesUrl: URL): string { + loaderJsCode = loaderJsCode.replace( + /constructor\(env, scriptLoader, defineFunc, requireFunc, loaderAvailableTimestamp = 0\) {/, + '$&globalThis.___globalModuleManager = this;' + ); + + const ___globalModuleManager: any = undefined; + + // This code will be appended to loader.js + function $watchChanges(fileChangesUrl: string) { + let reloadFn; + if (globalThis.$sendMessageToParent) { + reloadFn = () => globalThis.$sendMessageToParent({ kind: 'reload' }); + } else if (typeof window !== 'undefined') { + reloadFn = () => window.location.reload(); + } else { + reloadFn = () => { }; + } + + console.log('Connecting to server to watch for changes...'); + (fetch as any)(fileChangesUrl) + .then(async request => { + const reader = request.body.getReader(); + let buffer = ''; + while (true) { + const { done, value } = await reader.read(); + if (done) { break; } + buffer += new TextDecoder().decode(value); + const lines = buffer.split('\n'); + buffer = lines.pop()!; + for (const line of lines) { + const data = JSON.parse(line); + let handled = false; + if (data.changedPath.endsWith('.css')) { + if (typeof document !== 'undefined') { + console.log('css changed', data.changedPath); + const styleSheet = [...document.querySelectorAll(`link[rel='stylesheet']`)].find((l: any) => new URL(l.href, document.location.href).pathname.endsWith(data.changedPath)) as any; + if (styleSheet) { + styleSheet.href = styleSheet.href.replace(/\?.*/, '') + '?' + Date.now(); + } + } + handled = true; + } else if (data.changedPath.endsWith('.js') && data.moduleId) { + console.log('js changed', data.changedPath); + const moduleId = ___globalModuleManager._moduleIdProvider.getModuleId(data.moduleId); + if (___globalModuleManager._modules2[moduleId]) { + const srcUrl = ___globalModuleManager._config.moduleIdToPaths(data.moduleId); + const newSrc = await (await fetch(srcUrl)).text(); + (new Function('define', newSrc))(function (deps, callback) { + const oldModule = ___globalModuleManager._modules2[moduleId]; + delete ___globalModuleManager._modules2[moduleId]; + + ___globalModuleManager.defineModule(data.moduleId, deps, callback); + const newModule = ___globalModuleManager._modules2[moduleId]; + const oldExports = { ...oldModule.exports }; + + Object.assign(oldModule.exports, newModule.exports); + newModule.exports = oldModule.exports; + + handled = true; + + for (const cb of [...globalThis.$hotReload_deprecateExports]) { + cb(oldExports, newModule.exports); + } + + if (handled) { + console.log('hot reloaded', data.moduleId); + } + }); + } + } + + if (!handled) { reloadFn(); } + } + } + }).catch(err => { + console.error(err); + setTimeout(() => $watchChanges(fileChangesUrl), 1000); + }); + + } + + const additionalJsCode = ` +(${(function () { + globalThis.$hotReload_deprecateExports = new Set<(oldExports: any, newExports: any) => void>(); + }).toString()})(); +${$watchChanges.toString()} +$watchChanges(${JSON.stringify(fileChangesUrl)}); +`; + + return `${loaderJsCode}\n${additionalJsCode}`; +} + +// #endregion + +// #region Bundling + +class CachedBundle { + public readonly entryModulePath = this.mapper.resolveRequestToPath(this.moduleId)!; + + constructor( + private readonly moduleId: string, + private readonly mapper: SimpleModuleIdPathMapper, + ) { + } + + private loader: ModuleLoader | undefined = undefined; + + private bundlePromise: Promise | undefined = undefined; + public async bundle(): Promise { + if (!this.bundlePromise) { + this.bundlePromise = (async () => { + if (!this.loader) { + this.loader = new ModuleLoader(this.mapper); + await this.loader.addModuleAndDependencies(this.entryModulePath); + } + const editorEntryPoint = await this.loader.getModule(this.entryModulePath); + const content = bundleWithDependencies(editorEntryPoint!); + return content; + })(); + } + return this.bundlePromise; + } + + public async setModuleContent(path: string, newContent: string): Promise { + if (!this.loader) { + return; + } + const module = await this.loader!.getModule(path); + if (module) { + if (!this.loader.updateContent(module, newContent)) { + this.loader = undefined; + } + } + this.bundlePromise = undefined; + } +} + +function bundleWithDependencies(module: IModule): Buffer { + const visited = new Set(); + const builder = new SourceMapBuilder(); + + function visit(module: IModule) { + if (visited.has(module)) { + return; + } + visited.add(module); + for (const dep of module.dependencies) { + visit(dep); + } + builder.addSource(module.source); + } + + visit(module); + + const sourceMap = builder.toSourceMap(); + sourceMap.sourceRoot = module.source.sourceMap.sourceRoot; + const sourceMapBase64Str = Buffer.from(JSON.stringify(sourceMap)).toString('base64'); + + builder.addLine(`//# sourceMappingURL=data:application/json;base64,${sourceMapBase64Str}`); + + return builder.toContent(); +} + +class ModuleLoader { + private readonly modules = new Map>(); + + constructor(private readonly mapper: SimpleModuleIdPathMapper) { } + + public getModule(path: string): Promise { + return Promise.resolve(this.modules.get(path)); + } + + public updateContent(module: IModule, newContent: string): boolean { + const parsedModule = parseModule(newContent, module.path, this.mapper); + if (!parsedModule) { + return false; + } + if (!arrayEquals(parsedModule.dependencyRequests, module.dependencyRequests)) { + return false; + } + + module.dependencyRequests = parsedModule.dependencyRequests; + module.source = parsedModule.source; + + return true; + } + + async addModuleAndDependencies(path: string): Promise { + if (this.modules.has(path)) { + return this.modules.get(path)!; + } + + const promise = (async () => { + const content = await fsPromise.readFile(path, { encoding: 'utf-8' }); + + const parsedModule = parseModule(content, path, this.mapper); + if (!parsedModule) { + return undefined; + } + + const dependencies = (await Promise.all(parsedModule.dependencyRequests.map(async r => { + if (r === 'require' || r === 'exports' || r === 'module') { + return null; + } + + const depPath = this.mapper.resolveRequestToPath(r, path); + if (!depPath) { + return null; + } + return await this.addModuleAndDependencies(depPath); + }))).filter((d): d is IModule => !!d); + + const module: IModule = { + id: this.mapper.getModuleId(path)!, + dependencyRequests: parsedModule.dependencyRequests, + dependencies, + path, + source: parsedModule.source, + }; + return module; + })(); + + this.modules.set(path, promise); + return promise; + } +} + +function arrayEquals(a: T[], b: T[]): boolean { + if (a.length !== b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; +} + +const encoder = new TextEncoder(); + +function parseModule(content: string, path: string, mapper: SimpleModuleIdPathMapper): { source: Source; dependencyRequests: string[] } | undefined { + const m = content.match(/define\((\[.*?\])/); + if (!m) { + return undefined; + } + + const dependencyRequests = JSON.parse(m[1].replace(/'/g, '"')) as string[]; + + const sourceMapHeader = '//# sourceMappingURL=data:application/json;base64,'; + const idx = content.indexOf(sourceMapHeader); + + let sourceMap: any = null; + if (idx !== -1) { + const sourceMapJsonStr = Buffer.from(content.substring(idx + sourceMapHeader.length), 'base64').toString('utf-8'); + sourceMap = JSON.parse(sourceMapJsonStr); + content = content.substring(0, idx); + } + + content = content.replace('define([', `define("${mapper.getModuleId(path)}", [`); + + const contentBuffer = Buffer.from(encoder.encode(content)); + const source = new Source(contentBuffer, sourceMap); + + return { dependencyRequests, source }; +} + +class SimpleModuleIdPathMapper { + constructor(public readonly rootDir: string) { } + + public getModuleId(path: string): string | null { + if (!path.startsWith(this.rootDir) || !path.endsWith('.js')) { + return null; + } + const moduleId = path.substring(this.rootDir.length + 1); + + + return moduleId.replace(/\\/g, '/').substring(0, moduleId.length - 3); + } + + public resolveRequestToPath(request: string, requestingModulePath?: string): string | null { + if (request.indexOf('css!') !== -1) { + return null; + } + + if (request.startsWith('.')) { + return path.join(path.dirname(requestingModulePath!), request + '.js'); + } else { + return path.join(this.rootDir, request + '.js'); + } + } +} + +interface IModule { + id: string; + dependencyRequests: string[]; + dependencies: IModule[]; + path: string; + source: Source; +} + +// #endregion + +// #region SourceMapBuilder + +// From https://stackoverflow.com/questions/29905373/how-to-create-sourcemaps-for-concatenated-files with modifications + +class Source { + // Ends with \n + public readonly content: Buffer; + public readonly sourceMap: SourceMap; + public readonly sourceLines: number; + + public readonly sourceMapMappings: Buffer; + + + constructor(content: Buffer, sourceMap: SourceMap | undefined) { + if (!sourceMap) { + sourceMap = SourceMapBuilder.emptySourceMap; + } + + let sourceLines = countNL(content); + if (content.length > 0 && content[content.length - 1] !== 10) { + sourceLines++; + content = Buffer.concat([content, Buffer.from([10])]); + } + + this.content = content; + this.sourceMap = sourceMap; + this.sourceLines = sourceLines; + this.sourceMapMappings = typeof this.sourceMap.mappings === 'string' + ? Buffer.from(encoder.encode(sourceMap.mappings as string)) + : this.sourceMap.mappings; + } +} + +class SourceMapBuilder { + public static emptySourceMap: SourceMap = { version: 3, sources: [], mappings: Buffer.alloc(0) }; + + private readonly outputBuffer = new DynamicBuffer(); + private readonly sources: string[] = []; + private readonly mappings = new DynamicBuffer(); + private lastSourceIndex = 0; + private lastSourceLine = 0; + private lastSourceCol = 0; + + addLine(text: string) { + this.outputBuffer.addString(text); + this.outputBuffer.addByte(10); + this.mappings.addByte(59); // ; + } + + addSource(source: Source) { + const sourceMap = source.sourceMap; + this.outputBuffer.addBuffer(source.content); + + const sourceRemap: number[] = []; + for (const v of sourceMap.sources) { + let pos = this.sources.indexOf(v); + if (pos < 0) { + pos = this.sources.length; + this.sources.push(v); + } + sourceRemap.push(pos); + } + let lastOutputCol = 0; + + const inputMappings = source.sourceMapMappings; + let outputLine = 0; + let ip = 0; + let inOutputCol = 0; + let inSourceIndex = 0; + let inSourceLine = 0; + let inSourceCol = 0; + let shift = 0; + let value = 0; + let valpos = 0; + const commit = () => { + if (valpos === 0) { return; } + this.mappings.addVLQ(inOutputCol - lastOutputCol); + lastOutputCol = inOutputCol; + if (valpos === 1) { + valpos = 0; + return; + } + const outSourceIndex = sourceRemap[inSourceIndex]; + this.mappings.addVLQ(outSourceIndex - this.lastSourceIndex); + this.lastSourceIndex = outSourceIndex; + this.mappings.addVLQ(inSourceLine - this.lastSourceLine); + this.lastSourceLine = inSourceLine; + this.mappings.addVLQ(inSourceCol - this.lastSourceCol); + this.lastSourceCol = inSourceCol; + valpos = 0; + }; + while (ip < inputMappings.length) { + let b = inputMappings[ip++]; + if (b === 59) { // ; + commit(); + this.mappings.addByte(59); + inOutputCol = 0; + lastOutputCol = 0; + outputLine++; + } else if (b === 44) { // , + commit(); + this.mappings.addByte(44); + } else { + b = charToInteger[b]; + if (b === 255) { throw new Error('Invalid sourceMap'); } + value += (b & 31) << shift; + if (b & 32) { + shift += 5; + } else { + const shouldNegate = value & 1; + value >>= 1; + if (shouldNegate) { value = -value; } + switch (valpos) { + case 0: inOutputCol += value; break; + case 1: inSourceIndex += value; break; + case 2: inSourceLine += value; break; + case 3: inSourceCol += value; break; + } + valpos++; + value = shift = 0; + } + } + } + commit(); + while (outputLine < source.sourceLines) { + this.mappings.addByte(59); + outputLine++; + } + } + + toContent(): Buffer { + return this.outputBuffer.toBuffer(); + } + + toSourceMap(sourceRoot?: string): SourceMap { + return { version: 3, sourceRoot, sources: this.sources, mappings: this.mappings.toBuffer().toString() }; + } +} + +export interface SourceMap { + version: number; // always 3 + file?: string; + sourceRoot?: string; + sources: string[]; + sourcesContent?: string[]; + names?: string[]; + mappings: string | Buffer; +} + +const charToInteger = Buffer.alloc(256); +const integerToChar = Buffer.alloc(64); + +charToInteger.fill(255); + +'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split('').forEach((char, i) => { + charToInteger[char.charCodeAt(0)] = i; + integerToChar[i] = char.charCodeAt(0); +}); + +class DynamicBuffer { + private buffer: Buffer; + private size: number; + + constructor() { + this.buffer = Buffer.alloc(512); + this.size = 0; + } + + ensureCapacity(capacity: number) { + if (this.buffer.length >= capacity) { + return; + } + const oldBuffer = this.buffer; + this.buffer = Buffer.alloc(Math.max(oldBuffer.length * 2, capacity)); + oldBuffer.copy(this.buffer); + } + + addByte(b: number) { + this.ensureCapacity(this.size + 1); + this.buffer[this.size++] = b; + } + + addVLQ(num: number) { + let clamped: number; + + if (num < 0) { + num = (-num << 1) | 1; + } else { + num <<= 1; + } + + do { + clamped = num & 31; + num >>= 5; + + if (num > 0) { + clamped |= 32; + } + + this.addByte(integerToChar[clamped]); + } while (num > 0); + } + + addString(s: string) { + const l = Buffer.byteLength(s); + this.ensureCapacity(this.size + l); + this.buffer.write(s, this.size); + this.size += l; + } + + addBuffer(b: Buffer) { + this.ensureCapacity(this.size + b.length); + b.copy(this.buffer, this.size); + this.size += b.length; + } + + toBuffer(): Buffer { + return this.buffer.slice(0, this.size); + } +} + +function countNL(b: Buffer): number { + let res = 0; + for (let i = 0; i < b.length; i++) { + if (b[i] === 10) { res++; } + } + return res; +} + +// #endregion diff --git a/scripts/test-integration.bat b/scripts/test-integration.bat index e5b356f3dec..55d7202968f 100644 --- a/scripts/test-integration.bat +++ b/scripts/test-integration.bat @@ -82,6 +82,13 @@ mkdir %IPYNBWORKSPACE% call "%INTEGRATION_TEST_ELECTRON_PATH%" %IPYNBWORKSPACE% --extensionDevelopmentPath=%~dp0\..\extensions\ipynb --extensionTestsPath=%~dp0\..\extensions\ipynb\out\test %API_TESTS_EXTRA_ARGS% if %errorlevel% neq 0 exit /b %errorlevel% +echo. +echo ### Notebook Output tests +set NBOUTWORKSPACE=%TEMPDIR%\nbout-%RANDOM% +mkdir %NBOUTWORKSPACE% +call "%INTEGRATION_TEST_ELECTRON_PATH%" %NBOUTWORKSPACE% --extensionDevelopmentPath=%~dp0\..\extensions\notebook-renderers --extensionTestsPath=%~dp0\..\extensions\notebook-renderers\out\test %API_TESTS_EXTRA_ARGS% +if %errorlevel% neq 0 exit /b %errorlevel% + echo. echo ### Configuration editing tests set CFWORKSPACE=%TEMPDIR%\cf-%RANDOM% diff --git a/scripts/test-integration.sh b/scripts/test-integration.sh index e43ef46016c..b6f3ec01538 100755 --- a/scripts/test-integration.sh +++ b/scripts/test-integration.sh @@ -100,6 +100,12 @@ echo "$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_EXTRA_ARGS $(mktemp -d 2>/dev/null) --extensionDevelopmentPath=$ROOT/extensions/ipynb --extensionTestsPath=$ROOT/extensions/ipynb/out/test $API_TESTS_EXTRA_ARGS kill_app +echo +echo "### Notebook Output tests" +echo +"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_EXTRA_ARGS $(mktemp -d 2>/dev/null) --extensionDevelopmentPath=$ROOT/extensions/notebook-renderers --extensionTestsPath=$ROOT/extensions/notebook-renderers/out/test $API_TESTS_EXTRA_ARGS +kill_app + echo echo "### Configuration editing tests" echo diff --git a/scripts/update-xterm.js b/scripts/update-xterm.js index bc574935902..e74fb45f590 100644 --- a/scripts/update-xterm.js +++ b/scripts/update-xterm.js @@ -9,6 +9,7 @@ const path = require('path'); const moduleNames = [ 'xterm', 'xterm-addon-canvas', + 'xterm-addon-image', 'xterm-addon-search', 'xterm-addon-unicode11', 'xterm-addon-webgl' diff --git a/src/bootstrap-amd.js b/src/bootstrap-amd.js index a1676c7ca98..cc47b050fb5 100644 --- a/src/bootstrap-amd.js +++ b/src/bootstrap-amd.js @@ -15,7 +15,16 @@ const nodeRequire = require; globalThis._VSCODE_NODE_MODULES = new Proxy(Object.create(null), { get: (_target, mod) => nodeRequire(String(mod)) }); // VSCODE_GLOBALS: package/product.json +/** @type Record */ globalThis._VSCODE_PRODUCT_JSON = require('../product.json'); +if (process.env['VSCODE_DEV']) { + // Patch product overrides when running out of sources + try { + // @ts-ignore + const overrides = require('../product.overrides.json'); + globalThis._VSCODE_PRODUCT_JSON = Object.assign(globalThis._VSCODE_PRODUCT_JSON, overrides); + } catch (error) { /* ignore */ } +} globalThis._VSCODE_PACKAGE_JSON = require('../package.json'); // @ts-ignore @@ -51,9 +60,9 @@ if (nlsConfig && nlsConfig.pseudo) { } /** - * @param {string} entrypoint - * @param {(value: any) => void} onLoad - * @param {(err: Error) => void} onError + * @param {string=} entrypoint + * @param {(value: any) => void=} onLoad + * @param {(err: Error) => void=} onError */ exports.load = function (entrypoint, onLoad, onError) { if (!entrypoint) { diff --git a/src/bootstrap-fork.js b/src/bootstrap-fork.js index e3671222ccd..036522f23ce 100644 --- a/src/bootstrap-fork.js +++ b/src/bootstrap-fork.js @@ -235,26 +235,16 @@ function terminateWhenParentTerminates() { } } -// TODO@bpasero remove this when sandbox is final function configureCrashReporter() { - const crashReporterSandboxedHint = process.env['VSCODE_CRASH_REPORTER_SANDBOXED_HINT']; - if (crashReporterSandboxedHint) { - addCrashReporterParameter('_sandboxed', 'true'); - } - const crashReporterProcessType = process.env['VSCODE_CRASH_REPORTER_PROCESS_TYPE']; if (crashReporterProcessType) { - addCrashReporterParameter('processType', crashReporterProcessType); - } -} - -function addCrashReporterParameter(key, value) { - try { - if (process['crashReporter'] && typeof process['crashReporter'].addExtraParameter === 'function' /* Electron only */) { - process['crashReporter'].addExtraParameter(key, value); + try { + if (process['crashReporter'] && typeof process['crashReporter'].addExtraParameter === 'function' /* Electron only */) { + process['crashReporter'].addExtraParameter('processType', crashReporterProcessType); + } + } catch (error) { + console.error(error); } - } catch (error) { - console.error(error); } } diff --git a/src/bootstrap-window.js b/src/bootstrap-window.js index d61e432e3b3..66da7fb0e41 100644 --- a/src/bootstrap-window.js +++ b/src/bootstrap-window.js @@ -43,15 +43,6 @@ * }} [options] */ async function load(modulePaths, resultCallback, options) { - const isDev = !!safeProcess.env['VSCODE_DEV']; - - // Error handler (node.js enabled renderers only) - let showDevtoolsOnError = isDev; - if (!safeProcess.sandboxed) { - safeProcess.on('uncaughtException', function (/** @type {string | Error} */ error) { - onUnexpectedError(error, showDevtoolsOnError); - }); - } // Await window configuration from preload const timeout = setTimeout(() => { console.error(`[resolve window config] Could not resolve window configuration within 10 seconds, but will continue to wait...`); }, 10000); @@ -68,28 +59,21 @@ // Developer settings const { - forceDisableShowDevtoolsOnError, forceEnableDeveloperKeybindings, disallowReloadKeybinding, removeDeveloperKeybindingsAfterLoad } = typeof options?.configureDeveloperSettings === 'function' ? options.configureDeveloperSettings(configuration) : { - forceDisableShowDevtoolsOnError: false, forceEnableDeveloperKeybindings: false, disallowReloadKeybinding: false, removeDeveloperKeybindingsAfterLoad: false }; - showDevtoolsOnError = isDev && !forceDisableShowDevtoolsOnError; + const isDev = !!safeProcess.env['VSCODE_DEV']; const enableDeveloperKeybindings = isDev || forceEnableDeveloperKeybindings; let developerDeveloperKeybindingsDisposable; if (enableDeveloperKeybindings) { developerDeveloperKeybindingsDisposable = registerDeveloperKeybindings(disallowReloadKeybinding); } - // Enable ASAR support (node.js enabled renderers only) - if (!safeProcess.sandboxed) { - globalThis.MonacoBootstrap.enableASARSupport(configuration.appRoot); - } - // Get the nls configuration into the process.env as early as possible const nlsConfig = globalThis.MonacoBootstrap.setupNLS(); @@ -102,25 +86,8 @@ window.document.documentElement.setAttribute('lang', locale); - // Define `fs` as `original-fs` to disable ASAR support - // in fs-operations (node.js enabled renderers only) - if (!safeProcess.sandboxed) { - require.define('fs', [], function () { - return require.__$__nodeRequire('original-fs'); - }); - } - window['MonacoEnvironment'] = {}; - // VSCODE_GLOBALS: node_modules - globalThis._VSCODE_NODE_MODULES = new Proxy(Object.create(null), { get: (_target, mod) => (require.__$__nodeRequire ?? require)(String(mod)) }); - - if (!safeProcess.sandboxed) { - // VSCODE_GLOBALS: package/product.json - globalThis._VSCODE_PRODUCT_JSON = (require.__$__nodeRequire ?? require)(configuration.appRoot + '/product.json'); - globalThis._VSCODE_PACKAGE_JSON = (require.__$__nodeRequire ?? require)(configuration.appRoot + '/package.json'); - } - const loaderConfig = { baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out`, 'vs/nls': nlsConfig, @@ -144,9 +111,12 @@ loaderConfig.paths = { 'vscode-textmate': `${baseNodeModulesPath}/vscode-textmate/release/main.js`, 'vscode-oniguruma': `${baseNodeModulesPath}/vscode-oniguruma/release/main.js`, + 'vsda': `${baseNodeModulesPath}/vsda/index.js`, 'xterm': `${baseNodeModulesPath}/xterm/lib/xterm.js`, 'xterm-addon-canvas': `${baseNodeModulesPath}/xterm-addon-canvas/lib/xterm-addon-canvas.js`, + 'xterm-addon-image': `${baseNodeModulesPath}/xterm-addon-image/lib/xterm-addon-image.js`, 'xterm-addon-search': `${baseNodeModulesPath}/xterm-addon-search/lib/xterm-addon-search.js`, + 'xterm-addon-serialize': `${baseNodeModulesPath}/xterm-addon-serialize/lib/xterm-addon-serialize.js`, 'xterm-addon-unicode11': `${baseNodeModulesPath}/xterm-addon-unicode11/lib/xterm-addon-unicode11.js`, 'xterm-addon-webgl': `${baseNodeModulesPath}/xterm-addon-webgl/lib/xterm-addon-webgl.js`, '@vscode/iconv-lite-umd': `${baseNodeModulesPath}/@vscode/iconv-lite-umd/lib/iconv-lite-umd.js`, @@ -156,13 +126,6 @@ 'tas-client-umd': `${baseNodeModulesPath}/tas-client-umd/lib/tas-client-umd.js` }; - // Allow to load built-in and other node.js modules via AMD - // which has a fallback to using node.js `require` - // (node.js enabled renderers only) - if (!safeProcess.sandboxed) { - loaderConfig.amdModulesPattern = /(^vs\/)|(^vscode-textmate$)|(^vscode-oniguruma$)|(^xterm$)|(^xterm-addon-canvas$)|(^xterm-addon-search$)|(^xterm-addon-unicode11$)|(^xterm-addon-webgl$)|(^@vscode\/iconv-lite-umd$)|(^jschardet$)|(^@vscode\/vscode-languagedetection$)|(^vscode-regexp-languagedetection$)|(^tas-client-umd$)/; - } - // Signal before require.config() if (typeof options?.beforeLoaderConfig === 'function') { options.beforeLoaderConfig(loaderConfig); diff --git a/src/bootstrap.js b/src/bootstrap.js index 855edd92b6c..0617532bd58 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -50,41 +50,14 @@ //#region Add support for using node_modules.asar - /** - * @param {string=} appRoot - */ - function enableASARSupport(appRoot) { + function enableASARSupport() { if (!path || !Module || typeof process === 'undefined') { console.warn('enableASARSupport() is only available in node.js environments'); return; } - const NODE_MODULES_PATH = appRoot ? path.join(appRoot, 'node_modules') : path.join(__dirname, '../node_modules'); - - // Windows only: - // use both lowercase and uppercase drive letter - // as a way to ensure we do the right check on - // the node modules path: node.js might internally - // use a different case compared to what we have - /** @type {string | undefined} */ - let NODE_MODULES_ALTERNATIVE_PATH; - if (appRoot /* only used from renderer until `sandbox` enabled */ && process.platform === 'win32') { - const driveLetter = appRoot.substr(0, 1); - - let alternativeDriveLetter; - if (driveLetter.toLowerCase() !== driveLetter) { - alternativeDriveLetter = driveLetter.toLowerCase(); - } else { - alternativeDriveLetter = driveLetter.toUpperCase(); - } - - NODE_MODULES_ALTERNATIVE_PATH = alternativeDriveLetter + NODE_MODULES_PATH.substr(1); - } else { - NODE_MODULES_ALTERNATIVE_PATH = undefined; - } - + const NODE_MODULES_PATH = path.join(__dirname, '../node_modules'); const NODE_MODULES_ASAR_PATH = `${NODE_MODULES_PATH}.asar`; - const NODE_MODULES_ASAR_ALTERNATIVE_PATH = NODE_MODULES_ALTERNATIVE_PATH ? `${NODE_MODULES_ALTERNATIVE_PATH}.asar` : undefined; // @ts-ignore const originalResolveLookupPaths = Module._resolveLookupPaths; @@ -93,23 +66,12 @@ Module._resolveLookupPaths = function (request, parent) { const paths = originalResolveLookupPaths(request, parent); if (Array.isArray(paths)) { - let asarPathAdded = false; for (let i = 0, len = paths.length; i < len; i++) { if (paths[i] === NODE_MODULES_PATH) { - asarPathAdded = true; paths.splice(i, 0, NODE_MODULES_ASAR_PATH); break; - } else if (paths[i] === NODE_MODULES_ALTERNATIVE_PATH) { - asarPathAdded = true; - paths.splice(i, 0, NODE_MODULES_ASAR_ALTERNATIVE_PATH); - break; } } - if (!asarPathAdded && appRoot) { - // Assuming that adding just `NODE_MODULES_ASAR_PATH` is sufficient - // because nodejs should find it even if it has a different drive letter case - paths.push(NODE_MODULES_ASAR_PATH); - } } return paths; diff --git a/src/buildfile.js b/src/buildfile.js index c7a24fd2850..8917223094a 100644 --- a/src/buildfile.js +++ b/src/buildfile.js @@ -5,7 +5,7 @@ /** * @param {string} name - * @param {string[]} exclude + * @param {string[]=} exclude */ function createModuleDescription(name, exclude) { @@ -47,7 +47,6 @@ exports.base = [ exports.workerExtensionHost = [createEditorWorkerModuleDescription('vs/workbench/api/worker/extensionHostWorker')]; exports.workerNotebook = [createEditorWorkerModuleDescription('vs/workbench/contrib/notebook/common/services/notebookSimpleWorker')]; -exports.workerSharedProcess = [createEditorWorkerModuleDescription('vs/platform/sharedProcess/electron-browser/sharedProcessWorkerMain')]; exports.workerLanguageDetection = [createEditorWorkerModuleDescription('vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker')]; exports.workerLocalFileSearch = [createEditorWorkerModuleDescription('vs/workbench/services/search/worker/localFileSearch')]; exports.workerProfileAnalysis = [createEditorWorkerModuleDescription('vs/platform/profiling/electron-sandbox/profileAnalysisWorker')]; diff --git a/src/main.js b/src/main.js index d6f46dba013..55200575103 100644 --- a/src/main.js +++ b/src/main.js @@ -22,6 +22,7 @@ const bootstrap = require('./bootstrap'); const bootstrapNode = require('./bootstrap-node'); 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} */ const product = require('../product.json'); const { app, protocol, crashReporter, Menu } = require('electron'); @@ -32,17 +33,39 @@ const portable = bootstrapNode.configurePortable(product); // Enable ASAR support bootstrap.enableASARSupport(); -// Set userData path before app 'ready' event const args = parseCLIArgs(); +// Configure static command line arguments +const argvConfig = configureCommandlineSwitchesSync(args); +// Enable sandbox globally unless +// 1) disabled via command line using either +// `--no-sandbox` or `--disable-chromium-sandbox` argument. +// 2) argv.json contains `disable-chromium-sandbox: true`. +if (args['sandbox'] && + !args['disable-chromium-sandbox'] && + !argvConfig['disable-chromium-sandbox']) { + app.enableSandbox(); +} else if (app.commandLine.hasSwitch('no-sandbox') && + !app.commandLine.hasSwitch('disable-gpu-sandbox')) { + // Disable GPU sandbox whenever --no-sandbox is used. + app.commandLine.appendSwitch('disable-gpu-sandbox'); +} else { + app.commandLine.appendSwitch('no-sandbox'); + app.commandLine.appendSwitch('disable-gpu-sandbox'); +} + +// Set userData path before app 'ready' event const userDataPath = getUserDataPath(args, product.nameShort ?? 'code-oss-dev'); +if (process.platform === 'win32') { + const userDataUNCHost = getUNCHost(userDataPath); + if (userDataUNCHost) { + addUNCHostToAllowlist(userDataUNCHost); // enables to use UNC paths in userDataPath + } +} app.setPath('userData', userDataPath); // Resolve code cache path const codeCachePath = getCodeCachePath(); -// Configure static command line arguments -const argvConfig = configureCommandlineSwitchesSync(args); - // Disable default menu (https://github.com/electron/electron/issues/35512) Menu.setApplicationMenu(null); @@ -92,30 +115,20 @@ registerListeners(); */ let nlsConfigurationPromise = undefined; -const metaDataFile = path.join(__dirname, 'nls.metadata.json'); -const language = getUserDefinedLocale(argvConfig); /** - * @type {string | undefined} + * @type {String} **/ -let osLocale = undefined; -// This if statement can be simplified once -// VS Code moves to Electron 22. -// Ref https://github.com/microsoft/vscode/issues/159813 -// and https://github.com/electron/electron/pull/36035 -if ('getPreferredSystemLanguages' in app - && typeof app.getPreferredSystemLanguages === 'function') { - // Use the most preferred OS language for language recommendation. - // The API might return an empty array on Linux, such as when - // the 'C' locale is the user's only configured locale. - // No matter the OS, if the array is empty, default back to 'en'. - osLocale = app.getPreferredSystemLanguages()?.[0] ?? 'en'; - if (osLocale) { - osLocale = processZhLocale(osLocale.toLowerCase()); - } -} -if (language && osLocale) { +// Use the most preferred OS language for language recommendation. +// The API might return an empty array on Linux, such as when +// the 'C' locale is the user's only configured locale. +// No matter the OS, if the array is empty, default back to 'en'. +const resolved = app.getPreferredSystemLanguages()?.[0] ?? 'en'; +const osLocale = processZhLocale(resolved.toLowerCase()); +const metaDataFile = path.join(__dirname, 'nls.metadata.json'); +const locale = getUserDefinedLocale(argvConfig); +if (locale) { const { getNLSConfiguration } = require('./vs/base/node/languagePacks'); - nlsConfigurationPromise = getNLSConfiguration(product.commit, userDataPath, metaDataFile, osLocale, language); + nlsConfigurationPromise = getNLSConfiguration(product.commit, userDataPath, metaDataFile, locale, osLocale); } // Pass in the locale to Electron so that the @@ -127,7 +140,7 @@ if (language && osLocale) { // In that case, use `en` as the Electron locale. if (process.platform === 'win32' || process.platform === 'linux') { - const electronLocale = (!language || language === 'qps-ploc') ? 'en' : language; + const electronLocale = (!locale || locale === 'qps-ploc') ? 'en' : locale; app.commandLine.appendSwitch('lang', electronLocale); } @@ -188,7 +201,10 @@ function configureCommandlineSwitchesSync(cliArgs) { 'disable-hardware-acceleration', // override for the color profile to use - 'force-color-profile' + 'force-color-profile', + + // override which password-store is used + 'password-store' ]; if (process.platform === 'linux') { @@ -215,8 +231,12 @@ function configureCommandlineSwitchesSync(cliArgs) { // Append Electron flags to Electron if (SUPPORTED_ELECTRON_SWITCHES.indexOf(argvKey) !== -1) { - // Color profile - if (argvKey === 'force-color-profile') { + if ( + // Color profile + argvKey === 'force-color-profile' || + // Password store + argvKey === 'password-store' + ) { if (argvValue) { app.commandLine.appendSwitch(argvKey, argvValue); } @@ -256,10 +276,8 @@ function configureCommandlineSwitchesSync(cliArgs) { } }); - /* Following features are disabled from the runtime. - * `CalculateNativeWinOcclusion` - Disable native window occlusion tracker, - * Refs https://groups.google.com/a/chromium.org/g/embedder-dev/c/ZF3uHHyWLKw/m/VDN2hDXMAAAJ - */ + // Following features are disabled from the runtime: + // `CalculateNativeWinOcclusion` - Disable native window occlusion tracker (https://groups.google.com/a/chromium.org/g/embedder-dev/c/ZF3uHHyWLKw/m/VDN2hDXMAAAJ) app.commandLine.appendSwitch('disable-features', 'CalculateNativeWinOcclusion'); // Support JS Flags @@ -451,11 +469,6 @@ function getJSFlags(cliArgs) { jsFlags.push(cliArgs['js-flags']); } - // Support max-memory flag - if (cliArgs['max-memory'] && !/max_old_space_size=(\d+)/g.exec(cliArgs['js-flags'] ?? '')) { - jsFlags.push(`--max_old_space_size=${cliArgs['max-memory']}`); - } - return jsFlags.length > 0 ? jsFlags.join(' ') : null; } @@ -470,9 +483,17 @@ function parseCLIArgs() { 'user-data-dir', 'locale', 'js-flags', - 'max-memory', 'crash-reporter-directory' - ] + ], + boolean: [ + 'disable-chromium-sandbox', + ], + default: { + 'sandbox': true + }, + alias: { + 'no-sandbox': 'sandbox' + } }); } @@ -607,22 +628,28 @@ async function resolveNlsConfiguration() { // First, we need to test a user defined locale. If it fails we try the app locale. // If that fails we fall back to English. let nlsConfiguration = nlsConfigurationPromise ? await nlsConfigurationPromise : undefined; - if (!nlsConfiguration) { - // fallback to using app.getLocale() so that we have something for the locale. - // This can be removed after the move to Electron 22. Please note that getLocale() is only - // valid after we have received the app ready event. This is why the code is here. - osLocale ??= processZhLocale(app.getLocale().toLowerCase()); - - const { getNLSConfiguration } = require('./vs/base/node/languagePacks'); - nlsConfiguration = await getNLSConfiguration(product.commit, userDataPath, metaDataFile, osLocale, language); - if (!nlsConfiguration) { - nlsConfiguration = { locale: osLocale, availableLanguages: {} }; - } - } else { - // We received a valid nlsConfig from a user defined locale + if (nlsConfiguration) { + return nlsConfiguration; } - return nlsConfiguration; + // Try to use the app locale. Please note that the app locale is only + // valid after we have received the app ready event. This is why the + // code is here. + + /** + * @type string + */ + let appLocale = app.getLocale(); + if (!appLocale) { + return { locale: 'en', osLocale, availableLanguages: {} }; + } + + // See above the comment about the loader and case sensitiveness + appLocale = processZhLocale(appLocale.toLowerCase()); + + const { getNLSConfiguration } = require('./vs/base/node/languagePacks'); + nlsConfiguration = await getNLSConfiguration(product.commit, userDataPath, metaDataFile, appLocale, osLocale); + return nlsConfiguration ?? { locale: 'en', osLocale, availableLanguages: {} }; } /** diff --git a/src/server-main.js b/src/server-main.js index 360c74aa858..5167527baed 100644 --- a/src/server-main.js +++ b/src/server-main.js @@ -45,12 +45,6 @@ async function start() { return; } - if (parsedArgs['compatibility'] === '1.63') { - console.warn(`server.sh is being replaced by 'bin/${product.serverApplicationName}'. Please migrate to the new command and adopt the following new default behaviors:`); - console.warn('* connection token is mandatory unless --without-connection-token is used'); - console.warn('* host defaults to `localhost`'); - } - /** * @typedef { import('./vs/server/node/remoteExtensionHostAgentServer').IServerAPI } IServerAPI */ diff --git a/src/tsconfig.base.json b/src/tsconfig.base.json index a309a50adaa..c0a2e174591 100644 --- a/src/tsconfig.base.json +++ b/src/tsconfig.base.json @@ -17,29 +17,10 @@ "./vs/*" ] }, + "target": "es2022", + "useDefineForClassFields": false, "lib": [ - "ES2016", - "ES2017.Object", - "ES2017.String", - "ES2017.Intl", - "ES2017.TypedArrays", - "ES2018.AsyncIterable", - "ES2018.AsyncGenerator", - "ES2018.Promise", - "ES2018.Regexp", - "ES2018.Intl", - "ES2019.Array", - "ES2019.Object", - "ES2019.String", - "ES2019.Symbol", - "ES2020.BigInt", - "ES2020.Promise", - "ES2020.String", - "ES2020.Symbol.WellKnown", - "ES2020.Intl", - "ES2021.Promise", - "ES2021.String", - "ES2021.WeakRef", + "ES2022", "DOM", "DOM.Iterable", "WebWorker.ImportScripts" diff --git a/src/tsconfig.json b/src/tsconfig.json index 5587571ab70..df96ed71247 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -7,7 +7,6 @@ "allowJs": true, "resolveJsonModule": true, "outDir": "../out/vs", - "target": "es2021", "types": [ "keytar", "mocha", diff --git a/src/tsec.exemptions.json b/src/tsec.exemptions.json index 9902ab953e7..eb8405c96cb 100644 --- a/src/tsec.exemptions.json +++ b/src/tsec.exemptions.json @@ -1,39 +1,42 @@ { + "ban-document-execcommand": [ + "vs/workbench/contrib/codeEditor/electron-sandbox/inputClipboardActions.ts", + "vs/editor/contrib/clipboard/browser/clipboard.ts" + ], "ban-eval-calls": [ "vs/workbench/api/worker/extHostExtensionService.ts", - "vs/base/worker/workerMain" + "vs/base/worker/workerMain.ts" ], "ban-function-calls": [ "vs/workbench/api/worker/extHostExtensionService.ts", - "vs/base/worker/workerMain", + "vs/base/worker/workerMain.ts", "vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts", "vs/workbench/services/keybinding/test/node/keyboardMapperTestUtils.ts" ], "ban-trustedtypes-createpolicy": [ - "vs/base/browser/dom.ts", - "vs/base/browser/markdownRenderer.ts", - "vs/base/browser/defaultWorkerFactory.ts", + "vs/amdX.ts", + "vs/base/browser/trustedTypes.ts", "vs/base/worker/workerMain.ts", - "vs/editor/contrib/markdownRenderer/browser/markdownRenderer.ts", - "vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts", - "vs/editor/browser/view/domLineBreaksComputer.ts", - "vs/editor/browser/view/viewLayer.ts", - "vs/editor/browser/widget/diffEditorWidget.ts", - "vs/editor/contrib/inlineCompletions/browser/ghostTextWidget.ts", - "vs/editor/browser/widget/diffReview.ts", - "vs/editor/standalone/browser/colorizer.ts", - "vs/workbench/api/worker/extHostExtensionService.ts", - "vs/workbench/contrib/notebook/browser/view/cellParts/cellDragRenderer.ts", - "vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts", - "vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts" + "vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts" ], "ban-worker-calls": [ "vs/base/browser/defaultWorkerFactory.ts", - "vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts", - "vs/platform/sharedProcess/electron-browser/sharedProcessWorkerService.ts" + "vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts" + ], + "ban-worker-importscripts": [ + "vs/amdX.ts", + "vs/workbench/services/extensions/worker/polyfillNestedWorker.ts", + "vs/workbench/api/worker/extensionHostWorker.ts", + "vs/base/worker/workerMain.ts" ], "ban-domparser-parsefromstring": [ "vs/base/browser/markdownRenderer.ts", "vs/base/test/browser/markdownRenderer.test.ts" + ], + "ban-element-setattribute": [ + "**/*.ts" + ], + "ban-element-insertadjacenthtml": [ + "**/*.ts" ] } diff --git a/src/typings/vscode-globals-modules.d.ts b/src/typings/vscode-globals-modules.d.ts index 443c2b687db..c538b99b63f 100644 --- a/src/typings/vscode-globals-modules.d.ts +++ b/src/typings/vscode-globals-modules.d.ts @@ -18,6 +18,8 @@ declare global { net: typeof import('net'); os: typeof import('os'); module: typeof import('module'); + fs: typeof import('fs'), + vm: typeof import('vm'), ['native-watchdog']: typeof import('native-watchdog') perf_hooks: typeof import('perf_hooks'); diff --git a/src/vs/amdX.ts b/src/vs/amdX.ts new file mode 100644 index 00000000000..75b21c60828 --- /dev/null +++ b/src/vs/amdX.ts @@ -0,0 +1,208 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { isESM } from 'vs/base/common/amd'; +import { AppResourcePath, FileAccess, nodeModulesAsarPath, nodeModulesPath } from 'vs/base/common/network'; +import * as platform from 'vs/base/common/platform'; +import { IProductConfiguration } from 'vs/base/common/product'; +import { URI } from 'vs/base/common/uri'; + + +class DefineCall { + constructor( + public readonly id: string | null | undefined, + public readonly dependencies: string[] | null | undefined, + public readonly callback: any + ) { } +} + +class AMDModuleImporter { + public static INSTANCE = new AMDModuleImporter(); + + private readonly _isWebWorker = (typeof self === 'object' && self.constructor && self.constructor.name === 'DedicatedWorkerGlobalScope'); + private readonly _isRenderer = typeof document === 'object'; + + private readonly _defineCalls: DefineCall[] = []; + private _initialized = false; + private _amdPolicy: Pick, 'name' | 'createScriptURL'> | undefined; + + constructor() { } + + private _initialize(): void { + if (this._initialized) { + return; + } + this._initialized = true; + + (globalThis).define = (id: any, dependencies: any, callback: any) => { + if (typeof id !== 'string') { + callback = dependencies; + dependencies = id; + id = null; + } + if (typeof dependencies !== 'object' || !Array.isArray(dependencies)) { + callback = dependencies; + dependencies = null; + } + // if (!dependencies) { + // dependencies = ['require', 'exports', 'module']; + // } + this._defineCalls.push(new DefineCall(id, dependencies, callback)); + }; + + (globalThis).define.amd = true; + + if (this._isRenderer) { + this._amdPolicy = window.trustedTypes?.createPolicy('amdLoader', { + createScriptURL(value) { + if (value.startsWith(window.location.origin)) { + return value; + } + if (value.startsWith('vscode-file://vscode-app')) { + return value; + } + throw new Error(`[trusted_script_src] Invalid script url: ${value}`); + } + }); + } else if (this._isWebWorker) { + this._amdPolicy = (globalThis).trustedTypes?.createPolicy('amdLoader', { + createScriptURL(value: string) { + return value; + } + }); + } + } + + public async load(scriptSrc: string): Promise { + this._initialize(); + const defineCall = await (this._isWebWorker ? this._workerLoadScript(scriptSrc) : this._isRenderer ? this._rendererLoadScript(scriptSrc) : this._nodeJSLoadScript(scriptSrc)); + if (!defineCall) { + throw new Error(`Did not receive a define call from script ${scriptSrc}`); + } + // TODO require, exports, module + if (Array.isArray(defineCall.dependencies) && defineCall.dependencies.length > 0) { + throw new Error(`Cannot resolve dependencies for script ${scriptSrc}. The dependencies are: ${defineCall.dependencies.join(', ')}`); + } + if (typeof defineCall.callback === 'function') { + return defineCall.callback([]); + } else { + return defineCall.callback; + } + } + + private _rendererLoadScript(scriptSrc: string): Promise { + return new Promise((resolve, reject) => { + const scriptElement = document.createElement('script'); + scriptElement.setAttribute('async', 'async'); + scriptElement.setAttribute('type', 'text/javascript'); + + const unbind = () => { + scriptElement.removeEventListener('load', loadEventListener); + scriptElement.removeEventListener('error', errorEventListener); + }; + + const loadEventListener = (e: any) => { + unbind(); + resolve(this._defineCalls.pop()); + }; + + const errorEventListener = (e: any) => { + unbind(); + reject(e); + }; + + scriptElement.addEventListener('load', loadEventListener); + scriptElement.addEventListener('error', errorEventListener); + if (this._amdPolicy) { + scriptSrc = this._amdPolicy.createScriptURL(scriptSrc) as any as string; + } + scriptElement.setAttribute('src', scriptSrc); + document.getElementsByTagName('head')[0].appendChild(scriptElement); + }); + } + + private _workerLoadScript(scriptSrc: string): Promise { + return new Promise((resolve, reject) => { + try { + if (this._amdPolicy) { + scriptSrc = this._amdPolicy.createScriptURL(scriptSrc) as any as string; + } + importScripts(scriptSrc); + resolve(this._defineCalls.pop()); + } catch (err) { + reject(err); + } + }); + } + + private async _nodeJSLoadScript(scriptSrc: string): Promise { + try { + const fs = globalThis._VSCODE_NODE_MODULES['fs']; + const vm = globalThis._VSCODE_NODE_MODULES['vm']; + const module = globalThis._VSCODE_NODE_MODULES['module']; + + const filePath = URI.parse(scriptSrc).fsPath; + const content = fs.readFileSync(filePath).toString(); + const scriptSource = module.wrap(content.replace(/^#!.*/, '')); + const script = new vm.Script(scriptSource); + const compileWrapper = script.runInThisContext(); + compileWrapper.apply(); + return this._defineCalls.pop(); + + } catch (error) { + throw error; + } + } +} + +const cache = new Map>(); + +let _paths: Record = {}; +if (typeof globalThis.require === 'object') { + _paths = (>globalThis.require).paths ?? {}; +} + +/** + * Utility for importing an AMD node module. This util supports AMD and ESM contexts and should be used while the ESM adoption + * is on its way. + * + * e.g. pass in `vscode-textmate/release/main.js` + */ +export async function importAMDNodeModule(nodeModuleName: string, pathInsideNodeModule: string, isBuilt?: boolean): Promise { + if (isESM) { + + if (isBuilt === undefined) { + const product = globalThis._VSCODE_PRODUCT_JSON as unknown as IProductConfiguration; + isBuilt = Boolean((product ?? (globalThis).vscode?.context?.configuration()?.product)?.commit); + } + + if (_paths[nodeModuleName]) { + nodeModuleName = _paths[nodeModuleName]; + } + + const nodeModulePath = `${nodeModuleName}/${pathInsideNodeModule}`; + if (cache.has(nodeModulePath)) { + return cache.get(nodeModulePath)!; + } + let scriptSrc: string; + if (/^\w[\w\d+.-]*:\/\//.test(nodeModulePath)) { + // looks like a URL + // bit of a special case for: src/vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker.ts + scriptSrc = nodeModulePath; + } else { + const useASAR = (isBuilt && !platform.isWeb); + const actualNodeModulesPath = (useASAR ? nodeModulesAsarPath : nodeModulesPath); + const resourcePath: AppResourcePath = `${actualNodeModulesPath}/${nodeModulePath}`; + scriptSrc = FileAccess.asBrowserUri(resourcePath).toString(true); + } + const result = AMDModuleImporter.INSTANCE.load(scriptSrc); + cache.set(nodeModulePath, result); + return result; + } else { + return await import(nodeModuleName); + } +} diff --git a/src/vs/base/browser/defaultWorkerFactory.ts b/src/vs/base/browser/defaultWorkerFactory.ts index 4fe7e01e806..9cab3604196 100644 --- a/src/vs/base/browser/defaultWorkerFactory.ts +++ b/src/vs/base/browser/defaultWorkerFactory.ts @@ -3,10 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import { COI } from 'vs/base/common/network'; import { IWorker, IWorkerCallback, IWorkerFactory, logOnceWebWorkerWarning } from 'vs/base/common/worker/simpleWorker'; -const ttPolicy = window.trustedTypes?.createPolicy('defaultWorkerFactory', { createScriptURL: value => value }); +const ttPolicy = createTrustedTypesPolicy('defaultWorkerFactory', { createScriptURL: value => value }); export function createBlobWorker(blobUrl: string, options?: WorkerOptions): Worker { if (!blobUrl.startsWith('blob:')) { diff --git a/src/vs/base/browser/dnd.ts b/src/vs/base/browser/dnd.ts index ead39defe80..da00d44bd8d 100644 --- a/src/vs/base/browser/dnd.ts +++ b/src/vs/base/browser/dnd.ts @@ -71,7 +71,14 @@ export const DataTransfers = { /** * Typically transfer type for copy/paste transfers. */ - TEXT: Mimes.text + TEXT: Mimes.text, + + /** + * Internal type used to pass around text/uri-list data. + * + * This is needed to work around https://bugs.chromium.org/p/chromium/issues/detail?id=239745. + */ + INTERNAL_URI_LIST: 'application/vnd.code.uri-list', }; export function applyDragImage(event: DragEvent, label: string | null, clazz: string, backgroundColor?: string | null, foregroundColor?: string | null): void { diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 4dcb9e94b2e..249a479504b 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -691,10 +691,11 @@ export function getActiveElement(): Element | null { return result; } -export function createStyleSheet(container: HTMLElement = document.getElementsByTagName('head')[0]): HTMLStyleElement { +export function createStyleSheet(container: HTMLElement = document.getElementsByTagName('head')[0], beforeAppend?: (style: HTMLStyleElement) => void): HTMLStyleElement { const style = document.createElement('style'); style.type = 'text/css'; style.media = 'screen'; + beforeAppend?.(style); container.appendChild(style); return style; } @@ -929,6 +930,12 @@ class FocusTracker extends Disposable implements IFocusTracker { } } +/** + * Creates a new `IFocusTracker` instance that tracks focus changes on the given `element` and its descendants. + * + * @param element The `HTMLElement` or `Window` to track focus changes on. + * @returns An `IFocusTracker` instance. + */ export function trackFocus(element: HTMLElement | Window): IFocusTracker { return new FocusTracker(element); } @@ -1040,6 +1047,14 @@ export function join(nodes: Node[], separator: Node | string): Node[] { return result; } +export function setVisibility(visible: boolean, ...elements: HTMLElement[]): void { + if (visible) { + show(...elements); + } else { + hide(...elements); + } +} + export function show(...elements: HTMLElement[]): void { for (const element of elements) { element.style.display = ''; @@ -1850,7 +1865,7 @@ export function h(tag: string, ...args: [] | [attributes: { $: string } & Partia el.appendChild(c); } else if (typeof c === 'string') { el.append(c); - } else { + } else if ('root' in c) { Object.assign(result, c); el.appendChild(c.root); } diff --git a/src/vs/base/browser/indexedDB.ts b/src/vs/base/browser/indexedDB.ts index 5d985a1e571..e04e5c8a62a 100644 --- a/src/vs/base/browser/indexedDB.ts +++ b/src/vs/base/browser/indexedDB.ts @@ -126,6 +126,7 @@ export class IndexedDB { } }; transaction.onerror = () => e(transaction.error); + transaction.onabort = () => e(transaction.error); const request = dbRequestFn(transaction.objectStore(store)); }).finally(() => this.pendingTransactions.splice(this.pendingTransactions.indexOf(transaction), 1)); } diff --git a/src/vs/base/browser/keyboardEvent.ts b/src/vs/base/browser/keyboardEvent.ts index 75943736534..57ba7407845 100644 --- a/src/vs/base/browser/keyboardEvent.ts +++ b/src/vs/base/browser/keyboardEvent.ts @@ -23,19 +23,22 @@ function extractKeyCode(e: KeyboardEvent): KeyCode { if (keyCode === 3) { return KeyCode.PauseBreak; } else if (browser.isFirefox) { - if (keyCode === 59) { - return KeyCode.Semicolon; - } else if (keyCode === 107) { - return KeyCode.Equal; - } else if (keyCode === 109) { - return KeyCode.Minus; - } else if (platform.isMacintosh && keyCode === 224) { - return KeyCode.Meta; + switch (keyCode) { + case 59: return KeyCode.Semicolon; + case 60: + if (platform.isLinux) { return KeyCode.IntlBackslash; } + break; + case 61: return KeyCode.Equal; + // based on: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#numpad_keys + case 107: return KeyCode.NumpadAdd; + case 109: return KeyCode.NumpadSubtract; + case 173: return KeyCode.Minus; + case 224: + if (platform.isMacintosh) { return KeyCode.Meta; } + break; } } else if (browser.isWebKit) { - if (keyCode === 91) { - return KeyCode.Meta; - } else if (platform.isMacintosh && keyCode === 93) { + if (platform.isMacintosh && keyCode === 93) { // the two meta keys in the Mac have different key codes (91 and 93) return KeyCode.Meta; } else if (!platform.isMacintosh && keyCode === 92) { diff --git a/src/vs/base/browser/markdownRenderer.ts b/src/vs/base/browser/markdownRenderer.ts index d1a2e239055..d7f6d0502cf 100644 --- a/src/vs/base/browser/markdownRenderer.ts +++ b/src/vs/base/browser/markdownRenderer.ts @@ -32,7 +32,9 @@ export interface MarkedOptions extends marked.MarkedOptions { export interface MarkdownRenderOptions extends FormattedTextRenderOptions { readonly codeBlockRenderer?: (languageId: string, value: string) => Promise; + readonly codeBlockRendererSync?: (languageId: string, value: string) => HTMLElement; readonly asyncRenderCallback?: () => void; + readonly fillInIncompleteTokens?: boolean; } const defaultMarkedRenderers = Object.freeze({ @@ -149,8 +151,16 @@ export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRende // Will collect [id, renderedElement] tuples const codeBlocks: Promise<[string, HTMLElement]>[] = []; + const syncCodeBlocks: [string, HTMLElement][] = []; - if (options.codeBlockRenderer) { + if (options.codeBlockRendererSync) { + renderer.code = (code, lang) => { + const id = defaultGenerator.nextId(); + const value = options.codeBlockRendererSync!(postProcessCodeBlockLanguageId(lang), code); + syncCodeBlocks.push([id, value]); + return `
${escape(code)}
`; + }; + } else if (options.codeBlockRenderer) { renderer.code = (code, lang) => { const id = defaultGenerator.nextId(); const value = options.codeBlockRenderer!(postProcessCodeBlockLanguageId(lang), code); @@ -228,7 +238,19 @@ export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRende value = markdownEscapeEscapedIcons(value); } - let renderedMarkdown = marked.parse(value, markedOptions); + let renderedMarkdown: string; + if (options.fillInIncompleteTokens) { + // The defaults are applied by parse but not lexer()/parser(), and they need to be present + const opts = { + ...marked.defaults, + ...markedOptions + }; + const tokens = marked.lexer(value, opts); + const newTokens = fillInIncompleteTokens(tokens); + renderedMarkdown = marked.parser(newTokens, opts); + } else { + renderedMarkdown = marked.parse(value, markedOptions); + } // Rewrite theme icons if (markdown.supportThemeIcons) { @@ -292,6 +314,15 @@ export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRende } options.asyncRenderCallback?.(); }); + } else if (syncCodeBlocks.length > 0) { + const renderedElements = new Map(syncCodeBlocks); + const placeholderElements = element.querySelectorAll(`div[data-code]`); + for (const placeholderElement of placeholderElements) { + const renderedElement = renderedElements.get(placeholderElement.dataset['code'] ?? ''); + if (renderedElement) { + DOM.reset(placeholderElement, renderedElement); + } + } } // signal size changes for image tags @@ -347,7 +378,7 @@ function sanitizeRenderedMarkdown( if (e.attrName === 'style' || e.attrName === 'class') { if (element.tagName === 'SPAN') { if (e.attrName === 'style') { - e.keepAttr = /^(color\:#[0-9a-fA-F]+;)?(background-color\:#[0-9a-fA-F]+;)?$/.test(e.attrValue); + e.keepAttr = /^(color\:(#[0-9a-fA-F]+|var\(--vscode(-[a-zA-Z]+)+\));)?(background-color\:(#[0-9a-fA-F]+|var\(--vscode(-[a-zA-Z]+)+\));)?$/.test(e.attrValue); return; } else if (e.attrName === 'class') { e.keepAttr = /^codicon codicon-[a-z\-]+( codicon-modifier-[a-z\-]+)?$/.test(e.attrValue); @@ -518,3 +549,184 @@ const plainTextRenderer = new Lazy(() => { }; return renderer; }); + +function mergeRawTokenText(tokens: marked.Token[]): string { + let mergedTokenText = ''; + tokens.forEach(token => { + mergedTokenText += token.raw; + }); + return mergedTokenText; +} + +function completeSingleLinePattern(token: marked.Tokens.ListItem | marked.Tokens.Paragraph): marked.Token | undefined { + for (const subtoken of token.tokens) { + if (subtoken.type === 'text') { + const lines = subtoken.raw.split('\n'); + const lastLine = lines[lines.length - 1]; + if (lastLine.includes('`')) { + return completeCodespan(token); + } else if (lastLine.includes('**')) { + return completeDoublestar(token); + } else if (lastLine.match(/\*\w/)) { + return completeStar(token); + } else if (lastLine.match(/(^|\s)__\w/)) { + return completeDoubleUnderscore(token); + } else if (lastLine.match(/(^|\s)_\w/)) { + return completeUnderscore(token); + } else if (lastLine.match(/(^|\s)\[.*\]\(\w*/)) { + return completeLinkTarget(token); + } else if (lastLine.match(/(^|\s)\[\w/)) { + return completeLinkText(token); + } + } + } + + return undefined; +} + +// function completeListItemPattern(token: marked.Tokens.List): marked.Tokens.List | undefined { +// // Patch up this one list item +// const lastItem = token.items[token.items.length - 1]; + +// const newList = completeSingleLinePattern(lastItem); +// if (!newList || newList.type !== 'list') { +// // Nothing to fix, or not a pattern we were expecting +// return; +// } + +// // Re-parse the whole list with the last item replaced +// const completeList = marked.lexer(mergeRawTokenText(token.items.slice(0, token.items.length - 1)) + newList.items[0].raw); +// if (completeList.length === 1 && completeList[0].type === 'list') { +// return completeList[0]; +// } + +// // Not a pattern we were expecting +// return undefined; +// } + +export function fillInIncompleteTokens(tokens: marked.TokensList): marked.TokensList { + let i: number; + let newTokens: marked.Token[] | undefined; + for (i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (token.type === 'paragraph' && token.raw.match(/(\n|^)```/)) { + // If the code block was complete, it would be in a type='code' + newTokens = completeCodeBlock(tokens.slice(i)); + break; + } + + if (token.type === 'paragraph' && token.raw.match(/(\n|^)\|/)) { + newTokens = completeTable(tokens.slice(i)); + break; + } + + // if (i === tokens.length - 1 && token.type === 'list') { + // const newListToken = completeListItemPattern(token); + // if (newListToken) { + // newTokens = [newListToken]; + // break; + // } + // } + + if (i === tokens.length - 1 && token.type === 'paragraph') { + // Only operates on a single token, because any newline that follows this should break these patterns + const newToken = completeSingleLinePattern(token); + if (newToken) { + newTokens = [newToken]; + break; + } + } + } + + if (newTokens) { + const newTokensList = [ + ...tokens.slice(0, i), + ...newTokens + ]; + (newTokensList as marked.TokensList).links = tokens.links; + return newTokensList as marked.TokensList; + } + + return tokens; +} + +function completeCodeBlock(tokens: marked.Token[]): marked.Token[] { + const mergedRawText = mergeRawTokenText(tokens); + return marked.lexer(mergedRawText + '\n```'); +} + +function completeCodespan(token: marked.Token): marked.Token { + return completeWithString(token, '`'); +} + +function completeStar(tokens: marked.Token): marked.Token { + return completeWithString(tokens, '*'); +} + +function completeUnderscore(tokens: marked.Token): marked.Token { + return completeWithString(tokens, '_'); +} + +function completeLinkTarget(tokens: marked.Token): marked.Token { + return completeWithString(tokens, ')'); +} + +function completeLinkText(tokens: marked.Token): marked.Token { + return completeWithString(tokens, '](about:blank)'); +} + +function completeDoublestar(tokens: marked.Token): marked.Token { + return completeWithString(tokens, '**'); +} + +function completeDoubleUnderscore(tokens: marked.Token): marked.Token { + return completeWithString(tokens, '__'); +} + +function completeWithString(tokens: marked.Token[] | marked.Token, closingString: string): marked.Token { + const mergedRawText = mergeRawTokenText(Array.isArray(tokens) ? tokens : [tokens]); + + // If it was completed correctly, this should be a single token. + // Expecting either a Paragraph or a List + return marked.lexer(mergedRawText + closingString)[0] as marked.Token; +} + +function completeTable(tokens: marked.Token[]): marked.Token[] | undefined { + const mergedRawText = mergeRawTokenText(tokens); + const lines = mergedRawText.split('\n'); + + let numCols: number | undefined; // The number of line1 col headers + let hasSeparatorRow = false; + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim(); + if (typeof numCols === 'undefined' && line.match(/^\s*\|/)) { + const line1Matches = line.match(/(\|[^\|]+)(?=\||$)/g); + if (line1Matches) { + numCols = line1Matches.length; + } + } else if (typeof numCols === 'number') { + if (line.match(/^\s*\|/)) { + if (i !== lines.length - 1) { + // We got the line1 header row, and the line2 separator row, but there are more lines, and it wasn't parsed as a table! + // That's strange and means that the table is probably malformed in the source, so I won't try to patch it up. + return undefined; + } + + // Got a line2 separator row- partial or complete, doesn't matter, we'll replace it with a correct one + hasSeparatorRow = true; + } else { + // The line after the header row isn't a valid separator row, so the table is malformed, don't fix it up + return undefined; + } + } + } + + if (typeof numCols === 'number' && numCols > 0) { + const prefixText = hasSeparatorRow ? lines.slice(0, -1).join('\n') : mergedRawText; + const line1EndsInPipe = !!prefixText.match(/\|\s*$/); + const newRawText = prefixText + (line1EndsInPipe ? '' : '|') + `\n|${' --- |'.repeat(numCols)}`; + return marked.lexer(newRawText); + } + + return undefined; +} diff --git a/src/vs/base/browser/trustedTypes.ts b/src/vs/base/browser/trustedTypes.ts new file mode 100644 index 00000000000..4503f210481 --- /dev/null +++ b/src/vs/base/browser/trustedTypes.ts @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { onUnexpectedError } from 'vs/base/common/errors'; + +export function createTrustedTypesPolicy( + policyName: string, + policyOptions?: Options, +): undefined | Pick, 'name' | Extract> { + + interface IMonacoEnvironment { + createTrustedTypesPolicy( + policyName: string, + policyOptions?: Options, + ): undefined | Pick, 'name' | Extract>; + } + const monacoEnvironment: IMonacoEnvironment | undefined = (globalThis as any).MonacoEnvironment; + + if (monacoEnvironment?.createTrustedTypesPolicy) { + try { + return monacoEnvironment.createTrustedTypesPolicy(policyName, policyOptions); + } catch (err) { + onUnexpectedError(err); + return undefined; + } + } + try { + return window.trustedTypes?.createPolicy(policyName, policyOptions); + } catch (err) { + onUnexpectedError(err); + return undefined; + } +} diff --git a/src/vs/base/browser/ui/actionbar/actionViewItems.ts b/src/vs/base/browser/ui/actionbar/actionViewItems.ts index a6e7f77a374..9b72e437687 100644 --- a/src/vs/base/browser/ui/actionbar/actionViewItems.ts +++ b/src/vs/base/browser/ui/actionbar/actionViewItems.ts @@ -289,15 +289,8 @@ export class ActionViewItem extends BaseActionViewItem { } if (this.label) { - if (this._action.id === Separator.ID) { - this.label.setAttribute('role', 'presentation'); // A separator is a presentation item - } else { - if (this.options.isMenu) { - this.label.setAttribute('role', 'menuitem'); - } else { - this.label.setAttribute('role', 'button'); - } - } + this.label.setAttribute('role', this.getDefaultAriaRole()); + } if (this.options.label && this.options.keybinding && this.element) { @@ -311,6 +304,18 @@ export class ActionViewItem extends BaseActionViewItem { this.updateChecked(); } + private getDefaultAriaRole(): 'presentation' | 'menuitem' | 'button' { + if (this._action.id === Separator.ID) { + return 'presentation'; // A separator is a presentation item + } else { + if (this.options.isMenu) { + return 'menuitem'; + } else { + return 'button'; + } + } + } + // Only set the tabIndex on the element once it is about to get focused // That way this element wont be a tab stop when it is not needed #106441 override focus(): void { @@ -406,10 +411,14 @@ export class ActionViewItem extends BaseActionViewItem { protected override updateChecked(): void { if (this.label) { - if (this.action.checked) { - this.label.classList.add('checked'); + if (this.action.checked !== undefined) { + this.label.classList.toggle('checked', this.action.checked); + this.label.setAttribute('aria-checked', this.action.checked ? 'true' : 'false'); + this.label.setAttribute('role', 'checkbox'); } else { this.label.classList.remove('checked'); + this.label.setAttribute('aria-checked', ''); + this.label.setAttribute('role', this.getDefaultAriaRole()); } } } diff --git a/src/vs/base/browser/ui/aria/aria.ts b/src/vs/base/browser/ui/aria/aria.ts index 69e31279111..a4da8d78445 100644 --- a/src/vs/base/browser/ui/aria/aria.ts +++ b/src/vs/base/browser/ui/aria/aria.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import * as dom from 'vs/base/browser/dom'; -import { isMacintosh } from 'vs/base/common/platform'; import 'vs/css!./aria'; // Use a max length since we are inserting the whole msg in the DOM and that can cause browsers to freeze for long messages #94233 @@ -69,16 +68,12 @@ export function status(msg: string): void { return; } - if (isMacintosh) { - alert(msg); // VoiceOver does not seem to support status role + if (statusContainer.textContent !== msg) { + dom.clearNode(statusContainer2); + insertMessage(statusContainer, msg); } else { - if (statusContainer.textContent !== msg) { - dom.clearNode(statusContainer2); - insertMessage(statusContainer, msg); - } else { - dom.clearNode(statusContainer); - insertMessage(statusContainer2, msg); - } + dom.clearNode(statusContainer); + insertMessage(statusContainer2, msg); } } diff --git a/src/vs/base/browser/ui/button/button.css b/src/vs/base/browser/ui/button/button.css index f7297b2888a..14a189bd0fc 100644 --- a/src/vs/base/browser/ui/button/button.css +++ b/src/vs/base/browser/ui/button/button.css @@ -132,3 +132,41 @@ margin: 0 0.2em; color: inherit !important; } + +/* default color styles - based on CSS variables */ + +.monaco-button.default-colors, +.monaco-button-dropdown.default-colors > .monaco-button{ + color: var(--vscode-button-foreground); + background-color: var(--vscode-button-background); +} + +.monaco-button.default-colors:hover, +.monaco-button-dropdown.default-colors > .monaco-button:hover { + background-color: var(--vscode-button-hoverBackground); +} + +.monaco-button.default-colors.secondary, +.monaco-button-dropdown.default-colors > .monaco-button.secondary { + color: var(--vscode-button-secondaryForeground); + background-color: var(--vscode-button-secondaryBackground); +} + +.monaco-button.default-colors.secondary:hover, +.monaco-button-dropdown.default-colors > .monaco-button.secondary:hover { + background-color: var(--vscode-button-secondaryHoverBackground); +} + +.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator { + background-color: var(--vscode-button-background); + border-top: 1px solid var(--vscode-button-border); + border-bottom: 1px solid var(--vscode-button-border); +} + +.monaco-button-dropdown.default-colors .monaco-button.secondary + .monaco-button-dropdown-separator { + background-color: var(--vscode-button-secondaryBackground); +} + +.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator > div { + background-color: var(--vscode-button-separator); +} diff --git a/src/vs/base/browser/ui/button/button.ts b/src/vs/base/browser/ui/button/button.ts index 26d7bf26d65..5682eefc506 100644 --- a/src/vs/base/browser/ui/button/button.ts +++ b/src/vs/base/browser/ui/button/button.ts @@ -5,20 +5,23 @@ import { IContextMenuProvider } from 'vs/base/browser/contextmenu'; import { addDisposableListener, EventHelper, EventType, IFocusTracker, reset, trackFocus } from 'vs/base/browser/dom'; +import { sanitize } from 'vs/base/browser/dompurify/dompurify'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { EventType as TouchEventType, Gesture } from 'vs/base/browser/touch'; +import { renderMarkdown, renderStringAsPlaintext } from 'vs/base/browser/markdownRenderer'; +import { Gesture, EventType as TouchEventType } from 'vs/base/browser/touch'; import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels'; import { Action, IAction, IActionRunner } from 'vs/base/common/actions'; import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; import { Color } from 'vs/base/common/color'; -import { Emitter, Event as BaseEvent } from 'vs/base/common/event'; +import { Event as BaseEvent, Emitter } from 'vs/base/common/event'; +import { IMarkdownString, isMarkdownString, markdownStringEqual } from 'vs/base/common/htmlContent'; import { KeyCode } from 'vs/base/common/keyCodes'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { localize } from 'vs/nls'; +import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; +import { ThemeIcon } from 'vs/base/common/themables'; import 'vs/css!./button'; +import { localize } from 'vs/nls'; -export interface IButtonOptions extends IButtonStyles { +export interface IButtonOptions extends Partial { readonly title?: boolean | string; readonly supportIcons?: boolean; readonly supportShortLabel?: boolean; @@ -50,9 +53,11 @@ export const unthemedButtonStyles: IButtonStyles = { export interface IButton extends IDisposable { readonly element: HTMLElement; readonly onDidClick: BaseEvent; - label: string; - icon: ThemeIcon; - enabled: boolean; + + set label(value: string | IMarkdownString); + set icon(value: ThemeIcon); + set enabled(value: boolean); + focus(): void; hasFocus(): boolean; } @@ -65,6 +70,7 @@ export class Button extends Disposable implements IButton { protected options: IButtonOptions; protected _element: HTMLElement; + protected _label: string | IMarkdownString = ''; protected _labelElement: HTMLElement | undefined; protected _labelShortElement: HTMLElement | undefined; @@ -83,6 +89,7 @@ export class Button extends Disposable implements IButton { this._element.tabIndex = 0; this._element.setAttribute('role', 'button'); + this._element.classList.toggle('secondary', !!options.secondary); const background = options.secondary ? options.buttonSecondaryBackground : options.buttonBackground; const foreground = options.secondary ? options.buttonSecondaryForeground : options.buttonForeground; @@ -148,6 +155,11 @@ export class Button extends Disposable implements IButton { this._register(this.focusTracker.onDidBlur(() => { if (this.enabled) { this.updateBackground(false); } })); } + public override dispose(): void { + super.dispose(); + this._element.remove(); + } + private getContentElements(content: string): HTMLElement[] { const elements: HTMLSpanElement[] = []; for (let segment of renderLabelWithIcons(content)) { @@ -187,21 +199,50 @@ export class Button extends Disposable implements IButton { return this._element; } - set label(value: string) { + set label(value: string | IMarkdownString) { + if (this._label === value) { + return; + } + + if (isMarkdownString(this._label) && isMarkdownString(value) && markdownStringEqual(this._label, value)) { + return; + } + this._element.classList.add('monaco-text-button'); const labelElement = this.options.supportShortLabel ? this._labelElement! : this._element; - if (this.options.supportIcons) { - reset(labelElement, ...this.getContentElements(value)); + if (isMarkdownString(value)) { + const rendered = renderMarkdown(value, { inline: true }); + rendered.dispose(); + + // Don't include outer `

` + const root = rendered.element.querySelector('p')?.innerHTML; + if (root) { + // Only allow a very limited set of inline html tags + const sanitized = sanitize(root, { ADD_TAGS: ['b', 'i', 'u', 'code', 'span'], ALLOWED_ATTR: ['class'], RETURN_TRUSTED_TYPE: true }); + labelElement.innerHTML = sanitized as unknown as string; + } else { + reset(labelElement); + } } else { - labelElement.textContent = value; + if (this.options.supportIcons) { + reset(labelElement, ...this.getContentElements(value)); + } else { + labelElement.textContent = value; + } } if (typeof this.options.title === 'string') { this._element.title = this.options.title; } else if (this.options.title) { - this._element.title = value; + this._element.title = renderStringAsPlaintext(value); } + + this._label = value; + } + + get label(): string | IMarkdownString { + return this._label; } set labelShort(value: string) { @@ -246,7 +287,7 @@ export class Button extends Disposable implements IButton { export interface IButtonWithDropdownOptions extends IButtonOptions { readonly contextMenuProvider: IContextMenuProvider; - readonly actions: IAction[]; + readonly actions: readonly IAction[]; readonly actionRunner?: IActionRunner; readonly addPrimaryActionToDropdown?: boolean; } @@ -272,7 +313,7 @@ export class ButtonWithDropdown extends Disposable implements IButton { this.button = this._register(new Button(this.element, options)); this._register(this.button.onDidClick(e => this._onDidClick.fire(e))); - this.action = this._register(new Action('primaryAction', this.button.label, undefined, true, async () => this._onDidClick.fire(undefined))); + this.action = this._register(new Action('primaryAction', renderStringAsPlaintext(this.button.label), undefined, true, async () => this._onDidClick.fire(undefined))); this.separatorContainer = document.createElement('div'); this.separatorContainer.classList.add('monaco-button-dropdown-separator'); @@ -309,6 +350,11 @@ export class ButtonWithDropdown extends Disposable implements IButton { })); } + override dispose() { + super.dispose(); + this.element.remove(); + } + set label(value: string) { this.button.label = value; this.action.label = value; @@ -398,32 +444,42 @@ export class ButtonWithDescription implements IButtonWithDescription { } } -export class ButtonBar extends Disposable { +export class ButtonBar { - private _buttons: IButton[] = []; + private readonly _buttons: IButton[] = []; + private readonly _buttonStore = new DisposableStore(); constructor(private readonly container: HTMLElement) { - super(); + + } + + dispose(): void { + this._buttonStore.dispose(); } get buttons(): IButton[] { return this._buttons; } + clear(): void { + this._buttonStore.clear(); + this._buttons.length = 0; + } + addButton(options: IButtonOptions): IButton { - const button = this._register(new Button(this.container, options)); + const button = this._buttonStore.add(new Button(this.container, options)); this.pushButton(button); return button; } addButtonWithDescription(options: IButtonOptions): IButtonWithDescription { - const button = this._register(new ButtonWithDescription(this.container, options)); + const button = this._buttonStore.add(new ButtonWithDescription(this.container, options)); this.pushButton(button); return button; } addButtonWithDropdown(options: IButtonWithDropdownOptions): IButton { - const button = this._register(new ButtonWithDropdown(this.container, options)); + const button = this._buttonStore.add(new ButtonWithDropdown(this.container, options)); this.pushButton(button); return button; } @@ -432,7 +488,7 @@ export class ButtonBar extends Disposable { this._buttons.push(button); const index = this._buttons.length - 1; - this._register(addDisposableListener(button.element, EventType.KEY_DOWN, e => { + this._buttonStore.add(addDisposableListener(button.element, EventType.KEY_DOWN, e => { const event = new StandardKeyboardEvent(e); let eventHandled = true; diff --git a/src/vs/base/browser/ui/codicons/codicon/codicon.ttf b/src/vs/base/browser/ui/codicons/codicon/codicon.ttf index cc4c7aeaa79..c4a33a4d566 100644 Binary files a/src/vs/base/browser/ui/codicons/codicon/codicon.ttf and b/src/vs/base/browser/ui/codicons/codicon/codicon.ttf differ diff --git a/src/vs/base/browser/ui/dialog/dialog.ts b/src/vs/base/browser/ui/dialog/dialog.ts index 6392ec535e7..0b252ae46e9 100644 --- a/src/vs/base/browser/ui/dialog/dialog.ts +++ b/src/vs/base/browser/ui/dialog/dialog.ts @@ -172,16 +172,16 @@ export class Dialog extends Disposable { } private getIconAriaLabel(): string { - const typeLabel = nls.localize('dialogInfoMessage', 'Info'); + let typeLabel = nls.localize('dialogInfoMessage', 'Info'); switch (this.options.type) { case 'error': - nls.localize('dialogErrorMessage', 'Error'); + typeLabel = nls.localize('dialogErrorMessage', 'Error'); break; case 'warning': - nls.localize('dialogWarningMessage', 'Warning'); + typeLabel = nls.localize('dialogWarningMessage', 'Warning'); break; case 'pending': - nls.localize('dialogPendingMessage', 'In Progress'); + typeLabel = nls.localize('dialogPendingMessage', 'In Progress'); break; case 'none': case 'info': @@ -375,6 +375,8 @@ export class Dialog extends Disposable { this.iconElement.classList.add(...ThemeIcon.asClassNameArray(Codicon.loading), spinModifierClassName); break; case 'none': + this.iconElement.classList.add('no-codicon'); + break; case 'info': case 'question': default: diff --git a/src/vs/base/browser/ui/dropdown/dropdown.ts b/src/vs/base/browser/ui/dropdown/dropdown.ts index 1d445c4c97f..b10785d730e 100644 --- a/src/vs/base/browser/ui/dropdown/dropdown.ts +++ b/src/vs/base/browser/ui/dropdown/dropdown.ts @@ -158,24 +158,17 @@ export interface IDropdownMenuOptions extends IBaseDropdownOptions { readonly actionProvider?: IActionProvider; menuClassName?: string; menuAsChild?: boolean; // scope down for #99448 + readonly skipTelemetry?: boolean; } export class DropdownMenu extends BaseDropdown { - private _contextMenuProvider: IContextMenuProvider; private _menuOptions: IMenuOptions | undefined; private _actions: readonly IAction[] = []; - private actionProvider?: IActionProvider; - private menuClassName: string; - private menuAsChild?: boolean; - constructor(container: HTMLElement, options: IDropdownMenuOptions) { - super(container, options); + constructor(container: HTMLElement, private readonly _options: IDropdownMenuOptions) { + super(container, _options); - this._contextMenuProvider = options.contextMenuProvider; - this.actions = options.actions || []; - this.actionProvider = options.actionProvider; - this.menuClassName = options.menuClassName || ''; - this.menuAsChild = !!options.menuAsChild; + this.actions = _options.actions || []; } set menuOptions(options: IMenuOptions | undefined) { @@ -187,8 +180,8 @@ export class DropdownMenu extends BaseDropdown { } private get actions(): readonly IAction[] { - if (this.actionProvider) { - return this.actionProvider.getActions(); + if (this._options.actionProvider) { + return this._options.actionProvider.getActions(); } return this._actions; @@ -203,17 +196,18 @@ export class DropdownMenu extends BaseDropdown { this.element.classList.add('active'); - this._contextMenuProvider.showContextMenu({ + this._options.contextMenuProvider.showContextMenu({ getAnchor: () => this.element, getActions: () => this.actions, getActionsContext: () => this.menuOptions ? this.menuOptions.context : null, getActionViewItem: (action, options) => this.menuOptions && this.menuOptions.actionViewItemProvider ? this.menuOptions.actionViewItemProvider(action, options) : undefined, getKeyBinding: action => this.menuOptions && this.menuOptions.getKeyBinding ? this.menuOptions.getKeyBinding(action) : undefined, - getMenuClassName: () => this.menuClassName, + getMenuClassName: () => this._options.menuClassName || '', onHide: () => this.onHide(), actionRunner: this.menuOptions ? this.menuOptions.actionRunner : undefined, anchorAlignment: this.menuOptions ? this.menuOptions.anchorAlignment : AnchorAlignment.LEFT, - domForShadowRoot: this.menuAsChild ? this.element : undefined + domForShadowRoot: this._options.menuAsChild ? this.element : undefined, + skipTelemetry: this._options.skipTelemetry }); } diff --git a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts index d2deea3f7f6..20837817eb1 100644 --- a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts +++ b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts @@ -35,6 +35,7 @@ export interface IDropdownMenuActionViewItemOptions extends IBaseActionViewItemO readonly classNames?: string[] | string; readonly anchorAlignmentProvider?: IAnchorAlignmentProvider; readonly menuAsChild?: boolean; + readonly skipTelemetry?: boolean; } export class DropdownMenuActionViewItem extends BaseActionViewItem { @@ -101,7 +102,8 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { labelRenderer: labelRenderer, menuAsChild: this.options.menuAsChild, actions: isActionsArray ? this.menuActionsOrProvider as IAction[] : undefined, - actionProvider: isActionsArray ? undefined : this.menuActionsOrProvider as IActionProvider + actionProvider: isActionsArray ? undefined : this.menuActionsOrProvider as IActionProvider, + skipTelemetry: this.options.skipTelemetry }; this.dropdownMenu = this._register(new DropdownMenu(container, options)); diff --git a/src/vs/base/browser/ui/findinput/findInput.ts b/src/vs/base/browser/ui/findinput/findInput.ts index 39fd66a7251..d663c086cff 100644 --- a/src/vs/base/browser/ui/findinput/findInput.ts +++ b/src/vs/base/browser/ui/findinput/findInput.ts @@ -191,7 +191,7 @@ export class FindInput extends Widget { this.controls = document.createElement('div'); this.controls.className = 'controls'; - this.controls.style.display = this.showCommonFindToggles ? 'block' : 'none'; + this.controls.style.display = this.showCommonFindToggles ? '' : 'none'; if (this.caseSensitive) { this.controls.append(this.caseSensitive.domNode); } @@ -232,6 +232,11 @@ export class FindInput extends Widget { return this.inputBox.onDidChange; } + public layout(style: { collapsedFindWidget: boolean; narrowFindWidget: boolean; reducedFindWidget: boolean }) { + this.inputBox.layout(); + this.updateInputBoxPadding(style.collapsedFindWidget); + } + public enable(): void { this.domNode.classList.remove('disabled'); this.inputBox.enable(); @@ -291,12 +296,20 @@ export class FindInput extends Widget { } if (this.additionalToggles.length > 0) { - this.controls.style.display = 'block'; + this.controls.style.display = ''; } - this.inputBox.paddingRight = - ((this.caseSensitive?.width() ?? 0) + (this.wholeWords?.width() ?? 0) + (this.regex?.width() ?? 0)) - + this.additionalToggles.reduce((r, t) => r + t.width(), 0); + this.updateInputBoxPadding(); + } + + private updateInputBoxPadding(controlsHidden = false) { + if (controlsHidden) { + this.inputBox.paddingRight = 0; + } else { + this.inputBox.paddingRight = + ((this.caseSensitive?.width() ?? 0) + (this.wholeWords?.width() ?? 0) + (this.regex?.width() ?? 0)) + + this.additionalToggles.reduce((r, t) => r + t.width(), 0); + } } public clear(): void { diff --git a/src/vs/base/browser/ui/grid/grid.ts b/src/vs/base/browser/ui/grid/grid.ts index bdb6193c6a8..aee3cad2301 100644 --- a/src/vs/base/browser/ui/grid/grid.ts +++ b/src/vs/base/browser/ui/grid/grid.ts @@ -10,8 +10,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import 'vs/css!./gridview'; import { Box, GridView, IGridViewOptions, IGridViewStyles, IView as IGridViewView, IViewSize, orthogonal, Sizing as GridViewSizing } from './gridview'; import type { GridLocation } from 'vs/base/browser/ui/grid/gridview'; -///@ts-ignore -import type { SplitView } from 'vs/base/browser/ui/splitview/splitview'; +import type { SplitView, AutoSizing as SplitViewAutoSizing } from 'vs/base/browser/ui/splitview/splitview'; export { IViewSize, LayoutPriority, Orientation, orthogonal } from './gridview'; @@ -197,12 +196,14 @@ function getGridLocation(element: HTMLElement): GridLocation { export type DistributeSizing = { type: 'distribute' }; export type SplitSizing = { type: 'split' }; +export type AutoSizing = { type: 'auto' }; export type InvisibleSizing = { type: 'invisible'; cachedVisibleSize: number }; -export type Sizing = DistributeSizing | SplitSizing | InvisibleSizing; +export type Sizing = DistributeSizing | SplitSizing | AutoSizing | InvisibleSizing; export namespace Sizing { export const Distribute: DistributeSizing = { type: 'distribute' }; export const Split: SplitSizing = { type: 'split' }; + export const Auto: AutoSizing = { type: 'auto' }; export function Invisible(cachedVisibleSize: number): InvisibleSizing { return { type: 'invisible', cachedVisibleSize }; } } @@ -403,6 +404,9 @@ export class Grid extends Disposable { viewSize = GridViewSizing.Split(index); } else if (size.type === 'distribute') { viewSize = GridViewSizing.Distribute; + } else if (size.type === 'auto') { + const [, index] = tail(referenceLocation); + viewSize = GridViewSizing.Auto(index); } else { viewSize = size; } @@ -445,7 +449,16 @@ export class Grid extends Disposable { } const location = this.getViewLocation(view); - this.gridview.removeView(location, (sizing && sizing.type === 'distribute') ? GridViewSizing.Distribute : undefined); + + let gridViewSizing: DistributeSizing | SplitViewAutoSizing | undefined; + + if (sizing?.type === 'distribute') { + gridViewSizing = GridViewSizing.Distribute; + } else if (sizing?.type === 'auto') { + gridViewSizing = GridViewSizing.Auto(0); + } + + this.gridview.removeView(location, gridViewSizing); this.views.delete(view); } diff --git a/src/vs/base/browser/ui/grid/gridview.ts b/src/vs/base/browser/ui/grid/gridview.ts index a9b546ca5c7..c89c6a7a063 100644 --- a/src/vs/base/browser/ui/grid/gridview.ts +++ b/src/vs/base/browser/ui/grid/gridview.ts @@ -5,7 +5,7 @@ import { $ } from 'vs/base/browser/dom'; import { IBoundarySashes, Orientation, Sash } from 'vs/base/browser/ui/sash/sash'; -import { DistributeSizing, ISplitViewStyles, IView as ISplitView, LayoutPriority, Sizing, SplitView } from 'vs/base/browser/ui/splitview/splitview'; +import { DistributeSizing, ISplitViewStyles, IView as ISplitView, LayoutPriority, Sizing, AutoSizing, SplitView } from 'vs/base/browser/ui/splitview/splitview'; import { equals as arrayEquals, tail2 as tail } from 'vs/base/common/arrays'; import { Color } from 'vs/base/common/color'; import { Emitter, Event, Relay } from 'vs/base/common/event'; @@ -356,6 +356,13 @@ class BranchNode implements ISplitView, IDisposable { private _boundarySashes: IRelativeBoundarySashes = {}; get boundarySashes(): IRelativeBoundarySashes { return this._boundarySashes; } set boundarySashes(boundarySashes: IRelativeBoundarySashes) { + if (this._boundarySashes.start === boundarySashes.start + && this._boundarySashes.end === boundarySashes.end + && this._boundarySashes.orthogonalStart === boundarySashes.orthogonalStart + && this._boundarySashes.orthogonalEnd === boundarySashes.orthogonalEnd) { + return; + } + this._boundarySashes = boundarySashes; this.splitview.orthogonalStartSash = boundarySashes.orthogonalStart; @@ -498,67 +505,22 @@ class BranchNode implements ISplitView, IDisposable { index = validateIndex(index, this.children.length); this.splitview.addView(node, size, index, skipLayout); - this._addChild(node, index); - this.onDidChildrenChange(); - } - - private _addChild(node: Node, index: number): void { - const first = index === 0; - const last = index === this.children.length; this.children.splice(index, 0, node); - node.boundarySashes = { - start: this.boundarySashes.orthogonalStart, - end: this.boundarySashes.orthogonalEnd, - orthogonalStart: first ? this.boundarySashes.start : this.splitview.sashes[index - 1], - orthogonalEnd: last ? this.boundarySashes.end : this.splitview.sashes[index], - }; - - if (!first) { - this.children[index - 1].boundarySashes = { - ...this.children[index - 1].boundarySashes, - orthogonalEnd: this.splitview.sashes[index - 1] - }; - } - - if (!last) { - this.children[index + 1].boundarySashes = { - ...this.children[index + 1].boundarySashes, - orthogonalStart: this.splitview.sashes[index] - }; - } + this.updateBoundarySashes(); + this.onDidChildrenChange(); } removeChild(index: number, sizing?: Sizing): void { index = validateIndex(index, this.children.length); this.splitview.removeView(index, sizing); - this._removeChild(index); + this.children.splice(index, 1); + + this.updateBoundarySashes(); this.onDidChildrenChange(); } - private _removeChild(index: number): Node { - const first = index === 0; - const last = index === this.children.length - 1; - const [child] = this.children.splice(index, 1); - - if (!first) { - this.children[index - 1].boundarySashes = { - ...this.children[index - 1].boundarySashes, - orthogonalEnd: this.splitview.sashes[index - 1] - }; - } - - if (!last) { // [0,1,2,3] (2) => [0,1,3] - this.children[index].boundarySashes = { - ...this.children[index].boundarySashes, - orthogonalStart: this.splitview.sashes[Math.max(index - 1, 0)] - }; - } - - return child; - } - moveChild(from: number, to: number): void { from = validateIndex(from, this.children.length); to = validateIndex(to, this.children.length); @@ -568,14 +530,13 @@ class BranchNode implements ISplitView, IDisposable { } if (from < to) { - to--; + to -= 1; } this.splitview.moveView(from, to); + this.children.splice(to, 0, this.children.splice(from, 1)[0]); - const child = this._removeChild(from); - this._addChild(child, to); - + this.updateBoundarySashes(); this.onDidChildrenChange(); } @@ -649,6 +610,17 @@ class BranchNode implements ISplitView, IDisposable { return this.splitview.getViewCachedVisibleSize(index); } + private updateBoundarySashes(): void { + for (let i = 0; i < this.children.length; i++) { + this.children[i].boundarySashes = { + start: this.boundarySashes.orthogonalStart, + end: this.boundarySashes.orthogonalEnd, + orthogonalStart: i === 0 ? this.boundarySashes.start : this.splitview.sashes[i - 1], + orthogonalEnd: i === this.children.length - 1 ? this.boundarySashes.end : this.splitview.sashes[i], + }; + } + } + private onDidChildrenChange(): void { this.updateChildrenEvents(); this._onDidChange.fire(undefined); @@ -1227,7 +1199,7 @@ export class GridView implements IDisposable { * @param location The {@link GridLocation location} of the {@link IView view}. * @param sizing Whether to distribute other {@link IView view}'s sizes. */ - removeView(location: GridLocation, sizing?: DistributeSizing): IView { + removeView(location: GridLocation, sizing?: DistributeSizing | AutoSizing): IView { this.disposable2x2.dispose(); this.disposable2x2 = Disposable.None; diff --git a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts index ef5cf2ce7a3..c2b41545d79 100644 --- a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts +++ b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts @@ -13,13 +13,13 @@ import * as objects from 'vs/base/common/objects'; export interface IHighlight { start: number; end: number; - extraClasses?: string[]; + readonly extraClasses?: readonly string[]; } -export interface IOptions { +export interface IHighlightedLabelOptions { /** - * Whether + * Whether the label supports rendering icons. */ readonly supportIcons?: boolean; } @@ -42,7 +42,7 @@ export class HighlightedLabel { * * @param container The parent container to append to. */ - constructor(container: HTMLElement, options?: IOptions) { + constructor(container: HTMLElement, options?: IHighlightedLabelOptions) { this.supportIcons = options?.supportIcons ?? false; this.domNode = dom.append(container, dom.$('span.monaco-highlighted-label')); } diff --git a/src/vs/base/browser/ui/hover/hover.css b/src/vs/base/browser/ui/hover/hover.css index 5cd824a3d76..0ce58199354 100644 --- a/src/vs/base/browser/ui/hover/hover.css +++ b/src/vs/base/browser/ui/hover/hover.css @@ -7,10 +7,9 @@ cursor: default; position: absolute; overflow: hidden; - z-index: 50; user-select: text; -webkit-user-select: text; - box-sizing: initial; + box-sizing: border-box; animation: fadein 100ms linear; line-height: 1.5em; } @@ -114,6 +113,11 @@ line-height: 22px; } +.monaco-hover .hover-row.status-bar .info { + font-style: italic; + padding: 0px 8px; +} + .monaco-hover .hover-row.status-bar .actions { display: flex; padding: 0px 8px; diff --git a/src/vs/base/browser/ui/inputbox/inputBox.ts b/src/vs/base/browser/ui/inputbox/inputBox.ts index 54ab048af47..1dcc1751ff8 100644 --- a/src/vs/base/browser/ui/inputbox/inputBox.ts +++ b/src/vs/base/browser/ui/inputbox/inputBox.ts @@ -16,6 +16,7 @@ import { Widget } from 'vs/base/browser/ui/widget'; import { IAction } from 'vs/base/common/actions'; import { Emitter, Event } from 'vs/base/common/event'; import { HistoryNavigator } from 'vs/base/common/history'; +import { equals } from 'vs/base/common/objects'; import { ScrollbarVisibility } from 'vs/base/common/scrollable'; import 'vs/css!./inputBox'; import * as nls from 'vs/nls'; @@ -368,6 +369,11 @@ export class InputBox extends Widget { } public showMessage(message: IMessage, force?: boolean): void { + if (this.state === 'open' && equals(this.message, message)) { + // Already showing + return; + } + this.message = message; this.element.classList.remove('idle'); @@ -705,10 +711,8 @@ export class HistoryInputBox extends InputBox implements IHistoryNavigationWidge next = next === this.value ? this.getNextValue() : next; } - if (next) { - this.value = next; - aria.status(this.value); - } + this.value = next ?? ''; + aria.status(this.value ? this.value : nls.localize('clearedInput', "Cleared Input")); } public showPreviousValue(): void { @@ -755,6 +759,6 @@ export class HistoryInputBox extends InputBox implements IHistoryNavigationWidge } private getNextValue(): string | null { - return this.history.next() || this.history.last(); + return this.history.next(); } } diff --git a/src/vs/base/browser/ui/keybindingLabel/keybindingLabel.ts b/src/vs/base/browser/ui/keybindingLabel/keybindingLabel.ts index b809c1ce478..431e33048cd 100644 --- a/src/vs/base/browser/ui/keybindingLabel/keybindingLabel.ts +++ b/src/vs/base/browser/ui/keybindingLabel/keybindingLabel.ts @@ -93,13 +93,13 @@ export class KeybindingLabel { this.clear(); if (this.keybinding) { - const [firstChord, secondChord] = this.keybinding.getChords();// TODO@chords - if (firstChord) { - this.renderChord(this.domNode, firstChord, this.matches ? this.matches.firstPart : null); + const chords = this.keybinding.getChords(); + if (chords[0]) { + this.renderChord(this.domNode, chords[0], this.matches ? this.matches.firstPart : null); } - if (secondChord) { + for (let i = 1; i < chords.length; i++) { dom.append(this.domNode, $('span.monaco-keybinding-key-chord-separator', undefined, ' ')); - this.renderChord(this.domNode, secondChord, this.matches ? this.matches.chordPart : null); + this.renderChord(this.domNode, chords[i], this.matches ? this.matches.chordPart : null); } const title = (this.options.disableTitle ?? false) ? undefined : this.keybinding.getAriaLabel() || undefined; if (title !== undefined) { diff --git a/src/vs/base/browser/ui/list/list.ts b/src/vs/base/browser/ui/list/list.ts index 29ebb8c14bc..f776ba7ecb2 100644 --- a/src/vs/base/browser/ui/list/list.ts +++ b/src/vs/base/browser/ui/list/list.ts @@ -24,40 +24,44 @@ export interface IListRenderer { } export interface IListEvent { - elements: T[]; - indexes: number[]; - browserEvent?: UIEvent; + readonly elements: readonly T[]; + readonly indexes: readonly number[]; + readonly browserEvent?: UIEvent; +} + +export interface IListBrowserMouseEvent extends MouseEvent { + isHandledByList?: boolean; } export interface IListMouseEvent { - browserEvent: MouseEvent; - element: T | undefined; - index: number | undefined; + readonly browserEvent: IListBrowserMouseEvent; + readonly element: T | undefined; + readonly index: number | undefined; } export interface IListTouchEvent { - browserEvent: TouchEvent; - element: T | undefined; - index: number | undefined; + readonly browserEvent: TouchEvent; + readonly element: T | undefined; + readonly index: number | undefined; } export interface IListGestureEvent { - browserEvent: GestureEvent; - element: T | undefined; - index: number | undefined; + readonly browserEvent: GestureEvent; + readonly element: T | undefined; + readonly index: number | undefined; } export interface IListDragEvent { - browserEvent: DragEvent; - element: T | undefined; - index: number | undefined; + readonly browserEvent: DragEvent; + readonly element: T | undefined; + readonly index: number | undefined; } export interface IListContextMenuEvent { - browserEvent: UIEvent; - element: T | undefined; - index: number | undefined; - anchor: HTMLElement | { x: number; y: number }; + readonly browserEvent: UIEvent; + readonly element: T | undefined; + readonly index: number | undefined; + readonly anchor: HTMLElement | { readonly x: number; readonly y: number }; } export interface IIdentityProvider { diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts index abb5957922f..b68a8b413da 100644 --- a/src/vs/base/browser/ui/list/listView.ts +++ b/src/vs/base/browser/ui/list/listView.ts @@ -219,7 +219,9 @@ export interface IListView extends ISpliceable, IDisposable { readonly scrollableElementDomNode: HTMLElement; readonly length: number; readonly contentHeight: number; + readonly contentWidth: number; readonly onDidChangeContentHeight: Event; + readonly onDidChangeContentWidth: Event; readonly renderHeight: number; readonly scrollHeight: number; readonly firstVisibleIndex: number; @@ -310,8 +312,11 @@ export class ListView implements IListView { private readonly disposables: DisposableStore = new DisposableStore(); private readonly _onDidChangeContentHeight = new Emitter(); + private readonly _onDidChangeContentWidth = new Emitter(); readonly onDidChangeContentHeight: Event = Event.latch(this._onDidChangeContentHeight.event, undefined, this.disposables); + readonly onDidChangeContentWidth: Event = Event.latch(this._onDidChangeContentWidth.event, undefined, this.disposables); get contentHeight(): number { return this.rangeMap.size; } + get contentWidth(): number { return this.scrollWidth ?? 0; } get onDidScroll(): Event { return this.scrollableElement.onScroll; } get onWillScroll(): Event { return this.scrollableElement.onWillScroll; } @@ -689,6 +694,7 @@ export class ListView implements IListView { this.scrollWidth = scrollWidth; this.scrollableElement.setScrollDimensions({ scrollWidth: scrollWidth === 0 ? 0 : (scrollWidth + 10) }); + this._onDidChangeContentWidth.fire(this.scrollWidth); } updateWidth(index: number): void { @@ -702,6 +708,7 @@ export class ListView implements IListView { if (typeof item.width !== 'undefined' && item.width > this.scrollWidth) { this.scrollWidth = item.width; this.scrollableElement.setScrollDimensions({ scrollWidth: this.scrollWidth + 10 }); + this._onDidChangeContentWidth.fire(this.scrollWidth); } } @@ -1023,7 +1030,7 @@ export class ListView implements IListView { @memoize get onMouseOver(): Event> { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mouseover')).event, e => this.toMouseEvent(e), this.disposables); } @memoize get onMouseMove(): Event> { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mousemove')).event, e => this.toMouseEvent(e), this.disposables); } @memoize get onMouseOut(): Event> { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mouseout')).event, e => this.toMouseEvent(e), this.disposables); } - @memoize get onContextMenu(): Event | IListGestureEvent> { return Event.any(Event.map(this.disposables.add(new DomEmitter(this.domNode, 'contextmenu')).event, e => this.toMouseEvent(e), this.disposables), Event.map(this.disposables.add(new DomEmitter(this.domNode, TouchEventType.Contextmenu)).event as Event, e => this.toGestureEvent(e), this.disposables)); } + @memoize get onContextMenu(): Event | IListGestureEvent> { return Event.any | IListGestureEvent>(Event.map(this.disposables.add(new DomEmitter(this.domNode, 'contextmenu')).event, e => this.toMouseEvent(e), this.disposables), Event.map(this.disposables.add(new DomEmitter(this.domNode, TouchEventType.Contextmenu)).event as Event, e => this.toGestureEvent(e), this.disposables)); } @memoize get onTouchStart(): Event> { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'touchstart')).event, e => this.toTouchEvent(e), this.disposables); } @memoize get onTap(): Event> { return Event.map(this.disposables.add(new DomEmitter(this.rowsContainer, TouchEventType.Tap)).event, e => this.toGestureEvent(e as GestureEvent), this.disposables); } diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index c8ff425cbb9..ae34c857e71 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -129,11 +129,22 @@ class Trait implements ISpliceable, IDisposable { const diff = elements.length - deleteCount; const end = start + deleteCount; - const sortedIndexes = [ - ...this.sortedIndexes.filter(i => i < start), - ...elements.map((hasTrait, i) => hasTrait ? i + start : -1).filter(i => i !== -1), - ...this.sortedIndexes.filter(i => i >= end).map(i => i + diff) - ]; + const sortedIndexes: number[] = []; + let i = 0; + + while (i < this.sortedIndexes.length && this.sortedIndexes[i] < start) { + sortedIndexes.push(this.sortedIndexes[i++]); + } + + for (let j = 0; j < elements.length; j++) { + if (elements[j]) { + sortedIndexes.push(j + start); + } + } + + while (i < this.sortedIndexes.length && this.sortedIndexes[i] >= end) { + sortedIndexes.push(this.sortedIndexes[i++] + diff); + } const length = this.length + diff; @@ -226,12 +237,16 @@ class TraitSpliceable implements ISpliceable { splice(start: number, deleteCount: number, elements: T[]): void { if (!this.identityProvider) { - return this.trait.splice(start, deleteCount, elements.map(() => false)); + return this.trait.splice(start, deleteCount, new Array(elements.length).fill(false)); } const pastElementsWithTrait = this.trait.get().map(i => this.identityProvider!.getId(this.view.element(i)).toString()); - const elementsWithTrait = elements.map(e => pastElementsWithTrait.indexOf(this.identityProvider!.getId(e).toString()) > -1); + if (pastElementsWithTrait.length === 0) { + return this.trait.splice(start, deleteCount, new Array(elements.length).fill(false)); + } + const pastElementsWithTraitSet = new Set(pastElementsWithTrait); + const elementsWithTrait = elements.map(e => pastElementsWithTraitSet.has(this.identityProvider!.getId(e).toString())); this.trait.splice(start, deleteCount, elementsWithTrait); } } @@ -622,7 +637,7 @@ export class MouseController implements IDisposable { this.disposables.add(Gesture.addTarget(list.getHTMLElement())); } - Event.any(list.onMouseClick, list.onMouseMiddleClick, list.onTap)(this.onViewPointer, this, this.disposables); + Event.any | IListGestureEvent>(list.onMouseClick, list.onMouseMiddleClick, list.onTap)(this.onViewPointer, this, this.disposables); } updateOptions(optionsUpdate: IListOptionsUpdate): void { @@ -683,6 +698,11 @@ export class MouseController implements IDisposable { return; } + if (e.browserEvent.isHandledByList) { + return; + } + + e.browserEvent.isHandledByList = true; const focus = e.index; if (typeof focus === 'undefined') { @@ -719,6 +739,11 @@ export class MouseController implements IDisposable { return; } + if (e.browserEvent.isHandledByList) { + return; + } + + e.browserEvent.isHandledByList = true; const focus = this.list.getFocus(); this.list.setSelection(focus, e.browserEvent); } @@ -1496,10 +1521,18 @@ export class List implements ISpliceable, IDisposable { return this.view.contentHeight; } + get contentWidth(): number { + return this.view.contentWidth; + } + get onDidChangeContentHeight(): Event { return this.view.onDidChangeContentHeight; } + get onDidChangeContentWidth(): Event { + return this.view.onDidChangeContentWidth; + } + get scrollTop(): number { return this.view.getScrollTop(); } diff --git a/src/vs/base/browser/ui/sash/sash.css b/src/vs/base/browser/ui/sash/sash.css index 0026c3c3b1c..fdcbc26609e 100644 --- a/src/vs/base/browser/ui/sash/sash.css +++ b/src/vs/base/browser/ui/sash/sash.css @@ -107,10 +107,13 @@ position: absolute; width: 100%; height: 100%; - transition: background-color 0.1s ease-out; background: transparent; } +.monaco-workbench:not(.reduce-motion) .monaco-sash:before { + transition: background-color 0.1s ease-out; +} + .monaco-sash.hover:before, .monaco-sash.active:before { background: var(--vscode-sash-hoverBorder); diff --git a/src/vs/base/browser/ui/sash/sash.ts b/src/vs/base/browser/ui/sash/sash.ts index b20c2185169..b82b4508211 100644 --- a/src/vs/base/browser/ui/sash/sash.ts +++ b/src/vs/base/browser/ui/sash/sash.ts @@ -328,6 +328,10 @@ export class Sash extends Disposable { * The start of a vertical sash is its top-most position. */ set orthogonalStartSash(sash: Sash | undefined) { + if (this._orthogonalStartSash === sash) { + return; + } + this.orthogonalStartDragHandleDisposables.clear(); this.orthogonalStartSashDisposables.clear(); @@ -362,6 +366,10 @@ export class Sash extends Disposable { */ set orthogonalEndSash(sash: Sash | undefined) { + if (this._orthogonalEndSash === sash) { + return; + } + this.orthogonalEndDragHandleDisposables.clear(); this.orthogonalEndSashDisposables.clear(); diff --git a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts index 87d4ed4d9fa..5cf11ce7854 100644 --- a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +++ b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts @@ -373,6 +373,9 @@ export abstract class AbstractScrollableElement extends Widget { } private _onMouseWheel(e: StandardWheelEvent): void { + if (e.browserEvent?.defaultPrevented) { + return; + } const classifier = MouseWheelClassifier.INSTANCE; if (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED) { diff --git a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts index f895c79d5f2..898d768e870 100644 --- a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts +++ b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts @@ -742,7 +742,7 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi return label; }, getWidgetAriaLabel: () => localize({ key: 'selectBox', comment: ['Behave like native select dropdown element.'] }, "Select Box"), - getRole: () => 'option', + getRole: () => isMacintosh ? '' : 'option', getWidgetRole: () => 'listbox' } }); diff --git a/src/vs/base/browser/ui/splitview/splitview.css b/src/vs/base/browser/ui/splitview/splitview.css index 6f6b302e5b3..3af3e9062d2 100644 --- a/src/vs/base/browser/ui/splitview/splitview.css +++ b/src/vs/base/browser/ui/splitview/splitview.css @@ -54,7 +54,7 @@ position: absolute; top: 0; left: 0; - z-index: 20; + z-index: 5; pointer-events: none; background-color: var(--separator-border); } diff --git a/src/vs/base/browser/ui/splitview/splitview.ts b/src/vs/base/browser/ui/splitview/splitview.ts index 531d030f6eb..a4edaa6a3d9 100644 --- a/src/vs/base/browser/ui/splitview/splitview.ts +++ b/src/vs/base/browser/ui/splitview/splitview.ts @@ -343,6 +343,12 @@ export type DistributeSizing = { type: 'distribute' }; */ export type SplitSizing = { type: 'split'; index: number }; +/** + * When adding a view, use DistributeSizing when all pre-existing views are + * distributed evenly, otherwise use SplitSizing. + */ +export type AutoSizing = { type: 'auto'; index: number }; + /** * When adding or removing views, assume the view is invisible. */ @@ -352,7 +358,7 @@ export type InvisibleSizing = { type: 'invisible'; cachedVisibleSize: number }; * When adding or removing views, the sizing provides fine grained * control over how other views get resized. */ -export type Sizing = DistributeSizing | SplitSizing | InvisibleSizing; +export type Sizing = DistributeSizing | SplitSizing | AutoSizing | InvisibleSizing; export namespace Sizing { @@ -368,6 +374,12 @@ export namespace Sizing { */ export function Split(index: number): SplitSizing { return { type: 'split', index }; } + /** + * When adding a view, use DistributeSizing when all pre-existing views are + * distributed evenly, otherwise use SplitSizing. + */ + export function Auto(index: number): AutoSizing { return { type: 'auto', index }; } + /** * When adding or removing views, assume the view is invisible. */ @@ -646,6 +658,14 @@ export class SplitView extends Disposable { throw new Error('Index out of bounds'); } + if (sizing?.type === 'auto') { + if (this.areViewsDistributed()) { + sizing = { type: 'distribute' }; + } else { + sizing = undefined; + } + } + // Remove view const viewItem = this.viewItems.splice(index, 1)[0]; const view = viewItem.dispose(); @@ -1054,12 +1074,22 @@ export class SplitView extends Disposable { if (typeof size === 'number') { viewSize = size; - } else if (size.type === 'split') { - viewSize = this.getViewSize(size.index) / 2; - } else if (size.type === 'invisible') { - viewSize = { cachedVisibleSize: size.cachedVisibleSize }; } else { - viewSize = view.minimumSize; + if (size.type === 'auto') { + if (this.areViewsDistributed()) { + size = { type: 'distribute' }; + } else { + size = { type: 'split', index: size.index }; + } + } + + if (size.type === 'split') { + viewSize = this.getViewSize(size.index) / 2; + } else if (size.type === 'invisible') { + viewSize = { cachedVisibleSize: size.cachedVisibleSize }; + } else { + viewSize = view.minimumSize; + } } const item = this.orientation === Orientation.VERTICAL @@ -1382,6 +1412,21 @@ export class SplitView extends Disposable { return undefined; } + private areViewsDistributed() { + let min = undefined, max = undefined; + + for (const view of this.viewItems) { + min = min === undefined ? view.size : Math.min(min, view.size); + max = max === undefined ? view.size : Math.max(max, view.size); + + if (max - min > 2) { + return false; + } + } + + return true; + } + override dispose(): void { this.sashDragState?.disposable.dispose(); diff --git a/src/vs/base/browser/ui/toolbar/toolbar.ts b/src/vs/base/browser/ui/toolbar/toolbar.ts index a4e2ca94183..85936d72ce6 100644 --- a/src/vs/base/browser/ui/toolbar/toolbar.ts +++ b/src/vs/base/browser/ui/toolbar/toolbar.ts @@ -30,6 +30,7 @@ export interface IToolBarOptions { renderDropdownAsChildElement?: boolean; moreIcon?: ThemeIcon; allowContextMenu?: boolean; + skipTelemetry?: boolean; } /** @@ -78,7 +79,8 @@ export class ToolBar extends Disposable { keybindingProvider: this.options.getKeyBinding, classNames: ThemeIcon.asClassNameArray(options.moreIcon ?? Codicon.toolBarMore), anchorAlignmentProvider: this.options.anchorAlignmentProvider, - menuAsChild: !!this.options.renderDropdownAsChildElement + menuAsChild: !!this.options.renderDropdownAsChildElement, + skipTelemetry: this.options.skipTelemetry } ); this.toggleMenuActionViewItem.setActionContext(this.actionBar.context); @@ -106,7 +108,8 @@ export class ToolBar extends Disposable { keybindingProvider: this.options.getKeyBinding, classNames: action.class, anchorAlignmentProvider: this.options.anchorAlignmentProvider, - menuAsChild: !!this.options.renderDropdownAsChildElement + menuAsChild: !!this.options.renderDropdownAsChildElement, + skipTelemetry: this.options.skipTelemetry } ); result.setActionContext(this.actionBar.context); diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts index f9c3b0d5125..3591193bab9 100644 --- a/src/vs/base/browser/ui/tree/abstractTree.ts +++ b/src/vs/base/browser/ui/tree/abstractTree.ts @@ -1318,7 +1318,7 @@ class Trait { } else { const insertedNode = insertedNodesMap.get(id); - if (insertedNode) { + if (insertedNode && insertedNode.visible) { nodes.push(insertedNode); } } @@ -1359,6 +1359,10 @@ class TreeNodeListMouseController extends MouseController< return; } + if (e.browserEvent.isHandledByList) { + return; + } + const node = e.element; if (!node) { @@ -1396,6 +1400,8 @@ class TreeNodeListMouseController extends MouseController< this.tree.toggleCollapsed(location, recursive); if (expandOnlyOnTwistieClick && onTwistie) { + // Do not set this before calling a handler on the super class, because it will reject it as handled + e.browserEvent.isHandledByList = true; return; } } @@ -1410,6 +1416,10 @@ class TreeNodeListMouseController extends MouseController< return; } + if (e.browserEvent.isHandledByList) { + return; + } + super.onDoubleClick(e); } } @@ -1696,10 +1706,18 @@ export abstract class AbstractTree implements IDisposable return this.view.contentHeight; } + get contentWidth(): number { + return this.view.contentWidth; + } + get onDidChangeContentHeight(): Event { return this.view.onDidChangeContentHeight; } + get onDidChangeContentWidth(): Event { + return this.view.onDidChangeContentWidth; + } + get scrollTop(): number { return this.view.scrollTop; } @@ -1749,6 +1767,10 @@ export abstract class AbstractTree implements IDisposable this.view.ariaLabel = value; } + get selectionSize() { + return this.selection.getNodes().length; + } + domFocus(): void { this.view.domFocus(); } diff --git a/src/vs/base/browser/ui/tree/asyncDataTree.ts b/src/vs/base/browser/ui/tree/asyncDataTree.ts index 7c2564c5056..3b4d493144b 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, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeElement, 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, 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'; @@ -438,10 +438,18 @@ export class AsyncDataTree implements IDisposable return this.tree.contentHeight; } + get contentWidth(): number { + return this.tree.contentWidth; + } + get onDidChangeContentHeight(): Event { return this.tree.onDidChangeContentHeight; } + get onDidChangeContentWidth(): Event { + return this.tree.onDidChangeContentWidth; + } + get scrollTop(): number { return this.tree.scrollTop; } @@ -988,7 +996,7 @@ export class AsyncDataTree implements IDisposable this._onDidRender.fire(); } - protected asTreeElement(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): ITreeElement> { + protected asTreeElement(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): IObjectTreeElement> { if (node.stale) { return { element: node, diff --git a/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts b/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts index 8ea45f5e3e5..c7a6f5e0634 100644 --- a/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts +++ b/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts @@ -6,12 +6,13 @@ import { IIdentityProvider } from 'vs/base/browser/ui/list/list'; import { IIndexTreeModelSpliceOptions, IList } from 'vs/base/browser/ui/tree/indexTreeModel'; import { IObjectTreeModel, IObjectTreeModelOptions, IObjectTreeModelSetChildrenOptions, ObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel'; -import { ICollapseStateChangeEvent, ITreeElement, ITreeModel, ITreeModelSpliceEvent, ITreeNode, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from 'vs/base/browser/ui/tree/tree'; +import { ICollapseStateChangeEvent, IObjectTreeElement, ITreeModel, ITreeModelSpliceEvent, ITreeNode, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from 'vs/base/browser/ui/tree/tree'; +import { equals } from 'vs/base/common/arrays'; import { Event } from 'vs/base/common/event'; import { Iterable } from 'vs/base/common/iterator'; // Exported only for test reasons, do not use directly -export interface ICompressedTreeElement extends ITreeElement { +export interface ICompressedTreeElement extends IObjectTreeElement { readonly children?: Iterable>; readonly incompressible?: boolean; } @@ -22,7 +23,7 @@ export interface ICompressedTreeNode { readonly incompressible: boolean; } -function noCompress(element: ICompressedTreeElement): ITreeElement> { +function noCompress(element: ICompressedTreeElement): ICompressedTreeElement> { const elements = [element.element]; const incompressible = element.incompressible || false; @@ -35,7 +36,7 @@ function noCompress(element: ICompressedTreeElement): ITreeElement(element: ICompressedTreeElement): ITreeElement> { +export function compress(element: ICompressedTreeElement): ICompressedTreeElement> { const elements = [element.element]; const incompressible = element.incompressible || false; @@ -65,7 +66,7 @@ export function compress(element: ICompressedTreeElement): ITreeElement(element: ITreeElement>, index = 0): ICompressedTreeElement { +function _decompress(element: ICompressedTreeElement>, index = 0): ICompressedTreeElement { let children: Iterable>; if (index < element.element.elements.length - 1) { @@ -93,7 +94,7 @@ function _decompress(element: ITreeElement>, index = 0 } // Exported only for test reasons, do not use directly -export function decompress(element: ITreeElement>): ICompressedTreeElement { +export function decompress(element: ICompressedTreeElement>): ICompressedTreeElement { return _decompress(element, 0); } @@ -146,7 +147,7 @@ export class CompressedObjectTreeModel, TFilterData e children: Iterable> = Iterable.empty(), options: IObjectTreeModelSetChildrenOptions, ): void { - // Diffs must be deem, since the compression can affect nested elements. + // Diffs must be deep, since the compression can affect nested elements. // @see https://github.com/microsoft/vscode/pull/114237#issuecomment-759425034 const diffIdentityProvider = options.diffIdentityProvider && wrapIdentityProvider(options.diffIdentityProvider); @@ -170,6 +171,16 @@ export class CompressedObjectTreeModel, TFilterData e const splicedElement = splice(decompressedElement, element, children); const recompressedElement = (this.enabled ? compress : noCompress)(splicedElement); + // If the recompressed node is identical to the original, just set its children. + // Saves work and churn diffing the parent element. + const elementComparator = options.diffIdentityProvider + ? ((a: T, b: T) => options.diffIdentityProvider!.getId(a) === options.diffIdentityProvider!.getId(b)) + : undefined; + if (equals(recompressedElement.element.elements, node.element.elements, elementComparator)) { + this._setChildren(compressedNode, recompressedElement.children || Iterable.empty(), { diffIdentityProvider, diffDepth: 1 }); + return; + } + const parentChildren = parent.children .map(child => child === node ? recompressedElement : child); @@ -205,7 +216,7 @@ export class CompressedObjectTreeModel, TFilterData e private _setChildren( node: ICompressedTreeNode | null, - children: Iterable>>, + children: Iterable>>, options: IIndexTreeModelSpliceOptions, TFilterData>, ): void { const insertedElements = new Set(); diff --git a/src/vs/base/browser/ui/tree/media/tree.css b/src/vs/base/browser/ui/tree/media/tree.css index 9256e1e8077..a83a0a84e31 100644 --- a/src/vs/base/browser/ui/tree/media/tree.css +++ b/src/vs/base/browser/ui/tree/media/tree.css @@ -32,7 +32,7 @@ border-left: 1px solid transparent; } -.monaco-tl-indent > .indent-guide { +.monaco-workbench:not(.reduce-motion) .monaco-tl-indent > .indent-guide { transition: border-color 0.1s linear; } @@ -76,10 +76,16 @@ top: 0; display: flex; padding: 3px; - transition: top 0.3s; max-width: 200px; z-index: 100; margin: 0 6px; + border: 1px solid var(--vscode-widget-border); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.monaco-workbench:not(.reduce-motion) .monaco-tree-type-filter { + transition: top 0.3s; } .monaco-tree-type-filter.disabled { diff --git a/src/vs/base/browser/ui/tree/objectTree.ts b/src/vs/base/browser/ui/tree/objectTree.ts index 86aca57ac40..5880b0bb25d 100644 --- a/src/vs/base/browser/ui/tree/objectTree.ts +++ b/src/vs/base/browser/ui/tree/objectTree.ts @@ -8,7 +8,7 @@ import { AbstractTree, IAbstractTreeOptions, IAbstractTreeOptionsUpdate } from ' import { CompressibleObjectTreeModel, ElementMapper, ICompressedTreeElement, ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; import { IList } from 'vs/base/browser/ui/tree/indexTreeModel'; import { IObjectTreeModel, ObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel'; -import { ICollapseStateChangeEvent, ITreeElement, ITreeModel, ITreeNode, ITreeRenderer, ITreeSorter } from 'vs/base/browser/ui/tree/tree'; +import { ICollapseStateChangeEvent, IObjectTreeElement, ITreeModel, ITreeNode, ITreeRenderer, ITreeSorter } from 'vs/base/browser/ui/tree/tree'; import { memoize } from 'vs/base/common/decorators'; import { Event } from 'vs/base/common/event'; import { Iterable } from 'vs/base/common/iterator'; @@ -52,7 +52,7 @@ export class ObjectTree, TFilterData = void> extends super(user, container, delegate, renderers, options as IObjectTreeOptions); } - setChildren(element: T | null, children: Iterable> = Iterable.empty(), options?: IObjectTreeSetChildrenOptions): void { + setChildren(element: T | null, children: Iterable> = Iterable.empty(), options?: IObjectTreeSetChildrenOptions): void { this.model.setChildren(element, children, options); } diff --git a/src/vs/base/browser/ui/tree/objectTreeModel.ts b/src/vs/base/browser/ui/tree/objectTreeModel.ts index fe44f7e91c7..919f14b2b3a 100644 --- a/src/vs/base/browser/ui/tree/objectTreeModel.ts +++ b/src/vs/base/browser/ui/tree/objectTreeModel.ts @@ -5,14 +5,14 @@ import { IIdentityProvider } from 'vs/base/browser/ui/list/list'; import { IIndexTreeModelOptions, IIndexTreeModelSpliceOptions, IList, IndexTreeModel } from 'vs/base/browser/ui/tree/indexTreeModel'; -import { ICollapseStateChangeEvent, ITreeElement, ITreeModel, ITreeModelSpliceEvent, ITreeNode, ITreeSorter, TreeError } from 'vs/base/browser/ui/tree/tree'; +import { ICollapseStateChangeEvent, IObjectTreeElement, ITreeElement, ITreeModel, ITreeModelSpliceEvent, ITreeNode, ITreeSorter, ObjectTreeElementCollapseState, TreeError } from 'vs/base/browser/ui/tree/tree'; import { Event } from 'vs/base/common/event'; import { Iterable } from 'vs/base/common/iterator'; export type ITreeNodeCallback = (node: ITreeNode) => void; export interface IObjectTreeModel, TFilterData extends NonNullable = void> extends ITreeModel { - setChildren(element: T | null, children: Iterable> | undefined, options?: IObjectTreeModelSetChildrenOptions): void; + setChildren(element: T | null, children: Iterable> | undefined, options?: IObjectTreeModelSetChildrenOptions): void; resort(element?: T | null, recursive?: boolean): void; updateElementHeight(element: T, height: number | undefined): void; } @@ -64,7 +64,7 @@ export class ObjectTreeModel, TFilterData extends Non setChildren( element: T | null, - children: Iterable> = Iterable.empty(), + children: Iterable> = Iterable.empty(), options: IObjectTreeModelSetChildrenOptions = {}, ): void { const location = this.getElementLocation(element); @@ -127,7 +127,7 @@ export class ObjectTreeModel, TFilterData extends Non ); } - private preserveCollapseState(elements: Iterable> = Iterable.empty()): Iterable> { + private preserveCollapseState(elements: Iterable> = Iterable.empty()): Iterable> { if (this.sorter) { elements = [...elements].sort(this.sorter.compare.bind(this.sorter)); } @@ -141,14 +141,37 @@ export class ObjectTreeModel, TFilterData extends Non } if (!node) { + let collapsed: boolean | undefined; + + if (typeof treeElement.collapsed === 'undefined') { + collapsed = undefined; + } else if (treeElement.collapsed === ObjectTreeElementCollapseState.Collapsed || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrCollapsed) { + collapsed = true; + } else if (treeElement.collapsed === ObjectTreeElementCollapseState.Expanded || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrExpanded) { + collapsed = false; + } else { + collapsed = Boolean(treeElement.collapsed); + } + return { ...treeElement, - children: this.preserveCollapseState(treeElement.children) + children: this.preserveCollapseState(treeElement.children), + collapsed }; } const collapsible = typeof treeElement.collapsible === 'boolean' ? treeElement.collapsible : node.collapsible; - const collapsed = typeof treeElement.collapsed !== 'undefined' ? treeElement.collapsed : node.collapsed; + let collapsed: boolean | undefined; + + if (typeof treeElement.collapsed === 'undefined' || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrCollapsed || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrExpanded) { + collapsed = node.collapsed; + } else if (treeElement.collapsed === ObjectTreeElementCollapseState.Collapsed) { + collapsed = true; + } else if (treeElement.collapsed === ObjectTreeElementCollapseState.Expanded) { + collapsed = false; + } else { + collapsed = Boolean(treeElement.collapsed); + } return { ...treeElement, diff --git a/src/vs/base/browser/ui/tree/tree.ts b/src/vs/base/browser/ui/tree/tree.ts index f29091c104a..94e8650f2de 100644 --- a/src/vs/base/browser/ui/tree/tree.ts +++ b/src/vs/base/browser/ui/tree/tree.ts @@ -78,6 +78,28 @@ export interface ITreeElement { readonly collapsed?: boolean; } +export enum ObjectTreeElementCollapseState { + Expanded, + Collapsed, + + /** + * If the element is already in the tree, preserve its current state. Else, expand it. + */ + PreserveOrExpanded, + + /** + * If the element is already in the tree, preserve its current state. Else, collapse it. + */ + PreserveOrCollapsed, +} + +export interface IObjectTreeElement { + readonly element: T; + readonly children?: Iterable>; + readonly collapsible?: boolean; + readonly collapsed?: boolean | ObjectTreeElementCollapseState; +} + export interface ITreeNode { readonly element: T; readonly children: ITreeNode[]; @@ -134,8 +156,8 @@ export interface ITreeRenderer exte } export interface ITreeEvent { - elements: T[]; - browserEvent?: UIEvent; + readonly elements: readonly T[]; + readonly browserEvent?: UIEvent; } export enum TreeMouseEventTarget { @@ -146,15 +168,15 @@ export enum TreeMouseEventTarget { } export interface ITreeMouseEvent { - browserEvent: MouseEvent; - element: T | null; - target: TreeMouseEventTarget; + readonly browserEvent: MouseEvent; + readonly element: T | null; + readonly target: TreeMouseEventTarget; } export interface ITreeContextMenuEvent { - browserEvent: UIEvent; - element: T | null; - anchor: HTMLElement | { x: number; y: number }; + readonly browserEvent: UIEvent; + readonly element: T | null; + readonly anchor: HTMLElement | { readonly x: number; readonly y: number }; } export interface ITreeNavigator { diff --git a/src/vs/base/common/actions.ts b/src/vs/base/common/actions.ts index b1d13e8210d..1780b30b4ff 100644 --- a/src/vs/base/common/actions.ts +++ b/src/vs/base/common/actions.ts @@ -16,6 +16,7 @@ export interface ITelemetryData { export type WorkbenchActionExecutedClassification = { id: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The identifier of the action that was run.' }; from: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The name of the component the action was run from.' }; + detail?: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Optional details about how the action was run, e.g which keybinding was used.' }; owner: 'bpasero'; comment: 'Provides insight into actions that are executed within the workbench.'; }; @@ -23,6 +24,7 @@ export type WorkbenchActionExecutedClassification = { export type WorkbenchActionExecutedEvent = { id: string; from: string; + detail?: string; }; export interface IAction { @@ -32,7 +34,7 @@ export interface IAction { class: string | undefined; enabled: boolean; checked?: boolean; - run(event?: unknown): unknown; + run(...args: unknown[]): unknown; } export interface IActionRunner extends IDisposable { diff --git a/src/vs/base/common/amd.ts b/src/vs/base/common/amd.ts index fdbdb2e1030..2ee86a98646 100644 --- a/src/vs/base/common/amd.ts +++ b/src/vs/base/common/amd.ts @@ -3,6 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// ESM-comment-begin +export const isESM = false; +// ESM-comment-end +// ESM-uncomment-begin +// export const isESM = true; +// ESM-uncomment-end + export abstract class LoaderStats { abstract get amdLoad(): [string, number][]; abstract get amdInvoke(): [string, number][]; @@ -41,7 +48,7 @@ export abstract class LoaderStats { } let stats: readonly LoaderEvent[] = []; - if (typeof require.getStats === 'function') { + if (typeof require === 'function' && typeof require.getStats === 'function') { stats = require.getStats().slice(0).sort((a, b) => a.timestamp - b.timestamp); } diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 2c189c4f788..e00f3d59653 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -94,18 +94,21 @@ export function raceCancellationError(promise: Promise, token: Cancellatio } /** - * Returns as soon as one of the promises is resolved and cancels remaining promises + * Returns as soon as one of the promises resolves or rejects and cancels remaining promises */ export async function raceCancellablePromises(cancellablePromises: CancelablePromise[]): Promise { let resolvedPromiseIndex = -1; const promises = cancellablePromises.map((promise, index) => promise.then(result => { resolvedPromiseIndex = index; return result; })); - const result = await Promise.race(promises); - cancellablePromises.forEach((cancellablePromise, index) => { - if (index !== resolvedPromiseIndex) { - cancellablePromise.cancel(); - } - }); - return result; + try { + const result = await Promise.race(promises); + return result; + } finally { + cancellablePromises.forEach((cancellablePromise, index) => { + if (index !== resolvedPromiseIndex) { + cancellablePromise.cancel(); + } + }); + } } export function raceTimeout(promise: Promise, timeout: number, onTimeout?: () => void): Promise { @@ -163,12 +166,14 @@ export interface ITask { * throttler.queue(deliver); * } */ -export class Throttler { +export class Throttler implements IDisposable { private activePromise: Promise | null; private queuedPromise: Promise | null; private queuedPromiseFactory: ITask> | null; + private isDisposed = false; + constructor() { this.activePromise = null; this.queuedPromise = null; @@ -176,6 +181,10 @@ export class Throttler { } queue(promiseFactory: ITask>): Promise { + if (this.isDisposed) { + throw new Error('Throttler is disposed'); + } + if (this.activePromise) { this.queuedPromiseFactory = promiseFactory; @@ -183,6 +192,10 @@ export class Throttler { const onComplete = () => { this.queuedPromise = null; + if (this.isDisposed) { + return; + } + const result = this.queue(this.queuedPromiseFactory!); this.queuedPromiseFactory = null; @@ -211,6 +224,10 @@ export class Throttler { }); }); } + + dispose(): void { + this.isDisposed = true; + } } export class Sequencer { @@ -400,6 +417,7 @@ export class ThrottledDelayer { dispose(): void { this.delayer.dispose(); + this.throttler.dispose(); } } @@ -1403,6 +1421,11 @@ export class IntervalCounter { export type ValueCallback = (value: T | Promise) => void; +const enum DeferredOutcome { + Resolved, + Rejected +} + /** * Creates a promise whose resolution or rejection can be controlled imperatively. */ @@ -1410,19 +1433,22 @@ export class DeferredPromise { private completeCallback!: ValueCallback; private errorCallback!: (err: unknown) => void; - private rejected = false; - private resolved = false; + private outcome?: { outcome: DeferredOutcome.Rejected; value: any } | { outcome: DeferredOutcome.Resolved; value: T }; public get isRejected() { - return this.rejected; + return this.outcome?.outcome === DeferredOutcome.Rejected; } public get isResolved() { - return this.resolved; + return this.outcome?.outcome === DeferredOutcome.Resolved; } public get isSettled() { - return this.rejected || this.resolved; + return !!this.outcome; + } + + public get value() { + return this.outcome?.outcome === DeferredOutcome.Resolved ? this.outcome?.value : undefined; } public readonly p: Promise; @@ -1437,7 +1463,7 @@ export class DeferredPromise { public complete(value: T) { return new Promise(resolve => { this.completeCallback(value); - this.resolved = true; + this.outcome = { outcome: DeferredOutcome.Resolved, value }; resolve(); }); } @@ -1445,17 +1471,13 @@ export class DeferredPromise { public error(err: unknown) { return new Promise(resolve => { this.errorCallback(err); - this.rejected = true; + this.outcome = { outcome: DeferredOutcome.Rejected, value: err }; resolve(); }); } public cancel() { - new Promise(resolve => { - this.errorCallback(new CancellationError()); - this.rejected = true; - resolve(); - }); + return this.error(new CancellationError()); } } diff --git a/src/vs/base/common/buffer.ts b/src/vs/base/common/buffer.ts index 765a788327b..ff61eb5c9e2 100644 --- a/src/vs/base/common/buffer.ts +++ b/src/vs/base/common/buffer.ts @@ -3,11 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { Lazy } from 'vs/base/common/lazy'; import * as streams from 'vs/base/common/stream'; declare const Buffer: any; const hasBuffer = (typeof Buffer !== 'undefined'); +const indexOfTable = new Lazy(() => new Uint8Array(256)); let textEncoder: TextEncoder | null; let textDecoder: TextDecoder | null; @@ -169,6 +171,52 @@ export class VSBuffer { writeUInt8(value: number, offset: number): void { writeUInt8(this.buffer, value, offset); } + + indexOf(subarray: VSBuffer | Uint8Array) { + const needle = subarray instanceof VSBuffer ? subarray.buffer : subarray; + const needleLen = needle.byteLength; + const haystack = this.buffer; + const haystackLen = haystack.byteLength; + + if (needleLen === 0) { + return 0; + } + + if (needleLen === 1) { + return haystack.indexOf(needle[0]); + } + + if (needleLen > haystackLen) { + return -1; + } + + // find index of the subarray using boyer-moore-horspool algorithm + const table = indexOfTable.value; + table.fill(needle.length); + for (let i = 0; i < needle.length; i++) { + table[needle[i]] = needle.length - i - 1; + } + + let i = needle.length - 1; + let j = i; + let result = -1; + while (i < haystackLen) { + if (haystack[i] === needle[j]) { + if (j === 0) { + result = i; + break; + } + + i--; + j--; + } else { + i += Math.max(needle.length - j, table[haystack[i]]); + j = needle.length - 1; + } + } + + return result; + } } export function readUInt16LE(source: Uint8Array, offset: number): number { diff --git a/src/vs/base/common/codicons.ts b/src/vs/base/common/codicons.ts index 1580521e4b2..f205af33b4c 100644 --- a/src/vs/base/common/codicons.ts +++ b/src/vs/base/common/codicons.ts @@ -560,6 +560,9 @@ export const Codicon = { gitPullRequestNewChanges: register('git-pull-request-new-changes', 0xec0c), searchFuzzy: register('search-fuzzy', 0xec0d), commentDraft: register('comment-draft', 0xec0e), + send: register('send', 0xec0f), + sparkle: register('sparkle', 0xec10), + insert: register('insert', 0xec11), // derived icons, that could become separate icons diff --git a/src/vs/base/common/collections.ts b/src/vs/base/common/collections.ts index d8ee92f757e..95def40789d 100644 --- a/src/vs/base/common/collections.ts +++ b/src/vs/base/common/collections.ts @@ -101,4 +101,12 @@ export class SetMap { values.forEach(fn); } + + get(key: K): ReadonlySet { + const values = this.map.get(key); + if (!values) { + return new Set(); + } + return new Set(values); + } } diff --git a/src/vs/base/common/console.ts b/src/vs/base/common/console.ts index 54bfadefbae..6527f72f5e1 100644 --- a/src/vs/base/common/console.ts +++ b/src/vs/base/common/console.ts @@ -125,7 +125,7 @@ export function log(entry: IRemoteConsoleLog, label: string): void { consoleArgs = [`%c[${label}]%`, color('blue'), ...args]; } - // Stack: add to args unless already aded + // Stack: add to args unless already added if (topFrame && !isOneStringArg) { consoleArgs.push(topFrame); } diff --git a/src/vs/base/common/dataTransfer.ts b/src/vs/base/common/dataTransfer.ts index 7dd6d220b18..bed42389897 100644 --- a/src/vs/base/common/dataTransfer.ts +++ b/src/vs/base/common/dataTransfer.ts @@ -4,17 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import { distinct } from 'vs/base/common/arrays'; +import { Iterable } from 'vs/base/common/iterator'; import { URI } from 'vs/base/common/uri'; import { generateUuid } from 'vs/base/common/uuid'; -interface IDataTransferFile { +export interface IDataTransferFile { + readonly id: string; readonly name: string; readonly uri?: URI; data(): Promise; } export interface IDataTransferItem { - readonly id: string; asString(): Thenable; asFile(): IDataTransferFile | undefined; value: any; @@ -22,7 +23,6 @@ export interface IDataTransferItem { export function createStringDataTransferItem(stringOrPromise: string | Promise): IDataTransferItem { return { - id: generateUuid(), asString: async () => stringOrPromise, asFile: () => undefined, value: typeof stringOrPromise === 'string' ? stringOrPromise : undefined, @@ -30,30 +30,77 @@ export function createStringDataTransferItem(stringOrPromise: string | Promise Promise): IDataTransferItem { + const file = { id: generateUuid(), name: fileName, uri, data }; return { - id: generateUuid(), asString: async () => '', - asFile: () => ({ name: fileName, uri, data }), + asFile: () => file, value: undefined, }; } -export class VSDataTransfer { +export interface IReadonlyVSDataTransfer extends Iterable { + /** + * Get the total number of entries in this data transfer. + */ + get size(): number; + + /** + * Check if this data transfer contains data for `mimeType`. + * + * This uses exact matching and does not support wildcards. + */ + has(mimeType: string): boolean; + /** + * Check if this data transfer contains data matching `pattern`. + * + * This allows matching for wildcards, such as `image/*`. + * + * Use the special `files` mime type to match any file in the data transfer. + */ + matches(pattern: string): boolean; + + /** + * Retrieve the first entry for `mimeType`. + * + * Note that if you want to find all entries for a given mime type, use {@link IReadonlyVSDataTransfer.entries} instead. + */ + get(mimeType: string): IDataTransferItem | undefined; +} + +export class VSDataTransfer implements IReadonlyVSDataTransfer { private readonly _entries = new Map(); public get size(): number { - return this._entries.size; + let size = 0; + for (const _ of this._entries) { + size++; + } + return size; } public has(mimeType: string): boolean { return this._entries.has(this.toKey(mimeType)); } + public matches(pattern: string): boolean { + const mimes = [...this._entries.keys()]; + if (Iterable.some(this, ([_, item]) => item.asFile())) { + mimes.push('files'); + } + + return matchesMimeType_normalized(normalizeMimeType(pattern), mimes); + } + public get(mimeType: string): IDataTransferItem | undefined { return this._entries.get(this.toKey(mimeType))?.[0]; } + /** + * Add a new entry to this data transfer. + * + * This does not replace existing entries for `mimeType`. + */ public append(mimeType: string, value: IDataTransferItem): void { const existing = this._entries.get(mimeType); if (existing) { @@ -63,37 +110,75 @@ export class VSDataTransfer { } } + /** + * Set the entry for a given mime type. + * + * This replaces all existing entries for `mimeType`. + */ public replace(mimeType: string, value: IDataTransferItem): void { this._entries.set(this.toKey(mimeType), [value]); } + /** + * Remove all entries for `mimeType`. + */ public delete(mimeType: string) { this._entries.delete(this.toKey(mimeType)); } - public *entries(): Iterable<[string, IDataTransferItem]> { - for (const [mine, items] of this._entries.entries()) { + /** + * Iterate over all `[mime, item]` pairs in this data transfer. + * + * There may be multiple entries for each mime type. + */ + public *[Symbol.iterator](): IterableIterator { + for (const [mine, items] of this._entries) { for (const item of items) { yield [mine, item]; } } } - public values(): Iterable { - return Array.from(this._entries.values()).flat(); - } - - public forEach(f: (value: IDataTransferItem, key: string) => void) { - for (const [mime, item] of this.entries()) { - f(item, mime); - } - } - private toKey(mimeType: string): string { - return mimeType.toLowerCase(); + return normalizeMimeType(mimeType); } } +function normalizeMimeType(mimeType: string): string { + return mimeType.toLowerCase(); +} + +export function matchesMimeType(pattern: string, mimeTypes: readonly string[]): boolean { + return matchesMimeType_normalized( + normalizeMimeType(pattern), + mimeTypes.map(normalizeMimeType)); +} + +function matchesMimeType_normalized(normalizedPattern: string, normalizedMimeTypes: readonly string[]): boolean { + // Anything wildcard + if (normalizedPattern === '*/*') { + return normalizedMimeTypes.length > 0; + } + + // Exact match + if (normalizedMimeTypes.includes(normalizedPattern)) { + return true; + } + + // Wildcard, such as `image/*` + const wildcard = normalizedPattern.match(/^([a-z]+)\/([a-z]+|\*)$/i); + if (!wildcard) { + return false; + } + + const [_, type, subtype] = wildcard; + if (subtype === '*') { + return normalizedMimeTypes.some(mime => mime.startsWith(type + '/')); + } + + return false; +} + export const UriList = Object.freeze({ // http://amundsen.com/hypermedia/urilist/ diff --git a/src/vs/base/common/date.ts b/src/vs/base/common/date.ts index 033d3287373..0865e813249 100644 --- a/src/vs/base/common/date.ts +++ b/src/vs/base/common/date.ts @@ -13,7 +13,7 @@ const month = day * 30; const year = day * 365; /** - * Create a localized of the time between now and the specified date. + * Create a localized difference of the time between now and the specified date. * @param date The date to generate the difference from. * @param appendAgoLabel Whether to append the " ago" to the end. * @param useFullTimeWords Whether to use full words (eg. seconds) instead of diff --git a/src/vs/base/common/errorMessage.ts b/src/vs/base/common/errorMessage.ts index eca37716066..f16616da430 100644 --- a/src/vs/base/common/errorMessage.ts +++ b/src/vs/base/common/errorMessage.ts @@ -26,6 +26,11 @@ function stackToString(stack: string[] | string | undefined): string | undefined function detectSystemErrorMessage(exception: any): string { + // Custom node.js error from us + if (exception.code === 'ERR_UNC_HOST_NOT_ALLOWED') { + return `${exception.message}. Please update the 'security.allowedUNCHosts' setting if you want to allow this host.`; + } + // See https://nodejs.org/api/errors.html#errors_class_system_error if (typeof exception.code === 'string' && typeof exception.errno === 'number' && typeof exception.syscall === 'string') { return nls.localize('nodeExceptionMessage', "A system error occurred ({0})", exception.message); diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index a498e634641..a558a0b06d8 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -74,6 +74,7 @@ export class ErrorHandler { export const errorHandler = new ErrorHandler(); +/** @skipMangle */ export function setUnexpectedErrorHandler(newUnexpectedErrorHandler: (e: any) => void): void { errorHandler.setUnexpectedErrorHandler(newUnexpectedErrorHandler); } @@ -290,6 +291,6 @@ export class BugIndicatingError extends Error { // Because we know for sure only buggy code throws this, // we definitely want to break here and fix the bug. // eslint-disable-next-line no-debugger - debugger; + // debugger; } } diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index f9623407a02..c4f9b728259 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -6,7 +6,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { onUnexpectedError } from 'vs/base/common/errors'; import { once as onceFn } from 'vs/base/common/functional'; -import { combinedDisposable, Disposable, DisposableStore, IDisposable, SafeDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { combinedDisposable, Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { LinkedList } from 'vs/base/common/linkedList'; import { IObservable, IObserver } from 'vs/base/common/observable'; import { StopWatch } from 'vs/base/common/stopwatch'; @@ -119,18 +119,31 @@ export namespace Event { } /** + * Wraps an event in another event that performs some function on the event object before firing. + * * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned * event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the * returned event causes this utility to leak a listener on the original event. + * + * @param event The event source for the new event. + * @param each The function to perform on the event object. + * @param disposable A disposable store to add the new EventEmitter to. */ export function forEach(event: Event, each: (i: I) => void, disposable?: DisposableStore): Event { return snapshot((listener, thisArgs = null, disposables?) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables), disposable); } /** + * Wraps an event in another event that fires only when some condition is met. + * * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned * event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the * returned event causes this utility to leak a listener on the original event. + * + * @param event The event source for the new event. + * @param filter The filter function that defines the condition. The event will fire for the object if this function + * returns true. + * @param disposable A disposable store to add the new EventEmitter to. */ export function filter(event: Event, filter: (e: T | U) => e is T, disposable?: DisposableStore): Event; export function filter(event: Event, filter: (e: T) => boolean, disposable?: DisposableStore): Event; @@ -147,8 +160,7 @@ export namespace Event { } /** - * Given a collection of events, returns a single event which emits - * whenever any of the provided events emit. + * Given a collection of events, returns a single event which emits whenever any of the provided events emit. */ export function any(...events: Event[]): Event; export function any(...events: Event[]): Event; @@ -293,9 +305,22 @@ export namespace Event { } /** + * Filters an event such that some condition is _not_ met more than once in a row, effectively ensuring duplicate + * event objects from different sources do not fire the same event object. + * * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned * event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the * returned event causes this utility to leak a listener on the original event. + * + * @param event The event source for the new event. + * @param equals The equality condition. + * @param disposable A disposable store to add the new EventEmitter to. + * + * @example + * ``` + * // Fire only one time when a single window is opened or focused + * Event.latch(Event.any(onDidOpenWindow, onDidFocusWindow)) + * ``` */ export function latch(event: Event, equals: (a: T, b: T) => boolean = (a, b) => a === b, disposable?: DisposableStore): Event { let firstCall = true; @@ -334,9 +359,24 @@ export namespace Event { } /** + * Buffers an event until it has a listener attached. + * * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned * event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the * returned event causes this utility to leak a listener on the original event. + * + * @param event The event source for the new event. + * @param flushAfterTimeout Determines whether to flush the buffer after a timeout immediately or after a + * `setTimeout` when the first event listener is added. + * @param _buffer Internal: A source event array used for tests. + * + * @example + * ``` + * // Start accumulating events, when the first listener is attached, flush + * // the event after a timeout such that multiple listeners attached before + * // the timeout would receive the event + * this.onInstallExtension = Event.buffer(service.onInstallExtension, true); + * ``` */ export function buffer(event: Event, flushAfterTimeout = false, _buffer: T[] = []): Event { let buffer: T[] | null = _buffer.slice(); @@ -403,38 +443,48 @@ export namespace Event { constructor(readonly event: Event) { } + /** @see {@link Event.map} */ map(fn: (i: T) => O): IChainableEvent { return new ChainableEvent(map(this.event, fn, this.disposables)); } + /** @see {@link Event.forEach} */ forEach(fn: (i: T) => void): IChainableEvent { return new ChainableEvent(forEach(this.event, fn, this.disposables)); } + /** @see {@link Event.filter} */ filter(fn: (e: T) => boolean): IChainableEvent; filter(fn: (e: T | R) => e is R): IChainableEvent; filter(fn: (e: T) => boolean): IChainableEvent { return new ChainableEvent(filter(this.event, fn, this.disposables)); } + /** @see {@link Event.reduce} */ reduce(merge: (last: R | undefined, event: T) => R, initial?: R): IChainableEvent { return new ChainableEvent(reduce(this.event, merge, initial, this.disposables)); } + /** @see {@link Event.reduce} */ latch(): IChainableEvent { return new ChainableEvent(latch(this.event, undefined, this.disposables)); } + /** @see {@link Event.debounce} */ debounce(merge: (last: T | undefined, event: T) => T, delay?: number, leading?: boolean, flushOnListenerRemove?: boolean, leakWarningThreshold?: number): IChainableEvent; debounce(merge: (last: R | undefined, event: T) => R, delay?: number, leading?: boolean, flushOnListenerRemove?: boolean, leakWarningThreshold?: number): IChainableEvent; debounce(merge: (last: R | undefined, event: T) => R, delay: number = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold?: number): IChainableEvent { return new ChainableEvent(debounce(this.event, merge, delay, leading, flushOnListenerRemove, leakWarningThreshold, this.disposables)); } + /** + * Attach a listener to the event. + */ on(listener: (e: T) => any, thisArgs: any, disposables: IDisposable[] | DisposableStore) { return this.event(listener, thisArgs, disposables); } + /** @see {@link Event.once} */ once(listener: (e: T) => any, thisArgs: any, disposables: IDisposable[]) { return once(this.event)(listener, thisArgs, disposables); } @@ -444,6 +494,24 @@ export namespace Event { } } + /** + * Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style. + * + * @example + * ``` + * // Normal + * const onEnterPressNormal = Event.filter( + * Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)), + * e.keyCode === KeyCode.Enter + * ).event; + * + * // Using chain + * const onEnterPressChain = Event.chain(onKeyPress.event) + * .map(e => new StandardKeyboardEvent(e)) + * .filter(e => e.keyCode === KeyCode.Enter) + * .event; + * ``` + */ export function chain(event: Event): IChainableEvent { return new ChainableEvent(event); } @@ -453,6 +521,9 @@ export namespace Event { removeListener(event: string | symbol, listener: Function): unknown; } + /** + * Creates an {@link Event} from a node event emitter. + */ export function fromNodeEventEmitter(emitter: NodeEventEmitter, eventName: string, map: (...args: any[]) => T = id => id): Event { const fn = (...args: any[]) => result.fire(map(...args)); const onFirstListenerAdd = () => emitter.on(eventName, fn); @@ -467,6 +538,9 @@ export namespace Event { removeEventListener(event: string | symbol, listener: Function): void; } + /** + * Creates an {@link Event} from a DOM event emitter. + */ export function fromDOMEventEmitter(emitter: DOMEventEmitter, eventName: string, map: (...args: any[]) => T = id => id): Event { const fn = (...args: any[]) => result.fire(map(...args)); const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn); @@ -476,15 +550,31 @@ export namespace Event { return result.event; } + /** + * Creates a promise out of an event, using the {@link Event.once} helper. + */ export function toPromise(event: Event): Promise { return new Promise(resolve => once(event)(resolve)); } + /** + * Adds a listener to an event and calls the listener immediately with undefined as the event object. + * + * @example + * ``` + * // Initialize the UI and update it when dataChangeEvent fires + * runAndSubscribe(dataChangeEvent, () => this._updateUI()); + * ``` + */ export function runAndSubscribe(event: Event, handler: (e: T | undefined) => any): IDisposable { handler(undefined); return event(e => handler(e)); } + /** + * Adds a listener to an event and calls the listener immediately with undefined as the event object. A new + * {@link DisposableStore} is passed to the listener which is disposed when the returned disposable is disposed. + */ export function runAndSubscribeWithStore(event: Event, handler: (e: T | undefined, disposableStore: DisposableStore) => any): IDisposable { let store: DisposableStore | null = null; @@ -509,13 +599,13 @@ export namespace Event { private _counter = 0; private _hasChanged = false; - constructor(readonly obs: IObservable, store: DisposableStore | undefined) { + constructor(readonly _observable: IObservable, store: DisposableStore | undefined) { const options: EmitterOptions = { onWillAddFirstListener: () => { - obs.addObserver(this); + _observable.addObserver(this); }, onDidRemoveLastListener: () => { - obs.removeObserver(this); + _observable.removeObserver(this); } }; if (!store) { @@ -528,28 +618,77 @@ export namespace Event { } beginUpdate(_observable: IObservable): void { - // console.assert(_observable === this.obs); + // assert(_observable === this.obs); this._counter++; } + handlePossibleChange(_observable: IObservable): void { + // assert(_observable === this.obs); + } + handleChange(_observable: IObservable, _change: TChange): void { + // assert(_observable === this.obs); this._hasChanged = true; } endUpdate(_observable: IObservable): void { - if (--this._counter === 0) { + // assert(_observable === this.obs); + this._counter--; + if (this._counter === 0) { + this._observable.reportChanges(); if (this._hasChanged) { this._hasChanged = false; - this.emitter.fire(this.obs.get()); + this.emitter.fire(this._observable.get()); } } } } + /** + * Creates an event emitter that is fired when the observable changes. + * Each listeners subscribes to the emitter. + */ export function fromObservable(obs: IObservable, store?: DisposableStore): Event { const observer = new EmitterObserver(obs, store); return observer.emitter.event; } + + /** + * Each listener is attached to the observable directly. + */ + export function fromObservableLight(observable: IObservable): Event { + return (listener) => { + let count = 0; + let didChange = false; + const observer: IObserver = { + beginUpdate() { + count++; + }, + endUpdate() { + count--; + if (count === 0) { + observable.reportChanges(); + if (didChange) { + didChange = false; + listener(); + } + } + }, + handlePossibleChange() { + // noop + }, + handleChange() { + didChange = true; + } + }; + observable.addObserver(observer); + return { + dispose() { + observable.removeObserver(observer); + } + }; + }; + } } export interface EmitterOptions { @@ -573,6 +712,11 @@ export interface EmitterOptions { * Optional function that's called *before* a listener is removed */ onWillRemoveListener?: Function; + /** + * Optional function that's called when a listener throws an error. Defaults to + * {@link onUnexpectedError} + */ + onListenerError?: (e: any) => void; /** * Number of listeners that are allowed before assuming a leak. Default to * a globally configured value @@ -611,7 +755,7 @@ export class EventProfiling { } start(listenerCount: number): void { - this._stopWatch = new StopWatch(true); + this._stopWatch = new StopWatch(); this.listenerCount = listenerCount; } @@ -704,20 +848,29 @@ class Stacktrace { } } -class Listener { - - readonly subscription = new SafeDisposable(); - - constructor( - readonly callback: (e: T) => void, - readonly callbackThis: any | undefined, - readonly stack: Stacktrace | undefined - ) { } - - invoke(e: T) { - this.callback.call(this.callbackThis, e); - } +let id = 0; +class UniqueContainer { + stack?: Stacktrace; + public id = id++; + constructor(public readonly value: T) { } } +const compactionThreshold = 2; + +type ListenerContainer = UniqueContainer<(data: T) => void>; +type ListenerOrListeners = (ListenerContainer | undefined)[] | ListenerContainer; + +const forEachListener = (listeners: ListenerOrListeners, fn: (c: ListenerContainer) => void) => { + if (listeners instanceof UniqueContainer) { + fn(listeners); + } else { + for (let i = 0; i < listeners.length; i++) { + const l = listeners[i]; + if (l) { + fn(l); + } + } + } +}; /** * The Emitter can be used to expose an Event to the public @@ -745,16 +898,41 @@ export class Emitter { private readonly _options?: EmitterOptions; private readonly _leakageMon?: LeakageMonitor; private readonly _perfMon?: EventProfiling; - private _disposed: boolean = false; + private _disposed?: true; private _event?: Event; - private _deliveryQueue?: EventDeliveryQueue; - protected _listeners?: LinkedList>; + + /** + * A listener, or list of listeners. A single listener is the most common + * for event emitters (#185789), so we optimize that special case to avoid + * wrapping it in an array (just like Node.js itself.) + * + * A list of listeners never 'downgrades' back to a plain function if + * listeners are removed, for two reasons: + * + * 1. That's complicated (especially with the deliveryQueue) + * 2. A listener with >1 listener is likely to have >1 listener again at + * some point, and swapping between arrays and functions may[citation needed] + * introduce unnecessary work and garbage. + * + * The array listeners can be 'sparse', to avoid reallocating the array + * whenever any listener is added or removed. If more than `1 / compactionThreshold` + * of the array is empty, only then is it resized. + */ + protected _listeners?: ListenerOrListeners; + + /** + * Always to be defined if _listeners is an array. It's no longer a true + * queue, but holds the dispatching 'state'. If `fire()` is called on an + * emitter, any work left in the _deliveryQueue is finished first. + */ + private _deliveryQueue?: EventDeliveryQueuePrivate; + protected _size = 0; constructor(options?: EmitterOptions) { this._options = options; this._leakageMon = _globalLeakWarningThreshold > 0 || this._options?.leakWarningThreshold ? new LeakageMonitor(this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) : undefined; this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : undefined; - this._deliveryQueue = this._options?.deliveryQueue; + this._deliveryQueue = this._options?.deliveryQueue as EventDeliveryQueuePrivate | undefined; } dispose() { @@ -771,22 +949,20 @@ export class Emitter { // ...later... // this._disposables.dispose(); disposes (1) then (2): don't warn after (1) but after the "overall dispose" is done + if (this._deliveryQueue?.current === this) { + this._deliveryQueue.reset(); + } if (this._listeners) { if (_enableDisposeWithListenerWarning) { - const listeners = Array.from(this._listeners); + const listeners = this._listeners; queueMicrotask(() => { - for (const listener of listeners) { - if (listener.subscription.isset()) { - listener.subscription.unset(); - listener.stack?.print(); - } - } + forEachListener(listeners, l => l.stack?.print()); }); } - this._listeners.clear(); + this._listeners = undefined; + this._size = 0; } - this._deliveryQueue?.clear(this); this._options?.onDidRemoveLastListener?.(); this._leakageMon?.dispose(); } @@ -797,157 +973,204 @@ export class Emitter { * to events from this Emitter */ get event(): Event { - if (!this._event) { - this._event = (callback: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => { - if (!this._listeners) { - this._listeners = new LinkedList(); - } + this._event ??= (callback: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => { + if (this._leakageMon && this._size > this._leakageMon.threshold * 3) { + console.warn(`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far`); + return Disposable.None; + } - if (this._leakageMon && this._listeners.size > this._leakageMon.threshold * 3) { - console.warn(`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far`); - return Disposable.None; - } + if (this._disposed) { + // todo: should we warn if a listener is added to a disposed emitter? This happens often + return Disposable.None; + } - const firstListener = this._listeners.isEmpty(); + if (thisArgs) { + callback = callback.bind(thisArgs); + } - if (firstListener && this._options?.onWillAddFirstListener) { - this._options.onWillAddFirstListener(this); - } + const contained = new UniqueContainer(callback); - let removeMonitor: Function | undefined; - let stack: Stacktrace | undefined; - if (this._leakageMon && this._listeners.size >= Math.ceil(this._leakageMon.threshold * 0.2)) { - // check and record this emitter for potential leakage - stack = Stacktrace.create(); - removeMonitor = this._leakageMon.check(stack, this._listeners.size + 1); - } + let removeMonitor: Function | undefined; + let stack: Stacktrace | undefined; + if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * 0.2)) { + // check and record this emitter for potential leakage + contained.stack = Stacktrace.create(); + removeMonitor = this._leakageMon.check(contained.stack, this._size + 1); + } - if (_enableDisposeWithListenerWarning) { - stack = stack ?? Stacktrace.create(); - } + if (_enableDisposeWithListenerWarning) { + contained.stack = stack ?? Stacktrace.create(); + } - const listener = new Listener(callback, thisArgs, stack); - const removeListener = this._listeners.push(listener); + if (!this._listeners) { + this._options?.onWillAddFirstListener?.(this); + this._listeners = contained; + this._options?.onDidAddFirstListener?.(this); + } else if (this._listeners instanceof UniqueContainer) { + this._deliveryQueue ??= new EventDeliveryQueuePrivate(); + this._listeners = [this._listeners, contained]; + } else { + this._listeners.push(contained); + } - if (firstListener && this._options?.onDidAddFirstListener) { - this._options.onDidAddFirstListener(this); - } + this._size++; - if (this._options?.onDidAddListener) { - this._options.onDidAddListener(this, callback, thisArgs); - } + const result = toDisposable(() => { removeMonitor?.(); this._removeListener(contained); }); + if (disposables instanceof DisposableStore) { + disposables.add(result); + } else if (Array.isArray(disposables)) { + disposables.push(result); + } - const result = listener.subscription.set(() => { - removeMonitor?.(); - if (!this._disposed) { - this._options?.onWillRemoveListener?.(this); - removeListener(); - if (this._options && this._options.onDidRemoveLastListener) { - const hasListeners = (this._listeners && !this._listeners.isEmpty()); - if (!hasListeners) { - this._options.onDidRemoveLastListener(this); - } - } - } - }); + return result; + }; - if (disposables instanceof DisposableStore) { - disposables.add(result); - } else if (Array.isArray(disposables)) { - disposables.push(result); - } - - return result; - }; - } return this._event; } + private _removeListener(listener: ListenerContainer) { + this._options?.onWillRemoveListener?.(this); + + if (!this._listeners) { + return; // expected if a listener gets disposed + } + + if (this._size === 1) { + this._listeners = undefined; + this._options?.onDidRemoveLastListener?.(this); + this._size = 0; + return; + } + + // size > 1 which requires that listeners be a list: + const listeners = this._listeners as (ListenerContainer | undefined)[]; + + const index = listeners.indexOf(listener); + if (index === -1) { + console.log('disposed?', this._disposed); + console.log('size?', this._size); + console.log('arr?', JSON.stringify(this._listeners)); + throw new Error('Attempted to dispose unknown listener'); + } + + this._size--; + listeners[index] = undefined; + + const adjustDeliveryQueue = this._deliveryQueue!.current === this; + if (this._size * compactionThreshold <= listeners.length) { + let n = 0; + for (let i = 0; i < listeners.length; i++) { + if (listeners[i]) { + listeners[n++] = listeners[i]; + } else if (adjustDeliveryQueue) { + this._deliveryQueue!.end--; + if (n < this._deliveryQueue!.i) { + this._deliveryQueue!.i--; + } + } + } + listeners.length = n; + } + } + + private _deliver(listener: undefined | UniqueContainer<(value: T) => void>, value: T) { + if (!listener) { + return; + } + + const errorHandler = this._options?.onListenerError || onUnexpectedError; + if (!errorHandler) { + listener.value(value); + return; + } + + try { + listener.value(value); + } catch (e) { + errorHandler(e); + } + } + + /** Delivers items in the queue. Assumes the queue is ready to go. */ + private _deliverQueue(dq: EventDeliveryQueuePrivate) { + const listeners = dq.current!._listeners! as (ListenerContainer | undefined)[]; + while (dq.i < dq.end) { + // important: dq.i is incremented before calling deliver() because it might reenter deliverQueue() + this._deliver(listeners[dq.i++], dq.value as T); + } + dq.reset(); + } + /** * To be kept private to fire an event to * subscribers */ fire(event: T): void { - if (this._listeners) { - // put all [listener,event]-pairs into delivery queue - // then emit all event. an inner/nested event might be - // the driver of this - - if (!this._deliveryQueue) { - this._deliveryQueue = new PrivateEventDeliveryQueue(); - } - - for (const listener of this._listeners) { - this._deliveryQueue.push(this, listener, event); - } - - // start/stop performance insight collection - this._perfMon?.start(this._deliveryQueue.size); - - this._deliveryQueue.deliver(); - - this._perfMon?.stop(); + if (this._deliveryQueue?.current) { + this._deliverQueue(this._deliveryQueue); + this._perfMon?.stop(); // last fire() will have starting perfmon, stop it before starting the next dispatch } + + this._perfMon?.start(this._size); + + if (!this._listeners) { + // no-op + } else if (this._listeners instanceof UniqueContainer) { + this._deliver(this._listeners, event); + } else { + const dq = this._deliveryQueue!; + dq.enqueue(this, event, this._listeners.length); + this._deliverQueue(dq); + } + + this._perfMon?.stop(); } hasListeners(): boolean { - if (!this._listeners) { - return false; - } - return !this._listeners.isEmpty(); + return this._size > 0; } } -export class EventDeliveryQueue { - protected _queue = new LinkedList(); - - get size(): number { - return this._queue.size; - } - - push(emitter: Emitter, listener: Listener, event: T): void { - this._queue.push(new EventDeliveryQueueElement(emitter, listener, event)); - } - - clear(emitter: Emitter): void { - const newQueue = new LinkedList(); - for (const element of this._queue) { - if (element.emitter !== emitter) { - newQueue.push(element); - } - } - this._queue = newQueue; - } - - deliver(): void { - while (this._queue.size > 0) { - const element = this._queue.shift()!; - try { - element.listener.invoke(element.event); - } catch (e) { - onUnexpectedError(e); - } - } - } +export interface EventDeliveryQueue { + _isEventDeliveryQueue: true; } -/** - * An `EventDeliveryQueue` that is guaranteed to be used by a single `Emitter`. - */ -class PrivateEventDeliveryQueue extends EventDeliveryQueue { - override clear(emitter: Emitter): void { - // Here we can just clear the entire linked list because - // all elements are guaranteed to belong to this emitter - this._queue.clear(); - } -} +export const createEventDeliveryQueue = (): EventDeliveryQueue => new EventDeliveryQueuePrivate(); -class EventDeliveryQueueElement { - constructor( - readonly emitter: Emitter, - readonly listener: Listener, - readonly event: T - ) { } +class EventDeliveryQueuePrivate implements EventDeliveryQueue { + declare _isEventDeliveryQueue: true; + + /** + * Index in current's listener list. + */ + public i = -1; + + /** + * The last index in the listener's list to deliver. + */ + public end = 0; + + /** + * Emitter currently being dispatched on. Emitter._listeners is always an array. + */ + public current?: Emitter; + /** + * Currently emitting value. Defined whenever `current` is. + */ + public value?: unknown; + + public enqueue(emitter: Emitter, value: T, end: number) { + this.i = 0; + this.end = end; + this.current = emitter; + this.value = value; + } + + public reset() { + this.i = this.end; // force any current emission loop to stop, mainly for during dispose + this.current = undefined; + this.value = undefined; + } } export interface IWaitUntil { @@ -959,7 +1182,7 @@ export type IWaitUntilData = Omit, 'token'>; export class AsyncEmitter extends Emitter { - private _asyncDeliveryQueue?: LinkedList<[Listener, IWaitUntilData]>; + private _asyncDeliveryQueue?: LinkedList<[(ev: T) => void, IWaitUntilData]>; async fireAsync(data: IWaitUntilData, token: CancellationToken, promiseJoin?: (p: Promise, listener: Function) => Promise): Promise { if (!this._listeners) { @@ -970,9 +1193,7 @@ export class AsyncEmitter extends Emitter { this._asyncDeliveryQueue = new LinkedList(); } - for (const listener of this._listeners) { - this._asyncDeliveryQueue.push([listener, data]); - } + forEachListener(this._listeners, listener => this._asyncDeliveryQueue!.push([listener.value, data])); while (this._asyncDeliveryQueue.size > 0 && !token.isCancellationRequested) { @@ -987,14 +1208,14 @@ export class AsyncEmitter extends Emitter { throw new Error('waitUntil can NOT be called asynchronous'); } if (promiseJoin) { - p = promiseJoin(p, listener.callback); + p = promiseJoin(p, listener); } thenables.push(p); } }; try { - listener.invoke(event); + listener(event); } catch (e) { onUnexpectedError(e); continue; @@ -1022,6 +1243,10 @@ export class PauseableEmitter extends Emitter { protected _eventQueue = new LinkedList(); private _mergeFn?: (input: T[]) => T; + public get isPaused(): boolean { + return this._isPaused !== 0; + } + constructor(options?: EmitterOptions & { merge?: (input: T[]) => T }) { super(options); this._mergeFn = options?.merge; @@ -1053,7 +1278,7 @@ export class PauseableEmitter extends Emitter { } override fire(event: T): void { - if (this._listeners) { + if (this._size) { if (this._isPaused !== 0) { this._eventQueue.push(event); } else { diff --git a/src/vs/base/common/extpath.ts b/src/vs/base/common/extpath.ts index a0fe8ad76a8..b88d24e3cba 100644 --- a/src/vs/base/common/extpath.ts +++ b/src/vs/base/common/extpath.ts @@ -325,8 +325,8 @@ export function hasDriveLetter(path: string, isWindowsOS: boolean = isWindows): return false; } -export function getDriveLetter(path: string): string | undefined { - return hasDriveLetter(path) ? path[0] : undefined; +export function getDriveLetter(path: string, isWindowsOS: boolean = isWindows): string | undefined { + return hasDriveLetter(path, isWindowsOS) ? path[0] : undefined; } export function indexOfPath(path: string, candidate: string, ignoreCase?: boolean): number { @@ -382,11 +382,26 @@ export function parseLineAndColumnAware(rawPath: string): IPathWithLineAndColumn } const pathChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; +const windowsSafePathFirstChars = 'BDEFGHIJKMOQRSTUVWXYZbdefghijkmoqrstuvwxyz0123456789'; export function randomPath(parent?: string, prefix?: string, randomLength = 8): string { let suffix = ''; for (let i = 0; i < randomLength; i++) { - suffix += pathChars.charAt(Math.floor(Math.random() * pathChars.length)); + let pathCharsTouse: string; + if (i === 0 && isWindows && !prefix && (randomLength === 3 || randomLength === 4)) { + + // Windows has certain reserved file names that cannot be used, such + // as AUX, CON, PRN, etc. We want to avoid generating a random name + // that matches that pattern, so we use a different set of characters + // for the first character of the name that does not include any of + // the reserved names first characters. + + pathCharsTouse = windowsSafePathFirstChars; + } else { + pathCharsTouse = pathChars; + } + + suffix += pathCharsTouse.charAt(Math.floor(Math.random() * pathCharsTouse.length)); } let randomFileName: string; diff --git a/src/vs/base/common/history.ts b/src/vs/base/common/history.ts index 58f0e6e5789..22c2f27a678 100644 --- a/src/vs/base/common/history.ts +++ b/src/vs/base/common/history.ts @@ -28,10 +28,8 @@ export class HistoryNavigator implements INavigator { } public next(): T | null { - if (this._currentPosition() !== this._elements.length - 1) { - return this._navigator.next(); - } - return null; + // This will navigate past the end of the last element, and in that case the input should be cleared + return this._navigator.next(); } public previous(): T | null { @@ -58,7 +56,7 @@ export class HistoryNavigator implements INavigator { } public isLast(): boolean { - return this._currentPosition() === this._elements.length - 1; + return this._currentPosition() >= this._elements.length - 1; } public isNowhere(): boolean { @@ -118,6 +116,7 @@ interface HistoryNode { export class HistoryNavigator2 { + private valueSet: Set; private head: HistoryNode; private tail: HistoryNode; private cursor: HistoryNode; @@ -135,6 +134,7 @@ export class HistoryNavigator2 { next: undefined }; + this.valueSet = new Set([history[0]]); for (let i = 1; i < history.length; i++) { this.add(history[i]); } @@ -152,7 +152,15 @@ export class HistoryNavigator2 { this.cursor = this.tail; this.size++; + if (this.valueSet.has(value)) { + this._deleteFromList(value); + } else { + this.valueSet.add(value); + } + while (this.size > this.capacity) { + this.valueSet.delete(this.head.value); + this.head = this.head.next!; this.head.previous = undefined; this.size--; @@ -163,8 +171,20 @@ export class HistoryNavigator2 { * @returns old last value */ replaceLast(value: T): T { + if (this.tail.value === value) { + return value; + } + const oldValue = this.tail.value; + this.valueSet.delete(oldValue); this.tail.value = value; + + if (this.valueSet.has(value)) { + this._deleteFromList(value); + } else { + this.valueSet.add(value); + } + return oldValue; } @@ -193,14 +213,7 @@ export class HistoryNavigator2 { } has(t: T): boolean { - let temp: HistoryNode | undefined = this.head; - while (temp) { - if (temp.value === t) { - return true; - } - temp = temp.next; - } - return false; + return this.valueSet.has(t); } resetCursor(): T { @@ -216,4 +229,24 @@ export class HistoryNavigator2 { node = node.next; } } + + private _deleteFromList(value: T): void { + let temp = this.head; + + while (temp !== this.tail) { + if (temp.value === value) { + if (temp === this.head) { + this.head = this.head.next!; + this.head.previous = undefined; + } else { + temp.previous!.next = temp.next; + temp.next!.previous = temp.previous; + } + + this.size--; + } + + temp = temp.next!; + } + } } diff --git a/src/vs/base/common/htmlContent.ts b/src/vs/base/common/htmlContent.ts index 107ee2c4feb..9cefc0e56a4 100644 --- a/src/vs/base/common/htmlContent.ts +++ b/src/vs/base/common/htmlContent.ts @@ -118,7 +118,7 @@ export function isMarkdownString(thing: any): thing is IMarkdownString { return true; } else if (thing && typeof thing === 'object') { return typeof (thing).value === 'string' - && (typeof (thing).isTrusted === 'boolean' || (thing).isTrusted === undefined) + && (typeof (thing).isTrusted === 'boolean' || typeof (thing).isTrusted === 'object' || (thing).isTrusted === undefined) && (typeof (thing).supportThemeIcons === 'boolean' || (thing).supportThemeIcons === undefined); } return false; @@ -140,7 +140,7 @@ export function markdownStringEqual(a: IMarkdownString, b: IMarkdownString): boo export function escapeMarkdownSyntaxTokens(text: string): string { // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash - return text.replace(/[\\`*_{}[\]()#+\-!~]/g, '\\$&'); + return text.replace(/[\\`*_{}[\]()#+\-!~]/g, '\\$&'); // CodeQL [SM02383] Backslash is escaped in the character class } export function escapeDoubleQuotes(input: string) { diff --git a/src/vs/base/common/keyCodes.ts b/src/vs/base/common/keyCodes.ts index 44488dbb299..9f1fd59fddc 100644 --- a/src/vs/base/common/keyCodes.ts +++ b/src/vs/base/common/keyCodes.ts @@ -97,6 +97,11 @@ export const enum KeyCode { F17, F18, F19, + F20, + F21, + F22, + F23, + F24, NumLock, ScrollLock, @@ -482,250 +487,250 @@ for (let i = 0; i <= KeyCode.MAX_VALUE; i++) { (function () { // See https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx - // See https://github.com/microsoft/node-native-keymap/blob/master/deps/chromium/keyboard_codes_win.h + // See https://github.com/microsoft/node-native-keymap/blob/88c0b0e5/deps/chromium/keyboard_codes_win.h const empty = ''; - type IMappingEntry = [number, 0 | 1, ScanCode, string, KeyCode, string, number, string, string, string]; + type IMappingEntry = [0 | 1, ScanCode, string, KeyCode, string, number, string, string, string]; const mappings: IMappingEntry[] = [ - // keyCodeOrd, immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel - [0, 1, ScanCode.None, 'None', KeyCode.Unknown, 'unknown', 0, 'VK_UNKNOWN', empty, empty], - [0, 1, ScanCode.Hyper, 'Hyper', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Super, 'Super', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Fn, 'Fn', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.FnLock, 'FnLock', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Suspend, 'Suspend', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Resume, 'Resume', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Turbo, 'Turbo', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Sleep, 'Sleep', KeyCode.Unknown, empty, 0, 'VK_SLEEP', empty, empty], - [0, 1, ScanCode.WakeUp, 'WakeUp', KeyCode.Unknown, empty, 0, empty, empty, empty], - [31, 0, ScanCode.KeyA, 'KeyA', KeyCode.KeyA, 'A', 65, 'VK_A', empty, empty], - [32, 0, ScanCode.KeyB, 'KeyB', KeyCode.KeyB, 'B', 66, 'VK_B', empty, empty], - [33, 0, ScanCode.KeyC, 'KeyC', KeyCode.KeyC, 'C', 67, 'VK_C', empty, empty], - [34, 0, ScanCode.KeyD, 'KeyD', KeyCode.KeyD, 'D', 68, 'VK_D', empty, empty], - [35, 0, ScanCode.KeyE, 'KeyE', KeyCode.KeyE, 'E', 69, 'VK_E', empty, empty], - [36, 0, ScanCode.KeyF, 'KeyF', KeyCode.KeyF, 'F', 70, 'VK_F', empty, empty], - [37, 0, ScanCode.KeyG, 'KeyG', KeyCode.KeyG, 'G', 71, 'VK_G', empty, empty], - [38, 0, ScanCode.KeyH, 'KeyH', KeyCode.KeyH, 'H', 72, 'VK_H', empty, empty], - [39, 0, ScanCode.KeyI, 'KeyI', KeyCode.KeyI, 'I', 73, 'VK_I', empty, empty], - [40, 0, ScanCode.KeyJ, 'KeyJ', KeyCode.KeyJ, 'J', 74, 'VK_J', empty, empty], - [41, 0, ScanCode.KeyK, 'KeyK', KeyCode.KeyK, 'K', 75, 'VK_K', empty, empty], - [42, 0, ScanCode.KeyL, 'KeyL', KeyCode.KeyL, 'L', 76, 'VK_L', empty, empty], - [43, 0, ScanCode.KeyM, 'KeyM', KeyCode.KeyM, 'M', 77, 'VK_M', empty, empty], - [44, 0, ScanCode.KeyN, 'KeyN', KeyCode.KeyN, 'N', 78, 'VK_N', empty, empty], - [45, 0, ScanCode.KeyO, 'KeyO', KeyCode.KeyO, 'O', 79, 'VK_O', empty, empty], - [46, 0, ScanCode.KeyP, 'KeyP', KeyCode.KeyP, 'P', 80, 'VK_P', empty, empty], - [47, 0, ScanCode.KeyQ, 'KeyQ', KeyCode.KeyQ, 'Q', 81, 'VK_Q', empty, empty], - [48, 0, ScanCode.KeyR, 'KeyR', KeyCode.KeyR, 'R', 82, 'VK_R', empty, empty], - [49, 0, ScanCode.KeyS, 'KeyS', KeyCode.KeyS, 'S', 83, 'VK_S', empty, empty], - [50, 0, ScanCode.KeyT, 'KeyT', KeyCode.KeyT, 'T', 84, 'VK_T', empty, empty], - [51, 0, ScanCode.KeyU, 'KeyU', KeyCode.KeyU, 'U', 85, 'VK_U', empty, empty], - [52, 0, ScanCode.KeyV, 'KeyV', KeyCode.KeyV, 'V', 86, 'VK_V', empty, empty], - [53, 0, ScanCode.KeyW, 'KeyW', KeyCode.KeyW, 'W', 87, 'VK_W', empty, empty], - [54, 0, ScanCode.KeyX, 'KeyX', KeyCode.KeyX, 'X', 88, 'VK_X', empty, empty], - [55, 0, ScanCode.KeyY, 'KeyY', KeyCode.KeyY, 'Y', 89, 'VK_Y', empty, empty], - [56, 0, ScanCode.KeyZ, 'KeyZ', KeyCode.KeyZ, 'Z', 90, 'VK_Z', empty, empty], - [22, 0, ScanCode.Digit1, 'Digit1', KeyCode.Digit1, '1', 49, 'VK_1', empty, empty], - [23, 0, ScanCode.Digit2, 'Digit2', KeyCode.Digit2, '2', 50, 'VK_2', empty, empty], - [24, 0, ScanCode.Digit3, 'Digit3', KeyCode.Digit3, '3', 51, 'VK_3', empty, empty], - [25, 0, ScanCode.Digit4, 'Digit4', KeyCode.Digit4, '4', 52, 'VK_4', empty, empty], - [26, 0, ScanCode.Digit5, 'Digit5', KeyCode.Digit5, '5', 53, 'VK_5', empty, empty], - [27, 0, ScanCode.Digit6, 'Digit6', KeyCode.Digit6, '6', 54, 'VK_6', empty, empty], - [28, 0, ScanCode.Digit7, 'Digit7', KeyCode.Digit7, '7', 55, 'VK_7', empty, empty], - [29, 0, ScanCode.Digit8, 'Digit8', KeyCode.Digit8, '8', 56, 'VK_8', empty, empty], - [30, 0, ScanCode.Digit9, 'Digit9', KeyCode.Digit9, '9', 57, 'VK_9', empty, empty], - [21, 0, ScanCode.Digit0, 'Digit0', KeyCode.Digit0, '0', 48, 'VK_0', empty, empty], - [3, 1, ScanCode.Enter, 'Enter', KeyCode.Enter, 'Enter', 13, 'VK_RETURN', empty, empty], - [9, 1, ScanCode.Escape, 'Escape', KeyCode.Escape, 'Escape', 27, 'VK_ESCAPE', empty, empty], - [1, 1, ScanCode.Backspace, 'Backspace', KeyCode.Backspace, 'Backspace', 8, 'VK_BACK', empty, empty], - [2, 1, ScanCode.Tab, 'Tab', KeyCode.Tab, 'Tab', 9, 'VK_TAB', empty, empty], - [10, 1, ScanCode.Space, 'Space', KeyCode.Space, 'Space', 32, 'VK_SPACE', empty, empty], - [83, 0, ScanCode.Minus, 'Minus', KeyCode.Minus, '-', 189, 'VK_OEM_MINUS', '-', 'OEM_MINUS'], - [81, 0, ScanCode.Equal, 'Equal', KeyCode.Equal, '=', 187, 'VK_OEM_PLUS', '=', 'OEM_PLUS'], - [87, 0, ScanCode.BracketLeft, 'BracketLeft', KeyCode.BracketLeft, '[', 219, 'VK_OEM_4', '[', 'OEM_4'], - [89, 0, ScanCode.BracketRight, 'BracketRight', KeyCode.BracketRight, ']', 221, 'VK_OEM_6', ']', 'OEM_6'], - [88, 0, ScanCode.Backslash, 'Backslash', KeyCode.Backslash, '\\', 220, 'VK_OEM_5', '\\', 'OEM_5'], - [0, 0, ScanCode.IntlHash, 'IntlHash', KeyCode.Unknown, empty, 0, empty, empty, empty], // has been dropped from the w3c spec - [80, 0, ScanCode.Semicolon, 'Semicolon', KeyCode.Semicolon, ';', 186, 'VK_OEM_1', ';', 'OEM_1'], - [90, 0, ScanCode.Quote, 'Quote', KeyCode.Quote, '\'', 222, 'VK_OEM_7', '\'', 'OEM_7'], - [86, 0, ScanCode.Backquote, 'Backquote', KeyCode.Backquote, '`', 192, 'VK_OEM_3', '`', 'OEM_3'], - [82, 0, ScanCode.Comma, 'Comma', KeyCode.Comma, ',', 188, 'VK_OEM_COMMA', ',', 'OEM_COMMA'], - [84, 0, ScanCode.Period, 'Period', KeyCode.Period, '.', 190, 'VK_OEM_PERIOD', '.', 'OEM_PERIOD'], - [85, 0, ScanCode.Slash, 'Slash', KeyCode.Slash, '/', 191, 'VK_OEM_2', '/', 'OEM_2'], - [8, 1, ScanCode.CapsLock, 'CapsLock', KeyCode.CapsLock, 'CapsLock', 20, 'VK_CAPITAL', empty, empty], - [59, 1, ScanCode.F1, 'F1', KeyCode.F1, 'F1', 112, 'VK_F1', empty, empty], - [60, 1, ScanCode.F2, 'F2', KeyCode.F2, 'F2', 113, 'VK_F2', empty, empty], - [61, 1, ScanCode.F3, 'F3', KeyCode.F3, 'F3', 114, 'VK_F3', empty, empty], - [62, 1, ScanCode.F4, 'F4', KeyCode.F4, 'F4', 115, 'VK_F4', empty, empty], - [63, 1, ScanCode.F5, 'F5', KeyCode.F5, 'F5', 116, 'VK_F5', empty, empty], - [64, 1, ScanCode.F6, 'F6', KeyCode.F6, 'F6', 117, 'VK_F6', empty, empty], - [65, 1, ScanCode.F7, 'F7', KeyCode.F7, 'F7', 118, 'VK_F7', empty, empty], - [66, 1, ScanCode.F8, 'F8', KeyCode.F8, 'F8', 119, 'VK_F8', empty, empty], - [67, 1, ScanCode.F9, 'F9', KeyCode.F9, 'F9', 120, 'VK_F9', empty, empty], - [68, 1, ScanCode.F10, 'F10', KeyCode.F10, 'F10', 121, 'VK_F10', empty, empty], - [69, 1, ScanCode.F11, 'F11', KeyCode.F11, 'F11', 122, 'VK_F11', empty, empty], - [70, 1, ScanCode.F12, 'F12', KeyCode.F12, 'F12', 123, 'VK_F12', empty, empty], - [0, 1, ScanCode.PrintScreen, 'PrintScreen', KeyCode.Unknown, empty, 0, empty, empty, empty], - [79, 1, ScanCode.ScrollLock, 'ScrollLock', KeyCode.ScrollLock, 'ScrollLock', 145, 'VK_SCROLL', empty, empty], - [7, 1, ScanCode.Pause, 'Pause', KeyCode.PauseBreak, 'PauseBreak', 19, 'VK_PAUSE', empty, empty], - [19, 1, ScanCode.Insert, 'Insert', KeyCode.Insert, 'Insert', 45, 'VK_INSERT', empty, empty], - [14, 1, ScanCode.Home, 'Home', KeyCode.Home, 'Home', 36, 'VK_HOME', empty, empty], - [11, 1, ScanCode.PageUp, 'PageUp', KeyCode.PageUp, 'PageUp', 33, 'VK_PRIOR', empty, empty], - [20, 1, ScanCode.Delete, 'Delete', KeyCode.Delete, 'Delete', 46, 'VK_DELETE', empty, empty], - [13, 1, ScanCode.End, 'End', KeyCode.End, 'End', 35, 'VK_END', empty, empty], - [12, 1, ScanCode.PageDown, 'PageDown', KeyCode.PageDown, 'PageDown', 34, 'VK_NEXT', empty, empty], - [17, 1, ScanCode.ArrowRight, 'ArrowRight', KeyCode.RightArrow, 'RightArrow', 39, 'VK_RIGHT', 'Right', empty], - [15, 1, ScanCode.ArrowLeft, 'ArrowLeft', KeyCode.LeftArrow, 'LeftArrow', 37, 'VK_LEFT', 'Left', empty], - [18, 1, ScanCode.ArrowDown, 'ArrowDown', KeyCode.DownArrow, 'DownArrow', 40, 'VK_DOWN', 'Down', empty], - [16, 1, ScanCode.ArrowUp, 'ArrowUp', KeyCode.UpArrow, 'UpArrow', 38, 'VK_UP', 'Up', empty], - [78, 1, ScanCode.NumLock, 'NumLock', KeyCode.NumLock, 'NumLock', 144, 'VK_NUMLOCK', empty, empty], - [108, 1, ScanCode.NumpadDivide, 'NumpadDivide', KeyCode.NumpadDivide, 'NumPad_Divide', 111, 'VK_DIVIDE', empty, empty], - [103, 1, ScanCode.NumpadMultiply, 'NumpadMultiply', KeyCode.NumpadMultiply, 'NumPad_Multiply', 106, 'VK_MULTIPLY', empty, empty], - [106, 1, ScanCode.NumpadSubtract, 'NumpadSubtract', KeyCode.NumpadSubtract, 'NumPad_Subtract', 109, 'VK_SUBTRACT', empty, empty], - [104, 1, ScanCode.NumpadAdd, 'NumpadAdd', KeyCode.NumpadAdd, 'NumPad_Add', 107, 'VK_ADD', empty, empty], - [3, 1, ScanCode.NumpadEnter, 'NumpadEnter', KeyCode.Enter, empty, 0, empty, empty, empty], - [94, 1, ScanCode.Numpad1, 'Numpad1', KeyCode.Numpad1, 'NumPad1', 97, 'VK_NUMPAD1', empty, empty], - [95, 1, ScanCode.Numpad2, 'Numpad2', KeyCode.Numpad2, 'NumPad2', 98, 'VK_NUMPAD2', empty, empty], - [96, 1, ScanCode.Numpad3, 'Numpad3', KeyCode.Numpad3, 'NumPad3', 99, 'VK_NUMPAD3', empty, empty], - [97, 1, ScanCode.Numpad4, 'Numpad4', KeyCode.Numpad4, 'NumPad4', 100, 'VK_NUMPAD4', empty, empty], - [98, 1, ScanCode.Numpad5, 'Numpad5', KeyCode.Numpad5, 'NumPad5', 101, 'VK_NUMPAD5', empty, empty], - [99, 1, ScanCode.Numpad6, 'Numpad6', KeyCode.Numpad6, 'NumPad6', 102, 'VK_NUMPAD6', empty, empty], - [100, 1, ScanCode.Numpad7, 'Numpad7', KeyCode.Numpad7, 'NumPad7', 103, 'VK_NUMPAD7', empty, empty], - [101, 1, ScanCode.Numpad8, 'Numpad8', KeyCode.Numpad8, 'NumPad8', 104, 'VK_NUMPAD8', empty, empty], - [102, 1, ScanCode.Numpad9, 'Numpad9', KeyCode.Numpad9, 'NumPad9', 105, 'VK_NUMPAD9', empty, empty], - [93, 1, ScanCode.Numpad0, 'Numpad0', KeyCode.Numpad0, 'NumPad0', 96, 'VK_NUMPAD0', empty, empty], - [107, 1, ScanCode.NumpadDecimal, 'NumpadDecimal', KeyCode.NumpadDecimal, 'NumPad_Decimal', 110, 'VK_DECIMAL', empty, empty], - [92, 0, ScanCode.IntlBackslash, 'IntlBackslash', KeyCode.IntlBackslash, 'OEM_102', 226, 'VK_OEM_102', empty, empty], - [58, 1, ScanCode.ContextMenu, 'ContextMenu', KeyCode.ContextMenu, 'ContextMenu', 93, empty, empty, empty], - [0, 1, ScanCode.Power, 'Power', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadEqual, 'NumpadEqual', KeyCode.Unknown, empty, 0, empty, empty, empty], - [71, 1, ScanCode.F13, 'F13', KeyCode.F13, 'F13', 124, 'VK_F13', empty, empty], - [72, 1, ScanCode.F14, 'F14', KeyCode.F14, 'F14', 125, 'VK_F14', empty, empty], - [73, 1, ScanCode.F15, 'F15', KeyCode.F15, 'F15', 126, 'VK_F15', empty, empty], - [74, 1, ScanCode.F16, 'F16', KeyCode.F16, 'F16', 127, 'VK_F16', empty, empty], - [75, 1, ScanCode.F17, 'F17', KeyCode.F17, 'F17', 128, 'VK_F17', empty, empty], - [76, 1, ScanCode.F18, 'F18', KeyCode.F18, 'F18', 129, 'VK_F18', empty, empty], - [77, 1, ScanCode.F19, 'F19', KeyCode.F19, 'F19', 130, 'VK_F19', empty, empty], - [0, 1, ScanCode.F20, 'F20', KeyCode.Unknown, empty, 0, 'VK_F20', empty, empty], - [0, 1, ScanCode.F21, 'F21', KeyCode.Unknown, empty, 0, 'VK_F21', empty, empty], - [0, 1, ScanCode.F22, 'F22', KeyCode.Unknown, empty, 0, 'VK_F22', empty, empty], - [0, 1, ScanCode.F23, 'F23', KeyCode.Unknown, empty, 0, 'VK_F23', empty, empty], - [0, 1, ScanCode.F24, 'F24', KeyCode.Unknown, empty, 0, 'VK_F24', empty, empty], - [0, 1, ScanCode.Open, 'Open', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Help, 'Help', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Select, 'Select', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Again, 'Again', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Undo, 'Undo', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Cut, 'Cut', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Copy, 'Copy', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Paste, 'Paste', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Find, 'Find', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.AudioVolumeMute, 'AudioVolumeMute', KeyCode.AudioVolumeMute, 'AudioVolumeMute', 173, 'VK_VOLUME_MUTE', empty, empty], - [0, 1, ScanCode.AudioVolumeUp, 'AudioVolumeUp', KeyCode.AudioVolumeUp, 'AudioVolumeUp', 175, 'VK_VOLUME_UP', empty, empty], - [0, 1, ScanCode.AudioVolumeDown, 'AudioVolumeDown', KeyCode.AudioVolumeDown, 'AudioVolumeDown', 174, 'VK_VOLUME_DOWN', empty, empty], - [105, 1, ScanCode.NumpadComma, 'NumpadComma', KeyCode.NUMPAD_SEPARATOR, 'NumPad_Separator', 108, 'VK_SEPARATOR', empty, empty], - [110, 0, ScanCode.IntlRo, 'IntlRo', KeyCode.ABNT_C1, 'ABNT_C1', 193, 'VK_ABNT_C1', empty, empty], - [0, 1, ScanCode.KanaMode, 'KanaMode', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 0, ScanCode.IntlYen, 'IntlYen', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Convert, 'Convert', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NonConvert, 'NonConvert', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Lang1, 'Lang1', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Lang2, 'Lang2', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Lang3, 'Lang3', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Lang4, 'Lang4', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Lang5, 'Lang5', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Abort, 'Abort', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.Props, 'Props', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadParenLeft, 'NumpadParenLeft', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadParenRight, 'NumpadParenRight', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadBackspace, 'NumpadBackspace', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadMemoryStore, 'NumpadMemoryStore', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadMemoryRecall, 'NumpadMemoryRecall', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadMemoryClear, 'NumpadMemoryClear', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadMemoryAdd, 'NumpadMemoryAdd', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadMemorySubtract, 'NumpadMemorySubtract', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.NumpadClear, 'NumpadClear', KeyCode.Clear, 'Clear', 12, 'VK_CLEAR', empty, empty], - [0, 1, ScanCode.NumpadClearEntry, 'NumpadClearEntry', KeyCode.Unknown, empty, 0, empty, empty, empty], - [5, 1, ScanCode.None, empty, KeyCode.Ctrl, 'Ctrl', 17, 'VK_CONTROL', empty, empty], - [4, 1, ScanCode.None, empty, KeyCode.Shift, 'Shift', 16, 'VK_SHIFT', empty, empty], - [6, 1, ScanCode.None, empty, KeyCode.Alt, 'Alt', 18, 'VK_MENU', empty, empty], - [57, 1, ScanCode.None, empty, KeyCode.Meta, 'Meta', 0, 'VK_COMMAND', empty, empty], - [5, 1, ScanCode.ControlLeft, 'ControlLeft', KeyCode.Ctrl, empty, 0, 'VK_LCONTROL', empty, empty], - [4, 1, ScanCode.ShiftLeft, 'ShiftLeft', KeyCode.Shift, empty, 0, 'VK_LSHIFT', empty, empty], - [6, 1, ScanCode.AltLeft, 'AltLeft', KeyCode.Alt, empty, 0, 'VK_LMENU', empty, empty], - [57, 1, ScanCode.MetaLeft, 'MetaLeft', KeyCode.Meta, empty, 0, 'VK_LWIN', empty, empty], - [5, 1, ScanCode.ControlRight, 'ControlRight', KeyCode.Ctrl, empty, 0, 'VK_RCONTROL', empty, empty], - [4, 1, ScanCode.ShiftRight, 'ShiftRight', KeyCode.Shift, empty, 0, 'VK_RSHIFT', empty, empty], - [6, 1, ScanCode.AltRight, 'AltRight', KeyCode.Alt, empty, 0, 'VK_RMENU', empty, empty], - [57, 1, ScanCode.MetaRight, 'MetaRight', KeyCode.Meta, empty, 0, 'VK_RWIN', empty, empty], - [0, 1, ScanCode.BrightnessUp, 'BrightnessUp', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.BrightnessDown, 'BrightnessDown', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.MediaPlay, 'MediaPlay', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.MediaRecord, 'MediaRecord', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.MediaFastForward, 'MediaFastForward', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.MediaRewind, 'MediaRewind', KeyCode.Unknown, empty, 0, empty, empty, empty], - [114, 1, ScanCode.MediaTrackNext, 'MediaTrackNext', KeyCode.MediaTrackNext, 'MediaTrackNext', 176, 'VK_MEDIA_NEXT_TRACK', empty, empty], - [115, 1, ScanCode.MediaTrackPrevious, 'MediaTrackPrevious', KeyCode.MediaTrackPrevious, 'MediaTrackPrevious', 177, 'VK_MEDIA_PREV_TRACK', empty, empty], - [116, 1, ScanCode.MediaStop, 'MediaStop', KeyCode.MediaStop, 'MediaStop', 178, 'VK_MEDIA_STOP', empty, empty], - [0, 1, ScanCode.Eject, 'Eject', KeyCode.Unknown, empty, 0, empty, empty, empty], - [117, 1, ScanCode.MediaPlayPause, 'MediaPlayPause', KeyCode.MediaPlayPause, 'MediaPlayPause', 179, 'VK_MEDIA_PLAY_PAUSE', empty, empty], - [0, 1, ScanCode.MediaSelect, 'MediaSelect', KeyCode.LaunchMediaPlayer, 'LaunchMediaPlayer', 181, 'VK_MEDIA_LAUNCH_MEDIA_SELECT', empty, empty], - [0, 1, ScanCode.LaunchMail, 'LaunchMail', KeyCode.LaunchMail, 'LaunchMail', 180, 'VK_MEDIA_LAUNCH_MAIL', empty, empty], - [0, 1, ScanCode.LaunchApp2, 'LaunchApp2', KeyCode.LaunchApp2, 'LaunchApp2', 183, 'VK_MEDIA_LAUNCH_APP2', empty, empty], - [0, 1, ScanCode.LaunchApp1, 'LaunchApp1', KeyCode.Unknown, empty, 0, 'VK_MEDIA_LAUNCH_APP1', empty, empty], - [0, 1, ScanCode.SelectTask, 'SelectTask', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.LaunchScreenSaver, 'LaunchScreenSaver', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.BrowserSearch, 'BrowserSearch', KeyCode.BrowserSearch, 'BrowserSearch', 170, 'VK_BROWSER_SEARCH', empty, empty], - [0, 1, ScanCode.BrowserHome, 'BrowserHome', KeyCode.BrowserHome, 'BrowserHome', 172, 'VK_BROWSER_HOME', empty, empty], - [112, 1, ScanCode.BrowserBack, 'BrowserBack', KeyCode.BrowserBack, 'BrowserBack', 166, 'VK_BROWSER_BACK', empty, empty], - [113, 1, ScanCode.BrowserForward, 'BrowserForward', KeyCode.BrowserForward, 'BrowserForward', 167, 'VK_BROWSER_FORWARD', empty, empty], - [0, 1, ScanCode.BrowserStop, 'BrowserStop', KeyCode.Unknown, empty, 0, 'VK_BROWSER_STOP', empty, empty], - [0, 1, ScanCode.BrowserRefresh, 'BrowserRefresh', KeyCode.Unknown, empty, 0, 'VK_BROWSER_REFRESH', empty, empty], - [0, 1, ScanCode.BrowserFavorites, 'BrowserFavorites', KeyCode.Unknown, empty, 0, 'VK_BROWSER_FAVORITES', empty, empty], - [0, 1, ScanCode.ZoomToggle, 'ZoomToggle', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.MailReply, 'MailReply', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.MailForward, 'MailForward', KeyCode.Unknown, empty, 0, empty, empty, empty], - [0, 1, ScanCode.MailSend, 'MailSend', KeyCode.Unknown, empty, 0, empty, empty, empty], + // immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel + [1, ScanCode.None, 'None', KeyCode.Unknown, 'unknown', 0, 'VK_UNKNOWN', empty, empty], + [1, ScanCode.Hyper, 'Hyper', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Super, 'Super', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Fn, 'Fn', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.FnLock, 'FnLock', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Suspend, 'Suspend', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Resume, 'Resume', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Turbo, 'Turbo', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Sleep, 'Sleep', KeyCode.Unknown, empty, 0, 'VK_SLEEP', empty, empty], + [1, ScanCode.WakeUp, 'WakeUp', KeyCode.Unknown, empty, 0, empty, empty, empty], + [0, ScanCode.KeyA, 'KeyA', KeyCode.KeyA, 'A', 65, 'VK_A', empty, empty], + [0, ScanCode.KeyB, 'KeyB', KeyCode.KeyB, 'B', 66, 'VK_B', empty, empty], + [0, ScanCode.KeyC, 'KeyC', KeyCode.KeyC, 'C', 67, 'VK_C', empty, empty], + [0, ScanCode.KeyD, 'KeyD', KeyCode.KeyD, 'D', 68, 'VK_D', empty, empty], + [0, ScanCode.KeyE, 'KeyE', KeyCode.KeyE, 'E', 69, 'VK_E', empty, empty], + [0, ScanCode.KeyF, 'KeyF', KeyCode.KeyF, 'F', 70, 'VK_F', empty, empty], + [0, ScanCode.KeyG, 'KeyG', KeyCode.KeyG, 'G', 71, 'VK_G', empty, empty], + [0, ScanCode.KeyH, 'KeyH', KeyCode.KeyH, 'H', 72, 'VK_H', empty, empty], + [0, ScanCode.KeyI, 'KeyI', KeyCode.KeyI, 'I', 73, 'VK_I', empty, empty], + [0, ScanCode.KeyJ, 'KeyJ', KeyCode.KeyJ, 'J', 74, 'VK_J', empty, empty], + [0, ScanCode.KeyK, 'KeyK', KeyCode.KeyK, 'K', 75, 'VK_K', empty, empty], + [0, ScanCode.KeyL, 'KeyL', KeyCode.KeyL, 'L', 76, 'VK_L', empty, empty], + [0, ScanCode.KeyM, 'KeyM', KeyCode.KeyM, 'M', 77, 'VK_M', empty, empty], + [0, ScanCode.KeyN, 'KeyN', KeyCode.KeyN, 'N', 78, 'VK_N', empty, empty], + [0, ScanCode.KeyO, 'KeyO', KeyCode.KeyO, 'O', 79, 'VK_O', empty, empty], + [0, ScanCode.KeyP, 'KeyP', KeyCode.KeyP, 'P', 80, 'VK_P', empty, empty], + [0, ScanCode.KeyQ, 'KeyQ', KeyCode.KeyQ, 'Q', 81, 'VK_Q', empty, empty], + [0, ScanCode.KeyR, 'KeyR', KeyCode.KeyR, 'R', 82, 'VK_R', empty, empty], + [0, ScanCode.KeyS, 'KeyS', KeyCode.KeyS, 'S', 83, 'VK_S', empty, empty], + [0, ScanCode.KeyT, 'KeyT', KeyCode.KeyT, 'T', 84, 'VK_T', empty, empty], + [0, ScanCode.KeyU, 'KeyU', KeyCode.KeyU, 'U', 85, 'VK_U', empty, empty], + [0, ScanCode.KeyV, 'KeyV', KeyCode.KeyV, 'V', 86, 'VK_V', empty, empty], + [0, ScanCode.KeyW, 'KeyW', KeyCode.KeyW, 'W', 87, 'VK_W', empty, empty], + [0, ScanCode.KeyX, 'KeyX', KeyCode.KeyX, 'X', 88, 'VK_X', empty, empty], + [0, ScanCode.KeyY, 'KeyY', KeyCode.KeyY, 'Y', 89, 'VK_Y', empty, empty], + [0, ScanCode.KeyZ, 'KeyZ', KeyCode.KeyZ, 'Z', 90, 'VK_Z', empty, empty], + [0, ScanCode.Digit1, 'Digit1', KeyCode.Digit1, '1', 49, 'VK_1', empty, empty], + [0, ScanCode.Digit2, 'Digit2', KeyCode.Digit2, '2', 50, 'VK_2', empty, empty], + [0, ScanCode.Digit3, 'Digit3', KeyCode.Digit3, '3', 51, 'VK_3', empty, empty], + [0, ScanCode.Digit4, 'Digit4', KeyCode.Digit4, '4', 52, 'VK_4', empty, empty], + [0, ScanCode.Digit5, 'Digit5', KeyCode.Digit5, '5', 53, 'VK_5', empty, empty], + [0, ScanCode.Digit6, 'Digit6', KeyCode.Digit6, '6', 54, 'VK_6', empty, empty], + [0, ScanCode.Digit7, 'Digit7', KeyCode.Digit7, '7', 55, 'VK_7', empty, empty], + [0, ScanCode.Digit8, 'Digit8', KeyCode.Digit8, '8', 56, 'VK_8', empty, empty], + [0, ScanCode.Digit9, 'Digit9', KeyCode.Digit9, '9', 57, 'VK_9', empty, empty], + [0, ScanCode.Digit0, 'Digit0', KeyCode.Digit0, '0', 48, 'VK_0', empty, empty], + [1, ScanCode.Enter, 'Enter', KeyCode.Enter, 'Enter', 13, 'VK_RETURN', empty, empty], + [1, ScanCode.Escape, 'Escape', KeyCode.Escape, 'Escape', 27, 'VK_ESCAPE', empty, empty], + [1, ScanCode.Backspace, 'Backspace', KeyCode.Backspace, 'Backspace', 8, 'VK_BACK', empty, empty], + [1, ScanCode.Tab, 'Tab', KeyCode.Tab, 'Tab', 9, 'VK_TAB', empty, empty], + [1, ScanCode.Space, 'Space', KeyCode.Space, 'Space', 32, 'VK_SPACE', empty, empty], + [0, ScanCode.Minus, 'Minus', KeyCode.Minus, '-', 189, 'VK_OEM_MINUS', '-', 'OEM_MINUS'], + [0, ScanCode.Equal, 'Equal', KeyCode.Equal, '=', 187, 'VK_OEM_PLUS', '=', 'OEM_PLUS'], + [0, ScanCode.BracketLeft, 'BracketLeft', KeyCode.BracketLeft, '[', 219, 'VK_OEM_4', '[', 'OEM_4'], + [0, ScanCode.BracketRight, 'BracketRight', KeyCode.BracketRight, ']', 221, 'VK_OEM_6', ']', 'OEM_6'], + [0, ScanCode.Backslash, 'Backslash', KeyCode.Backslash, '\\', 220, 'VK_OEM_5', '\\', 'OEM_5'], + [0, ScanCode.IntlHash, 'IntlHash', KeyCode.Unknown, empty, 0, empty, empty, empty], // has been dropped from the w3c spec + [0, ScanCode.Semicolon, 'Semicolon', KeyCode.Semicolon, ';', 186, 'VK_OEM_1', ';', 'OEM_1'], + [0, ScanCode.Quote, 'Quote', KeyCode.Quote, '\'', 222, 'VK_OEM_7', '\'', 'OEM_7'], + [0, ScanCode.Backquote, 'Backquote', KeyCode.Backquote, '`', 192, 'VK_OEM_3', '`', 'OEM_3'], + [0, ScanCode.Comma, 'Comma', KeyCode.Comma, ',', 188, 'VK_OEM_COMMA', ',', 'OEM_COMMA'], + [0, ScanCode.Period, 'Period', KeyCode.Period, '.', 190, 'VK_OEM_PERIOD', '.', 'OEM_PERIOD'], + [0, ScanCode.Slash, 'Slash', KeyCode.Slash, '/', 191, 'VK_OEM_2', '/', 'OEM_2'], + [1, ScanCode.CapsLock, 'CapsLock', KeyCode.CapsLock, 'CapsLock', 20, 'VK_CAPITAL', empty, empty], + [1, ScanCode.F1, 'F1', KeyCode.F1, 'F1', 112, 'VK_F1', empty, empty], + [1, ScanCode.F2, 'F2', KeyCode.F2, 'F2', 113, 'VK_F2', empty, empty], + [1, ScanCode.F3, 'F3', KeyCode.F3, 'F3', 114, 'VK_F3', empty, empty], + [1, ScanCode.F4, 'F4', KeyCode.F4, 'F4', 115, 'VK_F4', empty, empty], + [1, ScanCode.F5, 'F5', KeyCode.F5, 'F5', 116, 'VK_F5', empty, empty], + [1, ScanCode.F6, 'F6', KeyCode.F6, 'F6', 117, 'VK_F6', empty, empty], + [1, ScanCode.F7, 'F7', KeyCode.F7, 'F7', 118, 'VK_F7', empty, empty], + [1, ScanCode.F8, 'F8', KeyCode.F8, 'F8', 119, 'VK_F8', empty, empty], + [1, ScanCode.F9, 'F9', KeyCode.F9, 'F9', 120, 'VK_F9', empty, empty], + [1, ScanCode.F10, 'F10', KeyCode.F10, 'F10', 121, 'VK_F10', empty, empty], + [1, ScanCode.F11, 'F11', KeyCode.F11, 'F11', 122, 'VK_F11', empty, empty], + [1, ScanCode.F12, 'F12', KeyCode.F12, 'F12', 123, 'VK_F12', empty, empty], + [1, ScanCode.PrintScreen, 'PrintScreen', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.ScrollLock, 'ScrollLock', KeyCode.ScrollLock, 'ScrollLock', 145, 'VK_SCROLL', empty, empty], + [1, ScanCode.Pause, 'Pause', KeyCode.PauseBreak, 'PauseBreak', 19, 'VK_PAUSE', empty, empty], + [1, ScanCode.Insert, 'Insert', KeyCode.Insert, 'Insert', 45, 'VK_INSERT', empty, empty], + [1, ScanCode.Home, 'Home', KeyCode.Home, 'Home', 36, 'VK_HOME', empty, empty], + [1, ScanCode.PageUp, 'PageUp', KeyCode.PageUp, 'PageUp', 33, 'VK_PRIOR', empty, empty], + [1, ScanCode.Delete, 'Delete', KeyCode.Delete, 'Delete', 46, 'VK_DELETE', empty, empty], + [1, ScanCode.End, 'End', KeyCode.End, 'End', 35, 'VK_END', empty, empty], + [1, ScanCode.PageDown, 'PageDown', KeyCode.PageDown, 'PageDown', 34, 'VK_NEXT', empty, empty], + [1, ScanCode.ArrowRight, 'ArrowRight', KeyCode.RightArrow, 'RightArrow', 39, 'VK_RIGHT', 'Right', empty], + [1, ScanCode.ArrowLeft, 'ArrowLeft', KeyCode.LeftArrow, 'LeftArrow', 37, 'VK_LEFT', 'Left', empty], + [1, ScanCode.ArrowDown, 'ArrowDown', KeyCode.DownArrow, 'DownArrow', 40, 'VK_DOWN', 'Down', empty], + [1, ScanCode.ArrowUp, 'ArrowUp', KeyCode.UpArrow, 'UpArrow', 38, 'VK_UP', 'Up', empty], + [1, ScanCode.NumLock, 'NumLock', KeyCode.NumLock, 'NumLock', 144, 'VK_NUMLOCK', empty, empty], + [1, ScanCode.NumpadDivide, 'NumpadDivide', KeyCode.NumpadDivide, 'NumPad_Divide', 111, 'VK_DIVIDE', empty, empty], + [1, ScanCode.NumpadMultiply, 'NumpadMultiply', KeyCode.NumpadMultiply, 'NumPad_Multiply', 106, 'VK_MULTIPLY', empty, empty], + [1, ScanCode.NumpadSubtract, 'NumpadSubtract', KeyCode.NumpadSubtract, 'NumPad_Subtract', 109, 'VK_SUBTRACT', empty, empty], + [1, ScanCode.NumpadAdd, 'NumpadAdd', KeyCode.NumpadAdd, 'NumPad_Add', 107, 'VK_ADD', empty, empty], + [1, ScanCode.NumpadEnter, 'NumpadEnter', KeyCode.Enter, empty, 0, empty, empty, empty], + [1, ScanCode.Numpad1, 'Numpad1', KeyCode.Numpad1, 'NumPad1', 97, 'VK_NUMPAD1', empty, empty], + [1, ScanCode.Numpad2, 'Numpad2', KeyCode.Numpad2, 'NumPad2', 98, 'VK_NUMPAD2', empty, empty], + [1, ScanCode.Numpad3, 'Numpad3', KeyCode.Numpad3, 'NumPad3', 99, 'VK_NUMPAD3', empty, empty], + [1, ScanCode.Numpad4, 'Numpad4', KeyCode.Numpad4, 'NumPad4', 100, 'VK_NUMPAD4', empty, empty], + [1, ScanCode.Numpad5, 'Numpad5', KeyCode.Numpad5, 'NumPad5', 101, 'VK_NUMPAD5', empty, empty], + [1, ScanCode.Numpad6, 'Numpad6', KeyCode.Numpad6, 'NumPad6', 102, 'VK_NUMPAD6', empty, empty], + [1, ScanCode.Numpad7, 'Numpad7', KeyCode.Numpad7, 'NumPad7', 103, 'VK_NUMPAD7', empty, empty], + [1, ScanCode.Numpad8, 'Numpad8', KeyCode.Numpad8, 'NumPad8', 104, 'VK_NUMPAD8', empty, empty], + [1, ScanCode.Numpad9, 'Numpad9', KeyCode.Numpad9, 'NumPad9', 105, 'VK_NUMPAD9', empty, empty], + [1, ScanCode.Numpad0, 'Numpad0', KeyCode.Numpad0, 'NumPad0', 96, 'VK_NUMPAD0', empty, empty], + [1, ScanCode.NumpadDecimal, 'NumpadDecimal', KeyCode.NumpadDecimal, 'NumPad_Decimal', 110, 'VK_DECIMAL', empty, empty], + [0, ScanCode.IntlBackslash, 'IntlBackslash', KeyCode.IntlBackslash, 'OEM_102', 226, 'VK_OEM_102', empty, empty], + [1, ScanCode.ContextMenu, 'ContextMenu', KeyCode.ContextMenu, 'ContextMenu', 93, empty, empty, empty], + [1, ScanCode.Power, 'Power', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadEqual, 'NumpadEqual', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.F13, 'F13', KeyCode.F13, 'F13', 124, 'VK_F13', empty, empty], + [1, ScanCode.F14, 'F14', KeyCode.F14, 'F14', 125, 'VK_F14', empty, empty], + [1, ScanCode.F15, 'F15', KeyCode.F15, 'F15', 126, 'VK_F15', empty, empty], + [1, ScanCode.F16, 'F16', KeyCode.F16, 'F16', 127, 'VK_F16', empty, empty], + [1, ScanCode.F17, 'F17', KeyCode.F17, 'F17', 128, 'VK_F17', empty, empty], + [1, ScanCode.F18, 'F18', KeyCode.F18, 'F18', 129, 'VK_F18', empty, empty], + [1, ScanCode.F19, 'F19', KeyCode.F19, 'F19', 130, 'VK_F19', empty, empty], + [1, ScanCode.F20, 'F20', KeyCode.F20, 'F20', 131, 'VK_F20', empty, empty], + [1, ScanCode.F21, 'F21', KeyCode.F21, 'F21', 132, 'VK_F21', empty, empty], + [1, ScanCode.F22, 'F22', KeyCode.F22, 'F22', 133, 'VK_F22', empty, empty], + [1, ScanCode.F23, 'F23', KeyCode.F23, 'F23', 134, 'VK_F23', empty, empty], + [1, ScanCode.F24, 'F24', KeyCode.F24, 'F24', 135, 'VK_F24', empty, empty], + [1, ScanCode.Open, 'Open', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Help, 'Help', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Select, 'Select', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Again, 'Again', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Undo, 'Undo', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Cut, 'Cut', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Copy, 'Copy', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Paste, 'Paste', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Find, 'Find', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.AudioVolumeMute, 'AudioVolumeMute', KeyCode.AudioVolumeMute, 'AudioVolumeMute', 173, 'VK_VOLUME_MUTE', empty, empty], + [1, ScanCode.AudioVolumeUp, 'AudioVolumeUp', KeyCode.AudioVolumeUp, 'AudioVolumeUp', 175, 'VK_VOLUME_UP', empty, empty], + [1, ScanCode.AudioVolumeDown, 'AudioVolumeDown', KeyCode.AudioVolumeDown, 'AudioVolumeDown', 174, 'VK_VOLUME_DOWN', empty, empty], + [1, ScanCode.NumpadComma, 'NumpadComma', KeyCode.NUMPAD_SEPARATOR, 'NumPad_Separator', 108, 'VK_SEPARATOR', empty, empty], + [0, ScanCode.IntlRo, 'IntlRo', KeyCode.ABNT_C1, 'ABNT_C1', 193, 'VK_ABNT_C1', empty, empty], + [1, ScanCode.KanaMode, 'KanaMode', KeyCode.Unknown, empty, 0, empty, empty, empty], + [0, ScanCode.IntlYen, 'IntlYen', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Convert, 'Convert', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NonConvert, 'NonConvert', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Lang1, 'Lang1', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Lang2, 'Lang2', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Lang3, 'Lang3', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Lang4, 'Lang4', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Lang5, 'Lang5', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Abort, 'Abort', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.Props, 'Props', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadParenLeft, 'NumpadParenLeft', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadParenRight, 'NumpadParenRight', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadBackspace, 'NumpadBackspace', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadMemoryStore, 'NumpadMemoryStore', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadMemoryRecall, 'NumpadMemoryRecall', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadMemoryClear, 'NumpadMemoryClear', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadMemoryAdd, 'NumpadMemoryAdd', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadMemorySubtract, 'NumpadMemorySubtract', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.NumpadClear, 'NumpadClear', KeyCode.Clear, 'Clear', 12, 'VK_CLEAR', empty, empty], + [1, ScanCode.NumpadClearEntry, 'NumpadClearEntry', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.None, empty, KeyCode.Ctrl, 'Ctrl', 17, 'VK_CONTROL', empty, empty], + [1, ScanCode.None, empty, KeyCode.Shift, 'Shift', 16, 'VK_SHIFT', empty, empty], + [1, ScanCode.None, empty, KeyCode.Alt, 'Alt', 18, 'VK_MENU', empty, empty], + [1, ScanCode.None, empty, KeyCode.Meta, 'Meta', 91, 'VK_COMMAND', empty, empty], + [1, ScanCode.ControlLeft, 'ControlLeft', KeyCode.Ctrl, empty, 0, 'VK_LCONTROL', empty, empty], + [1, ScanCode.ShiftLeft, 'ShiftLeft', KeyCode.Shift, empty, 0, 'VK_LSHIFT', empty, empty], + [1, ScanCode.AltLeft, 'AltLeft', KeyCode.Alt, empty, 0, 'VK_LMENU', empty, empty], + [1, ScanCode.MetaLeft, 'MetaLeft', KeyCode.Meta, empty, 0, 'VK_LWIN', empty, empty], + [1, ScanCode.ControlRight, 'ControlRight', KeyCode.Ctrl, empty, 0, 'VK_RCONTROL', empty, empty], + [1, ScanCode.ShiftRight, 'ShiftRight', KeyCode.Shift, empty, 0, 'VK_RSHIFT', empty, empty], + [1, ScanCode.AltRight, 'AltRight', KeyCode.Alt, empty, 0, 'VK_RMENU', empty, empty], + [1, ScanCode.MetaRight, 'MetaRight', KeyCode.Meta, empty, 0, 'VK_RWIN', empty, empty], + [1, ScanCode.BrightnessUp, 'BrightnessUp', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.BrightnessDown, 'BrightnessDown', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MediaPlay, 'MediaPlay', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MediaRecord, 'MediaRecord', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MediaFastForward, 'MediaFastForward', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MediaRewind, 'MediaRewind', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MediaTrackNext, 'MediaTrackNext', KeyCode.MediaTrackNext, 'MediaTrackNext', 176, 'VK_MEDIA_NEXT_TRACK', empty, empty], + [1, ScanCode.MediaTrackPrevious, 'MediaTrackPrevious', KeyCode.MediaTrackPrevious, 'MediaTrackPrevious', 177, 'VK_MEDIA_PREV_TRACK', empty, empty], + [1, ScanCode.MediaStop, 'MediaStop', KeyCode.MediaStop, 'MediaStop', 178, 'VK_MEDIA_STOP', empty, empty], + [1, ScanCode.Eject, 'Eject', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MediaPlayPause, 'MediaPlayPause', KeyCode.MediaPlayPause, 'MediaPlayPause', 179, 'VK_MEDIA_PLAY_PAUSE', empty, empty], + [1, ScanCode.MediaSelect, 'MediaSelect', KeyCode.LaunchMediaPlayer, 'LaunchMediaPlayer', 181, 'VK_MEDIA_LAUNCH_MEDIA_SELECT', empty, empty], + [1, ScanCode.LaunchMail, 'LaunchMail', KeyCode.LaunchMail, 'LaunchMail', 180, 'VK_MEDIA_LAUNCH_MAIL', empty, empty], + [1, ScanCode.LaunchApp2, 'LaunchApp2', KeyCode.LaunchApp2, 'LaunchApp2', 183, 'VK_MEDIA_LAUNCH_APP2', empty, empty], + [1, ScanCode.LaunchApp1, 'LaunchApp1', KeyCode.Unknown, empty, 0, 'VK_MEDIA_LAUNCH_APP1', empty, empty], + [1, ScanCode.SelectTask, 'SelectTask', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.LaunchScreenSaver, 'LaunchScreenSaver', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.BrowserSearch, 'BrowserSearch', KeyCode.BrowserSearch, 'BrowserSearch', 170, 'VK_BROWSER_SEARCH', empty, empty], + [1, ScanCode.BrowserHome, 'BrowserHome', KeyCode.BrowserHome, 'BrowserHome', 172, 'VK_BROWSER_HOME', empty, empty], + [1, ScanCode.BrowserBack, 'BrowserBack', KeyCode.BrowserBack, 'BrowserBack', 166, 'VK_BROWSER_BACK', empty, empty], + [1, ScanCode.BrowserForward, 'BrowserForward', KeyCode.BrowserForward, 'BrowserForward', 167, 'VK_BROWSER_FORWARD', empty, empty], + [1, ScanCode.BrowserStop, 'BrowserStop', KeyCode.Unknown, empty, 0, 'VK_BROWSER_STOP', empty, empty], + [1, ScanCode.BrowserRefresh, 'BrowserRefresh', KeyCode.Unknown, empty, 0, 'VK_BROWSER_REFRESH', empty, empty], + [1, ScanCode.BrowserFavorites, 'BrowserFavorites', KeyCode.Unknown, empty, 0, 'VK_BROWSER_FAVORITES', empty, empty], + [1, ScanCode.ZoomToggle, 'ZoomToggle', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MailReply, 'MailReply', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MailForward, 'MailForward', KeyCode.Unknown, empty, 0, empty, empty, empty], + [1, ScanCode.MailSend, 'MailSend', KeyCode.Unknown, empty, 0, empty, empty, empty], // See https://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html // If an Input Method Editor is processing key input and the event is keydown, return 229. - [109, 1, ScanCode.None, empty, KeyCode.KEY_IN_COMPOSITION, 'KeyInComposition', 229, empty, empty, empty], - [111, 1, ScanCode.None, empty, KeyCode.ABNT_C2, 'ABNT_C2', 194, 'VK_ABNT_C2', empty, empty], - [91, 1, ScanCode.None, empty, KeyCode.OEM_8, 'OEM_8', 223, 'VK_OEM_8', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_KANA', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HANGUL', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_JUNJA', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_FINAL', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HANJA', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_KANJI', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_CONVERT', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_NONCONVERT', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ACCEPT', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_MODECHANGE', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_SELECT', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PRINT', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EXECUTE', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_SNAPSHOT', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HELP', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_APPS', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PROCESSKEY', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PACKET', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_DBE_SBCSCHAR', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_DBE_DBCSCHAR', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ATTN', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_CRSEL', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EXSEL', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EREOF', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PLAY', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ZOOM', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_NONAME', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PA1', empty, empty], - [0, 1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_OEM_CLEAR', empty, empty], + [1, ScanCode.None, empty, KeyCode.KEY_IN_COMPOSITION, 'KeyInComposition', 229, empty, empty, empty], + [1, ScanCode.None, empty, KeyCode.ABNT_C2, 'ABNT_C2', 194, 'VK_ABNT_C2', empty, empty], + [1, ScanCode.None, empty, KeyCode.OEM_8, 'OEM_8', 223, 'VK_OEM_8', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_KANA', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HANGUL', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_JUNJA', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_FINAL', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HANJA', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_KANJI', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_CONVERT', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_NONCONVERT', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ACCEPT', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_MODECHANGE', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_SELECT', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PRINT', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EXECUTE', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_SNAPSHOT', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_HELP', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_APPS', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PROCESSKEY', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PACKET', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_DBE_SBCSCHAR', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_DBE_DBCSCHAR', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ATTN', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_CRSEL', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EXSEL', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_EREOF', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PLAY', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_ZOOM', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_NONAME', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_PA1', empty, empty], + [1, ScanCode.None, empty, KeyCode.Unknown, empty, 0, 'VK_OEM_CLEAR', empty, empty], ]; const seenKeyCode: boolean[] = []; const seenScanCode: boolean[] = []; for (const mapping of mappings) { - const [_keyCodeOrd, immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel] = mapping; + const [immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel] = mapping; if (!seenScanCode[scanCode]) { seenScanCode[scanCode] = true; scanCodeIntToStr[scanCode] = scanCodeStr; diff --git a/src/vs/base/common/keybindings.ts b/src/vs/base/common/keybindings.ts index f3523709f9f..375256237a6 100644 --- a/src/vs/base/common/keybindings.ts +++ b/src/vs/base/common/keybindings.ts @@ -28,19 +28,27 @@ const enum BinaryKeybindingsMask { KeyCode = 0x000000FF } -export function decodeKeybinding(keybinding: number, OS: OperatingSystem): Keybinding | null { - if (keybinding === 0) { - return null; +export function decodeKeybinding(keybinding: number | number[], OS: OperatingSystem): Keybinding | null { + if (typeof keybinding === 'number') { + if (keybinding === 0) { + return null; + } + const firstChord = (keybinding & 0x0000FFFF) >>> 0; + const secondChord = (keybinding & 0xFFFF0000) >>> 16; + if (secondChord !== 0) { + return new Keybinding([ + createSimpleKeybinding(firstChord, OS), + createSimpleKeybinding(secondChord, OS) + ]); + } + return new Keybinding([createSimpleKeybinding(firstChord, OS)]); + } else { + const chords = []; + for (let i = 0; i < keybinding.length; i++) { + chords.push(createSimpleKeybinding(keybinding[i], OS)); + } + return new Keybinding(chords); } - const firstChord = (keybinding & 0x0000FFFF) >>> 0; - const secondChord = (keybinding & 0xFFFF0000) >>> 16; - if (secondChord !== 0) { - return new Keybinding([ - createSimpleKeybinding(firstChord, OS), - createSimpleKeybinding(secondChord, OS) - ]); - } - return new Keybinding([createSimpleKeybinding(firstChord, OS)]); } export function createSimpleKeybinding(keybinding: number, OS: OperatingSystem): KeyCodeChord { diff --git a/src/vs/base/common/labels.ts b/src/vs/base/common/labels.ts index 95b4518feee..707ed621b22 100644 --- a/src/vs/base/common/labels.ts +++ b/src/vs/base/common/labels.ts @@ -436,9 +436,21 @@ export function unmnemonicLabel(label: string): string { } /** - * Splits a path in name and parent path, supporting both '/' and '\' + * Splits a recent label in name and parent path, supporting both '/' and '\' and workspace suffixes */ -export function splitName(fullPath: string): { name: string; parentPath: string } { +export function splitRecentLabel(recentLabel: string) { + if (recentLabel.endsWith(']')) { + // label with workspace suffix + const lastIndexOfSquareBracket = recentLabel.lastIndexOf(' [', recentLabel.length - 2); + if (lastIndexOfSquareBracket !== -1) { + const split = splitName(recentLabel.substring(0, lastIndexOfSquareBracket)); + return { name: split.name, parentPath: split.parentPath + recentLabel.substring(lastIndexOfSquareBracket) }; + } + } + return splitName(recentLabel); +} + +function splitName(fullPath: string): { name: string; parentPath: string } { const p = fullPath.indexOf('/') !== -1 ? posix : win32; const name = p.basename(fullPath); const parentPath = p.dirname(fullPath); diff --git a/src/vs/base/common/lifecycle.ts b/src/vs/base/common/lifecycle.ts index d58b2fa2155..c044d998203 100644 --- a/src/vs/base/common/lifecycle.ts +++ b/src/vs/base/common/lifecycle.ts @@ -187,6 +187,8 @@ export function combinedDisposable(...disposables: IDisposable[]): IDisposable { /** * Turn a function that implements dispose into an {@link IDisposable}. + * + * @param fn Clean up function, guaranteed to be called only **once**. */ export function toDisposable(fn: () => void): IDisposable { const self = trackDisposable({ diff --git a/src/vs/base/common/marked/marked.js b/src/vs/base/common/marked/marked.js index f8ffa170fbb..eb8cde82ab4 100644 --- a/src/vs/base/common/marked/marked.js +++ b/src/vs/base/common/marked/marked.js @@ -19,8 +19,8 @@ // ESM-uncomment-end (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {})); })(this, (function (exports) { 'use strict'; diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts index 4a69ab566b2..b00899c50db 100644 --- a/src/vs/base/common/network.ts +++ b/src/vs/base/common/network.ts @@ -53,15 +53,15 @@ export namespace Schemas { export const vscodeRemoteResource = 'vscode-remote-resource'; + export const vscodeManagedRemoteResource = 'vscode-managed-remote-resource'; + export const vscodeUserData = 'vscode-userdata'; export const vscodeCustomEditor = 'vscode-custom-editor'; export const vscodeNotebookCell = 'vscode-notebook-cell'; - export const vscodeNotebookCellMetadata = 'vscode-notebook-cell-metadata'; export const vscodeNotebookCellOutput = 'vscode-notebook-cell-output'; - export const vscodeInteractive = 'vscode-interactive'; export const vscodeInteractiveInput = 'vscode-interactive-input'; export const vscodeSettings = 'vscode-settings'; @@ -70,6 +70,8 @@ export namespace Schemas { export const vscodeTerminal = 'vscode-terminal'; + export const vscodeChatSesssion = 'vscode-chat-editor'; + /** * Scheme used internally for webviews that aren't linked to a resource (i.e. not custom editors) */ diff --git a/src/vs/base/common/observableImpl/autorun.ts b/src/vs/base/common/observableImpl/autorun.ts index 6efe4736783..aca09e3f08e 100644 --- a/src/vs/base/common/observableImpl/autorun.ts +++ b/src/vs/base/common/observableImpl/autorun.ts @@ -3,34 +3,61 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { assertFn } from 'vs/base/common/assert'; import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IReader, IObservable, IObserver } from 'vs/base/common/observableImpl/base'; +import { IReader, IObservable, IObserver, IChangeContext } from 'vs/base/common/observableImpl/base'; import { getLogger } from 'vs/base/common/observableImpl/logging'; export function autorun(debugName: string, fn: (reader: IReader) => void): IDisposable { - return new AutorunObserver(debugName, fn, undefined); + return new AutorunObserver(debugName, fn, undefined, undefined); } -interface IChangeContext { - readonly changedObservable: IObservable; - readonly change: unknown; - - didChange(observable: IObservable): this is { change: TChange }; -} - -export function autorunHandleChanges( +export function autorunHandleChanges( debugName: string, options: { - /** - * Returns if this change should cause a re-run of the autorun. - */ - handleChange: (context: IChangeContext) => boolean; + createEmptyChangeSummary?: () => TChangeSummary; + handleChange: (context: IChangeContext, changeSummary: TChangeSummary) => boolean; }, - fn: (reader: IReader) => void + fn: (reader: IReader, changeSummary: TChangeSummary) => void ): IDisposable { - return new AutorunObserver(debugName, fn, options.handleChange); + return new AutorunObserver(debugName, fn, options.createEmptyChangeSummary, options.handleChange); } +// TODO@hediet rename to autorunWithStore +export function autorunWithStore2( + debugName: string, + fn: (reader: IReader, store: DisposableStore) => void, +): IDisposable { + return autorunWithStore(fn, debugName); +} + +export function autorunWithStoreHandleChanges( + debugName: string, + options: { + createEmptyChangeSummary?: () => TChangeSummary; + handleChange: (context: IChangeContext, changeSummary: TChangeSummary) => boolean; + }, + fn: (reader: IReader, changeSummary: TChangeSummary, store: DisposableStore) => void +): IDisposable { + const store = new DisposableStore(); + const disposable = autorunHandleChanges( + debugName, + { + createEmptyChangeSummary: options.createEmptyChangeSummary, + handleChange: options.handleChange, + }, + (reader, changeSummary) => { + store.clear(); + fn(reader, changeSummary, store); + } + ); + return toDisposable(() => { + disposable.dispose(); + store.dispose(); + }); +} + +// TODO@hediet deprecate, rename to autorunWithStoreEx export function autorunWithStore( fn: (reader: IReader, store: DisposableStore) => void, debugName: string @@ -49,104 +76,140 @@ export function autorunWithStore( }); } -export class AutorunObserver implements IObserver, IReader, IDisposable { - public needsToRun = true; +const enum AutorunState { + /** + * A dependency could have changed. + * We need to explicitly ask them if at least one dependency changed. + */ + dependenciesMightHaveChanged = 1, + + /** + * A dependency changed and we need to recompute. + */ + stale = 2, + upToDate = 3, +} + +export class AutorunObserver implements IObserver, IReader, IDisposable { + private state = AutorunState.stale; private updateCount = 0; private disposed = false; - - /** - * The actual dependencies. - */ - private _dependencies = new Set>(); - public get dependencies() { - return this._dependencies; - } - - /** - * Dependencies that have to be removed when {@link runFn} ran through. - */ - private staleDependencies = new Set>(); + private dependencies = new Set>(); + private dependenciesToBeRemoved = new Set>(); + private changeSummary: TChangeSummary | undefined; constructor( public readonly debugName: string, - private readonly runFn: (reader: IReader) => void, - private readonly _handleChange: ((context: IChangeContext) => boolean) | undefined + private readonly runFn: (reader: IReader, changeSummary: TChangeSummary) => void, + private readonly createChangeSummary: (() => TChangeSummary) | undefined, + private readonly _handleChange: ((context: IChangeContext, summary: TChangeSummary) => boolean) | undefined, ) { + this.changeSummary = this.createChangeSummary?.(); getLogger()?.handleAutorunCreated(this); - this.runIfNeeded(); - } - - public subscribeTo(observable: IObservable) { - // In case the run action disposes the autorun - if (this.disposed) { - return; - } - this._dependencies.add(observable); - if (!this.staleDependencies.delete(observable)) { - observable.addObserver(this); - } - } - - public handleChange(observable: IObservable, change: TChange): void { - const shouldReact = this._handleChange ? this._handleChange({ - changedObservable: observable, - change, - didChange: o => o === observable as any, - }) : true; - this.needsToRun = this.needsToRun || shouldReact; - - if (this.updateCount === 0) { - this.runIfNeeded(); - } - } - - public beginUpdate(): void { - this.updateCount++; - } - - public endUpdate(): void { - this.updateCount--; - if (this.updateCount === 0) { - this.runIfNeeded(); - } - } - - private runIfNeeded(): void { - if (!this.needsToRun) { - return; - } - // Assert: this.staleDependencies is an empty set. - const emptySet = this.staleDependencies; - this.staleDependencies = this._dependencies; - this._dependencies = emptySet; - - this.needsToRun = false; - - getLogger()?.handleAutorunTriggered(this); - - try { - this.runFn(this); - } finally { - // We don't want our observed observables to think that they are (not even temporarily) not being observed. - // Thus, we only unsubscribe from observables that are definitely not read anymore. - for (const o of this.staleDependencies) { - o.removeObserver(this); - } - this.staleDependencies.clear(); - } + this._runIfNeeded(); } public dispose(): void { this.disposed = true; - for (const o of this._dependencies) { + for (const o of this.dependencies) { o.removeObserver(this); } - this._dependencies.clear(); + this.dependencies.clear(); + } + + private _runIfNeeded() { + if (this.state === AutorunState.upToDate) { + return; + } + + const emptySet = this.dependenciesToBeRemoved; + this.dependenciesToBeRemoved = this.dependencies; + this.dependencies = emptySet; + + this.state = AutorunState.upToDate; + + getLogger()?.handleAutorunTriggered(this); + + try { + const changeSummary = this.changeSummary!; + this.changeSummary = this.createChangeSummary?.(); + this.runFn(this, changeSummary); + } finally { + // We don't want our observed observables to think that they are (not even temporarily) not being observed. + // Thus, we only unsubscribe from observables that are definitely not read anymore. + for (const o of this.dependenciesToBeRemoved) { + o.removeObserver(this); + } + this.dependenciesToBeRemoved.clear(); + } } public toString(): string { return `Autorun<${this.debugName}>`; } + + // IObserver implementation + public beginUpdate(): void { + if (this.state === AutorunState.upToDate) { + this.state = AutorunState.dependenciesMightHaveChanged; + } + this.updateCount++; + } + + public endUpdate(): void { + if (this.updateCount === 1) { + do { + if (this.state === AutorunState.dependenciesMightHaveChanged) { + this.state = AutorunState.upToDate; + for (const d of this.dependencies) { + d.reportChanges(); + if (this.state as AutorunState === AutorunState.stale) { + // The other dependencies will refresh on demand + break; + } + } + } + + this._runIfNeeded(); + } while (this.state !== AutorunState.upToDate); + } + this.updateCount--; + + assertFn(() => this.updateCount >= 0); + } + + public handlePossibleChange(observable: IObservable): void { + if (this.state === AutorunState.upToDate && this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) { + this.state = AutorunState.dependenciesMightHaveChanged; + } + } + + public handleChange(observable: IObservable, change: TChange): void { + if (this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) { + const shouldReact = this._handleChange ? this._handleChange({ + changedObservable: observable, + change, + didChange: o => o === observable as any, + }, this.changeSummary!) : true; + if (shouldReact) { + this.state = AutorunState.stale; + } + } + } + + // IReader implementation + public readObservable(observable: IObservable): T { + // In case the run action disposes the autorun + if (this.disposed) { + return observable.get(); + } + + observable.addObserver(this); + const value = observable.get(); + this.dependencies.add(observable); + this.dependenciesToBeRemoved.delete(observable); + return value; + } } export namespace autorun { diff --git a/src/vs/base/common/observableImpl/base.ts b/src/vs/base/common/observableImpl/base.ts index 9d83083e49b..61addad7411 100644 --- a/src/vs/base/common/observableImpl/base.ts +++ b/src/vs/base/common/observableImpl/base.ts @@ -3,69 +3,118 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { IDisposable } from 'vs/base/common/lifecycle'; import type { derived } from 'vs/base/common/observableImpl/derived'; import { getLogger } from 'vs/base/common/observableImpl/logging'; -export interface IObservable { - readonly TChange: TChange; - +/** + * Represents an observable value. + * @template T The type of the value. + * @template TChange The type of delta information (usually `void` and only used in advanced scenarios). + */ +export interface IObservable { /** - * Reads the current value. + * Returns the current value. * - * Must not be called from {@link IObserver.handleChange}. + * Calls {@link IObserver.handleChange} if the observable notices that the value changed. + * Must not be called from {@link IObserver.handleChange}! */ get(): T; /** - * Adds an observer. + * Forces the observable to check for and report changes. + * + * Has the same effect as calling {@link IObservable.get}, but does not force the observable + * to actually construct the value, e.g. if change deltas are used. + * Calls {@link IObserver.handleChange} if the observable notices that the value changed. + * Must not be called from {@link IObserver.handleChange}! + */ + reportChanges(): void; + + /** + * Adds the observer to the set of subscribed observers. + * This method is idempotent. */ addObserver(observer: IObserver): void; + + /** + * Removes the observer from the set of subscribed observers. + * This method is idempotent. + */ removeObserver(observer: IObserver): void; /** - * Subscribes the reader to this observable and returns the current value of this observable. + * Reads the current value and subscribes to this observable. + * + * Just calls {@link IReader.readObservable} if a reader is given, otherwise {@link IObservable.get} + * (see {@link ConvenientObservable.read}). */ - read(reader: IReader): T; + read(reader: IReader | undefined): T; - map(fn: (value: T) => TNew): IObservable; + /** + * Creates a derived observable that depends on this observable. + * Use the reader to read other observables + * (see {@link ConvenientObservable.map}). + */ + map(fn: (value: T, reader: IReader) => TNew): IObservable; + /** + * A human-readable name for debugging purposes. + */ readonly debugName: string; + + /** + * This property captures the type of the change object. Do not use it at runtime! + */ + readonly TChange: TChange; } export interface IReader { /** - * Reports an observable that was read. - * - * Is called by {@link IObservable.read}. + * Reads the value of an observable and subscribes to it. */ - subscribeTo(observable: IObservable): void; + readObservable(observable: IObservable): T; } +/** + * Represents an observer that can be subscribed to an observable. + * + * If an observer is subscribed to an observable and that observable didn't signal + * a change through one of the observer methods, the observer can assume that the + * observable didn't change. + * If an observable reported a possible change, {@link IObservable.reportChanges} forces + * the observable to report an actual change if there was one. + */ export interface IObserver { /** - * Indicates that an update operation is about to begin. + * Signals that the given observable might have changed and a transaction potentially modifying that observable started. + * Before the given observable can call this method again, is must call {@link IObserver.endUpdate}. * - * During an update, invariants might not hold for subscribed observables and - * change events might be delayed. - * However, all changes must be reported before all update operations are over. + * The method {@link IObservable.reportChanges} can be used to force the observable to report the changes. */ beginUpdate(observable: IObservable): void; /** - * Is called by a subscribed observable immediately after it notices a change. - * - * When {@link IObservable.get} returns and no change has been reported, - * there has been no change for that observable. - * - * Implementations must not call into other observables! - * The change should be processed when {@link IObserver.endUpdate} is called. - */ - handleChange(observable: IObservable, change: TChange): void; - - /** - * Indicates that an update operation has completed. + * Signals that the transaction that potentially modified the given observable ended. */ endUpdate(observable: IObservable): void; + + /** + * Signals that the given observable might have changed. + * The method {@link IObservable.reportChanges} can be used to force the observable to report the changes. + * + * Implementations must not call into other observables, as they might not have received this event yet! + * The change should be processed lazily or in {@link IObserver.endUpdate}. + */ + handlePossibleChange(observable: IObservable): void; + + /** + * Signals that the given observable changed. + * + * Implementations must not call into other observables, as they might not have received this event yet! + * The change should be processed lazily or in {@link IObserver.endUpdate}. + */ + handleChange(observable: IObservable, change: TChange): void; } export interface ISettable { @@ -74,13 +123,10 @@ export interface ISettable { export interface ITransaction { /** - * Calls `Observer.beginUpdate` immediately - * and `Observer.endUpdate` when the transaction is complete. + * Calls {@link Observer.beginUpdate} immediately + * and {@link Observer.endUpdate} when the transaction ends. */ - updateObserver( - observer: IObserver, - observable: IObservable - ): void; + updateObserver(observer: IObserver, observable: IObservable): void; } let _derived: typeof derived; @@ -96,23 +142,31 @@ export abstract class ConvenientObservable implements IObservable(fn: (value: T) => TNew): IObservable { + public map(fn: (value: T, reader: IReader) => TNew): IObservable { return _derived( () => { const name = getFunctionName(fn); return name !== undefined ? name : `${this.debugName} (mapped)`; }, - (reader) => fn(this.read(reader)) + (reader) => fn(this.read(reader), reader) ); } @@ -122,7 +176,6 @@ export abstract class ConvenientObservable implements IObservable extends ConvenientObservable { protected readonly observers = new Set(); - /** @sealed */ public addObserver(observer: IObserver): void { const len = this.observers.size; this.observers.add(observer); @@ -131,7 +184,6 @@ export abstract class BaseObservable extends ConvenientObserv } } - /** @sealed */ public removeObserver(observer: IObserver): void { const deleted = this.observers.delete(observer); if (deleted && this.observers.size === 0) { @@ -154,13 +206,12 @@ export function transaction(fn: (tx: ITransaction) => void, getDebugName?: () => } } -export function getFunctionName(fn: Function): string | undefined { - const fnSrc = fn.toString(); - // Pattern: /** @description ... */ - const regexp = /\/\*\*\s*@description\s*([^*]*)\*\//; - const match = regexp.exec(fnSrc); - const result = match ? match[1] : undefined; - return result?.trim(); +export function subtransaction(tx: ITransaction | undefined, fn: (tx: ITransaction) => void, getDebugName?: () => string): void { + if (!tx) { + transaction(fn, getDebugName); + } else { + fn(tx); + } } export class TransactionImpl implements ITransaction { @@ -175,10 +226,7 @@ export class TransactionImpl implements ITransaction { return getFunctionName(this.fn); } - public updateObserver( - observer: IObserver, - observable: IObservable - ): void { + public updateObserver(observer: IObserver, observable: IObservable): void { this.updatingObservers!.push({ observer, observable }); observer.beginUpdate(observable); } @@ -193,9 +241,22 @@ export class TransactionImpl implements ITransaction { } } +export function getFunctionName(fn: Function): string | undefined { + const fnSrc = fn.toString(); + // Pattern: /** @description ... */ + const regexp = /\/\*\*\s*@description\s*([^*]*)\*\//; + const match = regexp.exec(fnSrc); + const result = match ? match[1] : undefined; + return result?.trim(); +} + export interface ISettableObservable extends IObservable, ISettable { } +/** + * Creates an observable value. + * Observers get informed when the value changes. + */ export function observableValue(name: string, initialValue: T): ISettableObservable { return new ObservableValue(name, initialValue); } @@ -204,41 +265,81 @@ export class ObservableValue extends BaseObservable implements ISettableObservable { - private value: T; + protected _value: T; constructor(public readonly debugName: string, initialValue: T) { super(); - this.value = initialValue; + this._value = initialValue; } - public get(): T { - return this.value; + return this._value; } public set(value: T, tx: ITransaction | undefined, change: TChange): void { - if (this.value === value) { + if (this._value === value) { return; } + let _tx: TransactionImpl | undefined; if (!tx) { - transaction((tx) => { - this.set(value, tx, change); - }, () => `Setting ${this.debugName}`); - return; + tx = _tx = new TransactionImpl(() => { }, () => `Setting ${this.debugName}`); } + try { + const oldValue = this._value; + this._setValue(value); + getLogger()?.handleObservableChanged(this, { oldValue, newValue: value, change, didChange: true }); - const oldValue = this.value; - this.value = value; - getLogger()?.handleObservableChanged(this, { oldValue, newValue: value, change, didChange: true }); - - for (const observer of this.observers) { - tx.updateObserver(observer, this); - observer.handleChange(this, change); + for (const observer of this.observers) { + tx.updateObserver(observer, this); + observer.handleChange(this, change); + } + } finally { + if (_tx) { + _tx.finish(); + } } } override toString(): string { - return `${this.debugName}: ${this.value}`; + return `${this.debugName}: ${this._value}`; + } + + protected _setValue(newValue: T): void { + this._value = newValue; } } +export function disposableObservableValue(name: string, initialValue: T): ISettableObservable & IDisposable { + return new DisposableObservableValue(name, initialValue); +} + +export class DisposableObservableValue extends ObservableValue implements IDisposable { + protected override _setValue(newValue: T): void { + if (this._value === newValue) { + return; + } + if (this._value) { + this._value.dispose(); + } + this._value = newValue; + } + + public dispose(): void { + this._value?.dispose(); + } +} + +export interface IChangeContext { + readonly changedObservable: IObservable; + readonly change: unknown; + + didChange(observable: IObservable): this is { change: TChange }; +} + +export interface IChangeTracker { + /** + * Returns if this change should cause an invalidation. + * Can record the changes to just process deltas. + */ + handleChange(context: IChangeContext): boolean; +} diff --git a/src/vs/base/common/observableImpl/derived.ts b/src/vs/base/common/observableImpl/derived.ts index 84a93132f15..0bfe5d71681 100644 --- a/src/vs/base/common/observableImpl/derived.ts +++ b/src/vs/base/common/observableImpl/derived.ts @@ -3,30 +3,64 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IReader, IObservable, BaseObservable, IObserver, _setDerived } from 'vs/base/common/observableImpl/base'; +import { BugIndicatingError } from 'vs/base/common/errors'; +import { DisposableStore } from 'vs/base/common/lifecycle'; +import { IReader, IObservable, BaseObservable, IObserver, _setDerived, IChangeContext } from 'vs/base/common/observableImpl/base'; import { getLogger } from 'vs/base/common/observableImpl/logging'; export function derived(debugName: string | (() => string), computeFn: (reader: IReader) => T): IObservable { - return new Derived(debugName, computeFn); + return new Derived(debugName, computeFn, undefined, undefined, undefined); +} + +export function derivedHandleChanges( + debugName: string | (() => string), + options: { + createEmptyChangeSummary: () => TChangeSummary; + handleChange: (context: IChangeContext, changeSummary: TChangeSummary) => boolean; + }, + computeFn: (reader: IReader, changeSummary: TChangeSummary) => T): IObservable { + return new Derived(debugName, computeFn, options.createEmptyChangeSummary, options.handleChange, undefined); +} + +export function derivedWithStore(name: string, computeFn: (reader: IReader, store: DisposableStore) => T): IObservable { + const store = new DisposableStore(); + return new Derived(name, r => { + store.clear(); + return computeFn(r, store); + }, undefined, undefined, () => store.dispose()); } _setDerived(derived); -export class Derived extends BaseObservable implements IReader, IObserver { - private hadValue = false; - private hasValue = false; - private value: T | undefined = undefined; - private updateCount = 0; - - private _dependencies = new Set>(); - public get dependencies(): ReadonlySet> { - return this._dependencies; - } +const enum DerivedState { + /** Initial state, no previous value, recomputation needed */ + initial = 0, /** - * Dependencies that have to be removed when {@link runFn} ran through. + * A dependency could have changed. + * We need to explicitly ask them if at least one dependency changed. */ - private staleDependencies = new Set>(); + dependenciesMightHaveChanged = 1, + + /** + * A dependency changed and we need to recompute. + * After recomputation, we need to check the previous value to see if we changed as well. + */ + stale = 2, + + /** + * No change reported, our cached value is up to date. + */ + upToDate = 3, +} + +export class Derived extends BaseObservable implements IReader, IObserver { + private state = DerivedState.initial; + private value: T | undefined = undefined; + private updateCount = 0; + private dependencies = new Set>(); + private dependenciesToBeRemoved = new Set>(); + private changeSummary: TChangeSummary | undefined = undefined; public override get debugName(): string { return typeof this._debugName === 'function' ? this._debugName() : this._debugName; @@ -34,10 +68,13 @@ export class Derived extends BaseObservable implements IReader, IObs constructor( private readonly _debugName: string | (() => string), - private readonly computeFn: (reader: IReader) => T + private readonly computeFn: (reader: IReader, changeSummary: TChangeSummary) => T, + private readonly createChangeSummary: (() => TChangeSummary) | undefined, + private readonly _handleChange: ((context: IChangeContext, summary: TChangeSummary) => boolean) | undefined, + private readonly _handleLastObserverRemoved: (() => void) | undefined = undefined ) { super(); - + this.changeSummary = this.createChangeSummary?.(); getLogger()?.handleDerivedCreated(this); } @@ -46,122 +83,186 @@ export class Derived extends BaseObservable implements IReader, IObs * We are not tracking changes anymore, thus we have to assume * that our cache is invalid. */ - this.hasValue = false; - this.hadValue = false; + this.state = DerivedState.initial; this.value = undefined; - for (const d of this._dependencies) { + for (const d of this.dependencies) { d.removeObserver(this); } - this._dependencies.clear(); + this.dependencies.clear(); + + this._handleLastObserverRemoved?.(); } - public get(): T { + public override get(): T { if (this.observers.size === 0) { - // Cache is not valid and don't refresh the cache. - // Observables should not be read in non-reactive contexts. - const result = this.computeFn(this); + // Without observers, we don't know when to clean up stuff. + // Thus, we don't cache anything to prevent memory leaks. + const result = this.computeFn(this, this.createChangeSummary?.()!); // Clear new dependencies this.onLastObserverRemoved(); return result; + } else { + do { + if (this.state === DerivedState.dependenciesMightHaveChanged) { + // We might not get a notification for a dependency that changed while it is updating, + // thus we also have to ask all our depedencies if they changed in this case. + this.state = DerivedState.upToDate; + + for (const d of this.dependencies) { + /** might call {@link handleChange} indirectly, which could invalidate us */ + d.reportChanges(); + + if (this.state as DerivedState === DerivedState.stale) { + // The other dependencies will refresh on demand, so early break + break; + } + } + } + + this._recomputeIfNeeded(); + // In case recomputation changed one of our dependencies, we need to recompute again. + } while (this.state !== DerivedState.upToDate); + return this.value!; + } + } + + private _recomputeIfNeeded() { + if (this.state === DerivedState.upToDate) { + return; + } + const emptySet = this.dependenciesToBeRemoved; + this.dependenciesToBeRemoved = this.dependencies; + this.dependencies = emptySet; + + const hadValue = this.state !== DerivedState.initial; + const oldValue = this.value; + this.state = DerivedState.upToDate; + + const changeSummary = this.changeSummary!; + this.changeSummary = this.createChangeSummary?.(); + try { + /** might call {@link handleChange} indirectly, which could invalidate us */ + this.value = this.computeFn(this, changeSummary); + } finally { + // We don't want our observed observables to think that they are (not even temporarily) not being observed. + // Thus, we only unsubscribe from observables that are definitely not read anymore. + for (const o of this.dependenciesToBeRemoved) { + o.removeObserver(this); + } + this.dependenciesToBeRemoved.clear(); } - if (this.updateCount > 0 && this.hasValue) { - // Refresh dependencies - for (const d of this._dependencies) { - // Maybe `.get()` triggers `handleChange`? - d.get(); - if (!this.hasValue) { - // The other dependencies will refresh on demand - break; - } + const didChange = hadValue && oldValue !== this.value; + + getLogger()?.handleDerivedRecomputed(this, { + oldValue, + newValue: this.value, + change: undefined, + didChange + }); + + if (didChange) { + for (const r of this.observers) { + r.handleChange(this, undefined); } } + } - if (!this.hasValue) { - const emptySet = this.staleDependencies; - this.staleDependencies = this._dependencies; - this._dependencies = emptySet; - - const oldValue = this.value; - try { - this.value = this.computeFn(this); - } finally { - // We don't want our observed observables to think that they are (not even temporarily) not being observed. - // Thus, we only unsubscribe from observables that are definitely not read anymore. - for (const o of this.staleDependencies) { - o.removeObserver(this); - } - this.staleDependencies.clear(); - } - - this.hasValue = true; - const didChange = this.hadValue && oldValue !== this.value; - getLogger()?.handleDerivedRecomputed(this, { - oldValue, - newValue: this.value, - change: undefined, - didChange - }); - if (didChange) { - for (const r of this.observers) { - r.handleChange(this, undefined); - } - } - } - return this.value!; + public override toString(): string { + return `LazyDerived<${this.debugName}>`; } // IObserver Implementation - public beginUpdate(): void { - if (this.updateCount === 0) { + public beginUpdate(_observable: IObservable): void { + this.updateCount++; + const propagateBeginUpdate = this.updateCount === 1; + if (this.state === DerivedState.upToDate) { + this.state = DerivedState.dependenciesMightHaveChanged; + // If we propagate begin update, that will already signal a possible change. + if (!propagateBeginUpdate) { + for (const r of this.observers) { + r.handlePossibleChange(this); + } + } + } + if (propagateBeginUpdate) { for (const r of this.observers) { - r.beginUpdate(this); + r.beginUpdate(this); // This signals a possible change } } - this.updateCount++; } - public handleChange( - _observable: IObservable, - _change: TChange - ): void { - if (this.hasValue) { - this.hadValue = true; - this.hasValue = false; - } - - // Not in transaction: Recompute & inform observers immediately - if (this.updateCount === 0 && this.observers.size > 0) { - this.get(); - } - - // Otherwise, recompute in `endUpdate` or on demand. - } - - public endUpdate(): void { + public endUpdate(_observable: IObservable): void { this.updateCount--; if (this.updateCount === 0) { - if (this.observers.size > 0) { - // Propagate invalidation - this.get(); - } - - for (const r of this.observers) { + // End update could change the observer list. + const observers = [...this.observers]; + for (const r of observers) { r.endUpdate(this); } } + if (this.updateCount < 0) { + throw new BugIndicatingError(); + } + } + + public handlePossibleChange(observable: IObservable): void { + // In all other states, observers already know that we might have changed. + if (this.state === DerivedState.upToDate && this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) { + this.state = DerivedState.dependenciesMightHaveChanged; + for (const r of this.observers) { + r.handlePossibleChange(this); + } + } + } + + public handleChange(observable: IObservable, change: TChange): void { + if (this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) { + const shouldReact = this._handleChange ? this._handleChange({ + changedObservable: observable, + change, + didChange: o => o === observable as any, + }, this.changeSummary!) : true; + const wasUpToDate = this.state === DerivedState.upToDate; + if (shouldReact && (this.state === DerivedState.dependenciesMightHaveChanged || wasUpToDate)) { + this.state = DerivedState.stale; + if (wasUpToDate) { + for (const r of this.observers) { + r.handlePossibleChange(this); + } + } + } + } } // IReader Implementation - public subscribeTo(observable: IObservable) { - this._dependencies.add(observable); - // We are already added as observer for stale dependencies. - if (!this.staleDependencies.delete(observable)) { - observable.addObserver(this); + public readObservable(observable: IObservable): T { + // Subscribe before getting the value to enable caching + observable.addObserver(this); + /** This might call {@link handleChange} indirectly, which could invalidate us */ + const value = observable.get(); + // Which is why we only add the observable to the dependencies now. + this.dependencies.add(observable); + this.dependenciesToBeRemoved.delete(observable); + return value; + } + + public override addObserver(observer: IObserver): void { + const shouldCallBeginUpdate = !this.observers.has(observer) && this.updateCount > 0; + super.addObserver(observer); + + if (shouldCallBeginUpdate) { + observer.beginUpdate(this); } } - override toString(): string { - return `LazyDerived<${this.debugName}>`; + public override removeObserver(observer: IObserver): void { + const shouldCallEndUpdate = this.observers.has(observer) && this.updateCount > 0; + super.removeObserver(observer); + + if (shouldCallEndUpdate) { + // Calling end update after removing the observer makes sure endUpdate cannot be called twice here. + observer.endUpdate(this); + } } } diff --git a/src/vs/base/common/observableImpl/utils.ts b/src/vs/base/common/observableImpl/utils.ts index b021df0fc11..5d9a2c568a8 100644 --- a/src/vs/base/common/observableImpl/utils.ts +++ b/src/vs/base/common/observableImpl/utils.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { Event } from 'vs/base/common/event'; import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { autorun } from 'vs/base/common/observableImpl/autorun'; -import { IObservable, BaseObservable, transaction, IReader, ITransaction, ConvenientObservable, IObserver, observableValue, getFunctionName } from 'vs/base/common/observableImpl/base'; +import { BaseObservable, ConvenientObservable, IObservable, IObserver, IReader, ITransaction, getFunctionName, observableValue, transaction } from 'vs/base/common/observableImpl/base'; import { derived } from 'vs/base/common/observableImpl/derived'; -import { Event } from 'vs/base/common/event'; import { getLogger } from 'vs/base/common/observableImpl/logging'; export function constObservable(value: T): IObservable { @@ -198,34 +198,37 @@ class FromEventObservableSignal extends BaseObservable { } } -export function observableSignal( +/** + * Creates a signal that can be triggered to invalidate observers. + */ +export function observableSignal( debugName: string -): IObservableSignal { - return new ObservableSignal(debugName); +): IObservableSignal { + return new ObservableSignal(debugName); } -export interface IObservableSignal extends IObservable { - trigger(tx: ITransaction | undefined): void; +export interface IObservableSignal extends IObservable { + trigger(tx: ITransaction | undefined, change: TChange): void; } -class ObservableSignal extends BaseObservable implements IObservableSignal { +class ObservableSignal extends BaseObservable implements IObservableSignal { constructor( public readonly debugName: string ) { super(); } - public trigger(tx: ITransaction | undefined): void { + public trigger(tx: ITransaction | undefined, change: TChange): void { if (!tx) { transaction(tx => { - this.trigger(tx); + this.trigger(tx, change); }, () => `Trigger signal ${this.debugName}`); return; } for (const o of this.observers) { tx.updateObserver(o, this); - o.handleChange(this, undefined); + o.handleChange(this, change); } } @@ -276,29 +279,49 @@ export function wasEventTriggeredRecently(event: Event, timeoutMs: number, } /** - * This ensures the observable is kept up-to-date. - * This is useful when the observables `get` method is used. + * This ensures the observable is being observed. + * Observed observables (such as {@link derived}s) can maintain a cache, as they receive invalidation events. + * Unobserved observables are forced to recompute their value from scratch every time they are read. + * + * @param observable the observable to keep alive + * @param forceRecompute if true, the observable will be eagerly recomputed after it changed. + * Use this if recomputing the observables causes side-effects. */ -export function keepAlive(observable: IObservable): IDisposable { - const o = new KeepAliveObserver(); +export function keepAlive(observable: IObservable, forceRecompute?: boolean): IDisposable { + const o = new KeepAliveObserver(forceRecompute ?? false); observable.addObserver(o); + if (forceRecompute) { + observable.reportChanges(); + } + return toDisposable(() => { observable.removeObserver(o); }); } class KeepAliveObserver implements IObserver { + private counter = 0; + + constructor(private readonly forceRecompute: boolean) { } + beginUpdate(observable: IObservable): void { + this.counter++; + } + + endUpdate(observable: IObservable): void { + this.counter--; + if (this.counter === 0 && this.forceRecompute) { + observable.reportChanges(); + } + } + + handlePossibleChange(observable: IObservable): void { // NO OP } handleChange(observable: IObservable, change: TChange): void { // NO OP } - - endUpdate(observable: IObservable): void { - // NO OP - } } export function derivedObservableWithCache(name: string, computeFn: (reader: IReader, lastValue: T | undefined) => T): IObservable { diff --git a/src/vs/base/common/platform.ts b/src/vs/base/common/platform.ts index 4338017de8b..c752f32550f 100644 --- a/src/vs/base/common/platform.ts +++ b/src/vs/base/common/platform.ts @@ -18,11 +18,13 @@ let _isCI = false; let _isMobile = false; let _locale: string | undefined = undefined; let _language: string = LANGUAGE_DEFAULT; +let _platformLocale: string = LANGUAGE_DEFAULT; let _translationsConfigFile: string | undefined = undefined; let _userAgent: string | undefined = undefined; interface NLSConfig { locale: string; + osLocale: string; availableLanguages: { [key: string]: string }; _translationsConfigFile: string; } @@ -74,6 +76,7 @@ const isElectronRenderer = isElectronProcess && nodeProcess?.type === 'renderer' interface INavigator { userAgent: string; maxTouchPoints?: number; + language: string; } declare const navigator: INavigator; @@ -96,8 +99,8 @@ if (typeof navigator === 'object' && !isElectronRenderer) { ); _locale = configuredLocale || LANGUAGE_DEFAULT; - _language = _locale; + _platformLocale = navigator.language; } // Native environment @@ -116,6 +119,7 @@ else if (typeof nodeProcess === 'object') { const nlsConfig: NLSConfig = JSON.parse(rawNlsConfig); const resolved = nlsConfig.availableLanguages['*']; _locale = nlsConfig.locale; + _platformLocale = nlsConfig.osLocale; // VSCode's default language is 'en' _language = resolved ? resolved : LANGUAGE_DEFAULT; _translationsConfigFile = nlsConfig._translationsConfigFile; @@ -175,8 +179,8 @@ export const platform = _platform; export const userAgent = _userAgent; /** - * The language used for the user interface. or the locale specified by --locale - * The format of the string is all lower case (e.g. zh-tw for Traditional + * The language used for the user interface. The format of + * the string is all lower case (e.g. zh-tw for Traditional * Chinese) */ export const language = _language; @@ -203,11 +207,20 @@ export namespace Language { } /** - * The OS locale. The format of the string is all lower case (e.g. zh-tw for Traditional + * The OS locale or the locale specified by --locale. The format of + * the string is all lower case (e.g. zh-tw for Traditional * Chinese). The UI is not necessarily shown in the provided locale. */ export const locale = _locale; +/** + * This will always be set to the OS/browser's locale regardless of + * what was specified by --locale. The format of the string is all + * lower case (e.g. zh-tw for Traditional Chinese). The UI is not + * necessarily shown in the provided locale. + */ +export const platformLocale = _platformLocale; + /** * The translations that are available through language packs. */ diff --git a/src/vs/base/common/process.ts b/src/vs/base/common/process.ts index cfa3c1c5a41..a50f849b5af 100644 --- a/src/vs/base/common/process.ts +++ b/src/vs/base/common/process.ts @@ -48,6 +48,8 @@ else { * environments. * * Note: in web, this property is hardcoded to be `/`. + * + * @skipMangle */ export const cwd = safeProcess.cwd; diff --git a/src/vs/base/common/processes.ts b/src/vs/base/common/processes.ts index 4ca2e82d8bf..4280c71fb9a 100644 --- a/src/vs/base/common/processes.ts +++ b/src/vs/base/common/processes.ts @@ -108,7 +108,7 @@ export function sanitizeProcessEnvironment(env: IProcessEnvironment, ...preserve }, {} as Record); const keysToRemove = [ /^ELECTRON_.+$/, - /^VSCODE_(?!(PORTABLE|SHELL_LOGIN)).+$/, + /^VSCODE_(?!(PORTABLE|SHELL_LOGIN|ENV_REPLACE|ENV_APPEND|ENV_PREPEND)).+$/, /^SNAP(|_.*)$/, /^GDK_PIXBUF_.+$/, ]; diff --git a/src/vs/base/common/product.ts b/src/vs/base/common/product.ts index 32cc759dc7d..7cc06b49b3f 100644 --- a/src/vs/base/common/product.ts +++ b/src/vs/base/common/product.ts @@ -13,6 +13,29 @@ export interface IBuiltInExtension { readonly metadata: any; } +export interface IProductWalkthrough { + id: string; + steps: IProductWalkthroughStep[]; +} + +export interface IProductWalkthroughStep { + id: string; + title: string; + when: string; + description: string; + media: + | { type: 'image'; path: string | { hc: string; hcLight?: string; light: string; dark: string }; altText: string } + | { type: 'svg'; path: string; altText: string } + | { type: 'markdown'; path: string }; +} + +export interface IFeaturedExtension { + readonly id: string; + readonly title: string; + readonly description: string; + readonly imagePath: string; +} + export type ConfigurationSyncStore = { url: string; insidersUrl: string; @@ -50,6 +73,8 @@ export interface IProductConfiguration { readonly dataFolderName: string; // location for extensions (e.g. ~/.vscode-insiders) readonly builtInExtensions?: IBuiltInExtension[]; + readonly walkthroughMetadata?: IProductWalkthrough[]; + readonly featuredExtensions?: IFeaturedExtension[]; readonly downloadUrl?: string; readonly updateUrl?: string; @@ -64,12 +89,9 @@ export interface IProductConfiguration { readonly tasConfig?: { endpoint: string; telemetryEventName: string; - featuresTelemetryPropertyName: string; assignmentContextTelemetryPropertyName: string; }; - readonly experimentsUrl?: string; - readonly extensionsGallery?: { readonly serviceUrl: string; readonly servicePPEUrl?: string; @@ -81,17 +103,16 @@ export interface IProductConfiguration { readonly nlsBaseUrl: string; }; - readonly extensionTips?: { [id: string]: string }; - readonly extensionImportantTips?: IStringDictionary; - readonly configBasedExtensionTips?: { [id: string]: IConfigBasedExtensionTip }; - readonly exeBasedExtensionTips?: { [id: string]: IExeBasedExtensionTip }; - readonly remoteExtensionTips?: { [remoteName: string]: IRemoteExtensionTip }; - readonly virtualWorkspaceExtensionTips?: { [virtualWorkspaceName: string]: IVirtualWorkspaceExtensionTip }; - readonly extensionKeywords?: { [extension: string]: readonly string[] }; + readonly extensionRecommendations?: IStringDictionary; + readonly configBasedExtensionTips?: IStringDictionary; + readonly exeBasedExtensionTips?: IStringDictionary; + readonly remoteExtensionTips?: IStringDictionary; + readonly virtualWorkspaceExtensionTips?: IStringDictionary; + readonly extensionKeywords?: IStringDictionary; readonly keymapExtensionTips?: readonly string[]; readonly webExtensionTips?: readonly string[]; readonly languageExtensionTips?: readonly string[]; - readonly trustedExtensionUrlPublicKeys?: { [id: string]: string[] }; + readonly trustedExtensionUrlPublicKeys?: IStringDictionary; readonly trustedExtensionAuthAccess?: readonly string[]; readonly commandPaletteSuggestedCommandIds?: string[]; @@ -115,6 +136,7 @@ export interface IProductConfiguration { }; readonly documentationUrl?: string; + readonly serverDocumentationUrl?: string; readonly releaseNotesUrl?: string; readonly keyboardShortcutsUrlMac?: string; readonly keyboardShortcutsUrlLinux?: string; @@ -127,6 +149,7 @@ export interface IProductConfiguration { readonly reportIssueUrl?: string; readonly reportMarketplaceIssueUrl?: string; readonly licenseUrl?: string; + readonly serverLicenseUrl?: string; readonly privacyStatementUrl?: string; readonly showTelemetryOptOut?: boolean; @@ -165,6 +188,9 @@ export interface IProductConfiguration { readonly 'editSessions.store'?: Omit; readonly darwinUniversalAssetId?: string; + readonly profileTemplatesUrl?: string; + + readonly commonlyUsedSettings?: string[]; } export interface ITunnelApplicationConfig { @@ -173,7 +199,32 @@ export interface ITunnelApplicationConfig { extension: IRemoteExtensionTip; } -export type ImportantExtensionTip = { name: string; languages?: string[]; pattern?: string; isExtensionPack?: boolean; whenNotInstalled?: string[] }; +export interface IExtensionRecommendations { + readonly onFileOpen: IFileOpenCondition[]; + readonly onSettingsEditorOpen?: ISettingsEditorOpenCondition; +} + +export interface ISettingsEditorOpenCondition { + readonly prerelease: boolean | string; +} + +export interface IExtensionRecommendationCondition { + readonly important?: boolean; + readonly whenInstalled?: string[]; + readonly whenNotInstalled?: string[]; +} + +export type IFileOpenCondition = IFileLanguageCondition | IFilePathCondition | IFileContentCondition; + +export interface IFileLanguageCondition extends IExtensionRecommendationCondition { + readonly languages: string[]; +} + +export interface IFilePathCondition extends IExtensionRecommendationCondition { + readonly pathGlob: string; +} + +export type IFileContentCondition = (IFileLanguageCondition | IFilePathCondition) & { readonly contentPattern: string }; export interface IAppCenterConfiguration { readonly 'win32-ia32': string; @@ -186,7 +237,13 @@ export interface IConfigBasedExtensionTip { configPath: string; configName: string; configScheme?: string; - recommendations: IStringDictionary<{ name: string; remotes?: string[]; important?: boolean; isExtensionPack?: boolean; whenNotInstalled?: string[] }>; + recommendations: IStringDictionary<{ + name: string; + contentPattern?: string; + important?: boolean; + isExtensionPack?: boolean; + whenNotInstalled?: string[]; + }>; } export interface IExeBasedExtensionTip { @@ -200,12 +257,24 @@ export interface IRemoteExtensionTip { friendlyName: string; extensionId: string; supportedPlatforms?: PlatformName[]; + startEntry?: { + helpLink: string; + startConnectLabel: string; + startCommand: string; + priority: number; + }; } export interface IVirtualWorkspaceExtensionTip { friendlyName: string; extensionId: string; supportedPlatforms?: PlatformName[]; + startEntry: { + helpLink: string; + startConnectLabel: string; + startCommand: string; + priority: number; + }; } export interface ISurveyData { diff --git a/src/vs/base/common/scrollable.ts b/src/vs/base/common/scrollable.ts index 1be0752c3fd..4d1360c5860 100644 --- a/src/vs/base/common/scrollable.ts +++ b/src/vs/base/common/scrollable.ts @@ -348,6 +348,10 @@ export class Scrollable extends Disposable { }); } + public hasPendingScrollAnimation(): boolean { + return Boolean(this._smoothScrolling); + } + private _performSmoothScrolling(): void { if (!this._smoothScrolling) { return; diff --git a/src/vs/base/common/stopwatch.ts b/src/vs/base/common/stopwatch.ts index f38627afedb..e32c0dd9d91 100644 --- a/src/vs/base/common/stopwatch.ts +++ b/src/vs/base/common/stopwatch.ts @@ -3,22 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { globals } from 'vs/base/common/platform'; +// fake definition so that the valid layers check won't trip on this +declare const globalThis: { performance?: { now(): number } }; -const hasPerformanceNow = (globals.performance && typeof globals.performance.now === 'function'); +const hasPerformanceNow = (globalThis.performance && typeof globalThis.performance.now === 'function'); export class StopWatch { - private _highResolution: boolean; private _startTime: number; private _stopTime: number; - public static create(highResolution: boolean = true): StopWatch { + private readonly _now: () => number; + + public static create(highResolution?: boolean): StopWatch { return new StopWatch(highResolution); } - constructor(highResolution: boolean) { - this._highResolution = hasPerformanceNow && highResolution; + constructor(highResolution?: boolean) { + this._now = hasPerformanceNow && highResolution === false ? Date.now : globalThis.performance!.now.bind(globalThis.performance); this._startTime = this._now(); this._stopTime = -1; } @@ -38,8 +40,4 @@ export class StopWatch { } return this._now() - this._startTime; } - - private _now(): number { - return this._highResolution ? globals.performance.now() : Date.now(); - } } diff --git a/src/vs/base/common/strings.ts b/src/vs/base/common/strings.ts index 99304974d17..5837c2f4c49 100644 --- a/src/vs/base/common/strings.ts +++ b/src/vs/base/common/strings.ts @@ -730,9 +730,12 @@ export function lcut(text: string, n: number) { // Escape codes, compiled from https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Functions-using-CSI-_-ordered-by-the-final-character_s_ const CSI_SEQUENCE = /(:?\x1b\[|\x9B)[=?>!]?[\d;:]*["$#'* ]?[a-zA-Z@^`{}|~]/g; +// Plus additional markers for custom `\x1b]...\x07` instructions. +const CSI_CUSTOM_SEQUENCE = /\x1b\].*?\x07/g; + export function removeAnsiEscapeCodes(str: string): string { if (str) { - str = str.replace(CSI_SEQUENCE, ''); + str = str.replace(CSI_SEQUENCE, '').replace(CSI_CUSTOM_SEQUENCE, ''); } return str; @@ -1086,7 +1089,7 @@ export class AmbiguousCharacters { // Generated using https://github.com/hediet/vscode-unicode-data // Stored as key1, value1, key2, value2, ... return JSON.parse( - '{\"_common\":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,8218,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,8242,96,1370,96,1523,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71922,67,71913,67,65315,67,8557,67,8450,67,8493,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71919,87,71910,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,66293,90,71909,90,65338,90,8484,90,8488,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65297,49,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125],\"_default\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"cs\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"de\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"es\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"fr\":[65374,126,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"it\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ja\":[8211,45,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65292,44,65307,59],\"ko\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pl\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pt-BR\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"qps-ploc\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ru\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"tr\":[160,32,8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"zh-hans\":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41],\"zh-hant\":[8211,45,65374,126,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65307,59]}' + '{\"_common\":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,8218,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,8242,96,1370,96,1523,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71922,67,71913,67,65315,67,8557,67,8450,67,8493,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71919,87,71910,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,66293,90,71909,90,65338,90,8484,90,8488,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65297,49,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125,119846,109],\"_default\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"cs\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"de\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"es\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"fr\":[65374,126,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"it\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ja\":[8211,45,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65292,44,65307,59],\"ko\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pl\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pt-BR\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"qps-ploc\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ru\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"tr\":[160,32,8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"zh-hans\":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41],\"zh-hant\":[8211,45,65374,126,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65307,59]}' ); }); diff --git a/src/vs/base/common/stripComments.d.ts b/src/vs/base/common/stripComments.d.ts index 69e662e9759..af5b182b5bf 100644 --- a/src/vs/base/common/stripComments.d.ts +++ b/src/vs/base/common/stripComments.d.ts @@ -10,5 +10,5 @@ * supported in JSON. * @param content the content to strip comments from * @returns the content without comments - */ +*/ export function stripComments(content: string): string; diff --git a/src/vs/base/common/uri.ts b/src/vs/base/common/uri.ts index fc34316fab0..4d7e51431cb 100644 --- a/src/vs/base/common/uri.ts +++ b/src/vs/base/common/uri.ts @@ -327,15 +327,22 @@ export class URI implements UriComponents { return new Uri('file', authority, path, _empty, _empty); } - static from(components: { scheme: string; authority?: string; path?: string; query?: string; fragment?: string }): URI { + /** + * Creates new URI from uri components. + * + * Unless `strict` is `true` the scheme is defaults to be `file`. This function performs + * validation and should be used for untrusted uri components retrieved from storage, + * user input, command arguments etc + */ + static from(components: UriComponents, strict?: boolean): URI { const result = new Uri( components.scheme, components.authority, components.path, components.query, components.fragment, + strict ); - _validateUri(result, true); return result; } @@ -380,6 +387,16 @@ export class URI implements UriComponents { return this; } + /** + * A helper function to revive URIs. + * + * **Note** that this function should only be used when receiving URI#toJSON generated data + * and that it doesn't do any validation. Use {@link URI.from} when received "untrusted" + * uri components such as command arguments or data from storage. + * + * @param data The URI components or URI to revive. + * @returns The revived URI or undefined or null. + */ static revive(data: UriComponents | URI): URI; static revive(data: UriComponents | URI | undefined): URI | undefined; static revive(data: UriComponents | URI | null): URI | null; @@ -391,8 +408,8 @@ export class URI implements UriComponents { return data; } else { const result = new Uri(data); - result._formatted = (data).external; - result._fsPath = (data)._sep === _pathSepMarker ? (data).fsPath : null; + result._formatted = (data).external ?? null; + result._fsPath = (data)._sep === _pathSepMarker ? (data).fsPath ?? null : null; return result; } } @@ -400,17 +417,28 @@ export class URI implements UriComponents { export interface UriComponents { scheme: string; - authority: string; - path: string; - query: string; - fragment: string; + authority?: string; + path?: string; + query?: string; + fragment?: string; +} + +export function isUriComponents(thing: any): thing is UriComponents { + if (!thing || typeof thing !== 'object') { + return false; + } + return typeof (thing).scheme === 'string' + && (typeof (thing).authority === 'string' || typeof (thing).authority === 'undefined') + && (typeof (thing).path === 'string' || typeof (thing).path === 'undefined') + && (typeof (thing).query === 'string' || typeof (thing).query === 'undefined') + && (typeof (thing).fragment === 'string' || typeof (thing).fragment === 'undefined'); } interface UriState extends UriComponents { $mid: MarshalledId.Uri; - external: string; - fsPath: string; - _sep: 1 | undefined; + external?: string; + fsPath?: string; + _sep?: 1; } const _pathSepMarker = isWindows ? 1 : undefined; @@ -452,10 +480,14 @@ class Uri extends URI { if (this._formatted) { res.external = this._formatted; } - // uri components + //--- uri components if (this.path) { res.path = this.path; } + // TODO + // this isn't correct and can violate the UriComponents contract but + // this is part of the vscode.Uri API and we shouldn't change how that + // works anymore if (this.scheme) { res.scheme = this.scheme; } diff --git a/src/vs/base/common/worker/simpleWorker.ts b/src/vs/base/common/worker/simpleWorker.ts index deefcb96396..924dbf3ad7d 100644 --- a/src/vs/base/common/worker/simpleWorker.ts +++ b/src/vs/base/common/worker/simpleWorker.ts @@ -558,6 +558,7 @@ export class SimpleWorkerServer { /** * Called on the worker side + * @skipMangle */ export function create(postMessage: (msg: Message, transfer?: ArrayBuffer[]) => void): SimpleWorkerServer { return new SimpleWorkerServer(postMessage, null); diff --git a/src/vs/base/node/id.ts b/src/vs/base/node/id.ts index 65bff8cc522..a5ea6a2bb0d 100644 --- a/src/vs/base/node/id.ts +++ b/src/vs/base/node/id.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import { networkInterfaces } from 'os'; -import * as errors from 'vs/base/common/errors'; import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; import * as uuid from 'vs/base/common/uuid'; import { getMac } from 'vs/base/node/macAddress'; @@ -78,10 +77,10 @@ export const virtualMachineHint: { value(): number } = new class { }; let machineId: Promise; -export async function getMachineId(): Promise { +export async function getMachineId(errorLogger: (error: any) => void): Promise { if (!machineId) { machineId = (async () => { - const id = await getMacMachineId(); + const id = await getMacMachineId(errorLogger); return id || uuid.generateUuid(); // fallback, generate a UUID })(); @@ -90,13 +89,13 @@ export async function getMachineId(): Promise { return machineId; } -async function getMacMachineId(): Promise { +async function getMacMachineId(errorLogger: (error: any) => void): Promise { try { const crypto = await import('crypto'); const macAddress = getMac(); return crypto.createHash('sha256').update(macAddress, 'utf8').digest('hex'); } catch (err) { - errors.onUnexpectedError(err); + errorLogger(err); return undefined; } } diff --git a/src/vs/base/node/languagePacks.d.ts b/src/vs/base/node/languagePacks.d.ts index 734a999f843..5dd1b1f1ee9 100644 --- a/src/vs/base/node/languagePacks.d.ts +++ b/src/vs/base/node/languagePacks.d.ts @@ -5,6 +5,7 @@ export interface NLSConfiguration { locale: string; + osLocale: string; availableLanguages: { [key: string]: string; }; @@ -21,4 +22,4 @@ export interface InternalNLSConfiguration extends NLSConfiguration { _languagePackSupport?: boolean; } -export function getNLSConfiguration(commit: string | undefined, userDataPath: string, metaDataFile: string, locale: string, language: string | undefined): Promise; +export function getNLSConfiguration(commit: string | undefined, userDataPath: string, metaDataFile: string, locale: string, osLocale: string): Promise; diff --git a/src/vs/base/node/languagePacks.js b/src/vs/base/node/languagePacks.js index c4c2a658feb..0d3d1acf6a3 100644 --- a/src/vs/base/node/languagePacks.js +++ b/src/vs/base/node/languagePacks.js @@ -109,67 +109,74 @@ * @param {string} userDataPath * @param {string} metaDataFile * @param {string} locale - * @param {string | undefined} language + * @param {string} osLocale + * @returns {Promise} */ - function getNLSConfiguration(commit, userDataPath, metaDataFile, locale, language) { + function getNLSConfiguration(commit, userDataPath, metaDataFile, locale, osLocale) { const defaultResult = function (locale) { perf.mark('code/didGenerateNls'); - return Promise.resolve({ locale, availableLanguages: {} }); + return Promise.resolve({ locale, osLocale, availableLanguages: {} }); }; + perf.mark('code/willGenerateNls'); - // We are in development mode. So we don't have a built version - if (process.env['VSCODE_DEV']) { - return defaultResult(locale); + if (locale === 'pseudo') { + return Promise.resolve({ locale, osLocale, availableLanguages: {}, pseudo: true }); } - // Also in development mode if we don't have a commit - if (!commit) { - return defaultResult(locale); + if (process.env['VSCODE_DEV']) { + return Promise.resolve({ locale, osLocale, availableLanguages: {} }); } // We have a built version so we have extracted nls file. Try to find // the right file to use. - // If we didn't specify a language, or if we specified English or English US, - // use the default. - if (!language || language === 'en' || language === 'en-us') { - return defaultResult(locale); + // Check if we have an English or English US locale. If so fall to default since that is our + // English translation (we don't ship *.nls.en.json files) + if (locale && (locale === 'en' || locale === 'en-us')) { + return Promise.resolve({ locale, osLocale, availableLanguages: {} }); } + const initialLocale = locale; + try { + if (!commit) { + return defaultResult(initialLocale); + } return getLanguagePackConfigurations(userDataPath).then(configs => { if (!configs) { - return defaultResult(locale); + return defaultResult(initialLocale); } - language = resolveLanguagePackLocale(configs, language); - if (!language) { - return defaultResult(locale); + const resolvedLocale = resolveLanguagePackLocale(configs, locale); + if (!resolvedLocale) { + return defaultResult(initialLocale); } - const packConfig = configs[language]; + locale = resolvedLocale; + const packConfig = configs[locale]; let mainPack; if (!packConfig || typeof packConfig.hash !== 'string' || !packConfig.translations || typeof (mainPack = packConfig.translations['vscode']) !== 'string') { - return defaultResult(locale); + return defaultResult(initialLocale); } return exists(mainPack).then(fileExists => { if (!fileExists) { - return defaultResult(locale); + return defaultResult(initialLocale); } - const _languagePackId = packConfig.hash + '.' + language; - const cacheRoot = path.join(userDataPath, 'clp', _languagePackId); + const packId = packConfig.hash + '.' + locale; + const cacheRoot = path.join(userDataPath, 'clp', packId); const coreLocation = path.join(cacheRoot, commit); - const _translationsConfigFile = path.join(cacheRoot, 'tcf.json'); - const _corruptedFile = path.join(cacheRoot, 'corrupted.info'); + const translationsConfigFile = path.join(cacheRoot, 'tcf.json'); + const corruptedFile = path.join(cacheRoot, 'corrupted.info'); const result = { - locale, - availableLanguages: { '*': language }, - _languagePackId, - _translationsConfigFile, + locale: initialLocale, + osLocale, + availableLanguages: { '*': locale }, + _languagePackId: packId, + _translationsConfigFile: translationsConfigFile, _cacheRoot: cacheRoot, - _corruptedFile, - _resolvedLanguagePackCoreLocation: coreLocation + _resolvedLanguagePackCoreLocation: coreLocation, + _corruptedFile: corruptedFile }; - return exists(_corruptedFile).then(corrupted => { + return exists(corruptedFile).then(corrupted => { // The nls cache directory is corrupted. let toDelete; if (corrupted) { @@ -218,7 +225,7 @@ } writes.push(writeFile(path.join(coreLocation, bundle.replace(/\//g, '!') + '.nls.json'), JSON.stringify(target))); } - writes.push(writeFile(_translationsConfigFile, JSON.stringify(packConfig.translations))); + writes.push(writeFile(translationsConfigFile, JSON.stringify(packConfig.translations))); return Promise.all(writes); }).then(() => { perf.mark('code/didGenerateNls'); diff --git a/src/vs/base/node/osReleaseInfo.ts b/src/vs/base/node/osReleaseInfo.ts new file mode 100644 index 00000000000..f72b0fe82ba --- /dev/null +++ b/src/vs/base/node/osReleaseInfo.ts @@ -0,0 +1,73 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { constants as FSConstants } from 'fs'; +import { open, FileHandle } from 'fs/promises'; +import { createInterface as readLines } from 'readline'; +import * as Platform from 'vs/base/common/platform'; + +type ReleaseInfo = { + id: string; + id_like?: string; + version_id?: string; +}; + +export async function getOSReleaseInfo(errorLogger: (error: any) => void): Promise { + if (Platform.isMacintosh || Platform.isWindows) { + return; + } + + // Extract release information on linux based systems + // using the identifiers specified in + // https://www.freedesktop.org/software/systemd/man/os-release.html + let handle: FileHandle | undefined; + for (const filePath of ['/etc/os-release', '/usr/lib/os-release', '/etc/lsb-release']) { + try { + handle = await open(filePath, FSConstants.R_OK); + break; + } catch (err) { } + } + + if (!handle) { + errorLogger('Unable to retrieve release information from known identifier paths.'); + return; + } + + try { + const osReleaseKeys = new Set([ + 'ID', + 'DISTRIB_ID', + 'ID_LIKE', + 'VERSION_ID', + 'DISTRIB_RELEASE', + ]); + const releaseInfo: ReleaseInfo = { + id: 'unknown' + }; + + for await (const line of readLines({ input: handle.createReadStream(), crlfDelay: Infinity })) { + if (!line.includes('=')) { + continue; + } + const key = line.split('=')[0].toUpperCase().trim(); + if (osReleaseKeys.has(key)) { + const value = line.split('=')[1].replace(/"/g, '').toLowerCase().trim(); + if (key === 'ID' || key === 'DISTRIB_ID') { + releaseInfo.id = value; + } else if (key === 'ID_LIKE') { + releaseInfo.id_like = value; + } else if (key === 'VERSION_ID' || key === 'DISTRIB_RELEASE') { + releaseInfo.version_id = value; + } + } + } + + return releaseInfo; + } catch (err) { + errorLogger(err); + } + + return; +} diff --git a/src/vs/base/node/pfs.ts b/src/vs/base/node/pfs.ts index 28e6ca7e887..0cdb1809b52 100644 --- a/src/vs/base/node/pfs.ts +++ b/src/vs/base/node/pfs.ts @@ -37,8 +37,13 @@ export enum RimRafMode { * - `UNLINK`: direct removal from disk * - `MOVE`: faster variant that first moves the target to temp dir and then * deletes it in the background without waiting for that to finish. + * the optional `moveToPath` allows to override where to rename the + * path to before deleting it. */ -async function rimraf(path: string, mode = RimRafMode.UNLINK): Promise { +async function rimraf(path: string, mode: RimRafMode.UNLINK): Promise; +async function rimraf(path: string, mode: RimRafMode.MOVE, moveToPath?: string): Promise; +async function rimraf(path: string, mode?: RimRafMode, moveToPath?: string): Promise; +async function rimraf(path: string, mode = RimRafMode.UNLINK, moveToPath?: string): Promise { if (isRootOrDriveLetter(path)) { throw new Error('rimraf - will refuse to recursively delete root'); } @@ -49,12 +54,11 @@ async function rimraf(path: string, mode = RimRafMode.UNLINK): Promise { } // delete: via move - return rimrafMove(path); + return rimrafMove(path, moveToPath); } -async function rimrafMove(path: string): Promise { +async function rimrafMove(path: string, moveToPath = randomPath(tmpdir())): Promise { try { - const pathInTemp = randomPath(tmpdir()); try { // Intentionally using `fs.promises` here to skip // the patched graceful-fs method that can result @@ -64,7 +68,7 @@ async function rimrafMove(path: string): Promise { // than necessary and we have a fallback to delete // via unlink. // https://github.com/microsoft/vscode/issues/139908 - await fs.promises.rename(path, pathInTemp); + await fs.promises.rename(path, moveToPath); } catch (error) { if (error.code === 'ENOENT') { return; // ignore - path to delete did not exist @@ -74,7 +78,7 @@ async function rimrafMove(path: string): Promise { } // Delete but do not return as promise - rimrafUnlink(pathInTemp).catch(error => {/* ignore */ }); + rimrafUnlink(moveToPath).catch(error => {/* ignore */ }); } catch (error) { if (error.code !== 'ENOENT') { throw error; diff --git a/src/vs/base/node/ps.ts b/src/vs/base/node/ps.ts index 93432f17237..f61af2b8117 100644 --- a/src/vs/base/node/ps.ts +++ b/src/vs/base/node/ps.ts @@ -51,8 +51,8 @@ export function listProcesses(rootPid: number): Promise { const UTILITY_NETWORK_HINT = /--utility-sub-type=network/i; const NODEJS_PROCESS_HINT = /--ms-enable-electron-run-as-node/i; const WINDOWS_CRASH_REPORTER = /--crashes-directory/i; - const WINDOWS_PTY = /\\pipe\\winpty-control/i; - const WINDOWS_CONSOLE_HOST = /conhost\.exe/i; + const WINPTY = /\\pipe\\winpty-control/i; + const CONPTY = /conhost\.exe.+--headless/i; const TYPE = /--type=([a-zA-Z-]+)/; // find windows crash reporter @@ -60,14 +60,14 @@ export function listProcesses(rootPid: number): Promise { return 'electron-crash-reporter'; } - // find windows pty process - if (WINDOWS_PTY.exec(cmd)) { - return 'winpty-process'; + // find winpty process + if (WINPTY.exec(cmd)) { + return 'winpty-agent'; } - // find windows console host process - if (WINDOWS_CONSOLE_HOST.exec(cmd)) { - return 'console-window-host (Windows internal process)'; + // find conpty process + if (CONPTY.exec(cmd)) { + return 'conpty-agent'; } // find "--type=xxxx" @@ -115,19 +115,19 @@ export function listProcesses(rootPid: number): Promise { const cleanUNCPrefix = (value: string): string => { if (value.indexOf('\\\\?\\') === 0) { - return value.substr(4); + return value.substring(4); } else if (value.indexOf('\\??\\') === 0) { - return value.substr(4); + return value.substring(4); } else if (value.indexOf('"\\\\?\\') === 0) { - return '"' + value.substr(5); + return '"' + value.substring(5); } else if (value.indexOf('"\\??\\') === 0) { - return '"' + value.substr(5); + return '"' + value.substring(5); } else { return value; } }; - (import('windows-process-tree')).then(windowsProcessTree => { + (import('@vscode/windows-process-tree')).then(windowsProcessTree => { windowsProcessTree.getProcessList(rootPid, (processList) => { if (!processList) { reject(new Error(`Root process ${rootPid} not found`)); diff --git a/src/vs/base/node/unc.d.ts b/src/vs/base/node/unc.d.ts new file mode 100644 index 00000000000..d131bba5d85 --- /dev/null +++ b/src/vs/base/node/unc.d.ts @@ -0,0 +1,30 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/** + * Helper to get the hostname of a possible UNC path. + */ +export function getUNCHost(maybeUNCPath: string | undefined | null): string | undefined; + +/** + * Returns the current list of allowed UNC hosts as defined by node.js. + */ +export function getUNCHostAllowlist(): string[]; + +/** + * Adds one to many UNC host(s) to the allowed list in node.js. + */ +export function addUNCHostToAllowlist(allowedHost: string | string[]): void; + +/** + * Disables UNC Host allow list in node.js and thus disables UNC + * path validation. + */ +export function disableUNCAccessRestrictions(): void; + +/** + * Whether UNC Host allow list in node.js is disabled. + */ +export function isUNCAccessRestrictionsDisabled(): boolean; diff --git a/src/vs/base/node/unc.js b/src/vs/base/node/unc.js new file mode 100644 index 00000000000..b0af4d38b68 --- /dev/null +++ b/src/vs/base/node/unc.js @@ -0,0 +1,146 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +//@ts-check + +(function () { + function factory() { + + /** + * @returns {Set | undefined} + */ + function processUNCHostAllowlist() { + + // The property `process.uncHostAllowlist` is not available in official node.js + // releases, only in our own builds, so we have to probe for availability + + return process.uncHostAllowlist; + } + + /** + * @param {unknown} arg0 + * @returns {string[]} + */ + function toSafeStringArray(arg0) { + const allowedUNCHosts = new Set(); + + if (Array.isArray(arg0)) { + for (const host of arg0) { + if (typeof host === 'string') { + allowedUNCHosts.add(host); + } + } + } + + return Array.from(allowedUNCHosts); + } + + /** + * @returns {string[]} + */ + function getUNCHostAllowlist() { + const allowlist = processUNCHostAllowlist(); + if (allowlist) { + return Array.from(allowlist); + } + + return []; + } + + /** + * @param {string | string[]} allowedHost + */ + function addUNCHostToAllowlist(allowedHost) { + if (process.platform !== 'win32') { + return; + } + + const allowlist = processUNCHostAllowlist(); + if (allowlist) { + if (typeof allowedHost === 'string') { + allowlist.add(allowedHost.toLowerCase()); // UNC hosts are case-insensitive + } else { + for (const host of toSafeStringArray(allowedHost)) { + addUNCHostToAllowlist(host); + } + } + } + } + + /** + * @param {string | undefined | null} maybeUNCPath + * @returns {string | undefined} + */ + function getUNCHost(maybeUNCPath) { + if (typeof maybeUNCPath !== 'string') { + return undefined; // require a valid string + } + + const uncRoots = [ + '\\\\.\\UNC\\', // DOS Device paths (https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats) + '\\\\?\\UNC\\', + '\\\\' // standard UNC path + ]; + + let host = undefined; + + for (const uncRoot of uncRoots) { + const indexOfUNCRoot = maybeUNCPath.indexOf(uncRoot); + if (indexOfUNCRoot !== 0) { + continue; // not matching any of our expected UNC roots + } + + const indexOfUNCPath = maybeUNCPath.indexOf('\\', uncRoot.length); + if (indexOfUNCPath === -1) { + continue; // no path component found + } + + const hostCandidate = maybeUNCPath.substring(uncRoot.length, indexOfUNCPath); + if (hostCandidate) { + host = hostCandidate; + break; + } + } + + return host; + } + + function disableUNCAccessRestrictions() { + if (process.platform !== 'win32') { + return; + } + + process.restrictUNCAccess = false; + } + + function isUNCAccessRestrictionsDisabled() { + if (process.platform !== 'win32') { + return true; + } + + return process.restrictUNCAccess === false; + } + + return { + getUNCHostAllowlist, + addUNCHostToAllowlist, + getUNCHost, + disableUNCAccessRestrictions, + isUNCAccessRestrictionsDisabled + }; + } + + if (typeof define === 'function') { + // amd + define([], function () { return factory(); }); + } else if (typeof module === 'object' && typeof module.exports === 'object') { + // commonjs + module.exports = factory(); + } else { + console.trace('vs/base/node/unc defined in UNKNOWN context (neither requirejs or commonjs)'); + } +})(); diff --git a/src/vs/base/node/zip.ts b/src/vs/base/node/zip.ts index 171b9e45bbc..767d0a5aec6 100644 --- a/src/vs/base/node/zip.ts +++ b/src/vs/base/node/zip.ts @@ -36,7 +36,6 @@ export type ExtractErrorType = 'CorruptZip' | 'Incomplete'; export class ExtractError extends Error { readonly type?: ExtractErrorType; - readonly cause: Error; constructor(type: ExtractErrorType | undefined, cause: Error) { let message = cause.message; diff --git a/src/vs/base/parts/ipc/common/ipc.net.ts b/src/vs/base/parts/ipc/common/ipc.net.ts index 2ba8902448c..43363fba7ee 100644 --- a/src/vs/base/parts/ipc/common/ipc.net.ts +++ b/src/vs/base/parts/ipc/common/ipc.net.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IntervalTimer } from 'vs/base/common/async'; import { VSBuffer } from 'vs/base/common/buffer'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; @@ -264,9 +263,7 @@ const enum ProtocolMessageType { ReplayRequest = 6, Pause = 7, Resume = 8, - KeepAlive = 9, - LatencyMeasurementRequest = 10, - LatencyMeasurementResponse = 11, + KeepAlive = 9 } function protocolMessageTypeToString(messageType: ProtocolMessageType) { @@ -280,8 +277,6 @@ function protocolMessageTypeToString(messageType: ProtocolMessageType) { case ProtocolMessageType.Pause: return 'PauseWriting'; case ProtocolMessageType.Resume: return 'ResumeWriting'; case ProtocolMessageType.KeepAlive: return 'KeepAlive'; - case ProtocolMessageType.LatencyMeasurementRequest: return 'LatencyMeasurementRequest'; - case ProtocolMessageType.LatencyMeasurementResponse: return 'LatencyMeasurementResponse'; } } @@ -309,22 +304,6 @@ export const enum ProtocolConstants { * Send a message every 5 seconds to avoid that the connection is closed by the OS. */ KeepAliveSendTime = 5000, // 5 seconds - /** - * Measure the latency every 1 minute. - */ - LatencySampleTime = 1 * 60 * 1000, // 1 minute - /** - * Keep the last 5 samples for latency measurement. - */ - LatencySampleCount = 5, - /** - * A latency over 1s will be considered high. - */ - HighLatencyTimeThreshold = 1000, - /** - * Having 3 or more samples with high latency will trigger a high latency event. - */ - HighLatencySampleThreshold = 3, } class ProtocolMessage { @@ -803,52 +782,6 @@ export interface ILoadEstimator { hasHighLoad(): boolean; } -export const enum ConnectionHealth { - /** - * The connection health is considered good when a certain number of recent round trip time measurements are below a certain threshold. - * @see ProtocolConstants.HighLatencyTimeThreshold @see ProtocolConstants.HighLatencySampleThreshold - */ - Good, - /** - * The connection health is considered poor when a certain number of recent round trip time measurements are above a certain threshold. - * @see ProtocolConstants.HighLatencyTimeThreshold @see ProtocolConstants.HighLatencySampleThreshold - */ - Poor -} - -export function connectionHealthToString(connectionHealth: ConnectionHealth): 'good' | 'poor' { - switch (connectionHealth) { - case ConnectionHealth.Good: return 'good'; - case ConnectionHealth.Poor: return 'poor'; - } -} - -/** - * An event describing that the connection health has changed. - */ -export class ConnectionHealthChangedEvent { - constructor( - public readonly connectionHealth: ConnectionHealth - ) { } -} - -/** - * An event describing that a round trip time measurement was above a certain threshold. - */ -export class HighRoundTripTimeEvent { - constructor( - /** - * The round trip time in milliseconds. - */ - public readonly roundTripTime: number, - /** - * The number of recent round trip time measurements that were above the threshold. - * @see ProtocolConstants.HighLatencyTimeThreshold @see ProtocolConstants.HighLatencySampleThreshold - */ - public readonly recentHighRoundTripCount: number - ) { } -} - export interface PersistentProtocolOptions { /** * The socket to use. @@ -862,10 +795,6 @@ export interface PersistentProtocolOptions { * The CPU load estimator to use. */ loadEstimator?: ILoadEstimator; - /** - * Whether to measure round trip time. Defaults to false. - */ - measureRoundTripTime?: boolean; /** * Whether to send keep alive messages. Defaults to true. */ @@ -898,11 +827,9 @@ export class PersistentProtocol implements IMessagePassingProtocol { private _socket: ISocket; private _socketWriter: ProtocolWriter; private _socketReader: ProtocolReader; - private _socketLatencyMonitor: LatencyMonitor; private _socketDisposables: DisposableStore; private readonly _loadEstimator: ILoadEstimator; - private readonly _measureRoundTripTime: boolean; private readonly _shouldSendKeepAlive: boolean; private readonly _onControlMessage = new BufferedEmitter(); @@ -920,19 +847,12 @@ export class PersistentProtocol implements IMessagePassingProtocol { private readonly _onSocketTimeout = new BufferedEmitter(); readonly onSocketTimeout: Event = this._onSocketTimeout.event; - private readonly _onHighRoundTripTime = new BufferedEmitter(); - readonly onHighRoundTripTime = this._onHighRoundTripTime.event; - - private readonly _onDidChangeConnectionHealth = new BufferedEmitter(); - readonly onDidChangeConnectionHealth = this._onDidChangeConnectionHealth.event; - public get unacknowledgedCount(): number { return this._outgoingMsgId - this._outgoingAckId; } constructor(opts: PersistentProtocolOptions) { this._loadEstimator = opts.loadEstimator ?? LoadEstimator.getInstance(); - this._measureRoundTripTime = opts.measureRoundTripTime ?? false; this._shouldSendKeepAlive = opts.sendKeepAlive ?? true; this._isReconnecting = false; this._outgoingUnackMsg = new Queue(); @@ -954,13 +874,6 @@ export class PersistentProtocol implements IMessagePassingProtocol { this._socketReader = this._socketDisposables.add(new ProtocolReader(this._socket)); this._socketDisposables.add(this._socketReader.onMessage(msg => this._receiveMessage(msg))); this._socketDisposables.add(this._socket.onClose(e => this._onSocketClose.fire(e))); - this._socketLatencyMonitor = this._socketDisposables.add(new LatencyMonitor()); // is started immediately - this._socketDisposables.add(this._socketLatencyMonitor.onSendLatencyRequest(buffer => this._sendLatencyMeasurementRequest(buffer))); - this._socketDisposables.add(this._socketLatencyMonitor.onHighRoundTripTime(e => this._onHighRoundTripTime.fire(e))); - this._socketDisposables.add(this._socketLatencyMonitor.onDidChangeConnectionHealth(e => this._onDidChangeConnectionHealth.fire(e))); - if (this._measureRoundTripTime) { - this._socketLatencyMonitor.start(); - } if (opts.initialChunk) { this._socketReader.acceptChunk(opts.initialChunk); @@ -1041,19 +954,12 @@ export class PersistentProtocol implements IMessagePassingProtocol { this._socketReader = this._socketDisposables.add(new ProtocolReader(this._socket)); this._socketDisposables.add(this._socketReader.onMessage(msg => this._receiveMessage(msg))); this._socketDisposables.add(this._socket.onClose(e => this._onSocketClose.fire(e))); - this._socketLatencyMonitor = this._socketDisposables.add(new LatencyMonitor()); // will be started later - this._socketDisposables.add(this._socketLatencyMonitor.onSendLatencyRequest(buffer => this._sendLatencyMeasurementRequest(buffer))); - this._socketDisposables.add(this._socketLatencyMonitor.onHighRoundTripTime(e => this._onHighRoundTripTime.fire(e))); - this._socketDisposables.add(this._socketLatencyMonitor.onDidChangeConnectionHealth(e => this._onDidChangeConnectionHealth.fire(e))); this._socketReader.acceptChunk(initialDataChunk); } public endAcceptReconnection(): void { this._isReconnecting = false; - if (this._measureRoundTripTime) { - this._socketLatencyMonitor.start(); - } // After a reconnection, let the other party know (again) which messages have been received. // (perhaps the other party didn't receive a previous ACK) @@ -1144,15 +1050,6 @@ export class PersistentProtocol implements IMessagePassingProtocol { // nothing to do break; } - case ProtocolMessageType.LatencyMeasurementRequest: { - // we just send the data back - this._sendLatencyMeasurementResponse(msg.data); - break; - } - case ProtocolMessageType.LatencyMeasurementResponse: { - this._socketLatencyMonitor.handleResponse(msg.data); - break; - } } } @@ -1282,92 +1179,6 @@ export class PersistentProtocol implements IMessagePassingProtocol { const msg = new ProtocolMessage(ProtocolMessageType.KeepAlive, 0, this._incomingAckId, getEmptyBuffer()); this._socketWriter.write(msg); } - - private _sendLatencyMeasurementRequest(buffer: VSBuffer): void { - this._incomingAckId = this._incomingMsgId; - const msg = new ProtocolMessage(ProtocolMessageType.LatencyMeasurementRequest, 0, this._incomingAckId, buffer); - this._socketWriter.write(msg); - } - - private _sendLatencyMeasurementResponse(buffer: VSBuffer): void { - this._incomingAckId = this._incomingMsgId; - const msg = new ProtocolMessage(ProtocolMessageType.LatencyMeasurementResponse, 0, this._incomingAckId, buffer); - this._socketWriter.write(msg); - } -} - -class LatencyMonitor extends Disposable { - - private readonly _onSendLatencyRequest = this._register(new Emitter()); - readonly onSendLatencyRequest: Event = this._onSendLatencyRequest.event; - - private readonly _onHighRoundTripTime = this._register(new Emitter()); - public readonly onHighRoundTripTime = this._onHighRoundTripTime.event; - - private readonly _onDidChangeConnectionHealth = this._register(new Emitter()); - public readonly onDidChangeConnectionHealth = this._onDidChangeConnectionHealth.event; - - private readonly _measureLatencyTimer = this._register(new IntervalTimer()); - - /** - * Timestamp of our last latency request message sent to the other host. - */ - private _lastLatencyMeasurementSent: number = -1; - - /** - * ID separate from the regular message IDs. Used to match up latency - * requests with responses so we know we're timing the right message - * even if a reconnection occurs. - */ - private _lastLatencyMeasurementId: number = 0; - - /** - * Circular buffer of latency measurements - */ - private _latencySamples: number[] = Array.from({ length: ProtocolConstants.LatencySampleCount }, (_) => 0); - private _latencySampleIndex: number = 0; - private _connectionHealth = ConnectionHealth.Good; - - constructor() { - super(); - } - - public start(): void { - this._measureLatencyTimer.cancelAndSet(() => { - this._lastLatencyMeasurementSent = Date.now(); - const measurementId = ++this._lastLatencyMeasurementId; - const buffer = VSBuffer.alloc(4); - buffer.writeUInt32BE(measurementId, 0); - this._onSendLatencyRequest.fire(buffer); - }, ProtocolConstants.LatencySampleTime); - } - - public handleResponse(buffer: VSBuffer): void { - if (buffer.byteLength !== 4) { - // invalid measurementId - return; - } - const measurementId = buffer.readUInt32BE(0); - if (this._lastLatencyMeasurementSent <= 0 || measurementId !== this._lastLatencyMeasurementId) { - // invalid measurementId - return; - } - - const roundtripTime = Date.now() - this._lastLatencyMeasurementSent; - const sampleIndex = this._latencySampleIndex++; - this._latencySamples[sampleIndex % this._latencySamples.length] = roundtripTime; - - const previousConnectionHealth = this._connectionHealth; - const highLatencySampleCount = this._latencySamples.filter(s => s >= ProtocolConstants.HighLatencyTimeThreshold).length; - this._connectionHealth = (highLatencySampleCount >= ProtocolConstants.HighLatencySampleThreshold ? ConnectionHealth.Poor : ConnectionHealth.Good); - - if (roundtripTime > ProtocolConstants.HighLatencyTimeThreshold) { - this._onHighRoundTripTime.fire(new HighRoundTripTimeEvent(roundtripTime, highLatencySampleCount)); - } - if (previousConnectionHealth !== this._connectionHealth) { - this._onDidChangeConnectionHealth.fire(this._connectionHealth); - } - } } // (() => { diff --git a/src/vs/base/parts/ipc/electron-browser/ipc.mp.ts b/src/vs/base/parts/ipc/electron-browser/ipc.mp.ts deleted file mode 100644 index 66d30050752..00000000000 --- a/src/vs/base/parts/ipc/electron-browser/ipc.mp.ts +++ /dev/null @@ -1,54 +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 { ipcRenderer } from 'electron'; -import { Event } from 'vs/base/common/event'; -import { ClientConnectionEvent, IPCServer } from 'vs/base/parts/ipc/common/ipc'; -import { Protocol as MessagePortProtocol } from 'vs/base/parts/ipc/common/ipc.mp'; - -/** - * An implementation of a `IPCServer` on top of MessagePort style IPC communication. - * The clients register themselves via Electron IPC transfer. - */ -export class Server extends IPCServer { - - private static getOnDidClientConnect(): Event { - - // Clients connect via `vscode:createMessageChannel` to get a - // `MessagePort` that is ready to be used. For every connection - // we create a pair of message ports and send it back. - // - // The `nonce` is included so that the main side has a chance to - // correlate the response back to the sender. - const onCreateMessageChannel = Event.fromNodeEventEmitter(ipcRenderer, 'vscode:createMessageChannel', (_, nonce: string) => nonce); - - return Event.map(onCreateMessageChannel, nonce => { - - // Create a new pair of ports and protocol for this connection - const { port1: incomingPort, port2: outgoingPort } = new MessageChannel(); - const protocol = new MessagePortProtocol(incomingPort); - - const result: ClientConnectionEvent = { - protocol, - // Not part of the standard spec, but in Electron we get a `close` event - // when the other side closes. We can use this to detect disconnects - // (https://github.com/electron/electron/blob/11-x-y/docs/api/message-port-main.md#event-close) - onDidClientDisconnect: Event.fromDOMEventEmitter(incomingPort, 'close') - }; - - // Send one port back to the requestor - // Note: we intentionally use `electron` APIs here because - // transferables like the `MessagePort` cannot be transferred - // over preload scripts when `contextIsolation: true` - ipcRenderer.postMessage('vscode:createMessageChannelResult', nonce, [outgoingPort]); - - return result; - }); - } - - constructor() { - super(Server.getOnDidClientConnect()); - } -} diff --git a/src/vs/base/parts/ipc/node/ipc.net.ts b/src/vs/base/parts/ipc/node/ipc.net.ts index 0a7f31379f6..ed30467961b 100644 --- a/src/vs/base/parts/ipc/node/ipc.net.ts +++ b/src/vs/base/parts/ipc/node/ipc.net.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// import { createHash } from 'crypto'; -import type { Server as NetServer, Socket } from 'net'; -// import { tmpdir } from 'os'; -import type * as zlib from 'zlib'; +import { createHash } from 'crypto'; +import { Server as NetServer, Socket, createServer, createConnection } from 'net'; +import { tmpdir } from 'os'; +import { createDeflateRaw, ZlibOptions, InflateRaw, DeflateRaw, createInflateRaw } from 'zlib'; import { VSBuffer } from 'vs/base/common/buffer'; import { onUnexpectedError } from 'vs/base/common/errors'; import { Emitter, Event } from 'vs/base/common/event'; @@ -17,16 +17,6 @@ import { generateUuid } from 'vs/base/common/uuid'; import { ClientConnectionEvent, IPCServer } from 'vs/base/parts/ipc/common/ipc'; import { ChunkStream, Client, ISocket, Protocol, SocketCloseEvent, SocketCloseEventType, SocketDiagnostics, SocketDiagnosticsEventType } from 'vs/base/parts/ipc/common/ipc.net'; -// TODO@bpasero remove me once electron utility process has landed -function getNodeDependencies() { - return { - crypto: globalThis._VSCODE_NODE_MODULES.crypto, - zlib: globalThis._VSCODE_NODE_MODULES.zlib, - net: globalThis._VSCODE_NODE_MODULES.net, - os: globalThis._VSCODE_NODE_MODULES.os, - }; -} - export class NodeSocket implements ISocket { public readonly debugLabel: string; @@ -626,7 +616,7 @@ class ZlibInflateStream extends Disposable { private readonly _onError = this._register(new Emitter()); public readonly onError = this._onError.event; - private readonly _zlibInflate: zlib.InflateRaw; + private readonly _zlibInflate: InflateRaw; private readonly _recordedInflateBytes: VSBuffer[] = []; private readonly _pendingInflateData: VSBuffer[] = []; @@ -641,10 +631,10 @@ class ZlibInflateStream extends Disposable { private readonly _tracer: ISocketTracer, private readonly _recordInflateBytes: boolean, inflateBytes: VSBuffer | null, - options: zlib.ZlibOptions + options: ZlibOptions ) { super(); - this._zlibInflate = getNodeDependencies().zlib.createInflateRaw(options); + this._zlibInflate = createInflateRaw(options); this._zlibInflate.on('error', (err) => { this._tracer.traceSocketEvent(SocketDiagnosticsEventType.zlibInflateError, { message: err?.message, code: (err)?.code }); this._onError.fire(err); @@ -686,16 +676,16 @@ class ZlibDeflateStream extends Disposable { private readonly _onError = this._register(new Emitter()); public readonly onError = this._onError.event; - private readonly _zlibDeflate: zlib.DeflateRaw; + private readonly _zlibDeflate: DeflateRaw; private readonly _pendingDeflateData: VSBuffer[] = []; constructor( private readonly _tracer: ISocketTracer, - options: zlib.ZlibOptions + options: ZlibOptions ) { super(); - this._zlibDeflate = getNodeDependencies().zlib.createDeflateRaw({ + this._zlibDeflate = createDeflateRaw({ windowBits: 15 }); this._zlibDeflate.on('error', (err) => { @@ -756,8 +746,7 @@ function unmask(buffer: VSBuffer, mask: number): void { // Read this before there's any chance it is overwritten // Related to https://github.com/microsoft/vscode/issues/30624 -// TODO@bpasero revert me once electron utility process has landed -export const XDG_RUNTIME_DIR = typeof process !== 'undefined' ? process.env['XDG_RUNTIME_DIR'] : undefined; +export const XDG_RUNTIME_DIR = process.env['XDG_RUNTIME_DIR']; const safeIpcPathLengths: { [platform: number]: number } = { [Platform.Linux]: 107, @@ -774,7 +763,7 @@ export function createRandomIPCHandle(): string { // Mac & Unix: Use socket file // Unix: Prefer XDG_RUNTIME_DIR over user data path - const basePath = process.platform !== 'darwin' && XDG_RUNTIME_DIR ? XDG_RUNTIME_DIR : getNodeDependencies().os.tmpdir(); + const basePath = process.platform !== 'darwin' && XDG_RUNTIME_DIR ? XDG_RUNTIME_DIR : tmpdir(); const result = join(basePath, `vscode-ipc-${randomSuffix}.sock`); // Validate length @@ -784,7 +773,7 @@ export function createRandomIPCHandle(): string { } export function createStaticIPCHandle(directoryPath: string, type: string, version: string): string { - const scope = getNodeDependencies().crypto.createHash('md5').update(directoryPath).digest('hex'); + const scope = createHash('md5').update(directoryPath).digest('hex'); // Windows: use named pipe if (process.platform === 'win32') { @@ -852,7 +841,7 @@ export function serve(port: number): Promise; export function serve(namedPipe: string): Promise; export function serve(hook: any): Promise { return new Promise((c, e) => { - const server = getNodeDependencies().net.createServer(); + const server = createServer(); server.on('error', e); server.listen(hook, () => { @@ -867,7 +856,7 @@ export function connect(port: number, clientId: string): Promise; export function connect(namedPipe: string, clientId: string): Promise; export function connect(hook: any, clientId: string): Promise { return new Promise((c, e) => { - const socket = getNodeDependencies().net.createConnection(hook, () => { + const socket = createConnection(hook, () => { socket.removeListener('error', e); c(Client.fromSocket(new NodeSocket(socket, `ipc-client${clientId}`), clientId)); }); diff --git a/src/vs/base/parts/sandbox/electron-main/electronTypes.ts b/src/vs/base/parts/sandbox/electron-main/electronTypes.ts deleted file mode 100644 index 5514d133455..00000000000 --- a/src/vs/base/parts/sandbox/electron-main/electronTypes.ts +++ /dev/null @@ -1,137 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -// TODO@bpasero remove me once we are on Electron 22 - -import type { EventEmitter } from 'events'; -import * as electron from 'electron'; - -export declare namespace UtilityProcessProposedApi { - interface ForkOptions { - /** - * Environment key-value pairs. Default is `process.env`. - */ - env?: NodeJS.ProcessEnv; - /** - * List of string arguments passed to the executable. - */ - execArgv?: string[]; - /** - * Current working directory of the child process. - */ - cwd?: string; - /** - * Allows configuring the mode for `stdout` and `stderr` of the child process. - * Default is `inherit`. String value can be one of `pipe`, `ignore`, `inherit`, - * for more details on these values you can refer to stdio documentation from - * Node.js. Currently this option only supports configuring `stdout` and `stderr` - * to either `pipe`, `inherit` or `ignore`. Configuring `stdin` is not supported; - * `stdin` will always be ignored. For example, the supported values will be - * processed as following: - */ - stdio?: (Array<'pipe' | 'ignore' | 'inherit'>) | (string); - /** - * Name of the process that will appear in `name` property of `child-process-gone` - * event of `app`. Default is `node.mojom.NodeService`. - */ - serviceName?: string; - /** - * With this flag, the utility process will be launched via the `Electron Helper - * (Plugin).app` helper executable on macOS, which can be codesigned with - * `com.apple.security.cs.disable-library-validation` and - * `com.apple.security.cs.allow-unsigned-executable-memory` entitlements. This will - * allow the utility process to load unsigned libraries. Unless you specifically - * need this capability, it is best to leave this disabled. Default is `false`. - * - * @platform darwin - */ - allowLoadingUnsignedLibraries?: boolean; - } - class UtilityProcess extends EventEmitter { - - // Docs: https://electronjs.org/docs/api/utility-process - - static fork(modulePath: string, args?: string[], options?: ForkOptions): UtilityProcess; - /** - * Emitted after the child process ends. - */ - on(event: 'exit', listener: ( - /** - * Contains the exit code for the process obtained from waitpid on posix, or - * GetExitCodeProcess on windows. - */ - code: number) => void): this; - once(event: 'exit', listener: ( - /** - * Contains the exit code for the process obtained from waitpid on posix, or - * GetExitCodeProcess on windows. - */ - code: number) => void): this; - addListener(event: 'exit', listener: ( - /** - * Contains the exit code for the process obtained from waitpid on posix, or - * GetExitCodeProcess on windows. - */ - code: number) => void): this; - removeListener(event: 'exit', listener: ( - /** - * Contains the exit code for the process obtained from waitpid on posix, or - * GetExitCodeProcess on windows. - */ - code: number) => void): this; - /** - * Emitted when the child process sends a message using - * `process.parentPort.postMessage()`. - */ - on(event: 'message', listener: (message: any) => void): this; - once(event: 'message', listener: (message: any) => void): this; - addListener(event: 'message', listener: (message: any) => void): this; - removeListener(event: 'message', listener: (message: any) => void): this; - /** - * Emitted once the child process has spawned successfully. - */ - on(event: 'spawn', listener: Function): this; - once(event: 'spawn', listener: Function): this; - addListener(event: 'spawn', listener: Function): this; - removeListener(event: 'spawn', listener: Function): this; - /** - * Terminates the process gracefully. On POSIX, it uses SIGTERM but will ensure the - * process is reaped on exit. This function returns true if the kill is successful, - * and false otherwise. - */ - kill(): boolean; - /** - * Send a message to the child process, optionally transferring ownership of zero - * or more [`MessagePortMain`][] objects. - * - * For example: - */ - postMessage(message: any, transfer?: Electron.MessagePortMain[]): void; - /** - * A `Integer | undefined` representing the process identifier (PID) of the child - * process. If the child process fails to spawn due to errors, then the value is - * `undefined`. When the child process exits, then the value is `undefined` after - * the `exit` event is emitted. - */ - pid: (number) | (undefined); - /** - * A `NodeJS.ReadableStream | null` that represents the child process's stderr. If - * the child was spawned with options.stdio[2] set to anything other than 'pipe', - * then this will be `null`. When the child process exits, then the value is `null` - * after the `exit` event is emitted. - */ - stderr: (NodeJS.ReadableStream) | (null); - /** - * A `NodeJS.ReadableStream | null` that represents the child process's stdout. If - * the child was spawned with options.stdio[1] set to anything other than 'pipe', - * then this will be `null`. When the child process exits, then the value is `null` - * after the `exit` event is emitted. - */ - stdout: (NodeJS.ReadableStream) | (null); - } -} - -export const UtilityProcess = ((electron as any).utilityProcess); -export const canUseUtilityProcess = (typeof UtilityProcess !== 'undefined'); diff --git a/src/vs/base/parts/sandbox/electron-sandbox/globals.ts b/src/vs/base/parts/sandbox/electron-sandbox/globals.ts index d89c22a4f0d..614c1385b2a 100644 --- a/src/vs/base/parts/sandbox/electron-sandbox/globals.ts +++ b/src/vs/base/parts/sandbox/electron-sandbox/globals.ts @@ -8,7 +8,7 @@ import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes import { IpcRenderer, ProcessMemoryInfo, WebFrame } from 'vs/base/parts/sandbox/electron-sandbox/electronTypes'; /** - * In sandboxed renderers we cannot expose all of the `process` global of node.js + * In Electron renderers we cannot expose all of the `process` global of node.js */ export interface ISandboxNodeProcess extends INodeProcess { @@ -29,20 +29,6 @@ export interface ISandboxNodeProcess extends INodeProcess { */ readonly type: string; - /** - * Whether the process is sandboxed or not. - */ - readonly sandboxed: boolean; - - /** - * The `process.pid` property returns the PID of the process. - * - * @deprecated this property will be removed once sandbox is enabled. - * - * TODO@bpasero remove this property when sandbox is on - */ - readonly pid: number; - /** * A list of versions for the current node.js/electron configuration. */ diff --git a/src/vs/base/parts/sandbox/electron-browser/preload.js b/src/vs/base/parts/sandbox/electron-sandbox/preload.js similarity index 94% rename from src/vs/base/parts/sandbox/electron-browser/preload.js rename to src/vs/base/parts/sandbox/electron-sandbox/preload.js index 53e38ce14c2..0494b7ddda7 100644 --- a/src/vs/base/parts/sandbox/electron-browser/preload.js +++ b/src/vs/base/parts/sandbox/electron-sandbox/preload.js @@ -116,7 +116,7 @@ // ####################################################################### /** - * @type {import('../electron-sandbox/globals')} + * @type {import('./globals')} */ const globals = { @@ -124,7 +124,7 @@ * A minimal set of methods exposed from Electron's `ipcRenderer` * to support communication to main process. * - * @typedef {import('../electron-sandbox/electronTypes').IpcRenderer} IpcRenderer + * @typedef {import('./electronTypes').IpcRenderer} IpcRenderer * @typedef {import('electron').IpcRendererEvent} IpcRendererEvent * * @type {IpcRenderer} @@ -194,7 +194,7 @@ }, /** - * @type {import('../electron-sandbox/globals').IpcMessagePort} + * @type {import('./globals').IpcMessagePort} */ ipcMessagePort: { @@ -224,7 +224,7 @@ /** * Support for subset of methods of Electron's `webFrame` type. * - * @type {import('../electron-sandbox/electronTypes').WebFrame} + * @type {import('./electronTypes').WebFrame} */ webFrame: { @@ -244,7 +244,7 @@ * Note: when `sandbox` is enabled, the only properties available * are https://github.com/electron/electron/blob/master/docs/api/process.md#sandbox * - * @typedef {import('../electron-sandbox/globals').ISandboxNodeProcess} ISandboxNodeProcess + * @typedef {import('./globals').ISandboxNodeProcess} ISandboxNodeProcess * * @type {ISandboxNodeProcess} */ @@ -252,11 +252,9 @@ get platform() { return process.platform; }, get arch() { return process.arch; }, get env() { return { ...process.env }; }, - get pid() { return process.pid; }, get versions() { return process.versions; }, get type() { return 'renderer'; }, get execPath() { return process.execPath; }, - get sandboxed() { return process.sandboxed; }, /** * @returns {string} @@ -293,7 +291,7 @@ /** * Some information about the context we are running in. * - * @type {import('../electron-sandbox/globals').ISandboxContext} + * @type {import('./globals').ISandboxContext} */ context: { diff --git a/src/vs/base/parts/storage/common/storage.ts b/src/vs/base/parts/storage/common/storage.ts index b0ce014a093..71bbf4f9741 100644 --- a/src/vs/base/parts/storage/common/storage.ts +++ b/src/vs/base/parts/storage/common/storage.ts @@ -4,9 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { ThrottledDelayer } from 'vs/base/common/async'; -import { Emitter, Event } from 'vs/base/common/event'; +import { Event, PauseableEmitter } from 'vs/base/common/event'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { isUndefinedOrNull } from 'vs/base/common/types'; +import { parse, stringify } from 'vs/base/common/marshalling'; +import { isObject, isUndefinedOrNull } from 'vs/base/common/types'; export enum StorageHint { @@ -51,9 +52,29 @@ export interface IStorageDatabase { close(recovery?: () => Map): Promise; } +export interface IStorageChangeEvent { + + /** + * The `key` of the storage entry that was changed + * or was removed. + */ + readonly key: string; + + /** + * A hint how the storage change event was triggered. If + * `true`, the storage change was triggered by an external + * source, such as: + * - another process (for example another window) + * - operations such as settings sync or profiles change + */ + readonly external?: boolean; +} + +export type StorageValue = string | boolean | number | undefined | null | object; + export interface IStorage extends IDisposable { - readonly onDidChangeStorage: Event; + readonly onDidChangeStorage: Event; readonly items: Map; readonly size: number; @@ -69,8 +90,11 @@ export interface IStorage extends IDisposable { getNumber(key: string, fallbackValue: number): number; getNumber(key: string, fallbackValue?: number): number | undefined; - set(key: string, value: string | boolean | number | undefined | null): Promise; - delete(key: string): Promise; + getObject(key: string, fallbackValue: T): T; + getObject(key: string, fallbackValue?: T): T | undefined; + + set(key: string, value: StorageValue, external?: boolean): Promise; + delete(key: string, external?: boolean): Promise; flush(delay?: number): Promise; whenFlushed(): Promise; @@ -88,7 +112,7 @@ export class Storage extends Disposable implements IStorage { private static readonly DEFAULT_FLUSH_DELAY = 100; - private readonly _onDidChangeStorage = this._register(new Emitter()); + private readonly _onDidChangeStorage = this._register(new PauseableEmitter()); readonly onDidChangeStorage = this._onDidChangeStorage.event; private state = StorageState.None; @@ -118,14 +142,22 @@ export class Storage extends Disposable implements IStorage { } private onDidChangeItemsExternal(e: IStorageItemsChangeEvent): void { - // items that change external require us to update our - // caches with the values. we just accept the value and - // emit an event if there is a change. - e.changed?.forEach((value, key) => this.accept(key, value)); - e.deleted?.forEach(key => this.accept(key, undefined)); + this._onDidChangeStorage.pause(); + + try { + // items that change external require us to update our + // caches with the values. we just accept the value and + // emit an event if there is a change. + + e.changed?.forEach((value, key) => this.acceptExternal(key, value)); + e.deleted?.forEach(key => this.acceptExternal(key, undefined)); + + } finally { + this._onDidChangeStorage.resume(); + } } - private accept(key: string, value: string | undefined): void { + private acceptExternal(key: string, value: string | undefined): void { if (this.state === StorageState.Closed) { return; // Return early if we are already closed } @@ -148,7 +180,7 @@ export class Storage extends Disposable implements IStorage { // Signal to outside listeners if (changed) { - this._onDidChangeStorage.fire(key); + this._onDidChangeStorage.fire({ key, external: true }); } } @@ -213,18 +245,30 @@ export class Storage extends Disposable implements IStorage { return parseInt(value, 10); } - async set(key: string, value: string | boolean | number | null | undefined): Promise { + getObject(key: string, fallbackValue: object): object; + getObject(key: string, fallbackValue?: object | undefined): object | undefined; + getObject(key: string, fallbackValue?: object): object | undefined { + const value = this.get(key); + + if (isUndefinedOrNull(value)) { + return fallbackValue; + } + + return parse(value); + } + + async set(key: string, value: string | boolean | number | null | undefined | object, external = false): Promise { if (this.state === StorageState.Closed) { return; // Return early if we are already closed } // We remove the key for undefined/null values if (isUndefinedOrNull(value)) { - return this.delete(key); + return this.delete(key, external); } // Otherwise, convert to String and store - const valueStr = String(value); + const valueStr = isObject(value) || Array.isArray(value) ? stringify(value) : String(value); // Return early if value already set const currentValue = this.cache.get(key); @@ -238,13 +282,13 @@ export class Storage extends Disposable implements IStorage { this.pendingDeletes.delete(key); // Event - this._onDidChangeStorage.fire(key); + this._onDidChangeStorage.fire({ key, external }); // Accumulate work by scheduling after timeout return this.doFlush(); } - async delete(key: string): Promise { + async delete(key: string, external = false): Promise { if (this.state === StorageState.Closed) { return; // Return early if we are already closed } @@ -262,7 +306,7 @@ export class Storage extends Disposable implements IStorage { this.pendingInserts.delete(key); // Event - this._onDidChangeStorage.fire(key); + this._onDidChangeStorage.fire({ key, external }); // Accumulate work by scheduling after timeout return this.doFlush(); diff --git a/src/vs/base/parts/storage/test/node/storage.test.ts b/src/vs/base/parts/storage/test/node/storage.integrationTest.ts similarity index 97% rename from src/vs/base/parts/storage/test/node/storage.test.ts rename to src/vs/base/parts/storage/test/node/storage.integrationTest.ts index 70ff91977be..b0290ec7c60 100644 --- a/src/vs/base/parts/storage/test/node/storage.test.ts +++ b/src/vs/base/parts/storage/test/node/storage.integrationTest.ts @@ -3,12 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ok, strictEqual } from 'assert'; +import { deepStrictEqual, ok, strictEqual } from 'assert'; import { tmpdir } from 'os'; import { timeout } from 'vs/base/common/async'; import { Emitter, Event } from 'vs/base/common/event'; import { join } from 'vs/base/common/path'; import { isWindows } from 'vs/base/common/platform'; +import { URI } from 'vs/base/common/uri'; import { generateUuid } from 'vs/base/common/uuid'; import { Promises } from 'vs/base/node/pfs'; import { isStorageItemsChangeEvent, IStorageDatabase, IStorageItemsChangeEvent, Storage } from 'vs/base/parts/storage/common/storage'; @@ -30,6 +31,21 @@ flakySuite('Storage Library', function () { return Promises.rm(testDir); }); + test('objects', () => { + return runWithFakedTimers({}, async function () { + const storage = new Storage(new SQLiteStorageDatabase(join(testDir, 'storage.db'))); + + await storage.init(); + + ok(!storage.getObject('foo')); + const uri = URI.file('path/to/folder'); + storage.set('foo', { 'bar': uri }); + deepStrictEqual(storage.getObject('foo'), { 'bar': uri }); + + await storage.close(); + }); + }); + test('basics', () => { return runWithFakedTimers({}, async function () { const storage = new Storage(new SQLiteStorageDatabase(join(testDir, 'storage.db'))); @@ -40,10 +56,11 @@ flakySuite('Storage Library', function () { strictEqual(storage.get('foo', 'bar'), 'bar'); strictEqual(storage.getNumber('foo', 55), 55); strictEqual(storage.getBoolean('foo', true), true); + deepStrictEqual(storage.getObject('foo', { 'bar': 'baz' }), { 'bar': 'baz' }); let changes = new Set(); - storage.onDidChangeStorage(key => { - changes.add(key); + storage.onDidChangeStorage(e => { + changes.add(e.key); }); await storage.whenFlushed(); // returns immediately when no pending updates @@ -52,6 +69,7 @@ flakySuite('Storage Library', function () { const set1Promise = storage.set('bar', 'foo'); const set2Promise = storage.set('barNumber', 55); const set3Promise = storage.set('barBoolean', true); + const set4Promise = storage.set('barObject', { 'bar': 'baz' }); let flushPromiseResolved = false; storage.whenFlushed().then(() => flushPromiseResolved = true); @@ -59,14 +77,16 @@ flakySuite('Storage Library', function () { strictEqual(storage.get('bar'), 'foo'); strictEqual(storage.getNumber('barNumber'), 55); strictEqual(storage.getBoolean('barBoolean'), true); + deepStrictEqual(storage.getObject('barObject'), { 'bar': 'baz' }); - strictEqual(changes.size, 3); + strictEqual(changes.size, 4); ok(changes.has('bar')); ok(changes.has('barNumber')); ok(changes.has('barBoolean')); + ok(changes.has('barObject')); let setPromiseResolved = false; - await Promise.all([set1Promise, set2Promise, set3Promise]).then(() => setPromiseResolved = true); + await Promise.all([set1Promise, set2Promise, set3Promise, set4Promise]).then(() => setPromiseResolved = true); strictEqual(setPromiseResolved, true); strictEqual(flushPromiseResolved, true); @@ -76,21 +96,25 @@ flakySuite('Storage Library', function () { storage.set('bar', 'foo'); storage.set('barNumber', 55); storage.set('barBoolean', true); + storage.set('barObject', { 'bar': 'baz' }); strictEqual(changes.size, 0); // Simple deletes const delete1Promise = storage.delete('bar'); const delete2Promise = storage.delete('barNumber'); const delete3Promise = storage.delete('barBoolean'); + const delete4Promise = storage.delete('barObject'); ok(!storage.get('bar')); ok(!storage.getNumber('barNumber')); ok(!storage.getBoolean('barBoolean')); + ok(!storage.getObject('barObject')); - strictEqual(changes.size, 3); + strictEqual(changes.size, 4); ok(changes.has('bar')); ok(changes.has('barNumber')); ok(changes.has('barBoolean')); + ok(changes.has('barObject')); changes = new Set(); @@ -98,10 +122,11 @@ flakySuite('Storage Library', function () { storage.delete('bar'); storage.delete('barNumber'); storage.delete('barBoolean'); + storage.delete('barObject'); strictEqual(changes.size, 0); let deletePromiseResolved = false; - await Promise.all([delete1Promise, delete2Promise, delete3Promise]).then(() => deletePromiseResolved = true); + await Promise.all([delete1Promise, delete2Promise, delete3Promise, delete4Promise]).then(() => deletePromiseResolved = true); strictEqual(deletePromiseResolved, true); await storage.close(); @@ -124,8 +149,8 @@ flakySuite('Storage Library', function () { const storage = new Storage(database); const changes = new Set(); - storage.onDidChangeStorage(key => { - changes.add(key); + storage.onDidChangeStorage(e => { + changes.add(e.key); }); await storage.init(); @@ -247,8 +272,8 @@ flakySuite('Storage Library', function () { await storage.init(); let changes = new Set(); - storage.onDidChangeStorage(key => { - changes.add(key); + storage.onDidChangeStorage(e => { + changes.add(e.key); }); const set1Promise = storage.set('foo', 'bar1'); diff --git a/src/vs/base/test/browser/dom.test.ts b/src/vs/base/test/browser/dom.test.ts index 87f5b2d4cab..dfb9f0a342b 100644 --- a/src/vs/base/test/browser/dom.test.ts +++ b/src/vs/base/test/browser/dom.test.ts @@ -18,6 +18,8 @@ suite('dom', () => { assert(!element.classList.contains('bar')); assert(!element.classList.contains('foo')); assert(!element.classList.contains('')); + + }); test('removeClass', () => { diff --git a/src/vs/base/test/browser/markdownRenderer.test.ts b/src/vs/base/test/browser/markdownRenderer.test.ts index f30fc44b962..bd1382b36e2 100644 --- a/src/vs/base/test/browser/markdownRenderer.test.ts +++ b/src/vs/base/test/browser/markdownRenderer.test.ts @@ -4,8 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { renderMarkdown, renderMarkdownAsPlaintext } from 'vs/base/browser/markdownRenderer'; +import { fillInIncompleteTokens, renderMarkdown, renderMarkdownAsPlaintext } from 'vs/base/browser/markdownRenderer'; import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; +import { marked } from 'vs/base/common/marked/marked'; import { parse } from 'vs/base/common/marshalling'; import { isWeb } from 'vs/base/common/platform'; import { URI } from 'vs/base/common/uri'; @@ -325,4 +326,386 @@ suite('MarkdownRenderer', () => { assert.strictEqual(result.innerHTML, ``); }); }); + + suite('fillInIncompleteTokens', () => { + function ignoreRaw(...tokenLists: marked.Token[][]): void { + tokenLists.forEach(tokens => { + tokens.forEach(t => t.raw = ''); + }); + } + + const completeTable = '| a | b |\n| --- | --- |'; + + suite('table', () => { + test('complete table', () => { + const tokens = marked.lexer(completeTable); + const newTokens = fillInIncompleteTokens(tokens); + assert.equal(newTokens, tokens); + }); + + test('full header only', () => { + const incompleteTable = '| a | b |'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(completeTable); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('full header only with trailing space', () => { + const incompleteTable = '| a | b | '; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(completeTable); + + const newTokens = fillInIncompleteTokens(tokens); + ignoreRaw(newTokens, completeTableTokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('incomplete header', () => { + const incompleteTable = '| a | b'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(completeTable); + + const newTokens = fillInIncompleteTokens(tokens); + + ignoreRaw(newTokens, completeTableTokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('incomplete header one column', () => { + const incompleteTable = '| a '; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(incompleteTable + '|\n| --- |'); + + const newTokens = fillInIncompleteTokens(tokens); + + ignoreRaw(newTokens, completeTableTokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('full header with extras', () => { + const incompleteTable = '| a **bold** | b _italics_ |'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(incompleteTable + '\n| --- | --- |'); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('full header with leading text', () => { + // Parsing this gives one token and one 'text' subtoken + const incompleteTable = 'here is a table\n| a | b |'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(incompleteTable + '\n| --- | --- |'); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('full header with leading other stuff', () => { + // Parsing this gives one token and one 'text' subtoken + const incompleteTable = '```js\nconst xyz = 123;\n```\n| a | b |'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(incompleteTable + '\n| --- | --- |'); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('full header with incomplete separator', () => { + const incompleteTable = '| a | b |\n| ---'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(completeTable); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('full header with incomplete separator 2', () => { + const incompleteTable = '| a | b |\n| --- |'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(completeTable); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('full header with incomplete separator 3', () => { + const incompleteTable = '| a | b |\n|'; + const tokens = marked.lexer(incompleteTable); + const completeTableTokens = marked.lexer(completeTable); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, completeTableTokens); + }); + + test('not a table', () => { + const incompleteTable = '| a | b |\nsome text'; + const tokens = marked.lexer(incompleteTable); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, tokens); + }); + + test('not a table 2', () => { + const incompleteTable = '| a | b |\n| --- |\nsome text'; + const tokens = marked.lexer(incompleteTable); + + const newTokens = fillInIncompleteTokens(tokens); + assert.deepStrictEqual(newTokens, tokens); + }); + }); + + suite('codeblock', () => { + test('complete code block', () => { + const completeCodeblock = '```js\nconst xyz = 123;\n```'; + const tokens = marked.lexer(completeCodeblock); + const newTokens = fillInIncompleteTokens(tokens); + assert.equal(newTokens, tokens); + }); + + test('code block header only', () => { + const incompleteCodeblock = '```js'; + const tokens = marked.lexer(incompleteCodeblock); + const newTokens = fillInIncompleteTokens(tokens); + + const completeCodeblockTokens = marked.lexer(incompleteCodeblock + '\n```'); + assert.deepStrictEqual(newTokens, completeCodeblockTokens); + }); + + test('code block header no lang', () => { + const incompleteCodeblock = '```'; + const tokens = marked.lexer(incompleteCodeblock); + const newTokens = fillInIncompleteTokens(tokens); + + const completeCodeblockTokens = marked.lexer(incompleteCodeblock + '\n```'); + assert.deepStrictEqual(newTokens, completeCodeblockTokens); + }); + + test('code block header and some code', () => { + const incompleteCodeblock = '```js\nconst'; + const tokens = marked.lexer(incompleteCodeblock); + const newTokens = fillInIncompleteTokens(tokens); + + const completeCodeblockTokens = marked.lexer(incompleteCodeblock + '\n```'); + assert.deepStrictEqual(newTokens, completeCodeblockTokens); + }); + + test('code block header with leading text', () => { + const incompleteCodeblock = 'some text\n```js'; + const tokens = marked.lexer(incompleteCodeblock); + const newTokens = fillInIncompleteTokens(tokens); + + const completeCodeblockTokens = marked.lexer(incompleteCodeblock + '\n```'); + assert.deepStrictEqual(newTokens, completeCodeblockTokens); + }); + + test('code block header with leading text and some code', () => { + const incompleteCodeblock = 'some text\n```js\nconst'; + const tokens = marked.lexer(incompleteCodeblock); + const newTokens = fillInIncompleteTokens(tokens); + + const completeCodeblockTokens = marked.lexer(incompleteCodeblock + '\n```'); + assert.deepStrictEqual(newTokens, completeCodeblockTokens); + }); + }); + + function simpleMarkdownTestSuite(name: string, delimiter: string): void { + test(`incomplete ${name}`, () => { + const incomplete = `${delimiter}code`; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(incomplete + delimiter); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test(`complete ${name}`, () => { + const text = `leading text ${delimiter}code${delimiter} trailing text`; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + assert.deepStrictEqual(newTokens, tokens); + }); + + test(`${name} with leading text`, () => { + const incomplete = `some text and ${delimiter}some code`; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(incomplete + delimiter); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test(`single loose "${delimiter}"`, () => { + const text = `some text and ${delimiter}by itself\nmore text here`; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + assert.deepStrictEqual(newTokens, tokens); + }); + + test(`incomplete ${name} after newline`, () => { + const text = `some text\nmore text here and ${delimiter}text`; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(text + delimiter); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test(`incomplete after complete ${name}`, () => { + const text = `leading text ${delimiter}code${delimiter} trailing text and ${delimiter}another`; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(text + delimiter); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test.skip(`incomplete ${name} in list`, () => { + const text = `- list item one\n- list item two and ${delimiter}text`; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(text + delimiter); + assert.deepStrictEqual(newTokens, completeTokens); + }); + } + + suite('codespan', () => { + simpleMarkdownTestSuite('codespan', '`'); + + test(`backtick between letters`, () => { + const text = 'a`b'; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeCodespanTokens = marked.lexer(text + '`'); + assert.deepStrictEqual(newTokens, completeCodespanTokens); + }); + + test(`nested pattern`, () => { + const text = 'sldkfjsd `abc __def__ ghi'; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(text + '`'); + assert.deepStrictEqual(newTokens, completeTokens); + }); + }); + + suite('star', () => { + simpleMarkdownTestSuite('star', '*'); + + test(`star between letters`, () => { + const text = 'sldkfjsd a*b'; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(text + '*'); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test(`nested pattern`, () => { + const text = 'sldkfjsd *abc __def__ ghi'; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(text + '*'); + assert.deepStrictEqual(newTokens, completeTokens); + }); + }); + + suite('double star', () => { + simpleMarkdownTestSuite('double star', '**'); + + test(`double star between letters`, () => { + const text = 'a**b'; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(text + '**'); + assert.deepStrictEqual(newTokens, completeTokens); + }); + }); + + suite('underscore', () => { + simpleMarkdownTestSuite('underscore', '_'); + + test(`underscore between letters`, () => { + const text = `this_not_italics`; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + assert.deepStrictEqual(newTokens, tokens); + }); + }); + + suite('double underscore', () => { + simpleMarkdownTestSuite('double underscore', '__'); + + test(`double underscore between letters`, () => { + const text = `this__not__bold`; + const tokens = marked.lexer(text); + const newTokens = fillInIncompleteTokens(tokens); + + assert.deepStrictEqual(newTokens, tokens); + }); + }); + + suite('link', () => { + test('incomplete link text', () => { + const incomplete = 'abc [text'; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(incomplete + '](about:blank)'); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test('incomplete link target', () => { + const incomplete = 'foo [text](http://microsoft'; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(incomplete + ')'); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test.skip('incomplete link in list', () => { + const incomplete = '- [text'; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + const completeTokens = marked.lexer(incomplete + '](about:blank)'); + assert.deepStrictEqual(newTokens, completeTokens); + }); + + test('square brace between letters', () => { + const incomplete = 'a[b'; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + assert.deepStrictEqual(newTokens, tokens); + }); + + test('square brace on previous line', () => { + const incomplete = 'text[\nmore text'; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + assert.deepStrictEqual(newTokens, tokens); + }); + + test('complete link', () => { + const incomplete = 'text [link](http://microsoft.com)'; + const tokens = marked.lexer(incomplete); + const newTokens = fillInIncompleteTokens(tokens); + + assert.deepStrictEqual(newTokens, tokens); + }); + }); + }); }); diff --git a/src/vs/base/test/browser/ui/splitview/splitview.test.ts b/src/vs/base/test/browser/ui/splitview/splitview.test.ts index 1e406816c6b..0f23533882c 100644 --- a/src/vs/base/test/browser/ui/splitview/splitview.test.ts +++ b/src/vs/base/test/browser/ui/splitview/splitview.test.ts @@ -336,7 +336,7 @@ suite('Splitview', () => { const viewContainers = container.querySelectorAll('.split-view-view'); assert.strictEqual(viewContainers.length, 2, 'there are two view containers'); assert.strictEqual((viewContainers.item(0) as HTMLElement).style.height, '66px', 'second view container is 66px'); - assert.strictEqual((viewContainers.item(1) as HTMLElement).style.height, `${986 - 66}px`, 'first view container is 66px'); + assert.strictEqual((viewContainers.item(1) as HTMLElement).style.height, `${986 - 66}px`, 'first view container is 66px'); splitview.dispose(); view2.dispose(); diff --git a/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts b/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts index df96ed68409..2b9917e4ef9 100644 --- a/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts +++ b/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts @@ -6,7 +6,7 @@ import * as assert from 'assert'; import { IList } from 'vs/base/browser/ui/tree/indexTreeModel'; import { ObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel'; -import { ITreeFilter, ITreeNode, TreeVisibility } from 'vs/base/browser/ui/tree/tree'; +import { ITreeFilter, ITreeNode, ObjectTreeElementCollapseState, TreeVisibility } from 'vs/base/browser/ui/tree/tree'; import { timeout } from 'vs/base/common/async'; function toList(arr: T[]): IList { @@ -171,6 +171,27 @@ suite('ObjectTreeModel', function () { assert.deepStrictEqual(toArray(list), ['father']); }); + test('collapse state can be optionally preserved with strict identity', () => { + const list: ITreeNode[] = []; + const model = new ObjectTreeModel('test', toList(list), { collapseByDefault: true }); + const data = [{ element: 'father', collapsed: ObjectTreeElementCollapseState.PreserveOrExpanded, children: [{ element: 'child' }] }]; + + model.setChildren(null, data); + assert.deepStrictEqual(toArray(list), ['father', 'child']); + + model.setCollapsed('father', true); + assert.deepStrictEqual(toArray(list), ['father']); + + model.setChildren(null, data); + assert.deepStrictEqual(toArray(list), ['father']); + + model.setCollapsed('father', false); + assert.deepStrictEqual(toArray(list), ['father', 'child']); + + model.setChildren(null, data); + assert.deepStrictEqual(toArray(list), ['father', 'child']); + }); + test('sorter', () => { const compare: (a: string, b: string) => number = (a, b) => a < b ? -1 : 1; diff --git a/src/vs/base/test/common/arrays.test.ts b/src/vs/base/test/common/arrays.test.ts index 23e2b720421..d49357f051a 100644 --- a/src/vs/base/test/common/arrays.test.ts +++ b/src/vs/base/test/common/arrays.test.ts @@ -404,7 +404,7 @@ suite('Arrays', () => { assert.deepStrictEqual(queue1.takeWhile(x => true), [7, 6]); }); - test('TakeWhile 1', () => { + test('TakeFromEndWhile 1', () => { const queue1 = new arrays.ArrayQueue([9, 8, 1, 7, 6]); assert.deepStrictEqual(queue1.takeFromEndWhile(x => x > 5), [7, 6]); assert.deepStrictEqual(queue1.takeFromEndWhile(x => x < 2), [1]); diff --git a/src/vs/base/test/common/async.test.ts b/src/vs/base/test/common/async.test.ts index 2b3b4210aea..144c119389a 100644 --- a/src/vs/base/test/common/async.test.ts +++ b/src/vs/base/test/common/async.test.ts @@ -155,6 +155,40 @@ suite('Async', () => { return Promise.all(promises); }); + + test('disposal after queueing', async () => { + let factoryCalls = 0; + const factory = async () => { + factoryCalls++; + return async.timeout(0); + }; + + const throttler = new async.Throttler(); + const promises: Promise[] = []; + + promises.push(throttler.queue(factory)); + promises.push(throttler.queue(factory)); + throttler.dispose(); + + await Promise.all(promises); + assert.strictEqual(factoryCalls, 1); + }); + + test('disposal before queueing', async () => { + let factoryCalls = 0; + const factory = async () => { + factoryCalls++; + return async.timeout(0); + }; + + const throttler = new async.Throttler(); + const promises: Promise[] = []; + + throttler.dispose(); + assert.throws(() => promises.push(throttler.queue(factory))); + assert.strictEqual(factoryCalls, 0); + await Promise.all(promises); + }); }); suite('Delayer', function () { @@ -221,6 +255,12 @@ suite('Async', () => { // OK } }); + + test('trigger after dispose throws', async () => { + const throttledDelayer = new async.ThrottledDelayer(100); + throttledDelayer.dispose(); + await assert.rejects(() => throttledDelayer.trigger(async () => { }, 0)); + }); }); test('simple cancel', function () { @@ -395,51 +435,6 @@ suite('Async', () => { }); suite('Limiter', () => { - test('sync', function () { - const factoryFactory = (n: number) => () => { - return Promise.resolve(n); - }; - - let limiter = new async.Limiter(1); - - let promises: Promise[] = []; - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].forEach(n => promises.push(limiter.queue(factoryFactory(n)))); - - return Promise.all(promises).then((res) => { - assert.strictEqual(10, res.length); - - limiter = new async.Limiter(100); - - promises = []; - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].forEach(n => promises.push(limiter.queue(factoryFactory(n)))); - - return Promise.all(promises).then((res) => { - assert.strictEqual(10, res.length); - }); - }); - }); - - test('async', function () { - const factoryFactory = (n: number) => () => async.timeout(0).then(() => n); - - let limiter = new async.Limiter(1); - let promises: Promise[] = []; - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].forEach(n => promises.push(limiter.queue(factoryFactory(n)))); - - return Promise.all(promises).then((res) => { - assert.strictEqual(10, res.length); - - limiter = new async.Limiter(100); - - promises = []; - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].forEach(n => promises.push(limiter.queue(factoryFactory(n)))); - - return Promise.all(promises).then((res) => { - assert.strictEqual(10, res.length); - }); - }); - }); - test('assert degree of paralellism', function () { let activePromises = 0; const factoryFactory = (n: number) => () => { diff --git a/src/vs/base/test/common/buffer.test.ts b/src/vs/base/test/common/buffer.test.ts index ae210a549b3..5a37943b658 100644 --- a/src/vs/base/test/common/buffer.test.ts +++ b/src/vs/base/test/common/buffer.test.ts @@ -413,6 +413,22 @@ suite('Buffer', () => { } }); + test('indexOf', () => { + const haystack = VSBuffer.fromString('abcaabbccaaabbbccc'); + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('')), 0); + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('a'.repeat(100))), -1); + + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('a')), 0); + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('c')), 2); + + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('abcaa')), 0); + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('caaab')), 8); + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('ccc')), 15); + + assert.strictEqual(haystack.indexOf(VSBuffer.fromString('cccb')), -1); + + }); + suite('base64', () => { /* Generated with: diff --git a/src/vs/base/test/common/cancellation.test.ts b/src/vs/base/test/common/cancellation.test.ts index 0bf1cdecae3..5f7206f65fa 100644 --- a/src/vs/base/test/common/cancellation.test.ts +++ b/src/vs/base/test/common/cancellation.test.ts @@ -108,6 +108,12 @@ suite('CancellationToken', function () { assert.strictEqual(count, 1); }); + test('dispose does not cancel', function () { + const source = new CancellationTokenSource(); + source.dispose(); + assert.strictEqual(source.token.isCancellationRequested, false); + }); + test('parent cancels child', function () { const parent = new CancellationTokenSource(); diff --git a/src/vs/base/test/common/event.test.ts b/src/vs/base/test/common/event.test.ts index ea5cc537bb2..84c0d21dbb7 100644 --- a/src/vs/base/test/common/event.test.ts +++ b/src/vs/base/test/common/event.test.ts @@ -3,10 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; +import { stub } from 'sinon'; import { timeout } from 'vs/base/common/async'; import { CancellationToken } from 'vs/base/common/cancellation'; import { errorHandler, setUnexpectedErrorHandler } from 'vs/base/common/errors'; -import { AsyncEmitter, DebounceEmitter, Emitter, Event, EventBufferer, EventMultiplexer, IWaitUntil, MicrotaskEmitter, PauseableEmitter, Relay } from 'vs/base/common/event'; +import { AsyncEmitter, DebounceEmitter, Emitter, Event, EventBufferer, EventMultiplexer, IWaitUntil, MicrotaskEmitter, PauseableEmitter, Relay, createEventDeliveryQueue } from 'vs/base/common/event'; import { DisposableStore, IDisposable, isDisposable, setDisposableTracker, toDisposable } from 'vs/base/common/lifecycle'; import { observableValue, transaction } from 'vs/base/common/observable'; import { MicrotaskDelay } from 'vs/base/common/symbols'; @@ -127,6 +128,104 @@ suite('Event', function () { assert.strictEqual(counter.count, 2); }); + test('Emitter duplicate functions', () => { + const calls: string[] = []; + const a = (v: string) => calls.push(`a${v}`); + const b = (v: string) => calls.push(`b${v}`); + + const emitter = new Emitter(); + + emitter.event(a); + emitter.event(b); + const s2 = emitter.event(a); + + emitter.fire('1'); + assert.deepStrictEqual(calls, ['a1', 'b1', 'a1']); + + s2.dispose(); + calls.length = 0; + emitter.fire('2'); + assert.deepStrictEqual(calls, ['a2', 'b2']); + }); + + test('Emitter, dispose listener during emission', () => { + for (let keepFirstMod = 1; keepFirstMod < 4; keepFirstMod++) { + const emitter = new Emitter(); + const calls: number[] = []; + const disposables = Array.from({ length: 25 }, (_, n) => emitter.event(() => { + if (n % keepFirstMod === 0) { + disposables[n].dispose(); + } + calls.push(n); + })); + + emitter.fire(); + assert.deepStrictEqual(calls, Array.from({ length: 25 }, (_, n) => n)); + } + }); + + test('Emitter, dispose emitter during emission', () => { + const emitter = new Emitter(); + const calls: number[] = []; + const disposables = Array.from({ length: 25 }, (_, n) => emitter.event(() => { + if (n === 10) { + emitter.dispose(); + } + calls.push(n); + })); + + emitter.fire(); + disposables.forEach(d => d.dispose()); + assert.deepStrictEqual(calls, Array.from({ length: 11 }, (_, n) => n)); + }); + + test('Emitter, shared delivery queue', () => { + const deliveryQueue = createEventDeliveryQueue(); + const emitter1 = new Emitter({ deliveryQueue }); + const emitter2 = 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`); }); + + emitter2.event(d => { calls.push(`${d}c`); emitter1.dispose(); }); + emitter2.event(d => { calls.push(`${d}d`); }); + + emitter1.fire(1); + + // 1. Check that 2 is not delivered before 1 finishes + // 2. Check that 2 finishes getting delivered even if one emitter is disposed + assert.deepStrictEqual(calls, ['1a', '1b', '2c', '2d']); + }); + + test('Emitter, handles removal during 3', () => { + const fn1 = stub(); + const fn2 = stub(); + const emitter = new Emitter(); + + emitter.event(fn1); + const h = emitter.event(() => { + h.dispose(); + }); + emitter.event(fn2); + emitter.fire('foo'); + + assert.deepStrictEqual(fn2.args, [['foo']]); + assert.deepStrictEqual(fn1.args, [['foo']]); + }); + + test('Emitter, handles removal during 2', () => { + const fn1 = stub(); + const emitter = new Emitter(); + + emitter.event(fn1); + const h = emitter.event(() => { + h.dispose(); + }); + emitter.fire('foo'); + + assert.deepStrictEqual(fn1.args, [['foo']]); + }); test('Emitter, bucket', function () { @@ -182,15 +281,20 @@ suite('Event', function () { assert.strictEqual(firstCount, 0); assert.strictEqual(lastCount, 0); - let subscription = a.event(function () { }); + let subscription1 = a.event(function () { }); + const subscription2 = a.event(function () { }); assert.strictEqual(firstCount, 1); assert.strictEqual(lastCount, 0); - subscription.dispose(); + subscription1.dispose(); + assert.strictEqual(firstCount, 1); + assert.strictEqual(lastCount, 0); + + subscription2.dispose(); assert.strictEqual(firstCount, 1); assert.strictEqual(lastCount, 1); - subscription = a.event(function () { }); + subscription1 = a.event(function () { }); assert.strictEqual(firstCount, 2); assert.strictEqual(lastCount, 1); }); @@ -235,6 +339,27 @@ suite('Event', function () { } }); + test('throwingListener (custom handler)', () => { + + const allError: any[] = []; + + const a = new Emitter({ + onListenerError(e) { allError.push(e); } + }); + let hit = false; + a.event(function () { + // eslint-disable-next-line no-throw-literal + throw 9; + }); + a.event(function () { + hit = true; + }); + a.fire(undefined); + assert.strictEqual(hit, true); + assert.deepStrictEqual(allError, [9]); + + }); + test('reusing event function and context', function () { let counter = 0; function listener() { @@ -326,6 +451,32 @@ suite('Event', function () { assert.deepStrictEqual(listener2Events, ['e1', 'e2']); }); + test('Emitter, - In Order Delivery 3x', function () { + const a = new Emitter(); + const listener2Events: string[] = []; + 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) { + 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) { + listener2Events.push(event); + }); + a.fire('e1'); + + // assert that all events are delivered in order + assert.deepStrictEqual(listener2Events, ['e1', 'e2', 'e3']); + }); + test('Cannot read property \'_actual\' of undefined #142204', function () { const e = new Emitter(); const dispo = e.event(() => { }); diff --git a/src/vs/base/test/common/filters.perf.test.ts b/src/vs/base/test/common/filters.perf.test.ts index 8ac5a3c89d9..fd311ecd6f7 100644 --- a/src/vs/base/test/common/filters.perf.test.ts +++ b/src/vs/base/test/common/filters.perf.test.ts @@ -2,8 +2,9 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { importAMDNodeModule } from 'vs/amdX'; import * as filters from 'vs/base/common/filters'; -import { data } from 'vs/base/test/common/filters.perf.data'; +import { FileAccess } from 'vs/base/common/network'; const patterns = ['cci', 'ida', 'pos', 'CCI', 'enbled', 'callback', 'gGame', 'cons', 'zyx', 'aBc']; @@ -15,7 +16,10 @@ function perfSuite(name: string, callback: (this: Mocha.Suite) => void) { } } -perfSuite('Performance - fuzzyMatch', function () { +perfSuite('Performance - fuzzyMatch', async function () { + + const uri = FileAccess.asBrowserUri('vs/base/test/common/filters.perf.data').toString(true); + const { data } = await importAMDNodeModule(uri, ''); // suiteSetup(() => console.profile()); // suiteTeardown(() => console.profileEnd()); @@ -47,7 +51,10 @@ perfSuite('Performance - fuzzyMatch', function () { }); -perfSuite('Performance - IFilter', function () { +perfSuite('Performance - IFilter', async function () { + + const uri = FileAccess.asBrowserUri('vs/base/test/common/filters.perf.data').toString(true); + const { data } = await importAMDNodeModule(uri, ''); function perfTest(name: string, match: filters.IFilter) { test(name, () => { diff --git a/src/vs/base/test/common/fuzzyScorer.test.ts b/src/vs/base/test/common/fuzzyScorer.test.ts index b925dc64084..ac3f2aab30f 100644 --- a/src/vs/base/test/common/fuzzyScorer.test.ts +++ b/src/vs/base/test/common/fuzzyScorer.test.ts @@ -1066,10 +1066,10 @@ suite('Fuzzy Scorer', () => { }); test('compareFilesByScore - boost shorter prefix match if multiple queries are used', function () { - const resourceA = URI.file('src/vs/workbench/browser/actions/windowActions.ts'); - const resourceB = URI.file('src/vs/workbench/electron-browser/window.ts'); + const resourceA = URI.file('src/vs/workbench/node/actions/windowActions.ts'); + const resourceB = URI.file('src/vs/workbench/electron-node/window.ts'); - for (const query of ['window browser', 'window.ts browser']) { + for (const query of ['window node', 'window.ts node']) { let res = [resourceA, resourceB].sort((r1, r2) => compareItemsByScore(r1, r2, query, true, ResourceAccessor)); assert.strictEqual(res[0], resourceB); assert.strictEqual(res[1], resourceA); diff --git a/src/vs/base/test/common/history.test.ts b/src/vs/base/test/common/history.test.ts index ffae4e46b72..c5cacb494a7 100644 --- a/src/vs/base/test/common/history.test.ts +++ b/src/vs/base/test/common/history.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { HistoryNavigator } from 'vs/base/common/history'; +import { HistoryNavigator, HistoryNavigator2 } from 'vs/base/common/history'; suite('History Navigator', () => { @@ -72,7 +72,7 @@ suite('History Navigator', () => { assert.strictEqual(testObject.isLast(), true); assert.strictEqual(testObject.current(), '4'); assert.strictEqual(testObject.next(), null); - assert.strictEqual(testObject.isLast(), true); + assert.strictEqual(testObject.isLast(), false); // Stepping past the last element, is no longer "last" }); test('previous on first element returns null and remains on first', () => { @@ -109,8 +109,9 @@ suite('History Navigator', () => { testObject.add('5'); assert.strictEqual(testObject.previous(), '5'); - assert.strictEqual(testObject.next(), null); assert.strictEqual(testObject.isLast(), true); + assert.strictEqual(testObject.next(), null); + assert.strictEqual(testObject.isLast(), false); }); test('adding an existing item changes the order', () => { @@ -144,8 +145,9 @@ suite('History Navigator', () => { testObject.last(); - assert.deepStrictEqual(testObject.next(), null); assert.strictEqual(testObject.isLast(), true); + assert.deepStrictEqual(testObject.next(), null); + assert.strictEqual(testObject.isLast(), false); }); test('next returns object if the current position is not the last one', () => { @@ -176,3 +178,95 @@ suite('History Navigator', () => { return result; } }); + +suite('History Navigator 2', () => { + + test('constructor', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4']); + + assert.strictEqual(testObject.current(), '4'); + assert.strictEqual(testObject.isAtEnd(), true); + }); + + test('constructor - initial history is not empty', () => { + assert.throws(() => new HistoryNavigator2([])); + }); + + test('constructor - capacity limit', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4'], 3); + + assert.strictEqual(testObject.current(), '4'); + assert.strictEqual(testObject.isAtEnd(), true); + assert.strictEqual(testObject.has('1'), false); + }); + + test('constructor - duplicate values', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4', '3', '2', '1']); + + assert.strictEqual(testObject.current(), '1'); + assert.strictEqual(testObject.isAtEnd(), true); + }); + + test('navigation', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4']); + + assert.strictEqual(testObject.current(), '4'); + assert.strictEqual(testObject.isAtEnd(), true); + + assert.strictEqual(testObject.next(), '4'); + assert.strictEqual(testObject.previous(), '3'); + assert.strictEqual(testObject.previous(), '2'); + assert.strictEqual(testObject.previous(), '1'); + assert.strictEqual(testObject.previous(), '1'); + + assert.strictEqual(testObject.current(), '1'); + assert.strictEqual(testObject.next(), '2'); + assert.strictEqual(testObject.resetCursor(), '4'); + }); + + test('add', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4']); + testObject.add('5'); + + assert.strictEqual(testObject.current(), '5'); + assert.strictEqual(testObject.isAtEnd(), true); + }); + + test('add - existing value', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4']); + testObject.add('2'); + + assert.strictEqual(testObject.current(), '2'); + assert.strictEqual(testObject.isAtEnd(), true); + + assert.strictEqual(testObject.previous(), '4'); + assert.strictEqual(testObject.previous(), '3'); + assert.strictEqual(testObject.previous(), '1'); + }); + + test('replaceLast', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4']); + testObject.replaceLast('5'); + + assert.strictEqual(testObject.current(), '5'); + assert.strictEqual(testObject.isAtEnd(), true); + assert.strictEqual(testObject.has('4'), false); + + assert.strictEqual(testObject.previous(), '3'); + assert.strictEqual(testObject.previous(), '2'); + assert.strictEqual(testObject.previous(), '1'); + }); + + test('replaceLast - existing value', () => { + const testObject = new HistoryNavigator2(['1', '2', '3', '4']); + testObject.replaceLast('2'); + + assert.strictEqual(testObject.current(), '2'); + assert.strictEqual(testObject.isAtEnd(), true); + assert.strictEqual(testObject.has('4'), false); + + assert.strictEqual(testObject.previous(), '3'); + assert.strictEqual(testObject.previous(), '1'); + }); + +}); diff --git a/src/vs/base/test/common/labels.test.ts b/src/vs/base/test/common/labels.test.ts index 36eec1391d6..f02cd55c523 100644 --- a/src/vs/base/test/common/labels.test.ts +++ b/src/vs/base/test/common/labels.test.ts @@ -59,7 +59,7 @@ suite('Labels', () => { assert.deepStrictEqual(labels.shorten(['a', 'a\\b', 'a\\b\\c', 'd\\b\\c', 'd\\b']), ['a', 'a\\b', 'a\\b\\c', 'd\\b\\c', 'd\\b']); assert.deepStrictEqual(labels.shorten(['a', 'a\\b', 'b']), ['a', 'a\\b', 'b']); assert.deepStrictEqual(labels.shorten(['', 'a', 'b', 'b\\c', 'a\\c']), ['.\\', 'a', 'b', 'b\\c', 'a\\c']); - assert.deepStrictEqual(labels.shorten(['src\\vs\\workbench\\parts\\execution\\electron-browser', 'src\\vs\\workbench\\parts\\execution\\electron-browser\\something', 'src\\vs\\workbench\\parts\\terminal\\electron-browser']), ['…\\execution\\electron-browser', '…\\something', '…\\terminal\\…']); + assert.deepStrictEqual(labels.shorten(['src\\vs\\workbench\\parts\\execution\\electron-sandbox', 'src\\vs\\workbench\\parts\\execution\\electron-sandbox\\something', 'src\\vs\\workbench\\parts\\terminal\\electron-sandbox']), ['…\\execution\\electron-sandbox', '…\\something', '…\\terminal\\…']); }); (isWindows ? test.skip : test)('shorten - not windows', () => { diff --git a/src/vs/base/test/common/observable.test.ts b/src/vs/base/test/common/observable.test.ts index f1bec25aa50..64d08a6c4d5 100644 --- a/src/vs/base/test/common/observable.test.ts +++ b/src/vs/base/test/common/observable.test.ts @@ -5,244 +5,319 @@ import * as assert from 'assert'; import { Emitter } from 'vs/base/common/event'; -import { ISettableObservable, autorun, derived, ITransaction, observableFromEvent, observableValue, transaction } from 'vs/base/common/observable'; +import { ISettableObservable, autorun, derived, ITransaction, observableFromEvent, observableValue, transaction, keepAlive } from 'vs/base/common/observable'; import { BaseObservable, IObservable, IObserver } from 'vs/base/common/observableImpl/base'; -suite('observable integration', () => { - test('basic observable + autorun', () => { - const log = new Log(); - const observable = observableValue('MyObservableValue', 0); +suite('observables', () => { + /** + * Reads these tests to understand how to use observables. + */ + suite('tutorial', () => { + test('observable + autorun', () => { + const log = new Log(); + const myObservable = observableValue('myObservable', 0); - autorun('MyAutorun', (reader) => { - log.log(`value: ${observable.read(reader)}`); - }); - assert.deepStrictEqual(log.getAndClearEntries(), ['value: 0']); + autorun('myAutorun', (reader) => { + log.log(`myAutorun.run(myObservable: ${myObservable.read(reader)})`); + }); + // The autorun runs immediately + assert.deepStrictEqual(log.getAndClearEntries(), ['myAutorun.run(myObservable: 0)']); - observable.set(1, undefined); - assert.deepStrictEqual(log.getAndClearEntries(), ['value: 1']); + myObservable.set(1, undefined); + // The autorun runs again when any read observable changed + assert.deepStrictEqual(log.getAndClearEntries(), ['myAutorun.run(myObservable: 1)']); - observable.set(1, undefined); - assert.deepStrictEqual(log.getAndClearEntries(), []); - - transaction((tx) => { - observable.set(2, tx); + myObservable.set(1, undefined); + // But only if the value changed assert.deepStrictEqual(log.getAndClearEntries(), []); - observable.set(3, tx); - assert.deepStrictEqual(log.getAndClearEntries(), []); + // Transactions batch autorun runs + transaction((tx) => { + myObservable.set(2, tx); + // No auto-run ran yet, even though the value changed + assert.deepStrictEqual(log.getAndClearEntries(), []); + + myObservable.set(3, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + }); + // Only at the end of the transaction the autorun re-runs + assert.deepStrictEqual(log.getAndClearEntries(), ['myAutorun.run(myObservable: 3)']); }); - assert.deepStrictEqual(log.getAndClearEntries(), ['value: 3']); - }); + test('computed + autorun', () => { + const log = new Log(); + const observable1 = observableValue('myObservable1', 0); + const observable2 = observableValue('myObservable2', 0); - test('basic computed + autorun', () => { - const log = new Log(); - const observable1 = observableValue('MyObservableValue1', 0); - const observable2 = observableValue('MyObservableValue2', 0); + const myDerived = derived('myDerived', (reader) => { + const value1 = observable1.read(reader); + const value2 = observable2.read(reader); + const sum = value1 + value2; + log.log(`myDerived.recompute: ${value1} + ${value2} = ${sum}`); + return sum; + }); - const computed = derived('computed', (reader) => { - const value1 = observable1.read(reader); - const value2 = observable2.read(reader); - const sum = value1 + value2; - log.log(`recompute: ${value1} + ${value2} = ${sum}`); - return sum; - }); - - autorun('MyAutorun', (reader) => { - log.log(`value: ${computed.read(reader)}`); - }); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute: 0 + 0 = 0', - 'value: 0', - ]); - - observable1.set(1, undefined); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute: 1 + 0 = 1', - 'value: 1', - ]); - - observable2.set(1, undefined); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute: 1 + 1 = 2', - 'value: 2', - ]); - - transaction((tx) => { - observable1.set(5, tx); - assert.deepStrictEqual(log.getAndClearEntries(), []); - - observable2.set(5, tx); - assert.deepStrictEqual(log.getAndClearEntries(), []); - }); - - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute: 5 + 5 = 10', - 'value: 10', - ]); - - transaction((tx) => { - observable1.set(6, tx); - assert.deepStrictEqual(log.getAndClearEntries(), []); - - observable2.set(4, tx); - assert.deepStrictEqual(log.getAndClearEntries(), []); - }); - - assert.deepStrictEqual(log.getAndClearEntries(), ['recompute: 6 + 4 = 10']); - }); - - test('read during transaction', () => { - const log = new Log(); - const observable1 = observableValue('MyObservableValue1', 0); - const observable2 = observableValue('MyObservableValue2', 0); - - const computed = derived('computed', (reader) => { - const value1 = observable1.read(reader); - const value2 = observable2.read(reader); - const sum = value1 + value2; - log.log(`recompute: ${value1} + ${value2} = ${sum}`); - return sum; - }); - - autorun('MyAutorun', (reader) => { - log.log(`value: ${computed.read(reader)}`); - }); - - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute: 0 + 0 = 0', - 'value: 0', - ]); - - log.log(`computed is ${computed.get()}`); - assert.deepStrictEqual(log.getAndClearEntries(), ['computed is 0']); - - transaction((tx) => { - observable1.set(-1, tx); - log.log(`computed is ${computed.get()}`); + autorun('myAutorun', (reader) => { + log.log(`myAutorun(myDerived: ${myDerived.read(reader)})`); + }); + // autorun runs immediately assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute: -1 + 0 = -1', - 'computed is -1', + "myDerived.recompute: 0 + 0 = 0", + "myAutorun(myDerived: 0)", ]); - log.log(`computed is ${computed.get()}`); - assert.deepStrictEqual(log.getAndClearEntries(), ['computed is -1']); + observable1.set(1, undefined); + // and on changes... + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.recompute: 1 + 0 = 1", + "myAutorun(myDerived: 1)", + ]); - observable2.set(1, tx); + observable2.set(1, undefined); + // ... of any dependency. + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.recompute: 1 + 1 = 2", + "myAutorun(myDerived: 2)", + ]); + + transaction((tx) => { + observable1.set(5, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + + observable2.set(5, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + }); + // When changing multiple observables in a transaction, + // deriveds are only recomputed on demand. + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.recompute: 5 + 5 = 10", + "myAutorun(myDerived: 10)", + ]); + + transaction((tx) => { + observable1.set(6, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + + observable2.set(4, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + }); + // Now the autorun didn't run again, because its dependency changed from 10 to 10 (= no change). + assert.deepStrictEqual(log.getAndClearEntries(), (["myDerived.recompute: 6 + 4 = 10"])); + }); + + test('read during transaction', () => { + const log = new Log(); + const observable1 = observableValue('myObservable1', 0); + const observable2 = observableValue('myObservable2', 0); + + const myDerived = derived('myDerived', (reader) => { + const value1 = observable1.read(reader); + const value2 = observable2.read(reader); + const sum = value1 + value2; + log.log(`myDerived.recompute: ${value1} + ${value2} = ${sum}`); + return sum; + }); + + autorun('myAutorun', (reader) => { + log.log(`myAutorun(myDerived: ${myDerived.read(reader)})`); + }); + // autorun runs immediately + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.recompute: 0 + 0 = 0", + "myAutorun(myDerived: 0)", + ]); + + transaction((tx) => { + observable1.set(-10, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + + myDerived.get(); // This forces a (sync) recomputation of the current value + assert.deepStrictEqual(log.getAndClearEntries(), (["myDerived.recompute: -10 + 0 = -10"])); + + observable2.set(10, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + }); + // This autorun runs again, because its dependency changed from 0 to -10 and then back to 0. + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.recompute: -10 + 10 = 0", + "myAutorun(myDerived: 0)", + ]); + }); + + test('get without observers', () => { + const log = new Log(); + const observable1 = observableValue('myObservableValue1', 0); + const computed1 = derived('computed', (reader) => { + const value1 = observable1.read(reader); + const result = value1 % 3; + log.log(`recompute1: ${value1} % 3 = ${result}`); + return result; + }); + const computed2 = derived('computed', (reader) => { + const value1 = computed1.read(reader); + const result = value1 * 2; + log.log(`recompute2: ${value1} * 2 = ${result}`); + return result; + }); + const computed3 = derived('computed', (reader) => { + const value1 = computed1.read(reader); + const result = value1 * 3; + log.log(`recompute3: ${value1} * 3 = ${result}`); + return result; + }); + const computedSum = derived('computed', (reader) => { + const value1 = computed2.read(reader); + const value2 = computed3.read(reader); + const result = value1 + value2; + log.log(`recompute4: ${value1} + ${value2} = ${result}`); + return result; + }); assert.deepStrictEqual(log.getAndClearEntries(), []); + + observable1.set(1, undefined); + assert.deepStrictEqual(log.getAndClearEntries(), []); + + log.log(`value: ${computedSum.get()}`); + assert.deepStrictEqual(log.getAndClearEntries(), [ + 'recompute1: 1 % 3 = 1', + 'recompute2: 1 * 2 = 2', + 'recompute3: 1 * 3 = 3', + 'recompute4: 2 + 3 = 5', + 'value: 5', + ]); + + log.log(`value: ${computedSum.get()}`); + // Because there are no observers, the derived values are not cached, but computed from scratch. + assert.deepStrictEqual(log.getAndClearEntries(), [ + 'recompute1: 1 % 3 = 1', + 'recompute2: 1 * 2 = 2', + 'recompute3: 1 * 3 = 3', + 'recompute4: 2 + 3 = 5', + 'value: 5', + ]); + + const disposable = keepAlive(computedSum); // Use keepAlive to keep the cache + log.log(`value: ${computedSum.get()}`); + assert.deepStrictEqual(log.getAndClearEntries(), [ + 'recompute1: 1 % 3 = 1', + 'recompute2: 1 * 2 = 2', + 'recompute3: 1 * 3 = 3', + 'recompute4: 2 + 3 = 5', + 'value: 5', + ]); + + log.log(`value: ${computedSum.get()}`); + assert.deepStrictEqual(log.getAndClearEntries(), [ + 'value: 5', + ]); + + observable1.set(2, undefined); + // The keep alive does not force deriveds to be recomputed + assert.deepStrictEqual(log.getAndClearEntries(), ([])); + + log.log(`value: ${computedSum.get()}`); + // Those deriveds are recomputed on demand + assert.deepStrictEqual(log.getAndClearEntries(), [ + "recompute1: 2 % 3 = 2", + "recompute2: 2 * 2 = 4", + "recompute3: 2 * 3 = 6", + "recompute4: 4 + 6 = 10", + "value: 10", + ]); + log.log(`value: ${computedSum.get()}`); + // ... and then cached again + assert.deepStrictEqual(log.getAndClearEntries(), (["value: 10"])); + + disposable.dispose(); // Don't forget to dispose the keepAlive to prevent memory leaks + + log.log(`value: ${computedSum.get()}`); + // Which disables the cache again + assert.deepStrictEqual(log.getAndClearEntries(), [ + "recompute1: 2 % 3 = 2", + "recompute2: 2 * 2 = 4", + "recompute3: 2 * 3 = 6", + "recompute4: 4 + 6 = 10", + "value: 10", + ]); + + log.log(`value: ${computedSum.get()}`); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "recompute1: 2 % 3 = 2", + "recompute2: 2 * 2 = 4", + "recompute3: 2 * 3 = 6", + "recompute4: 4 + 6 = 10", + "value: 10", + ]); }); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute: -1 + 1 = 0', - 'value: 0', - ]); }); test('topological order', () => { const log = new Log(); - const observable1 = observableValue('MyObservableValue1', 0); - const observable2 = observableValue('MyObservableValue2', 0); + const myObservable1 = observableValue('myObservable1', 0); + const myObservable2 = observableValue('myObservable2', 0); - const computed1 = derived('computed1', (reader) => { - const value1 = observable1.read(reader); - const value2 = observable2.read(reader); + const myComputed1 = derived('myComputed1', (reader) => { + const value1 = myObservable1.read(reader); + const value2 = myObservable2.read(reader); const sum = value1 + value2; - log.log(`recompute1: ${value1} + ${value2} = ${sum}`); + log.log(`myComputed1.recompute(myObservable1: ${value1} + myObservable2: ${value2} = ${sum})`); return sum; }); - const computed2 = derived('computed2', (reader) => { - const value1 = computed1.read(reader); - const value2 = observable1.read(reader); - const value3 = observable2.read(reader); + const myComputed2 = derived('myComputed2', (reader) => { + const value1 = myComputed1.read(reader); + const value2 = myObservable1.read(reader); + const value3 = myObservable2.read(reader); const sum = value1 + value2 + value3; - log.log(`recompute2: ${value1} + ${value2} + ${value3} = ${sum}`); + log.log(`myComputed2.recompute(myComputed1: ${value1} + myObservable1: ${value2} + myObservable2: ${value3} = ${sum})`); return sum; }); - const computed3 = derived('computed3', (reader) => { - const value1 = computed2.read(reader); - const value2 = observable1.read(reader); - const value3 = observable2.read(reader); + const myComputed3 = derived('myComputed3', (reader) => { + const value1 = myComputed2.read(reader); + const value2 = myObservable1.read(reader); + const value3 = myObservable2.read(reader); const sum = value1 + value2 + value3; - log.log(`recompute3: ${value1} + ${value2} + ${value3} = ${sum}`); + log.log(`myComputed3.recompute(myComputed2: ${value1} + myObservable1: ${value2} + myObservable2: ${value3} = ${sum})`); return sum; }); - autorun('MyAutorun', (reader) => { - log.log(`value: ${computed3.read(reader)}`); + autorun('myAutorun', (reader) => { + log.log(`myAutorun.run(myComputed3: ${myComputed3.read(reader)})`); }); assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute1: 0 + 0 = 0', - 'recompute2: 0 + 0 + 0 = 0', - 'recompute3: 0 + 0 + 0 = 0', - 'value: 0', + "myComputed1.recompute(myObservable1: 0 + myObservable2: 0 = 0)", + "myComputed2.recompute(myComputed1: 0 + myObservable1: 0 + myObservable2: 0 = 0)", + "myComputed3.recompute(myComputed2: 0 + myObservable1: 0 + myObservable2: 0 = 0)", + "myAutorun.run(myComputed3: 0)", ]); - observable1.set(1, undefined); + myObservable1.set(1, undefined); assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute1: 1 + 0 = 1', - 'recompute2: 1 + 1 + 0 = 2', - 'recompute3: 2 + 1 + 0 = 3', - 'value: 3', + "myComputed1.recompute(myObservable1: 1 + myObservable2: 0 = 1)", + "myComputed2.recompute(myComputed1: 1 + myObservable1: 1 + myObservable2: 0 = 2)", + "myComputed3.recompute(myComputed2: 2 + myObservable1: 1 + myObservable2: 0 = 3)", + "myAutorun.run(myComputed3: 3)", ]); transaction((tx) => { - observable1.set(2, tx); - log.log(`computed2: ${computed2.get()}`); + myObservable1.set(2, tx); + myComputed2.get(); assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute1: 2 + 0 = 2', - 'recompute2: 2 + 2 + 0 = 4', - 'computed2: 4', + "myComputed1.recompute(myObservable1: 2 + myObservable2: 0 = 2)", + "myComputed2.recompute(myComputed1: 2 + myObservable1: 2 + myObservable2: 0 = 4)", ]); - observable1.set(3, tx); - log.log(`computed2: ${computed2.get()}`); + myObservable1.set(3, tx); + myComputed2.get(); assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute1: 3 + 0 = 3', - 'recompute2: 3 + 3 + 0 = 6', - 'computed2: 6', + "myComputed1.recompute(myObservable1: 3 + myObservable2: 0 = 3)", + "myComputed2.recompute(myComputed1: 3 + myObservable1: 3 + myObservable2: 0 = 6)", ]); }); assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute3: 6 + 3 + 0 = 9', - 'value: 9', - ]); - }); - - test('self-disposing autorun', () => { - const log = new Log(); - - const observable1 = new LoggingObservableValue('MyObservableValue1', 0, log); - const observable2 = new LoggingObservableValue('MyObservableValue2', 0, log); - const observable3 = new LoggingObservableValue('MyObservableValue3', 0, log); - - const d = autorun('autorun', (reader) => { - if (observable1.read(reader) >= 2) { - observable2.read(reader); - d.dispose(); - observable3.read(reader); - } - }); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'MyObservableValue1.firstObserverAdded', - 'MyObservableValue1.get', - ]); - - observable1.set(1, undefined); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'MyObservableValue1.set (value 1)', - 'MyObservableValue1.get', - ]); - - observable1.set(2, undefined); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'MyObservableValue1.set (value 2)', - 'MyObservableValue1.get', - 'MyObservableValue2.firstObserverAdded', - 'MyObservableValue2.get', - 'MyObservableValue1.lastObserverRemoved', - 'MyObservableValue2.lastObserverRemoved', - 'MyObservableValue3.get', + "myComputed3.recompute(myComputed2: 6 + myObservable1: 3 + myObservable2: 0 = 9)", + "myAutorun.run(myComputed3: 9)", ]); }); @@ -388,94 +463,504 @@ suite('observable integration', () => { }); }); - test('get without observers', () => { - // Maybe this scenario should not be supported. - - const log = new Log(); - const observable1 = observableValue('MyObservableValue1', 0); - const computed1 = derived('computed', (reader) => { - const value1 = observable1.read(reader); - const result = value1 % 3; - log.log(`recompute1: ${value1} % 3 = ${result}`); - return result; - }); - const computed2 = derived('computed', (reader) => { - const value1 = computed1.read(reader); - - const result = value1 * 2; - log.log(`recompute2: ${value1} * 2 = ${result}`); - return result; - }); - const computed3 = derived('computed', (reader) => { - const value1 = computed1.read(reader); - - const result = value1 * 3; - log.log(`recompute3: ${value1} * 3 = ${result}`); - return result; - }); - const computedSum = derived('computed', (reader) => { - const value1 = computed2.read(reader); - const value2 = computed3.read(reader); - - const result = value1 + value2; - log.log(`recompute4: ${value1} + ${value2} = ${result}`); - return result; - }); - assert.deepStrictEqual(log.getAndClearEntries(), []); - - observable1.set(1, undefined); - assert.deepStrictEqual(log.getAndClearEntries(), []); - - log.log(`value: ${computedSum.get()}`); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute1: 1 % 3 = 1', - 'recompute2: 1 * 2 = 2', - 'recompute3: 1 * 3 = 3', - 'recompute4: 2 + 3 = 5', - 'value: 5', - ]); - - log.log(`value: ${computedSum.get()}`); - assert.deepStrictEqual(log.getAndClearEntries(), [ - 'recompute1: 1 % 3 = 1', - 'recompute2: 1 * 2 = 2', - 'recompute3: 1 * 3 = 3', - 'recompute4: 2 + 3 = 5', - 'value: 5', - ]); - }); -}); - -suite('observable details', () => { - test('1', () => { + test('reading derived in transaction unsubscribes unnecessary observables', () => { const log = new Log(); - const shouldReadObservable = observableValue('shouldReadObservable', true); - const observable = new LoggingObservableValue('observable', 0, log); - const computed = derived('test', reader => { + const shouldReadObservable = observableValue('shouldReadMyObs1', true); + const myObs1 = new LoggingObservableValue('myObs1', 0, log); + const myComputed = derived('myComputed', reader => { + log.log('myComputed.recompute'); if (shouldReadObservable.read(reader)) { - return observable.read(reader) * 2; + return myObs1.read(reader); } return 1; }); - autorun('test', reader => { - const value = computed.read(reader); - log.log(`autorun: ${value}`); + autorun('myAutorun', reader => { + const value = myComputed.read(reader); + log.log(`myAutorun: ${value}`); }); - - assert.deepStrictEqual(log.getAndClearEntries(), (["observable.firstObserverAdded", "observable.get", "autorun: 0"])); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myComputed.recompute", + "myObs1.firstObserverAdded", + "myObs1.get", + "myAutorun: 0", + ]); transaction(tx => { - observable.set(1, tx); - assert.deepStrictEqual(log.getAndClearEntries(), (["observable.set (value 1)"])); + myObs1.set(1, tx); + assert.deepStrictEqual(log.getAndClearEntries(), (["myObs1.set (value 1)"])); shouldReadObservable.set(false, tx); assert.deepStrictEqual(log.getAndClearEntries(), ([])); - computed.get(); - assert.deepStrictEqual(log.getAndClearEntries(), (["observable.lastObserverRemoved"])); + myComputed.get(); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myComputed.recompute", + "myObs1.lastObserverRemoved", + ]); + }); + assert.deepStrictEqual(log.getAndClearEntries(), (["myAutorun: 1"])); + }); + + test('avoid recomputation of deriveds that are no longer read', () => { + const log = new Log(); + + const myObsShouldRead = new LoggingObservableValue('myObsShouldRead', true, log); + const myObs1 = new LoggingObservableValue('myObs1', 0, log); + + const myComputed1 = derived('myComputed1', reader => { + const myObs1Val = myObs1.read(reader); + const result = myObs1Val % 10; + log.log(`myComputed1(myObs1: ${myObs1Val}): Computed ${result}`); + return myObs1Val; + }); + + autorun('myAutorun', reader => { + const shouldRead = myObsShouldRead.read(reader); + if (shouldRead) { + const v = myComputed1.read(reader); + log.log(`myAutorun(shouldRead: true, myComputed1: ${v}): run`); + } else { + log.log(`myAutorun(shouldRead: false): run`); + } + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObsShouldRead.firstObserverAdded", + "myObsShouldRead.get", + "myObs1.firstObserverAdded", + "myObs1.get", + "myComputed1(myObs1: 0): Computed 0", + "myAutorun(shouldRead: true, myComputed1: 0): run", + ]); + + transaction(tx => { + myObsShouldRead.set(false, tx); + myObs1.set(1, tx); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObsShouldRead.set (value false)", + "myObs1.set (value 1)", + ]); + }); + // myComputed1 should not be recomputed here, even though its dependency myObs1 changed! + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObsShouldRead.get", + "myAutorun(shouldRead: false): run", + "myObs1.lastObserverRemoved", + ]); + + transaction(tx => { + myObsShouldRead.set(true, tx); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObsShouldRead.set (value true)", + ]); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObsShouldRead.get", + "myObs1.firstObserverAdded", + "myObs1.get", + "myComputed1(myObs1: 1): Computed 1", + "myAutorun(shouldRead: true, myComputed1: 1): run", + ]); + }); + + suite('autorun rerun on neutral change', () => { + test('autorun reruns on neutral observable double change', () => { + const log = new Log(); + const myObservable = observableValue('myObservable', 0); + + autorun('myAutorun', (reader) => { + log.log(`myAutorun.run(myObservable: ${myObservable.read(reader)})`); + }); + assert.deepStrictEqual(log.getAndClearEntries(), ['myAutorun.run(myObservable: 0)']); + + + transaction((tx) => { + myObservable.set(2, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + + myObservable.set(0, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + }); + assert.deepStrictEqual(log.getAndClearEntries(), ['myAutorun.run(myObservable: 0)']); + }); + + test('autorun does not rerun on indirect neutral observable double change', () => { + const log = new Log(); + const myObservable = observableValue('myObservable', 0); + const myDerived = derived('myDerived', (reader) => { + const val = myObservable.read(reader); + log.log(`myDerived.read(myObservable: ${val})`); + return val; + }); + + autorun('myAutorun', (reader) => { + log.log(`myAutorun.run(myDerived: ${myDerived.read(reader)})`); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.read(myObservable: 0)", + "myAutorun.run(myDerived: 0)" + ]); + + transaction((tx) => { + myObservable.set(2, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + + myObservable.set(0, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.read(myObservable: 0)" + ]); + }); + + test('autorun reruns on indirect neutral observable double change when changes propagate', () => { + const log = new Log(); + const myObservable = observableValue('myObservable', 0); + const myDerived = derived('myDerived', (reader) => { + const val = myObservable.read(reader); + log.log(`myDerived.read(myObservable: ${val})`); + return val; + }); + + autorun('myAutorun', (reader) => { + log.log(`myAutorun.run(myDerived: ${myDerived.read(reader)})`); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.read(myObservable: 0)", + "myAutorun.run(myDerived: 0)" + ]); + + transaction((tx) => { + myObservable.set(2, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + + myDerived.get(); // This marks the auto-run as changed + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.read(myObservable: 2)" + ]); + + myObservable.set(0, tx); + assert.deepStrictEqual(log.getAndClearEntries(), []); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myDerived.read(myObservable: 0)", + "myAutorun.run(myDerived: 0)" + ]); + }); + }); + + test('self-disposing autorun', () => { + const log = new Log(); + + const observable1 = new LoggingObservableValue('myObservable1', 0, log); + const myObservable2 = new LoggingObservableValue('myObservable2', 0, log); + const myObservable3 = new LoggingObservableValue('myObservable3', 0, log); + + const d = autorun('autorun', (reader) => { + if (observable1.read(reader) >= 2) { + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable1.set (value 2)", + "myObservable1.get", + ]); + + myObservable2.read(reader); + // First time this observable is read + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable2.firstObserverAdded", + "myObservable2.get", + ]); + + d.dispose(); + // Disposing removes all observers + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable1.lastObserverRemoved", + "myObservable2.lastObserverRemoved", + ]); + + myObservable3.read(reader); + // This does not subscribe the observable, because the autorun is disposed + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable3.get", + ]); + } + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + 'myObservable1.firstObserverAdded', + 'myObservable1.get', + ]); + + observable1.set(1, undefined); + assert.deepStrictEqual(log.getAndClearEntries(), [ + 'myObservable1.set (value 1)', + 'myObservable1.get', + ]); + + observable1.set(2, undefined); + // See asserts in the autorun + assert.deepStrictEqual(log.getAndClearEntries(), ([])); + }); + + test('changing observables in endUpdate', () => { + const log = new Log(); + + const myObservable1 = new LoggingObservableValue('myObservable1', 0, log); + const myObservable2 = new LoggingObservableValue('myObservable2', 0, log); + + const myDerived1 = derived('myDerived1', (reader) => { + const val = myObservable1.read(reader); + log.log(`myDerived1.read(myObservable: ${val})`); + return val; + }); + + const myDerived2 = derived('myDerived2', (reader) => { + const val = myObservable2.read(reader); + if (val === 1) { + myDerived1.read(reader); + } + log.log(`myDerived2.read(myObservable: ${val})`); + return val; + }); + + autorun('myAutorun', (reader) => { + const myDerived1Val = myDerived1.read(reader); + const myDerived2Val = myDerived2.read(reader); + log.log(`myAutorun.run(myDerived1: ${myDerived1Val}, myDerived2: ${myDerived2Val})`); + }); + + transaction(tx => { + myObservable2.set(1, tx); + // end update of this observable will trigger endUpdate of myDerived1 and + // the autorun and the autorun will add myDerived2 as observer to myDerived1 + myObservable1.set(1, tx); + }); + }); + + test('set dependency in derived', () => { + const log = new Log(); + + const myObservable = new LoggingObservableValue('myObservable', 0, log); + const myComputed = derived('myComputed', reader => { + let value = myObservable.read(reader); + const origValue = value; + log.log(`myComputed(myObservable: ${origValue}): start computing`); + if (value % 3 !== 0) { + value++; + myObservable.set(value, undefined); + } + log.log(`myComputed(myObservable: ${origValue}): finished computing`); + return value; + }); + + autorun('myAutorun', reader => { + const value = myComputed.read(reader); + log.log(`myAutorun(myComputed: ${value})`); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.firstObserverAdded", + "myObservable.get", + "myComputed(myObservable: 0): start computing", + "myComputed(myObservable: 0): finished computing", + "myAutorun(myComputed: 0)" + ]); + + myObservable.set(1, undefined); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.set (value 1)", + "myObservable.get", + "myComputed(myObservable: 1): start computing", + "myObservable.set (value 2)", + "myComputed(myObservable: 1): finished computing", + "myObservable.get", + "myComputed(myObservable: 2): start computing", + "myObservable.set (value 3)", + "myComputed(myObservable: 2): finished computing", + "myObservable.get", + "myComputed(myObservable: 3): start computing", + "myComputed(myObservable: 3): finished computing", + "myAutorun(myComputed: 3)", + ]); + }); + + test('set dependency in autorun', () => { + const log = new Log(); + const myObservable = new LoggingObservableValue('myObservable', 0, log); + + autorun('myAutorun', reader => { + const value = myObservable.read(reader); + log.log(`myAutorun(myObservable: ${value}): start`); + if (value !== 0 && value < 4) { + myObservable.set(value + 1, undefined); + } + log.log(`myAutorun(myObservable: ${value}): end`); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.firstObserverAdded", + "myObservable.get", + "myAutorun(myObservable: 0): start", + "myAutorun(myObservable: 0): end", + ]); + + myObservable.set(1, undefined); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.set (value 1)", + "myObservable.get", + "myAutorun(myObservable: 1): start", + "myObservable.set (value 2)", + "myAutorun(myObservable: 1): end", + "myObservable.get", + "myAutorun(myObservable: 2): start", + "myObservable.set (value 3)", + "myAutorun(myObservable: 2): end", + "myObservable.get", + "myAutorun(myObservable: 3): start", + "myObservable.set (value 4)", + "myAutorun(myObservable: 3): end", + "myObservable.get", + "myAutorun(myObservable: 4): start", + "myAutorun(myObservable: 4): end", + ]); + }); + + test('get in transaction between sets', () => { + const log = new Log(); + const myObservable = new LoggingObservableValue('myObservable', 0, log); + + const myDerived1 = derived('myDerived1', reader => { + const value = myObservable.read(reader); + log.log(`myDerived1(myObservable: ${value}): start computing`); + return value; + }); + + const myDerived2 = derived('myDerived2', reader => { + const value = myDerived1.read(reader); + log.log(`myDerived2(myDerived1: ${value}): start computing`); + return value; + }); + + autorun('myAutorun', reader => { + const value = myDerived2.read(reader); + log.log(`myAutorun(myDerived2: ${value})`); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.firstObserverAdded", + "myObservable.get", + "myDerived1(myObservable: 0): start computing", + "myDerived2(myDerived1: 0): start computing", + "myAutorun(myDerived2: 0)", + ]); + + transaction(tx => { + myObservable.set(1, tx); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.set (value 1)", + ]); + + myDerived2.get(); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.get", + "myDerived1(myObservable: 1): start computing", + "myDerived2(myDerived1: 1): start computing", + ]); + + myObservable.set(2, tx); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.set (value 2)", + ]); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable.get", + "myDerived1(myObservable: 2): start computing", + "myDerived2(myDerived1: 2): start computing", + "myAutorun(myDerived2: 2)", + ]); + }); + + test('bug: Dont reset states', () => { + const log = new Log(); + const myObservable1 = new LoggingObservableValue('myObservable1', 0, log); + + const myObservable2 = new LoggingObservableValue('myObservable2', 0, log); + const myDerived2 = derived('myDerived2', reader => { + const val = myObservable2.read(reader); + log.log(`myDerived2.computed(myObservable2: ${val})`); + return val % 10; + }); + + const myDerived3 = derived('myDerived3', reader => { + const val1 = myObservable1.read(reader); + const val2 = myDerived2.read(reader); + log.log(`myDerived3.computed(myDerived1: ${val1}, myDerived2: ${val2})`); + return `${val1} + ${val2}`; + }); + + autorun('myAutorun', reader => { + const val = myDerived3.read(reader); + log.log(`myAutorun(myDerived3: ${val})`); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable1.firstObserverAdded", + "myObservable1.get", + "myObservable2.firstObserverAdded", + "myObservable2.get", + "myDerived2.computed(myObservable2: 0)", + "myDerived3.computed(myDerived1: 0, myDerived2: 0)", + "myAutorun(myDerived3: 0 + 0)", + ]); + + transaction(tx => { + myObservable1.set(1, tx); // Mark myDerived 3 as stale + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable1.set (value 1)", + ]); + + myObservable2.set(10, tx); // This is a non-change. myDerived3 should not be marked as possibly-depedency-changed! + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable2.set (value 10)", + ]); + }); + assert.deepStrictEqual(log.getAndClearEntries(), [ + "myObservable1.get", + "myObservable2.get", + "myDerived2.computed(myObservable2: 10)", + 'myDerived3.computed(myDerived1: 1, myDerived2: 0)', + 'myAutorun(myDerived3: 1 + 0)', + ]); + }); + + test('bug: Add observable in endUpdate', () => { + const myObservable1 = observableValue('myObservable1', 0); + const myObservable2 = observableValue('myObservable2', 0); + + const myDerived1 = derived('myDerived1', reader => { + return myObservable1.read(reader); + }); + + const myDerived2 = derived('myDerived2', reader => { + return myObservable2.read(reader); + }); + + const myDerivedA1 = derived('myDerivedA1', reader => { + const d1 = myDerived1.read(reader); + if (d1 === 1) { + // This adds an observer while myDerived is still in update mode. + // When myDerived exits update mode, the observer shouldn't receive + // more endUpdate than beginUpdate calls. + myDerived2.read(reader); + } + }); + + autorun('myAutorun1', reader => { + myDerivedA1.read(reader); + }); + + autorun('myAutorun2', reader => { + myDerived2.read(reader); + }); + + transaction(tx => { + myObservable1.set(1, tx); + myObservable2.set(1, tx); }); - assert.deepStrictEqual(log.getAndClearEntries(), (["autorun: 1"])); }); }); @@ -489,13 +974,16 @@ export class LoggingObserver implements IObserver { this.count++; this.log.log(`${this.debugName}.beginUpdate (count ${this.count})`); } - handleChange(observable: IObservable, change: TChange): void { - this.log.log(`${this.debugName}.handleChange (count ${this.count})`); - } endUpdate(observable: IObservable): void { this.log.log(`${this.debugName}.endUpdate (count ${this.count})`); this.count--; } + handleChange(observable: IObservable, change: TChange): void { + this.log.log(`${this.debugName}.handleChange (count ${this.count})`); + } + handlePossibleChange(observable: IObservable): void { + this.log.log(`${this.debugName}.handlePossibleChange`); + } } export class LoggingObservableValue diff --git a/src/vs/base/test/common/skipList.test.ts b/src/vs/base/test/common/skipList.test.ts index 9712f498f20..d9c75702f1c 100644 --- a/src/vs/base/test/common/skipList.test.ts +++ b/src/vs/base/test/common/skipList.test.ts @@ -154,18 +154,18 @@ suite('SkipList', function () { // init const list = new SkipList(cmp, max); - let sw = new StopWatch(true); + let sw = new StopWatch(); values.forEach(value => list.set(value, true)); sw.stop(); console.log(`[LIST] ${list.size} elements after ${sw.elapsed()}ms`); let array: number[] = []; - sw = new StopWatch(true); + sw = new StopWatch(); values.forEach(value => array = insertArraySorted(array, value)); sw.stop(); console.log(`[ARRAY] ${array.length} elements after ${sw.elapsed()}ms`); // get - sw = new StopWatch(true); + sw = new StopWatch(); const someValues = [...values].slice(0, values.size / 4); someValues.forEach(key => { const value = list.get(key); // find @@ -174,7 +174,7 @@ suite('SkipList', function () { }); sw.stop(); console.log(`[LIST] retrieve ${sw.elapsed()}ms (${(sw.elapsed() / (someValues.length * 2)).toPrecision(4)}ms/op)`); - sw = new StopWatch(true); + sw = new StopWatch(); someValues.forEach(key => { const idx = binarySearch(array, key, cmp); // find console.assert(idx >= 0, '[ARRAY] must have ' + key); @@ -185,13 +185,13 @@ suite('SkipList', function () { // insert - sw = new StopWatch(true); + sw = new StopWatch(); someValues.forEach(key => { list.set(-key, false); }); sw.stop(); console.log(`[LIST] insert ${sw.elapsed()}ms (${(sw.elapsed() / someValues.length).toPrecision(4)}ms/op)`); - sw = new StopWatch(true); + sw = new StopWatch(); someValues.forEach(key => { array = insertArraySorted(array, -key); }); @@ -199,14 +199,14 @@ suite('SkipList', function () { console.log(`[ARRAY] insert ${sw.elapsed()}ms (${(sw.elapsed() / someValues.length).toPrecision(4)}ms/op)`); // delete - sw = new StopWatch(true); + sw = new StopWatch(); someValues.forEach(key => { list.delete(key); // find list.delete(-key); // miss }); sw.stop(); console.log(`[LIST] delete ${sw.elapsed()}ms (${(sw.elapsed() / (someValues.length * 2)).toPrecision(4)}ms/op)`); - sw = new StopWatch(true); + sw = new StopWatch(); someValues.forEach(key => { array = delArraySorted(array, key); // find array = delArraySorted(array, -key); // miss diff --git a/src/vs/base/test/common/strings.test.ts b/src/vs/base/test/common/strings.test.ts index 168ff6bca5b..f4bea3785b8 100644 --- a/src/vs/base/test/common/strings.test.ts +++ b/src/vs/base/test/common/strings.test.ts @@ -511,6 +511,10 @@ suite('Strings', () => { `${CSI}48;5;128m`, // 256 indexed color alt `${CSI}38:2:0:255:255:255m`, // truecolor `${CSI}38;2;255;255;255m`, // truecolor alt + + // Custom sequences: + '\x1b]633;SetMark;\x07', + '\x1b]633;P;Cwd=/foo\x07', ]; for (const sequence of sequences) { diff --git a/src/vs/base/test/common/ternarySearchtree.test.ts b/src/vs/base/test/common/ternarySearchtree.test.ts index 4ad5d8bbebd..c2f27122730 100644 --- a/src/vs/base/test/common/ternarySearchtree.test.ts +++ b/src/vs/base/test/common/ternarySearchtree.test.ts @@ -961,7 +961,7 @@ suite.skip('TST, perf', function () { function perfTest(name: string, callback: Function) { test(name, function () { if (_profile) { console.profile(name); } - const sw = new StopWatch(true); + const sw = new StopWatch(); callback(); console.log(name, sw.elapsed()); if (_profile) { console.profileEnd(); } diff --git a/src/vs/base/test/common/uri.test.ts b/src/vs/base/test/common/uri.test.ts index 16a776ee646..8002409cef3 100644 --- a/src/vs/base/test/common/uri.test.ts +++ b/src/vs/base/test/common/uri.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; import { isWindows } from 'vs/base/common/platform'; -import { URI, UriComponents } from 'vs/base/common/uri'; +import { URI, UriComponents, isUriComponents } from 'vs/base/common/uri'; suite('URI', () => { @@ -469,6 +469,30 @@ suite('URI', () => { }), true); }); + test('isUriComponents', function () { + + assert.ok(isUriComponents(URI.file('a'))); + assert.ok(isUriComponents(URI.file('a').toJSON())); + assert.ok(isUriComponents(URI.file(''))); + assert.ok(isUriComponents(URI.file('').toJSON())); + + assert.strictEqual(isUriComponents(1), false); + assert.strictEqual(isUriComponents(true), false); + assert.strictEqual(isUriComponents("true"), false); + assert.strictEqual(isUriComponents({}), false); + assert.strictEqual(isUriComponents({ scheme: '' }), true); // valid components but INVALID uri + assert.strictEqual(isUriComponents({ scheme: 'fo' }), true); + assert.strictEqual(isUriComponents({ scheme: 'fo', path: '/p' }), true); + assert.strictEqual(isUriComponents({ path: '/p' }), false); + }); + + test('from, from(strict), revive', function () { + + assert.throws(() => URI.from({ scheme: '' }, true)); + assert.strictEqual(URI.from({ scheme: '' }).scheme, 'file'); + assert.strictEqual(URI.revive({ scheme: '' }).scheme, ''); + }); + test('Unable to open \'%A0.txt\': URI malformed #76506, part 2', function () { assert.strictEqual(URI.parse('file://some/%.txt').toString(), 'file://some/%25.txt'); assert.strictEqual(URI.parse('file://some/%A0.txt').toString(), 'file://some/%25A0.txt'); diff --git a/src/vs/base/test/common/utils.ts b/src/vs/base/test/common/utils.ts index 00ec54f29ee..62508dcf7f1 100644 --- a/src/vs/base/test/common/utils.ts +++ b/src/vs/base/test/common/utils.ts @@ -10,7 +10,7 @@ import { URI } from 'vs/base/common/uri'; export type ValueCallback = (value: T | Promise) => void; -export function toResource(this: any, path: string) { +export function toResource(this: any, path: string): URI { if (isWindows) { return URI.file(join('C:\\', btoa(this.test.fullTitle()), path)); } diff --git a/src/vs/base/test/node/id.test.ts b/src/vs/base/test/node/id.test.ts index 2ef49a3d4ba..ed4b0d0cb2f 100644 --- a/src/vs/base/test/node/id.test.ts +++ b/src/vs/base/test/node/id.test.ts @@ -11,8 +11,10 @@ import { flakySuite } from 'vs/base/test/node/testUtils'; flakySuite('ID', () => { test('getMachineId', async function () { - const id = await getMachineId(); + const errors = []; + const id = await getMachineId(err => errors.push(err)); assert.ok(id); + assert.strictEqual(errors.length, 0); }); test('getMac', async () => { diff --git a/src/vs/base/test/node/pfs/fixtures/index.html b/src/vs/base/test/node/pfs/fixtures/index.html index bccd24d9272..8fc5f33ee2e 100644 --- a/src/vs/base/test/node/pfs/fixtures/index.html +++ b/src/vs/base/test/node/pfs/fixtures/index.html @@ -1,7 +1,6 @@ - Strada @@ -42,12 +41,12 @@ } - - - - diff --git a/src/vs/code/node/sharedProcess/sharedProcess.html b/src/vs/code/node/sharedProcess/sharedProcess.html deleted file mode 100644 index d1b5812fa76..00000000000 --- a/src/vs/code/node/sharedProcess/sharedProcess.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - Shared Process - - - - - diff --git a/src/vs/code/node/sharedProcess/sharedProcess.js b/src/vs/code/node/sharedProcess/sharedProcess.js deleted file mode 100644 index dfb0cefbede..00000000000 --- a/src/vs/code/node/sharedProcess/sharedProcess.js +++ /dev/null @@ -1,46 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -//@ts-check -(function () { - 'use strict'; - - const bootstrapWindow = bootstrapWindowLib(); - - // Load shared process into window - bootstrapWindow.load(['vs/code/node/sharedProcess/sharedProcessMain'], function (sharedProcess, configuration) { - return sharedProcess.main(configuration); - }, - { - configureDeveloperSettings: function () { - return { - disallowReloadKeybinding: true - }; - } - } - ); - - /** - * @typedef {import('../../../base/parts/sandbox/common/sandboxTypes').ISandboxConfiguration} ISandboxConfiguration - * - * @returns {{ - * load: ( - * modules: string[], - * resultCallback: (result, configuration: ISandboxConfiguration) => unknown, - * options?: { - * configureDeveloperSettings?: (config: ISandboxConfiguration) => { - * forceEnableDeveloperKeybindings?: boolean, - * disallowReloadKeybinding?: boolean, - * removeDeveloperKeybindingsAfterLoad?: boolean - * } - * } - * ) => Promise - * }} - */ - function bootstrapWindowLib() { - // @ts-ignore (defined in bootstrap-window.js) - return window.MonacoBootstrapWindow; - } -}()); diff --git a/src/vs/code/node/sharedProcess/sharedProcessMain.ts b/src/vs/code/node/sharedProcess/sharedProcessMain.ts index 5a6882fa5e5..d8b6d791e74 100644 --- a/src/vs/code/node/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/node/sharedProcess/sharedProcessMain.ts @@ -4,18 +4,13 @@ *--------------------------------------------------------------------------------------------*/ /* eslint-disable local/code-layering, local/code-import-patterns */ -// TODO@bpasero remove these once utility process is the only way -import { Server as BrowserWindowMessagePortServer } from 'vs/base/parts/ipc/electron-browser/ipc.mp'; -import { SharedProcessWorkerService } from 'vs/platform/sharedProcess/electron-browser/sharedProcessWorkerService'; -import { ILocalPtyService } from 'vs/platform/terminal/electron-sandbox/terminal'; - import { hostname, release } from 'os'; import { toErrorMessage } from 'vs/base/common/errorMessage'; import { onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/errors'; import { combinedDisposable, Disposable, toDisposable } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; -import { IPCServer, ProxyChannel, StaticRouter } from 'vs/base/parts/ipc/common/ipc'; +import { ProxyChannel, StaticRouter } from 'vs/base/parts/ipc/common/ipc'; import { Server as UtilityProcessMessagePortServer, once } from 'vs/base/parts/ipc/node/ipc.mp'; import { CodeCacheCleaner } from 'vs/code/node/sharedProcess/contrib/codeCacheCleaner'; import { LanguagePackCachedDataCleaner } from 'vs/code/node/sharedProcess/contrib/languagePackCachedDataCleaner'; @@ -31,7 +26,6 @@ import { DiagnosticsService } from 'vs/platform/diagnostics/node/diagnosticsServ import { IDownloadService } from 'vs/platform/download/common/download'; import { DownloadService } from 'vs/platform/download/common/downloadService'; import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { SharedProcessEnvironmentService } from 'vs/platform/sharedProcess/node/sharedProcessEnvironmentService'; import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService'; import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService'; import { IExtensionGalleryService, IExtensionManagementService, IExtensionTipsService, IGlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionManagement'; @@ -62,8 +56,6 @@ import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogA import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; import { supportsTelemetry, ITelemetryAppender, NullAppender, NullTelemetryService, getPiiPathsFromEnvironment, isInternalTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; import { CustomEndpointTelemetryService } from 'vs/platform/telemetry/node/customEndpointTelemetryService'; -import { LocalReconnectConstants, TerminalIpcChannels, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; -import { PtyHostService } from 'vs/platform/terminal/node/ptyHostService'; import { ExtensionStorageService, IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions'; import { IUserDataSyncBackupStoreService, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, IUserDataSyncUtilService, registerConfiguration as registerUserDataSyncConfiguration, IUserDataSyncResourceProviderService } from 'vs/platform/userDataSync/common/userDataSync'; @@ -85,7 +77,6 @@ import { ISharedTunnelsService } from 'vs/platform/tunnel/common/tunnel'; import { SharedTunnelsService } from 'vs/platform/tunnel/node/tunnelService'; import { ipcSharedProcessTunnelChannelName, ISharedProcessTunnelService } from 'vs/platform/remote/common/sharedProcessTunnelService'; import { SharedProcessTunnelService } from 'vs/platform/tunnel/node/sharedProcessTunnelService'; -import { ISharedProcessWorkerService } from 'vs/platform/sharedProcess/common/sharedProcessWorkerService'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; import { isLinux } from 'vs/base/common/platform'; @@ -107,8 +98,6 @@ import { UserDataSyncResourceProviderService } from 'vs/platform/userDataSync/co import { ExtensionsContributions } from 'vs/code/node/sharedProcess/contrib/extensions'; import { localize } from 'vs/nls'; import { LogService } from 'vs/platform/log/common/logService'; -import { ipcUtilityProcessWorkerChannelName, IUtilityProcessWorkerConfiguration } from 'vs/platform/utilityProcess/common/utilityProcessWorkerService'; -import { isUtilityProcess } from 'vs/base/parts/sandbox/node/electronTypes'; import { ISharedProcessLifecycleService, SharedProcessLifecycleService } from 'vs/platform/lifecycle/node/sharedProcessLifecycleService'; import { RemoteTunnelService } from 'vs/platform/remoteTunnel/node/remoteTunnelService'; import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; @@ -119,24 +108,20 @@ import { UserDataAutoSyncService } from 'vs/platform/userDataSync/node/userDataA import { ExtensionTipsService } from 'vs/platform/extensionManagement/node/extensionTipsService'; import { IMainProcessService, MainProcessService } from 'vs/platform/ipc/common/mainProcessService'; import { RemoteStorageService } from 'vs/platform/storage/common/storageService'; +import { IRemoteSocketFactoryService, RemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService'; +import { RemoteConnectionType } from 'vs/platform/remote/common/remoteAuthorityResolver'; +import { nodeSocketFactory } from 'vs/platform/remote/node/nodeSocketFactory'; +import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; class SharedProcessMain extends Disposable { - private readonly server: IPCServer; - - private sharedProcessWorkerService: ISharedProcessWorkerService | undefined = undefined; + private readonly server = this._register(new UtilityProcessMessagePortServer()); private lifecycleService: SharedProcessLifecycleService | undefined = undefined; - constructor(private configuration: ISharedProcessConfiguration, private ipcRenderer?: typeof import('electron').ipcRenderer) { + constructor(private configuration: ISharedProcessConfiguration) { super(); - if (isUtilityProcess(process)) { - this.server = this._register(new UtilityProcessMessagePortServer()); - } else { - this.server = this._register(new BrowserWindowMessagePortServer()); - } - this.registerListeners(); } @@ -153,29 +138,7 @@ class SharedProcessMain extends Disposable { } }; process.once('exit', onExit); - if (isUtilityProcess(process)) { - once(process.parentPort, 'vscode:electron-main->shared-process=exit', onExit); - } else { - this.ipcRenderer!.once('vscode:electron-main->shared-process=exit', onExit); - } - - if (!isUtilityProcess(process)) { - - // Shared process worker lifecycle - // - // We dispose the listener when the shared process is - // disposed to avoid disposing workers when the entire - // application is shutting down anyways. - - const eventName = 'vscode:electron-main->shared-process=disposeWorker'; - const onDisposeWorker = (event: unknown, configuration: IUtilityProcessWorkerConfiguration) => { this.onDisposeWorker(configuration); }; - this.ipcRenderer!.on(eventName, onDisposeWorker); - this._register(toDisposable(() => this.ipcRenderer!.removeListener(eventName, onDisposeWorker))); - } - } - - private onDisposeWorker(configuration: IUtilityProcessWorkerConfiguration): void { - this.sharedProcessWorkerService?.disposeWorker(configuration); + once(process.parentPort, 'vscode:electron-main->shared-process=exit', onExit); } async init(): Promise { @@ -228,7 +191,7 @@ class SharedProcessMain extends Disposable { services.set(IPolicyService, policyService); // Environment - const environmentService = new SharedProcessEnvironmentService(this.configuration.args, productService); + const environmentService = new NativeEnvironmentService(this.configuration.args, productService); services.set(INativeEnvironmentService, environmentService); // Logger @@ -245,10 +208,6 @@ class SharedProcessMain extends Disposable { this.lifecycleService = this._register(new SharedProcessLifecycleService(logService)); services.set(ISharedProcessLifecycleService, this.lifecycleService); - // Worker - this.sharedProcessWorkerService = new SharedProcessWorkerService(logService); - services.set(ISharedProcessWorkerService, this.sharedProcessWorkerService); - // Files const fileService = this._register(new FileService(logService)); services.set(IFileService, fileService); @@ -301,7 +260,7 @@ class SharedProcessMain extends Disposable { services.set(IV8InspectProfilingService, new SyncDescriptor(V8InspectProfilingService, undefined, false /* proxied to other processes */)); // Native Host - const nativeHostService = ProxyChannel.toService(mainProcessService.getChannel('nativeHost'), { context: this.configuration.windowId }); + const nativeHostService = ProxyChannel.toService(mainProcessService.getChannel('nativeHost')); services.set(INativeHostService, nativeHostService); // Download @@ -319,7 +278,6 @@ class SharedProcessMain extends Disposable { if (supportsTelemetry(productService, environmentService)) { const logAppender = new TelemetryLogAppender(logService, loggerService, environmentService, productService); appenders.push(logAppender); - const { installSourcePath } = environmentService; if (productService.aiConfig?.ariaKey) { const collectorAppender = new OneDataSystemAppender(internalTelemetry, 'monacoworkbench', null, productService.aiConfig.ariaKey); this._register(toDisposable(() => collectorAppender.flush())); // Ensure the 1DS appender is disposed so that it flushes remaining data @@ -328,7 +286,7 @@ class SharedProcessMain extends Disposable { telemetryService = new TelemetryService({ appenders, - commonProperties: resolveCommonProperties(fileService, release(), hostname(), process.arch, productService.commit, productService.version, this.configuration.machineId, internalTelemetry, installSourcePath), + commonProperties: resolveCommonProperties(release(), hostname(), process.arch, productService.commit, productService.version, this.configuration.machineId, internalTelemetry), sendErrorTelemetry: true, piiPaths: getPiiPathsFromEnvironment(environmentService), }, configurationService, productService); @@ -379,27 +337,13 @@ class SharedProcessMain extends Disposable { services.set(IUserDataProfileStorageService, new SyncDescriptor(NativeUserDataProfileStorageService, undefined, true)); services.set(IUserDataSyncResourceProviderService, new SyncDescriptor(UserDataSyncResourceProviderService, undefined, true)); - // Terminal - - const ptyHostService = new PtyHostService({ - graceTime: LocalReconnectConstants.GraceTime, - shortGraceTime: LocalReconnectConstants.ShortGraceTime, - scrollback: configurationService.getValue(TerminalSettingId.PersistentSessionScrollback) ?? 100 - }, - false, - configurationService, - environmentService, - logService, - loggerService - ); - ptyHostService.initialize(); - - services.set(ILocalPtyService, this._register(ptyHostService)); - // Signing services.set(ISignService, new SyncDescriptor(SignService, undefined, false /* proxied to other processes */)); // Tunnel + const remoteSocketFactoryService = new RemoteSocketFactoryService(); + services.set(IRemoteSocketFactoryService, remoteSocketFactoryService); + remoteSocketFactoryService.register(RemoteConnectionType.WebSocket, nodeSocketFactory); services.set(ISharedTunnelsService, new SyncDescriptor(SharedTunnelsService)); services.set(ISharedProcessTunnelService, new SyncDescriptor(SharedProcessTunnelService)); @@ -456,19 +400,10 @@ class SharedProcessMain extends Disposable { const userDataAutoSyncChannel = new UserDataAutoSyncChannel(userDataAutoSync); this.server.registerChannel('userDataAutoSync', userDataAutoSyncChannel); - // Terminal - const localPtyService = accessor.get(ILocalPtyService); - const localPtyChannel = ProxyChannel.fromService(localPtyService); - this.server.registerChannel(TerminalIpcChannels.LocalPty, localPtyChannel); - // Tunnel const sharedProcessTunnelChannel = ProxyChannel.fromService(accessor.get(ISharedProcessTunnelService)); this.server.registerChannel(ipcSharedProcessTunnelChannelName, sharedProcessTunnelChannel); - // Worker - const sharedProcessWorkerChannel = ProxyChannel.fromService(accessor.get(ISharedProcessWorkerService)); - this.server.registerChannel(ipcUtilityProcessWorkerChannelName, sharedProcessWorkerChannel); - // Remote Tunnel const remoteTunnelChannel = ProxyChannel.fromService(accessor.get(IRemoteTunnelService)); this.server.registerChannel('remoteTunnel', remoteTunnelChannel); @@ -477,19 +412,8 @@ class SharedProcessMain extends Disposable { private registerErrorHandler(logService: ILogService): void { // Listen on global error events - if (isUtilityProcess(process)) { - process.on('uncaughtException', error => onUnexpectedError(error)); - process.on('unhandledRejection', (reason: unknown) => onUnexpectedError(reason)); - } else { - (globalThis as any).addEventListener('unhandledrejection', (event: any) => { - - // See https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent - onUnexpectedError(event.reason); - - // Prevent the printing of this event to the console - event.preventDefault(); - }); - } + process.on('uncaughtException', error => onUnexpectedError(error)); + process.on('unhandledRejection', (reason: unknown) => onUnexpectedError(reason)); // Install handler for unexpected errors setUnexpectedErrorHandler(error => { @@ -508,31 +432,15 @@ export async function main(configuration: ISharedProcessConfiguration): Promise< // create shared process and signal back to main that we are // ready to accept message ports as client connections - let ipcRenderer: typeof import('electron').ipcRenderer | undefined = undefined; - if (!isUtilityProcess(process)) { - ipcRenderer = (await import('electron')).ipcRenderer; - } - - const sharedProcess = new SharedProcessMain(configuration, ipcRenderer); - - if (isUtilityProcess(process)) { - process.parentPort.postMessage('vscode:shared-process->electron-main=ipc-ready'); - } else { - ipcRenderer!.send('vscode:shared-process->electron-main=ipc-ready'); - } + const sharedProcess = new SharedProcessMain(configuration); + process.parentPort.postMessage('vscode:shared-process->electron-main=ipc-ready'); // await initialization and signal this back to electron-main await sharedProcess.init(); - if (isUtilityProcess(process)) { - process.parentPort.postMessage('vscode:shared-process->electron-main=init-done'); - } else { - ipcRenderer!.send('vscode:shared-process->electron-main=init-done'); - } + process.parentPort.postMessage('vscode:shared-process->electron-main=init-done'); } -if (isUtilityProcess(process)) { - process.parentPort.once('message', (e: Electron.MessageEvent) => { - main(e.data as ISharedProcessConfiguration); - }); -} +process.parentPort.once('message', (e: Electron.MessageEvent) => { + main(e.data as ISharedProcessConfiguration); +}); diff --git a/src/vs/code/test/electron-sandbox/issue/testReporterModel.test.ts b/src/vs/code/test/electron-sandbox/issue/testReporterModel.test.ts index aa0fac7bf0d..e2280b2338e 100644 --- a/src/vs/code/test/electron-sandbox/issue/testReporterModel.test.ts +++ b/src/vs/code/test/electron-sandbox/issue/testReporterModel.test.ts @@ -34,7 +34,6 @@ undefined VS Code version: undefined OS version: undefined Modes: -Sandboxed: No Extensions: none `); @@ -66,7 +65,6 @@ undefined VS Code version: undefined OS version: undefined Modes: -Sandboxed: No

System Info @@ -111,7 +109,6 @@ undefined VS Code version: undefined OS version: undefined Modes: -Sandboxed: No
System Info @@ -167,7 +164,6 @@ undefined VS Code version: undefined OS version: undefined Modes: -Sandboxed: No
System Info @@ -225,7 +221,6 @@ undefined VS Code version: undefined OS version: undefined Modes: -Sandboxed: No Remote OS version: Linux x64 4.18.0
@@ -275,7 +270,6 @@ undefined VS Code version: undefined OS version: undefined Modes: -Sandboxed: No
System Info @@ -307,7 +301,6 @@ undefined VS Code version: undefined OS version: undefined Modes: Restricted, Unsupported -Sandboxed: No Extensions: none `); diff --git a/src/vs/css.ts b/src/vs/css.ts index 4a5ea48d174..5337b4f2136 100644 --- a/src/vs/css.ts +++ b/src/vs/css.ts @@ -9,6 +9,8 @@ interface ICSSPluginConfig { /** * Invoked by the loader at run-time + * + * @skipMangle */ export function load(name: string, req: AMDLoader.IRelativeRequire, load: AMDLoader.IPluginLoadCallback, config: AMDLoader.IConfigurationOptions): void { config = config || {}; diff --git a/src/vs/editor/browser/config/editorConfiguration.ts b/src/vs/editor/browser/config/editorConfiguration.ts index 7e99e40ce47..fc197da1d57 100644 --- a/src/vs/editor/browser/config/editorConfiguration.ts +++ b/src/vs/editor/browser/config/editorConfiguration.ts @@ -47,6 +47,7 @@ export class EditorConfiguration extends Disposable implements IEditorConfigurat private _viewLineCount: number = 1; private _lineNumbersDigitCount: number = 1; private _reservedHeight: number = 0; + private _glyphMarginDecorationLaneCount: number = 1; private readonly _computeOptionsMemory: ComputeOptionsMemory = new ComputeOptionsMemory(); /** @@ -117,7 +118,8 @@ export class EditorConfiguration extends Disposable implements IEditorConfigurat emptySelectionClipboard: partialEnv.emptySelectionClipboard, pixelRatio: partialEnv.pixelRatio, tabFocusMode: TabFocus.getTabFocusMode(TabFocusContext.Editor), - accessibilitySupport: partialEnv.accessibilitySupport + accessibilitySupport: partialEnv.accessibilitySupport, + glyphMarginDecorationLaneCount: this._glyphMarginDecorationLaneCount }; return EditorOptionsUtil.computeOptions(this._validatedOptions, env); } @@ -193,6 +195,14 @@ export class EditorConfiguration extends Disposable implements IEditorConfigurat this._reservedHeight = reservedHeight; this._recomputeOptions(); } + + public setGlyphMarginDecorationLaneCount(decorationLaneCount: number): void { + if (this._glyphMarginDecorationLaneCount === decorationLaneCount) { + return; + } + this._glyphMarginDecorationLaneCount = decorationLaneCount; + this._recomputeOptions(); + } } function digitCount(n: number): number { diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index d2779a8be1f..bbd250053d9 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -1033,8 +1033,14 @@ function shadowCaretRangeFromPoint(shadowRoot: ShadowRoot, x: number, y: number) // Grab its rect const rect = el.getBoundingClientRect(); - // And its font - const font = window.getComputedStyle(el, null).getPropertyValue('font'); + // And its font (the computed shorthand font property might be empty, see #3217) + const fontStyle = window.getComputedStyle(el, null).getPropertyValue('font-style'); + const fontVariant = window.getComputedStyle(el, null).getPropertyValue('font-variant'); + const fontWeight = window.getComputedStyle(el, null).getPropertyValue('font-weight'); + const fontSize = window.getComputedStyle(el, null).getPropertyValue('font-size'); + const lineHeight = window.getComputedStyle(el, null).getPropertyValue('line-height'); + const fontFamily = window.getComputedStyle(el, null).getPropertyValue('font-family'); + const font = `${fontStyle} ${fontVariant} ${fontWeight} ${fontSize}/${lineHeight} ${fontFamily}`; // And also its txt content const text = (el as any).innerText; diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/src/vs/editor/browser/controller/textAreaHandler.ts index 8c7a15121e9..0d5c3317051 100644 --- a/src/vs/editor/browser/controller/textAreaHandler.ts +++ b/src/vs/editor/browser/controller/textAreaHandler.ts @@ -297,7 +297,12 @@ export class TextAreaHandler extends ViewPart { }; const textAreaWrapper = this._register(new TextAreaWrapper(this.textArea.domNode)); - this._textAreaInput = this._register(new TextAreaInput(textAreaInputHost, textAreaWrapper, platform.OS, browser)); + this._textAreaInput = this._register(new TextAreaInput(textAreaInputHost, textAreaWrapper, platform.OS, { + isAndroid: browser.isAndroid, + isChrome: browser.isChrome, + isFirefox: browser.isFirefox, + isSafari: browser.isSafari, + })); this._register(this._textAreaInput.onKeyDown((e: IKeyboardEvent) => { this._viewController.emitKeyDown(e); diff --git a/src/vs/editor/browser/dnd.ts b/src/vs/editor/browser/dnd.ts index c872a52e476..3003a4f65d5 100644 --- a/src/vs/editor/browser/dnd.ts +++ b/src/vs/editor/browser/dnd.ts @@ -7,7 +7,7 @@ import { DataTransfers } from 'vs/base/browser/dnd'; import { createFileDataTransferItem, createStringDataTransferItem, IDataTransferItem, UriList, VSDataTransfer } from 'vs/base/common/dataTransfer'; import { Mimes } from 'vs/base/common/mime'; import { URI } from 'vs/base/common/uri'; -import { CodeDataTransfers, extractEditorsDropData, FileAdditionalNativeProperties } from 'vs/platform/dnd/browser/dnd'; +import { CodeDataTransfers, FileAdditionalNativeProperties } from 'vs/platform/dnd/browser/dnd'; export function toVSDataTransfer(dataTransfer: DataTransfer) { @@ -38,28 +38,45 @@ const INTERNAL_DND_MIME_TYPES = Object.freeze([ CodeDataTransfers.EDITORS, CodeDataTransfers.FILES, DataTransfers.RESOURCES, + DataTransfers.INTERNAL_URI_LIST, ]); -export function addExternalEditorsDropData(dataTransfer: VSDataTransfer, dragEvent: DragEvent, overwriteUriList = false) { - if (dragEvent.dataTransfer && (overwriteUriList || !dataTransfer.has(Mimes.uriList))) { - const editorData = extractEditorsDropData(dragEvent) - .filter(input => input.resource) - .map(input => input.resource!.toString()); +export function toExternalVSDataTransfer(sourceDataTransfer: DataTransfer, overwriteUriList = false): VSDataTransfer { + const vsDataTransfer = toVSDataTransfer(sourceDataTransfer); - // Also add in the files - for (const item of dragEvent.dataTransfer?.items) { - const file = item.getAsFile(); - if (file) { - editorData.push((file as FileAdditionalNativeProperties).path ? URI.file((file as FileAdditionalNativeProperties).path!).toString() : file.name); + // Try to expose the internal uri-list type as the standard type + const uriList = vsDataTransfer.get(DataTransfers.INTERNAL_URI_LIST); + if (uriList) { + vsDataTransfer.replace(Mimes.uriList, uriList); + } else { + if (overwriteUriList || !vsDataTransfer.has(Mimes.uriList)) { + // Otherwise, fallback to adding dragged resources to the uri list + const editorData: string[] = []; + for (const item of sourceDataTransfer.items) { + const file = item.getAsFile(); + if (file) { + const path = (file as FileAdditionalNativeProperties).path; + try { + if (path) { + editorData.push(URI.file(path).toString()); + } else { + editorData.push(URI.parse(file.name, true).toString()); + } + } catch { + // Parsing failed. Leave out from list + } + } } - } - if (editorData.length) { - dataTransfer.replace(Mimes.uriList, createStringDataTransferItem(UriList.create(editorData))); + if (editorData.length) { + vsDataTransfer.replace(Mimes.uriList, createStringDataTransferItem(UriList.create(editorData))); + } } } for (const internal of INTERNAL_DND_MIME_TYPES) { - dataTransfer.delete(internal); + vsDataTransfer.delete(internal); } + + return vsDataTransfer; } diff --git a/src/vs/editor/browser/editorBrowser.ts b/src/vs/editor/browser/editorBrowser.ts index fa8ae37f759..2cd8aabfa0d 100644 --- a/src/vs/editor/browser/editorBrowser.ts +++ b/src/vs/editor/browser/editorBrowser.ts @@ -3,24 +3,26 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IMouseEvent, IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; -import { OverviewRulerPosition, ConfigurationChangedEvent, EditorLayoutInfo, IComputedEditorOptions, EditorOption, FindComputedEditorOptionValueById, IEditorOptions, IDiffEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; +import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; +import { Event } from 'vs/base/common/event'; +import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; +import { ConfigurationChangedEvent, EditorLayoutInfo, EditorOption, FindComputedEditorOptionValueById, IComputedEditorOptions, IDiffEditorOptions, IEditorOptions, OverviewRulerPosition } from 'vs/editor/common/config/editorOptions'; +import { IDimension } from 'vs/editor/common/core/dimension'; import { IPosition, Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; import { Selection } from 'vs/editor/common/core/selection'; -import * as editorCommon from 'vs/editor/common/editorCommon'; -import { IIdentifiedSingleEditOperation, IModelDecoration, IModelDeltaDecoration, ITextModel, ICursorStateComputer, PositionAffinity } from 'vs/editor/common/model'; import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; +import { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; +import { IDiffComputationResult, ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; +import * as editorCommon from 'vs/editor/common/editorCommon'; +import { GlyphMarginLane, ICursorStateComputer, IIdentifiedSingleEditOperation, IModelDecoration, IModelDeltaDecoration, ITextModel, PositionAffinity } from 'vs/editor/common/model'; +import { InjectedText } from 'vs/editor/common/modelLineProjectionData'; import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; +import { IEditorWhitespace, IViewModel } from 'vs/editor/common/viewModel'; import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IEditorWhitespace, IViewModel } from 'vs/editor/common/viewModel'; -import { InjectedText } from 'vs/editor/common/modelLineProjectionData'; -import { ILineChange, IDiffComputationResult } from 'vs/editor/common/diff/smartLinesDiffComputer'; -import { IDimension } from 'vs/editor/common/core/dimension'; /** * A view zone is a full horizontal rectangle that 'pushes' text down. @@ -38,11 +40,19 @@ export interface IViewZone { * This is relevant for wrapped lines. */ afterColumn?: number; - /** * If the `afterColumn` has multiple view columns, the affinity specifies which one to use. Defaults to `none`. */ afterColumnAffinity?: PositionAffinity; + /** + * Render the zone even when its line is hidden. + */ + showInHiddenAreas?: boolean; + /** + * Tiebreaker that is used when multiple view zones want to be after the same line. + * Defaults to `afterColumn` otherwise 10000; + */ + ordinal?: number; /** * Suppress mouse down events. * If set, the editor will attach a mouse down listener to the view zone and .preventDefault on it. @@ -242,6 +252,43 @@ export interface IOverlayWidget { getPosition(): IOverlayWidgetPosition | null; } +/** + * A glyph margin widget renders in the editor glyph margin. + */ +export interface IGlyphMarginWidget { + /** + * Get a unique identifier of the glyph widget. + */ + getId(): string; + /** + * Get the dom node of the glyph widget. + */ + getDomNode(): HTMLElement; + /** + * Get the placement of the glyph widget. + */ + getPosition(): IGlyphMarginWidgetPosition; +} + +/** + * A position for rendering glyph margin widgets. + */ +export interface IGlyphMarginWidgetPosition { + /** + * The glyph margin lane where the widget should be shown. + */ + lane: GlyphMarginLane; + /** + * The priority order of the widget, used for determining which widget + * to render when there are multiple. + */ + zIndex: number; + /** + * The editor range that this widget applies to. + */ + range: IRange; +} + /** * Type of hit element with the mouse in the editor. */ @@ -459,12 +506,7 @@ export interface IEditorAriaOptions { role?: string; } -export interface IDiffEditorConstructionOptions extends IDiffEditorOptions { - /** - * The initial editor dimension (to avoid measuring the container). - */ - dimension?: IDimension; - +export interface IDiffEditorConstructionOptions extends IDiffEditorOptions, IEditorConstructionOptions { /** * Place overflow widgets inside an external DOM node. * Defaults to an internal DOM node. @@ -480,12 +522,6 @@ export interface IDiffEditorConstructionOptions extends IDiffEditorOptions { * Aria label for modified editor. */ modifiedAriaLabel?: string; - - /** - * Is the diff editor inside another editor - * Defaults to false - */ - isInEmbeddedEditor?: boolean; } /** @@ -804,6 +840,10 @@ export interface ICodeEditor extends editorCommon.IEditor { * Change the scroll position of the editor's viewport. */ setScrollPosition(position: editorCommon.INewScrollPosition, scrollType?: editorCommon.ScrollType): void; + /** + * Check if the editor is currently scrolling towards a different scroll position. + */ + hasPendingScrollAnimation(): boolean; /** * Get an action that is a contribution to this editor. @@ -986,6 +1026,20 @@ export interface ICodeEditor extends editorCommon.IEditor { */ removeOverlayWidget(widget: IOverlayWidget): void; + /** + * Add a glyph margin widget. Widgets must have unique ids, otherwise they will be overwritten. + */ + addGlyphMarginWidget(widget: IGlyphMarginWidget): void; + /** + * Layout/Reposition a glyph margin widget. This is a ping to the editor to call widget.getPosition() + * and update appropriately. + */ + layoutGlyphMarginWidget(widget: IGlyphMarginWidget): void; + /** + * Remove a glyph margin widget. + */ + removeGlyphMarginWidget(widget: IGlyphMarginWidget): void; + /** * Change the view zones. View zones are lost when a new model is attached to the editor. */ @@ -1088,13 +1142,6 @@ export interface IActiveCodeEditor extends ICodeEditor { getScrolledVisiblePosition(position: IPosition): { top: number; left: number; height: number }; } -/** - * Information about a line in the diff editor - */ -export interface IDiffLineInformation { - readonly equivalentLineNumber: number; -} - /** * @internal */ @@ -1157,6 +1204,8 @@ export interface IDiffEditor extends editorCommon.IEditor { */ getModel(): editorCommon.IDiffEditorModel | null; + createViewModel(model: editorCommon.IDiffEditorModel): editorCommon.IDiffEditorViewModel; + /** * Sets the current model attached to this editor. * If the previous model was created by the editor via the value key in the options @@ -1165,7 +1214,7 @@ export interface IDiffEditor extends editorCommon.IEditor { * will not be destroyed. * It is safe to call setModel(null) to simply detach the current model from the editor. */ - setModel(model: editorCommon.IDiffEditorModel | null): void; + setModel(model: editorCommon.IDiffEditorModel | editorCommon.IDiffEditorViewModel | null): void; /** * Get the `original` editor. @@ -1188,22 +1237,29 @@ export interface IDiffEditor extends editorCommon.IEditor { */ getDiffComputationResult(): IDiffComputationResult | null; - /** - * Get information based on computed diff about a line number from the original model. - * If the diff computation is not finished or the model is missing, will return null. - */ - getDiffLineInformationForOriginal(lineNumber: number): IDiffLineInformation | null; - - /** - * Get information based on computed diff about a line number from the modified model. - * If the diff computation is not finished or the model is missing, will return null. - */ - getDiffLineInformationForModified(lineNumber: number): IDiffLineInformation | null; - /** * Update the editor's options after the editor has been created. */ updateOptions(newOptions: IDiffEditorOptions): void; + + /** + * @internal + */ + setBoundarySashes(sashes: IBoundarySashes): void; + + /** + * @internal + */ + goToDiff(target: 'next' | 'previous'): void; + + /** + * @internal + */ + revealFirstDiff(): unknown; + + diffReviewNext(): void; + + diffReviewPrev(): void; } /** diff --git a/src/vs/editor/browser/editorDom.ts b/src/vs/editor/browser/editorDom.ts index 817f1296d57..4af00e67b13 100644 --- a/src/vs/editor/browser/editorDom.ts +++ b/src/vs/editor/browser/editorDom.ts @@ -342,6 +342,7 @@ export interface CssProperties { fontWeight?: string; fontSize?: string; fontFamily?: string; + unicodeBidi?: string; textDecoration?: string; color?: string | ThemeColor; backgroundColor?: string | ThemeColor; diff --git a/src/vs/editor/browser/editorExtensions.ts b/src/vs/editor/browser/editorExtensions.ts index 6536ffb9034..779468acc0a 100644 --- a/src/vs/editor/browser/editorExtensions.ts +++ b/src/vs/editor/browser/editorExtensions.ts @@ -188,6 +188,7 @@ interface ICommandImplementationRegistration { priority: number; name: string; implementation: CommandImplementation; + when?: ContextKeyExpression; } export class MultiCommand extends Command { @@ -197,8 +198,8 @@ export class MultiCommand extends Command { /** * A higher priority gets to be looked at first */ - public addImplementation(priority: number, name: string, implementation: CommandImplementation): IDisposable { - this._implementations.push({ priority, name, implementation }); + public addImplementation(priority: number, name: string, implementation: CommandImplementation, when?: ContextKeyExpression): IDisposable { + this._implementations.push({ priority, name, implementation, when }); this._implementations.sort((a, b) => b.priority - a.priority); return { dispose: () => { @@ -214,8 +215,16 @@ export class MultiCommand extends Command { public runCommand(accessor: ServicesAccessor, args: any): void | Promise { const logService = accessor.get(ILogService); + const contextKeyService = accessor.get(IContextKeyService); logService.trace(`Executing Command '${this.id}' which has ${this._implementations.length} bound.`); for (const impl of this._implementations) { + if (impl.when) { + const context = contextKeyService.getContext(document.activeElement); + const value = impl.when.evaluate(context); + if (!value) { + continue; + } + } const result = impl.implementation(accessor, args); if (result) { logService.trace(`Command '${this.id}' was handled by '${impl.name}'.`); @@ -450,9 +459,13 @@ export abstract class EditorAction2 extends Action2 { // precondition does hold return editor.invokeWithinContext((editorAccessor) => { const kbService = editorAccessor.get(IContextKeyService); - if (kbService.contextMatchesRules(withNullAsUndefined(this.desc.precondition))) { - return this.runEditorCommand(editorAccessor, editor!, ...args); + const logService = editorAccessor.get(ILogService); + const enabled = kbService.contextMatchesRules(withNullAsUndefined(this.desc.precondition)); + if (!enabled) { + logService.debug(`[EditorAction2] NOT running command because its precondition is FALSE`, this.desc.id, this.desc.precondition?.serialize()); + return; } + return this.runEditorCommand(editorAccessor, editor!, ...args); }); } diff --git a/src/vs/editor/browser/services/abstractCodeEditorService.ts b/src/vs/editor/browser/services/abstractCodeEditorService.ts index 62db35d5a0c..cc0f8669a03 100644 --- a/src/vs/editor/browser/services/abstractCodeEditorService.ts +++ b/src/vs/editor/browser/services/abstractCodeEditorService.ts @@ -786,7 +786,7 @@ class DecorationCSSRules { } /** - * Build the CSS for decorations styled via `glpyhMarginClassName`. + * Build the CSS for decorations styled via `glyphMarginClassName`. */ private getCSSTextForModelDecorationGlyphMarginClassName(opts: IThemeDecorationRenderOptions | undefined): string { if (!opts) { diff --git a/src/vs/editor/browser/services/editorWorkerService.ts b/src/vs/editor/browser/services/editorWorkerService.ts index 48625e8c0a2..a4ffe3053b5 100644 --- a/src/vs/editor/browser/services/editorWorkerService.ts +++ b/src/vs/editor/browser/services/editorWorkerService.ts @@ -14,20 +14,21 @@ import { ITextModel } from 'vs/editor/common/model'; import * as languages from 'vs/editor/common/languages'; import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker'; -import { DiffAlgorithmName, IDiffComputationResult, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; +import { DiffAlgorithmName, IDiffComputationResult, IEditorWorkerService, ILineChange, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; import { IModelService } from 'vs/editor/common/services/model'; import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; import { regExpFlags } from 'vs/base/common/strings'; import { isNonEmptyArray } from 'vs/base/common/arrays'; import { ILogService } from 'vs/platform/log/common/log'; import { StopWatch } from 'vs/base/common/stopwatch'; -import { canceled } from 'vs/base/common/errors'; +import { canceled, onUnexpectedError } from 'vs/base/common/errors'; import { UnicodeHighlighterOptions } from 'vs/editor/common/services/unicodeTextModelHighlighter'; import { IEditorWorkerHost } from 'vs/editor/common/services/editorWorkerHost'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { IChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; import { IDocumentDiff, IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; -import { LineRangeMapping, LineRange, RangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { ILinesDiffComputerOptions, LineRangeMapping, MovedText, RangeMapping, SimpleLineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { LineRange } from 'vs/editor/common/core/lineRange'; /** * Stop syncing a model to the worker if it was not needed for 1 min. @@ -105,22 +106,28 @@ export class EditorWorkerService extends Disposable implements IEditorWorkerServ const diff: IDocumentDiff = { identical: result.identical, quitEarly: result.quitEarly, - changes: result.changes.map( - (c) => - new LineRangeMapping( - new LineRange(c[0], c[1]), - new LineRange(c[2], c[3]), - c[4]?.map( - (c) => - new RangeMapping( - new Range(c[0], c[1], c[2], c[3]), - new Range(c[4], c[5], c[6], c[7]) - ) - ) - ) - ), + changes: toLineRangeMappings(result.changes), + moves: result.moves.map(m => new MovedText( + new SimpleLineRangeMapping(new LineRange(m[0], m[1]), new LineRange(m[2], m[3])), + toLineRangeMappings(m[4]) + )) }; return diff; + + function toLineRangeMappings(changes: readonly ILineChange[]): readonly LineRangeMapping[] { + return changes.map( + (c) => new LineRangeMapping( + new LineRange(c[0], c[1]), + new LineRange(c[2], c[3]), + c[4]?.map( + (c) => new RangeMapping( + new Range(c[0], c[1], c[2], c[3]), + new Range(c[4], c[5], c[6], c[7]) + ) + ) + ) + ); + } } public canComputeDirtyDiff(original: URI, modified: URI): boolean { @@ -131,13 +138,13 @@ export class EditorWorkerService extends Disposable implements IEditorWorkerServ return this._workerManager.withWorker().then(client => client.computeDirtyDiff(original, modified, ignoreTrimWhitespace)); } - public computeMoreMinimalEdits(resource: URI, edits: languages.TextEdit[] | null | undefined): Promise { + public computeMoreMinimalEdits(resource: URI, edits: languages.TextEdit[] | null | undefined, pretty: boolean = false): Promise { if (isNonEmptyArray(edits)) { if (!canSyncModel(this._modelService, resource)) { return Promise.resolve(edits); // File too large } - const sw = StopWatch.create(true); - const result = this._workerManager.withWorker().then(client => client.computeMoreMinimalEdits(resource, edits)); + const sw = StopWatch.create(); + const result = this._workerManager.withWorker().then(client => client.computeMoreMinimalEdits(resource, edits, pretty)); result.finally(() => this._logService.trace('FORMAT#computeMoreMinimalEdits', resource.toString(true), sw.elapsed())); return Promise.race([result, timeout(1000).then(() => edits)]); @@ -146,6 +153,26 @@ export class EditorWorkerService extends Disposable implements IEditorWorkerServ } } + public computeHumanReadableDiff(resource: URI, edits: languages.TextEdit[] | null | undefined): Promise { + if (isNonEmptyArray(edits)) { + if (!canSyncModel(this._modelService, resource)) { + return Promise.resolve(edits); // File too large + } + const sw = StopWatch.create(); + const result = this._workerManager.withWorker().then(client => client.computeHumanReadableDiff(resource, edits, + { ignoreTrimWhitespace: false, maxComputationTimeMs: 1000, computeMoves: false, })).catch((err) => { + onUnexpectedError(err); + // In case of an exception, fall back to computeMoreMinimalEdits + return this.computeMoreMinimalEdits(resource, edits, true); + }); + result.finally(() => this._logService.trace('FORMAT#computeHumanReadableDiff', resource.toString(true), sw.elapsed())); + return result; + + } else { + return Promise.resolve(undefined); + } + } + public canNavigateValueSet(resource: URI): boolean { return (canSyncModel(this._modelService, resource)); } @@ -528,9 +555,15 @@ export class EditorWorkerClient extends Disposable implements IEditorWorkerClien }); } - public computeMoreMinimalEdits(resource: URI, edits: languages.TextEdit[]): Promise { + public computeMoreMinimalEdits(resource: URI, edits: languages.TextEdit[], pretty: boolean): Promise { return this._withSyncedResources([resource]).then(proxy => { - return proxy.computeMoreMinimalEdits(resource.toString(), edits); + return proxy.computeMoreMinimalEdits(resource.toString(), edits, pretty); + }); + } + + public computeHumanReadableDiff(resource: URI, edits: languages.TextEdit[], options: ILinesDiffComputerOptions): Promise { + return this._withSyncedResources([resource]).then(proxy => { + return proxy.computeHumanReadableDiff(resource.toString(), edits, options); }); } @@ -540,6 +573,12 @@ export class EditorWorkerClient extends Disposable implements IEditorWorkerClien }); } + public computeDefaultDocumentColors(resource: URI): Promise { + return this._withSyncedResources([resource]).then(proxy => { + return proxy.computeDefaultDocumentColors(resource.toString()); + }); + } + public async textualSuggest(resources: URI[], leadingWord: string | undefined, wordDefRegExp: RegExp): Promise<{ words: string[]; duration: number } | null> { const proxy = await this._withSyncedResources(resources); const wordDef = wordDefRegExp.source; diff --git a/src/vs/editor/browser/stableEditorScroll.ts b/src/vs/editor/browser/stableEditorScroll.ts index 9693f272917..9f145b5ea64 100644 --- a/src/vs/editor/browser/stableEditorScroll.ts +++ b/src/vs/editor/browser/stableEditorScroll.ts @@ -9,27 +9,37 @@ import { Position } from 'vs/editor/common/core/position'; export class StableEditorScrollState { public static capture(editor: ICodeEditor): StableEditorScrollState { + if (editor.getScrollTop() === 0 || editor.hasPendingScrollAnimation()) { + // Never mess with the scroll top if the editor is at the top of the file or if there is a pending scroll animation + return new StableEditorScrollState(editor.getScrollTop(), editor.getContentHeight(), null, 0, null); + } + let visiblePosition: Position | null = null; let visiblePositionScrollDelta = 0; - if (editor.getScrollTop() !== 0) { - const visibleRanges = editor.getVisibleRanges(); - if (visibleRanges.length > 0) { - visiblePosition = visibleRanges[0].getStartPosition(); - const visiblePositionScrollTop = editor.getTopForPosition(visiblePosition.lineNumber, visiblePosition.column); - visiblePositionScrollDelta = editor.getScrollTop() - visiblePositionScrollTop; - } + const visibleRanges = editor.getVisibleRanges(); + if (visibleRanges.length > 0) { + visiblePosition = visibleRanges[0].getStartPosition(); + const visiblePositionScrollTop = editor.getTopForPosition(visiblePosition.lineNumber, visiblePosition.column); + visiblePositionScrollDelta = editor.getScrollTop() - visiblePositionScrollTop; } - return new StableEditorScrollState(visiblePosition, visiblePositionScrollDelta, editor.getPosition()); + return new StableEditorScrollState(editor.getScrollTop(), editor.getContentHeight(), visiblePosition, visiblePositionScrollDelta, editor.getPosition()); } constructor( + private readonly _initialScrollTop: number, + private readonly _initialContentHeight: number, private readonly _visiblePosition: Position | null, private readonly _visiblePositionScrollDelta: number, - private readonly _cursorPosition: Position | null + private readonly _cursorPosition: Position | null, ) { } public restore(editor: ICodeEditor): void { + if (this._initialContentHeight === editor.getContentHeight() && this._initialScrollTop === editor.getScrollTop()) { + // The editor's content height and scroll top haven't changed, so we don't need to do anything + return; + } + if (this._visiblePosition) { const visiblePositionScrollTop = editor.getTopForPosition(this._visiblePosition.lineNumber, this._visiblePosition.column); editor.setScrollTop(visiblePositionScrollTop + this._visiblePositionScrollDelta); @@ -37,6 +47,11 @@ export class StableEditorScrollState { } public restoreRelativeVerticalPositionOfCursor(editor: ICodeEditor): void { + if (this._initialContentHeight === editor.getContentHeight() && this._initialScrollTop === editor.getScrollTop()) { + // The editor's content height and scroll top haven't changed, so we don't need to do anything + return; + } + const currentCursorPosition = editor.getPosition(); if (!this._cursorPosition || !currentCursorPosition) { diff --git a/src/vs/editor/browser/view.ts b/src/vs/editor/browser/view.ts index 85c02d77290..82d1fb7a269 100644 --- a/src/vs/editor/browser/view.ts +++ b/src/vs/editor/browser/view.ts @@ -5,13 +5,14 @@ import * as dom from 'vs/base/browser/dom'; import { Selection } from 'vs/editor/common/core/selection'; +import { Range } from 'vs/editor/common/core/range'; import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; import { onUnexpectedError } from 'vs/base/common/errors'; import { IDisposable } from 'vs/base/common/lifecycle'; import { IPointerHandlerHelper } from 'vs/editor/browser/controller/mouseHandler'; import { PointerHandler } from 'vs/editor/browser/controller/pointerHandler'; import { IVisibleRangeProvider, TextAreaHandler } from 'vs/editor/browser/controller/textAreaHandler'; -import { IContentWidget, IContentWidgetPosition, IOverlayWidget, IOverlayWidgetPosition, IMouseTarget, IViewZoneChangeAccessor, IEditorAriaOptions } from 'vs/editor/browser/editorBrowser'; +import { IContentWidget, IContentWidgetPosition, IOverlayWidget, IOverlayWidgetPosition, IMouseTarget, IViewZoneChangeAccessor, IEditorAriaOptions, IGlyphMarginWidget, IGlyphMarginWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { ICommandDelegate, ViewController } from 'vs/editor/browser/view/viewController'; import { ViewUserInputEvents } from 'vs/editor/browser/view/viewUserInputEvents'; import { ContentViewOverlays, MarginViewOverlays } from 'vs/editor/browser/view/viewOverlays'; @@ -20,7 +21,6 @@ import { ViewContentWidgets } from 'vs/editor/browser/viewParts/contentWidgets/c import { CurrentLineHighlightOverlay, CurrentLineMarginHighlightOverlay } from 'vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight'; import { DecorationsOverlay } from 'vs/editor/browser/viewParts/decorations/decorations'; import { EditorScrollbar } from 'vs/editor/browser/viewParts/editorScrollbar/editorScrollbar'; -import { GlyphMarginOverlay } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin'; import { IndentGuidesOverlay } from 'vs/editor/browser/viewParts/indentGuides/indentGuides'; import { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers'; import { ViewLines } from 'vs/editor/browser/viewParts/lines/viewLines'; @@ -52,6 +52,8 @@ import { BlockDecorations } from 'vs/editor/browser/viewParts/blockDecorations/b import { inputLatency } from 'vs/base/browser/performance'; import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; import { WhitespaceOverlay } from 'vs/editor/browser/viewParts/whitespace/whitespace'; +import { GlyphMarginWidgets } from 'vs/editor/browser/viewParts/glyphMargin/glyphMargin'; +import { GlyphMarginLane } from 'vs/editor/common/model'; export interface IContentWidgetData { @@ -64,6 +66,11 @@ export interface IOverlayWidgetData { position: IOverlayWidgetPosition | null; } +export interface IGlyphMarginWidgetData { + widget: IGlyphMarginWidget; + position: IGlyphMarginWidgetPosition; +} + export class View extends ViewEventHandler { private readonly _scrollbar: EditorScrollbar; @@ -77,6 +84,7 @@ export class View extends ViewEventHandler { private readonly _viewZones: ViewZones; private readonly _contentWidgets: ViewContentWidgets; private readonly _overlayWidgets: ViewOverlayWidgets; + private readonly _glyphMarginWidgets: GlyphMarginWidgets; private readonly _viewCursors: ViewCursors; private readonly _viewParts: ViewPart[]; @@ -89,6 +97,7 @@ export class View extends ViewEventHandler { private readonly _overflowGuardContainer: FastDomNode; // Actual mutable state + private _shouldRecomputeGlyphMarginLanes: boolean = false; private _renderAnimationFrame: IDisposable | null; constructor( @@ -160,14 +169,18 @@ export class View extends ViewEventHandler { const marginViewOverlays = new MarginViewOverlays(this._context); this._viewParts.push(marginViewOverlays); marginViewOverlays.addDynamicOverlay(new CurrentLineMarginHighlightOverlay(this._context)); - marginViewOverlays.addDynamicOverlay(new GlyphMarginOverlay(this._context)); marginViewOverlays.addDynamicOverlay(new MarginViewLineDecorationsOverlay(this._context)); marginViewOverlays.addDynamicOverlay(new LinesDecorationsOverlay(this._context)); marginViewOverlays.addDynamicOverlay(new LineNumbersOverlay(this._context)); + // Glyph margin widgets + this._glyphMarginWidgets = new GlyphMarginWidgets(this._context); + this._viewParts.push(this._glyphMarginWidgets); + const margin = new Margin(this._context); margin.getDomNode().appendChild(this._viewZones.marginDomNode); margin.getDomNode().appendChild(marginViewOverlays.getDomNode()); + margin.getDomNode().appendChild(this._glyphMarginWidgets.domNode); this._viewParts.push(margin); // Content widgets @@ -199,7 +212,6 @@ export class View extends ViewEventHandler { this._linesContent.appendChild(contentViewOverlays.getDomNode()); this._linesContent.appendChild(rulers.domNode); - this._linesContent.appendChild(blockOutline.domNode); this._linesContent.appendChild(this._viewZones.domNode); this._linesContent.appendChild(this._viewLines.getDomNode()); this._linesContent.appendChild(this._contentWidgets.domNode); @@ -211,6 +223,7 @@ export class View extends ViewEventHandler { this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover); this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()); this._overflowGuardContainer.appendChild(minimap.getDomNode()); + this._overflowGuardContainer.appendChild(blockOutline.domNode); this.domNode.appendChild(this._overflowGuardContainer); if (overflowWidgetsDomNode) { @@ -226,10 +239,70 @@ export class View extends ViewEventHandler { } private _flushAccumulatedAndRenderNow(): void { + if (this._shouldRecomputeGlyphMarginLanes) { + this._shouldRecomputeGlyphMarginLanes = false; + this._context.configuration.setGlyphMarginDecorationLaneCount(this._computeGlyphMarginLaneCount()); + } inputLatency.onRenderStart(); this._renderNow(); } + private _computeGlyphMarginLaneCount(): number { + const model = this._context.viewModel.model; + type Glyph = { range: Range; lane: GlyphMarginLane }; + let glyphs: Glyph[] = []; + + // Add all margin decorations + glyphs = glyphs.concat(model.getAllMarginDecorations().map((decoration) => { + const lane = decoration.options.glyphMargin?.position ?? GlyphMarginLane.Left; + return { range: decoration.range, lane }; + })); + + // Add all glyph margin widgets + glyphs = glyphs.concat(this._glyphMarginWidgets.getWidgets().map((widget) => { + const range = model.validateRange(widget.preference.range); + return { range, lane: widget.preference.lane }; + })); + + // Sorted by their start position + glyphs.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range)); + + let leftDecRange: Range | null = null; + let rightDecRange: Range | null = null; + for (const decoration of glyphs) { + + if (decoration.lane === GlyphMarginLane.Left && (!leftDecRange || Range.compareRangesUsingEnds(leftDecRange, decoration.range) < 0)) { + // assign only if the range of `decoration` ends after, which means it has a higher chance to overlap with the other lane + leftDecRange = decoration.range; + } + + if (decoration.lane === GlyphMarginLane.Right && (!rightDecRange || Range.compareRangesUsingEnds(rightDecRange, decoration.range) < 0)) { + // assign only if the range of `decoration` ends after, which means it has a higher chance to overlap with the other lane + rightDecRange = decoration.range; + } + + if (leftDecRange && rightDecRange) { + + if (leftDecRange.endLineNumber < rightDecRange.startLineNumber) { + // there's no chance for `leftDecRange` to ever intersect something going further + leftDecRange = null; + continue; + } + + if (rightDecRange.endLineNumber < leftDecRange.startLineNumber) { + // there's no chance for `rightDecRange` to ever intersect something going further + rightDecRange = null; + continue; + } + + // leftDecRange and rightDecRange are intersecting or touching => we need two lanes + return 2; + } + } + + return 1; + } + private _createPointerHandlerHelper(): IPointerHandlerHelper { return { viewDomNode: this.domNode.domNode, @@ -317,6 +390,12 @@ export class View extends ViewEventHandler { this._selections = e.selections; return false; } + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + if (e.affectsGlyphMargin) { + this._shouldRecomputeGlyphMarginLanes = true; + } + return false; + } public override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean { this.domNode.setClassName(this._getEditorClassName()); return false; @@ -438,7 +517,7 @@ export class View extends ViewEventHandler { scrollTop: scrollPosition.scrollTop, scrollLeft: scrollPosition.scrollLeft }, ScrollType.Immediate); - this._context.viewModel.tokenizeViewport(); + this._context.viewModel.visibleLinesStabilized(); } public getOffsetForColumn(modelLineNumber: number, modelColumn: number): number { @@ -548,6 +627,27 @@ export class View extends ViewEventHandler { this._scheduleRender(); } + public addGlyphMarginWidget(widgetData: IGlyphMarginWidgetData): void { + this._glyphMarginWidgets.addWidget(widgetData.widget); + this._shouldRecomputeGlyphMarginLanes = true; + this._scheduleRender(); + } + + public layoutGlyphMarginWidget(widgetData: IGlyphMarginWidgetData): void { + const newPreference = widgetData.position; + const shouldRender = this._glyphMarginWidgets.setWidgetPosition(widgetData.widget, newPreference); + if (shouldRender) { + this._shouldRecomputeGlyphMarginLanes = true; + this._scheduleRender(); + } + } + + public removeGlyphMarginWidget(widgetData: IGlyphMarginWidgetData): void { + this._glyphMarginWidgets.removeWidget(widgetData.widget); + this._shouldRecomputeGlyphMarginLanes = true; + this._scheduleRender(); + } + // --- END CodeEditor helpers } diff --git a/src/vs/editor/browser/view/domLineBreaksComputer.ts b/src/vs/editor/browser/view/domLineBreaksComputer.ts index 8c1029e6b67..9aba078cf67 100644 --- a/src/vs/editor/browser/view/domLineBreaksComputer.ts +++ b/src/vs/editor/browser/view/domLineBreaksComputer.ts @@ -3,17 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { WrappingIndent } from 'vs/editor/common/config/editorOptions'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import { CharCode } from 'vs/base/common/charCode'; import * as strings from 'vs/base/common/strings'; import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { LineInjectedText } from 'vs/editor/common/textModelEvents'; +import { WrappingIndent } from 'vs/editor/common/config/editorOptions'; +import { FontInfo } from 'vs/editor/common/config/fontInfo'; +import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; import { InjectedTextOptions } from 'vs/editor/common/model'; import { ILineBreaksComputer, ILineBreaksComputerFactory, ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; +import { LineInjectedText } from 'vs/editor/common/textModelEvents'; -const ttPolicy = window.trustedTypes?.createPolicy('domLineBreaksComputer', { createHTML: value => value }); +const ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value }); export class DOMLineBreaksComputerFactory implements ILineBreaksComputerFactory { diff --git a/src/vs/editor/browser/view/renderingContext.ts b/src/vs/editor/browser/view/renderingContext.ts index 035cf588788..3396fb74b78 100644 --- a/src/vs/editor/browser/view/renderingContext.ts +++ b/src/vs/editor/browser/view/renderingContext.ts @@ -122,7 +122,11 @@ export class LineVisibleRanges { constructor( public readonly outsideRenderedLine: boolean, public readonly lineNumber: number, - public readonly ranges: HorizontalRange[] + public readonly ranges: HorizontalRange[], + /** + * Indicates if the requested range does not end in this line, but continues on the next line. + */ + public readonly continuesOnNextLine: boolean, ) { } } diff --git a/src/vs/editor/browser/view/viewLayer.ts b/src/vs/editor/browser/view/viewLayer.ts index c866fe5242e..c15239ec8b1 100644 --- a/src/vs/editor/browser/view/viewLayer.ts +++ b/src/vs/editor/browser/view/viewLayer.ts @@ -4,10 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; +import { BugIndicatingError } from 'vs/base/common/errors'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; import * as viewEvents from 'vs/editor/common/viewEvents'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; /** * Represents a visible line @@ -80,7 +82,7 @@ export class RenderedLinesCollection { public getLine(lineNumber: number): T { const lineIndex = lineNumber - this._rendLineNumberStart; if (lineIndex < 0 || lineIndex >= this._lines.length) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } return this._lines[lineIndex]; } @@ -370,7 +372,7 @@ interface IRendererContext { class ViewLayerRenderer { - private static _ttPolicy = window.trustedTypes?.createPolicy('editorViewLayer', { createHTML: value => value }); + private static _ttPolicy = createTrustedTypesPolicy('editorViewLayer', { createHTML: value => value }); readonly domNode: HTMLElement; readonly host: IVisibleLinesHost; diff --git a/src/vs/editor/browser/view/viewUserInputEvents.ts b/src/vs/editor/browser/view/viewUserInputEvents.ts index 5e7104b9969..3cd22d6315d 100644 --- a/src/vs/editor/browser/view/viewUserInputEvents.ts +++ b/src/vs/editor/browser/view/viewUserInputEvents.ts @@ -4,9 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IEditorMouseEvent, IMouseTarget, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; +import { IEditorMouseEvent, IMouseTarget, IMouseTargetViewZoneData, IPartialEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; import { ICoordinatesConverter } from 'vs/editor/common/viewModel'; import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; +import { Position } from 'vs/editor/common/core/position'; export interface EventCallback { (event: T): void; @@ -100,6 +101,19 @@ export class ViewUserInputEvents { if (result.range) { result.range = coordinatesConverter.convertViewRangeToModelRange(result.range); } + if (result.type === MouseTargetType.GUTTER_VIEW_ZONE || result.type === MouseTargetType.CONTENT_VIEW_ZONE) { + result.detail = this.convertViewToModelViewZoneData(result.detail, coordinatesConverter); + } return result; } + + private static convertViewToModelViewZoneData(data: IMouseTargetViewZoneData, coordinatesConverter: ICoordinatesConverter): IMouseTargetViewZoneData { + return { + viewZoneId: data.viewZoneId, + positionBefore: data.positionBefore ? coordinatesConverter.convertViewPositionToModelPosition(data.positionBefore) : data.positionBefore, + positionAfter: data.positionAfter ? coordinatesConverter.convertViewPositionToModelPosition(data.positionAfter) : data.positionAfter, + position: coordinatesConverter.convertViewPositionToModelPosition(data.position), + afterLineNumber: coordinatesConverter.convertViewPositionToModelPosition(new Position(data.afterLineNumber, 1)).lineNumber, + }; + } } diff --git a/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.css b/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.css index f2100bd4846..c3e839f7c78 100644 --- a/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.css +++ b/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.css @@ -6,6 +6,7 @@ .monaco-editor .blockDecorations-container { position: absolute; top: 0; + pointer-events: none; } .monaco-editor .blockDecorations-block { diff --git a/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts b/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts index 87057ba9ce6..49d18e74873 100644 --- a/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts +++ b/src/vs/editor/browser/viewParts/blockDecorations/blockDecorations.ts @@ -18,6 +18,7 @@ export class BlockDecorations extends ViewPart { private readonly blocks: FastDomNode[] = []; private contentWidth: number = -1; + private contentLeft: number = 0; constructor(context: ViewContext) { super(context); @@ -41,6 +42,12 @@ export class BlockDecorations extends ViewPart { didChange = true; } + const newContentLeft = layoutInfo.contentLeft; + if (this.contentLeft !== newContentLeft) { + this.contentLeft = newContentLeft; + didChange = true; + } + return didChange; } @@ -92,16 +99,18 @@ export class BlockDecorations extends ViewPart { bottom = ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true); } else { top = ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, true); - bottom = decoration.range.isEmpty() + bottom = decoration.range.isEmpty() && !decoration.options.blockDoesNotCollapse ? ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, false) : ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true); } + const [paddingTop, paddingRight, paddingBottom, paddingLeft] = decoration.options.blockPadding ?? [0, 0, 0, 0]; + block.setClassName('blockDecorations-block ' + decoration.options.blockClassName); - block.setLeft(ctx.scrollLeft); - block.setWidth(this.contentWidth); - block.setTop(top); - block.setHeight(bottom - top); + block.setLeft(this.contentLeft - paddingLeft); + block.setWidth(this.contentWidth + paddingLeft + paddingRight); + block.setTop(top - ctx.scrollTop - paddingTop); + block.setHeight(bottom - top + paddingTop + paddingBottom); count++; } diff --git a/src/vs/editor/browser/viewParts/decorations/decorations.ts b/src/vs/editor/browser/viewParts/decorations/decorations.ts index 15dcf0ed0dd..fe495466b1d 100644 --- a/src/vs/editor/browser/viewParts/decorations/decorations.ts +++ b/src/vs/editor/browser/viewParts/decorations/decorations.ts @@ -5,12 +5,12 @@ import 'vs/css!./decorations'; import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { Range } from 'vs/editor/common/core/range'; import { HorizontalRange, RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { Range } from 'vs/editor/common/core/range'; import * as viewEvents from 'vs/editor/common/viewEvents'; import { ViewModelDecoration } from 'vs/editor/common/viewModel'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; export class DecorationsOverlay extends DynamicViewOverlay { @@ -151,6 +151,7 @@ export class DecorationsOverlay extends DynamicViewOverlay { let prevClassName: string | null = null; let prevShowIfCollapsed: boolean = false; let prevRange: Range | null = null; + let prevShouldFillLineOnLineBreak: boolean = false; for (let i = 0, lenI = decorations.length; i < lenI; i++) { const d = decorations[i]; @@ -175,20 +176,21 @@ export class DecorationsOverlay extends DynamicViewOverlay { // flush previous decoration if (prevClassName !== null) { - this._renderNormalDecoration(ctx, prevRange!, prevClassName, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output); + this._renderNormalDecoration(ctx, prevRange!, prevClassName, prevShouldFillLineOnLineBreak, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output); } prevClassName = className; prevShowIfCollapsed = showIfCollapsed; prevRange = range; + prevShouldFillLineOnLineBreak = d.options.shouldFillLineOnLineBreak ?? false; } if (prevClassName !== null) { - this._renderNormalDecoration(ctx, prevRange!, prevClassName, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output); + this._renderNormalDecoration(ctx, prevRange!, prevClassName, prevShouldFillLineOnLineBreak, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output); } } - private _renderNormalDecoration(ctx: RenderingContext, range: Range, className: string, showIfCollapsed: boolean, lineHeight: string, visibleStartLineNumber: number, output: string[]): void { + private _renderNormalDecoration(ctx: RenderingContext, range: Range, className: string, shouldFillLineOnLineBreak: boolean, showIfCollapsed: boolean, lineHeight: string, visibleStartLineNumber: number, output: string[]): void { const linesVisibleRanges = ctx.linesVisibleRangesForRange(range, /*TODO@Alex*/className === 'findMatch'); if (!linesVisibleRanges) { return; @@ -213,15 +215,17 @@ export class DecorationsOverlay extends DynamicViewOverlay { } for (let k = 0, lenK = lineVisibleRanges.ranges.length; k < lenK; k++) { + const expandToLeft = shouldFillLineOnLineBreak && lineVisibleRanges.continuesOnNextLine && lenK === 1; const visibleRange = lineVisibleRanges.ranges[k]; const decorationOutput = ( '
' ); diff --git a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.css b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.css index 17f7d5defd5..7d1a4475960 100644 --- a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.css +++ b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.css @@ -12,9 +12,21 @@ Keeping name short for faster parsing. cgmr = core glyph margin rendering (div) */ -.monaco-editor .margin-view-overlays .cgmr { +.monaco-editor .glyph-margin-widgets .cgmr { position: absolute; display: flex; align-items: center; justify-content: center; } + +/* + Ensure spinning icons are pixel-perfectly centered and avoid wobble. + This is only applied to icons that spin to avoid unnecessary + GPU layers and blurry subpixel AA. +*/ +.monaco-editor .glyph-margin-widgets .cgmr.codicon-modifier-spin::before { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} diff --git a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts index 666bbed6bde..74e92ed7867 100644 --- a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts +++ b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts @@ -3,42 +3,82 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; +import { ArrayQueue } from 'vs/base/common/arrays'; import 'vs/css!./glyphMargin'; +import { IGlyphMarginWidget, IGlyphMarginWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { RenderingContext } from 'vs/editor/browser/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; -import * as viewEvents from 'vs/editor/common/viewEvents'; +import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/browser/view/renderingContext'; +import { ViewPart } from 'vs/editor/browser/view/viewPart'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { Range } from 'vs/editor/common/core/range'; +import * as viewEvents from 'vs/editor/common/viewEvents'; +import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; - +/** + * Represents a decoration that should be shown along the lines from `startLineNumber` to `endLineNumber`. + * This can end up producing multiple `LineDecorationToRender`. + */ export class DecorationToRender { _decorationToRenderBrand: void = undefined; public startLineNumber: number; public endLineNumber: number; public className: string; + public readonly zIndex: number; - constructor(startLineNumber: number, endLineNumber: number, className: string) { + constructor(startLineNumber: number, endLineNumber: number, className: string, zIndex: number | undefined) { this.startLineNumber = +startLineNumber; this.endLineNumber = +endLineNumber; this.className = String(className); + this.zIndex = zIndex ?? 0; + } +} + +/** + * A decoration that should be shown along a line. + */ +export class LineDecorationToRender { + constructor( + public readonly className: string, + public readonly zIndex: number, + ) { } +} + +/** + * Decorations to render on a visible line. + */ +export class VisibleLineDecorationsToRender { + + private readonly decorations: LineDecorationToRender[] = []; + + public add(decoration: LineDecorationToRender) { + this.decorations.push(decoration); + } + + public getDecorations(): LineDecorationToRender[] { + return this.decorations; } } export abstract class DedupOverlay extends DynamicViewOverlay { - protected _render(visibleStartLineNumber: number, visibleEndLineNumber: number, decorations: DecorationToRender[]): string[][] { + /** + * Returns an array with an element for each visible line number. + */ + protected _render(visibleStartLineNumber: number, visibleEndLineNumber: number, decorations: DecorationToRender[]): VisibleLineDecorationsToRender[] { - const output: string[][] = []; + const output: VisibleLineDecorationsToRender[] = []; for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) { const lineIndex = lineNumber - visibleStartLineNumber; - output[lineIndex] = []; + output[lineIndex] = new VisibleLineDecorationsToRender(); } if (decorations.length === 0) { return output; } + // Sort decorations by className, then by startLineNumber and then by endLineNumber decorations.sort((a, b) => { if (a.className === b.className) { if (a.startLineNumber === b.startLineNumber) { @@ -54,10 +94,12 @@ export abstract class DedupOverlay extends DynamicViewOverlay { for (let i = 0, len = decorations.length; i < len; i++) { const d = decorations[i]; const className = d.className; + const zIndex = d.zIndex; let startLineIndex = Math.max(d.startLineNumber, visibleStartLineNumber) - visibleStartLineNumber; const endLineIndex = Math.min(d.endLineNumber, visibleEndLineNumber) - visibleStartLineNumber; if (prevClassName === className) { + // Here we avoid rendering the same className multiple times on the same line startLineIndex = Math.max(prevEndLineIndex + 1, startLineIndex); prevEndLineIndex = Math.max(prevEndLineIndex, endLineIndex); } else { @@ -66,7 +108,7 @@ export abstract class DedupOverlay extends DynamicViewOverlay { } for (let i = startLineIndex; i <= prevEndLineIndex; i++) { - output[i].push(prevClassName); + output[i].add(new LineDecorationToRender(className, zIndex)); } } @@ -74,38 +116,54 @@ export abstract class DedupOverlay extends DynamicViewOverlay { } } -export class GlyphMarginOverlay extends DedupOverlay { +export class GlyphMarginWidgets extends ViewPart { + + public domNode: FastDomNode; - private readonly _context: ViewContext; private _lineHeight: number; private _glyphMargin: boolean; private _glyphMarginLeft: number; private _glyphMarginWidth: number; - private _renderResult: string[] | null; + private _glyphMarginDecorationLaneCount: number; + + private _managedDomNodes: FastDomNode[]; + private _decorationGlyphsToRender: DecorationBasedGlyph[]; + + private _widgets: { [key: string]: IWidgetData } = {}; constructor(context: ViewContext) { - super(); + super(context); this._context = context; const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); + this.domNode = createFastDomNode(document.createElement('div')); + this.domNode.setClassName('glyph-margin-widgets'); + this.domNode.setPosition('absolute'); + this.domNode.setTop(0); + this._lineHeight = options.get(EditorOption.lineHeight); this._glyphMargin = options.get(EditorOption.glyphMargin); this._glyphMarginLeft = layoutInfo.glyphMarginLeft; this._glyphMarginWidth = layoutInfo.glyphMarginWidth; - this._renderResult = null; - this._context.addEventHandler(this); + this._glyphMarginDecorationLaneCount = layoutInfo.glyphMarginDecorationLaneCount; + this._managedDomNodes = []; + this._decorationGlyphsToRender = []; } public override dispose(): void { - this._context.removeEventHandler(this); - this._renderResult = null; + this._managedDomNodes = []; + this._decorationGlyphsToRender = []; + this._widgets = {}; super.dispose(); } - // --- begin event handlers + public getWidgets(): IWidgetData[] { + return Object.values(this._widgets); + } + // --- begin event handlers public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); @@ -114,6 +172,7 @@ export class GlyphMarginOverlay extends DedupOverlay { this._glyphMargin = options.get(EditorOption.glyphMargin); this._glyphMarginLeft = layoutInfo.glyphMarginLeft; this._glyphMarginWidth = layoutInfo.glyphMarginWidth; + this._glyphMarginDecorationLaneCount = layoutInfo.glyphMarginDecorationLaneCount; return true; } public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { @@ -140,62 +199,302 @@ export class GlyphMarginOverlay extends DedupOverlay { // --- end event handlers - protected _getDecorations(ctx: RenderingContext): DecorationToRender[] { - const decorations = ctx.getDecorationsInViewport(); - const r: DecorationToRender[] = []; - let rLen = 0; - for (let i = 0, len = decorations.length; i < len; i++) { - const d = decorations[i]; - const glyphMarginClassName = d.options.glyphMarginClassName; - if (glyphMarginClassName) { - r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, glyphMarginClassName); - } - } - return r; + // --- begin widget management + + public addWidget(widget: IGlyphMarginWidget): void { + const domNode = createFastDomNode(widget.getDomNode()); + + this._widgets[widget.getId()] = { + widget: widget, + preference: widget.getPosition(), + domNode: domNode, + renderInfo: null + }; + + domNode.setPosition('absolute'); + domNode.setDisplay('none'); + domNode.setAttribute('widgetId', widget.getId()); + this.domNode.appendChild(domNode); + + this.setShouldRender(); } + public setWidgetPosition(widget: IGlyphMarginWidget, preference: IGlyphMarginWidgetPosition): boolean { + const myWidget = this._widgets[widget.getId()]; + if (myWidget.preference.lane === preference.lane + && myWidget.preference.zIndex === preference.zIndex + && Range.equalsRange(myWidget.preference.range, preference.range)) { + return false; + } + + myWidget.preference = preference; + this.setShouldRender(); + + return true; + } + + public removeWidget(widget: IGlyphMarginWidget): void { + const widgetId = widget.getId(); + if (this._widgets[widgetId]) { + const widgetData = this._widgets[widgetId]; + const domNode = widgetData.domNode.domNode; + delete this._widgets[widgetId]; + + domNode.parentNode?.removeChild(domNode); + this.setShouldRender(); + } + } + + // --- end widget management + + private _collectDecorationBasedGlyphRenderRequest(ctx: RenderingContext, requests: GlyphRenderRequest[]): void { + const visibleStartLineNumber = ctx.visibleRange.startLineNumber; + const visibleEndLineNumber = ctx.visibleRange.endLineNumber; + const decorations = ctx.getDecorationsInViewport(); + + for (const d of decorations) { + const glyphMarginClassName = d.options.glyphMarginClassName; + if (!glyphMarginClassName) { + continue; + } + + const startLineNumber = Math.max(d.range.startLineNumber, visibleStartLineNumber); + const endLineNumber = Math.min(d.range.endLineNumber, visibleEndLineNumber); + const lane = Math.min(d.options.glyphMargin?.position ?? 1, this._glyphMarginDecorationLaneCount); + const zIndex = d.options.zIndex ?? 0; + + for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) { + requests.push(new DecorationBasedGlyphRenderRequest(lineNumber, lane, zIndex, glyphMarginClassName)); + } + } + } + + private _collectWidgetBasedGlyphRenderRequest(ctx: RenderingContext, requests: GlyphRenderRequest[]): void { + const visibleStartLineNumber = ctx.visibleRange.startLineNumber; + const visibleEndLineNumber = ctx.visibleRange.endLineNumber; + + for (const widget of Object.values(this._widgets)) { + const range = widget.preference.range; + if (range.endLineNumber < visibleStartLineNumber || range.startLineNumber > visibleEndLineNumber) { + // The widget is not in the viewport + continue; + } + + // The widget is in the viewport, find a good line for it + const widgetLineNumber = Math.max(range.startLineNumber, visibleStartLineNumber); + const lane = Math.min(widget.preference.lane, this._glyphMarginDecorationLaneCount); + requests.push(new WidgetBasedGlyphRenderRequest(widgetLineNumber, lane, widget.preference.zIndex, widget)); + } + } + + private _collectSortedGlyphRenderRequests(ctx: RenderingContext): GlyphRenderRequest[] { + + const requests: GlyphRenderRequest[] = []; + + this._collectDecorationBasedGlyphRenderRequest(ctx, requests); + this._collectWidgetBasedGlyphRenderRequest(ctx, requests); + + // sort requests by lineNumber ASC, lane ASC, zIndex DESC, type DESC (widgets first), className ASC + // don't change this sort unless you understand `prepareRender` below. + requests.sort((a, b) => { + if (a.lineNumber === b.lineNumber) { + if (a.lane === b.lane) { + if (a.zIndex === b.zIndex) { + if (b.type === a.type) { + if (a.type === GlyphRenderRequestType.Decoration && b.type === GlyphRenderRequestType.Decoration) { + return (a.className < b.className ? -1 : 1); + } + return 0; + } + return b.type - a.type; + } + return b.zIndex - a.zIndex; + } + return a.lane - b.lane; + } + return a.lineNumber - b.lineNumber; + }); + + return requests; + } + + /** + * Will store render information in each widget's renderInfo and in `_decorationGlyphsToRender`. + */ public prepareRender(ctx: RenderingContext): void { if (!this._glyphMargin) { - this._renderResult = null; + this._decorationGlyphsToRender = []; return; } - const visibleStartLineNumber = ctx.visibleRange.startLineNumber; - const visibleEndLineNumber = ctx.visibleRange.endLineNumber; - const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx)); + for (const widget of Object.values(this._widgets)) { + widget.renderInfo = null; + } - const lineHeight = this._lineHeight.toString(); - const left = this._glyphMarginLeft.toString(); - const width = this._glyphMarginWidth.toString(); - const common = '" style="left:' + left + 'px;width:' + width + 'px' + ';height:' + lineHeight + 'px;">
'; + const requests = new ArrayQueue(this._collectSortedGlyphRenderRequests(ctx)); + const decorationGlyphsToRender: DecorationBasedGlyph[] = []; + while (requests.length > 0) { + const first = requests.peek(); + if (!first) { + // not possible + break; + } - const output: string[] = []; - for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) { - const lineIndex = lineNumber - visibleStartLineNumber; - const classNames = toRender[lineIndex]; + // Requests are sorted by lineNumber and lane, so we read all requests for this particular location + const requestsAtLocation = requests.takeWhile((el) => el.lineNumber === first.lineNumber && el.lane === first.lane); + if (!requestsAtLocation || requestsAtLocation.length === 0) { + // not possible + break; + } - if (classNames.length === 0) { - output[lineIndex] = ''; + const winner = requestsAtLocation[0]; + if (winner.type === GlyphRenderRequestType.Decoration) { + // combine all decorations with the same z-index + + const classNames: string[] = []; + // requests are sorted by zIndex, type, and className so we can dedup className by looking at the previous one + for (const request of requestsAtLocation) { + if (request.zIndex !== winner.zIndex || request.type !== winner.type) { + break; + } + if (classNames.length === 0 || classNames[classNames.length - 1] !== request.className) { + classNames.push(request.className); + } + } + + decorationGlyphsToRender.push(winner.accept(classNames.join(' '))); // TODO@joyceerhl Implement overflow for remaining decorations } else { - output[lineIndex] = ( - ''; + for (const decoration of decorations) { + lineOutput += '
'; } output[lineIndex] = lineOutput; } diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index ae38342aad6..031f8a8f612 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -1045,7 +1045,7 @@ export class Minimap extends ViewPart implements IMinimapModel { } else { visibleRange = new Range(startLineNumber, 1, endLineNumber, this._context.viewModel.getLineMaxColumn(endLineNumber)); } - const decorations = this._context.viewModel.getDecorationsInViewport(visibleRange, true); + const decorations = this._context.viewModel.getMinimapDecorationsInRange(visibleRange); if (this._samplingState) { const result: ViewModelDecoration[] = []; diff --git a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts index 60ce7277ff2..37914a70335 100644 --- a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts +++ b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts @@ -137,12 +137,7 @@ export class ViewZones extends ViewPart { // ---- end view event handlers private _getZoneOrdinal(zone: IViewZone): number { - - if (typeof zone.afterColumn !== 'undefined') { - return zone.afterColumn; - } - - return 10000; + return zone.ordinal ?? zone.afterColumn ?? 10000; } private _computeWhitespaceProps(zone: IViewZone): IComputedViewZoneProps { @@ -186,8 +181,8 @@ export class ViewZones extends ViewPart { }); } - const viewPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition, zone.afterColumnAffinity); - const isVisible = this._context.viewModel.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition); + const viewPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition, zone.afterColumnAffinity, true); + const isVisible = zone.showInHiddenAreas || this._context.viewModel.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition); return { isInHiddenArea: !isVisible, afterViewLineNumber: viewPosition.lineNumber, diff --git a/src/vs/editor/browser/widget/codeEditorContributions.ts b/src/vs/editor/browser/widget/codeEditorContributions.ts index 35bf94643b2..d9570b7ced9 100644 --- a/src/vs/editor/browser/widget/codeEditorContributions.ts +++ b/src/vs/editor/browser/widget/codeEditorContributions.ts @@ -10,6 +10,7 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorContributionInstantiation, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import './diffEditor.contribution'; export class CodeEditorContributions extends Disposable { diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index c04470db2d9..e78be4bd6b7 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -12,7 +12,7 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; import { Color } from 'vs/base/common/color'; import { onUnexpectedError } from 'vs/base/common/errors'; -import { Emitter, EmitterOptions, Event, EventDeliveryQueue } from 'vs/base/common/event'; +import { Emitter, EmitterOptions, Event, EventDeliveryQueue, createEventDeliveryQueue } from 'vs/base/common/event'; import { hash } from 'vs/base/common/hash'; import { Disposable, IDisposable, dispose, DisposableStore } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; @@ -21,7 +21,7 @@ import * as editorBrowser from 'vs/editor/browser/editorBrowser'; import { EditorExtensionsRegistry, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { ICommandDelegate } from 'vs/editor/browser/view/viewController'; -import { IContentWidgetData, IOverlayWidgetData, View } from 'vs/editor/browser/view'; +import { IContentWidgetData, IGlyphMarginWidgetData, IOverlayWidgetData, View } from 'vs/editor/browser/view'; import { ViewUserInputEvents } from 'vs/editor/browser/view/viewUserInputEvents'; import { ConfigurationChangedEvent, EditorLayoutInfo, IEditorOptions, EditorOption, IComputedEditorOptions, FindComputedEditorOptionValueById, filterValidationDecorations } from 'vs/editor/common/config/editorOptions'; import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; @@ -32,7 +32,7 @@ import { ISelection, Selection } from 'vs/editor/common/core/selection'; import { InternalEditorAction } from 'vs/editor/common/editorAction'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { EndOfLinePreference, IIdentifiedSingleEditOperation, IModelDecoration, IModelDecorationOptions, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel, ICursorStateComputer } from 'vs/editor/common/model'; +import { EndOfLinePreference, IIdentifiedSingleEditOperation, IModelDecoration, IModelDecorationOptions, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel, ICursorStateComputer, IAttachedView } from 'vs/editor/common/model'; import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; import { ClassName } from 'vs/editor/common/model/intervalTree'; import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; @@ -42,7 +42,7 @@ import { editorErrorForeground, editorHintForeground, editorInfoForeground, edit import { VerticalRevealType } from 'vs/editor/common/viewEvents'; import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { ContextKeyValue, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; @@ -85,23 +85,19 @@ export interface ICodeEditorWidgetOptions { } class ModelData { - public readonly model: ITextModel; - public readonly viewModel: ViewModel; - public readonly view: View; - public readonly hasRealView: boolean; - public readonly listenersToRemove: IDisposable[]; - - constructor(model: ITextModel, viewModel: ViewModel, view: View, hasRealView: boolean, listenersToRemove: IDisposable[]) { - this.model = model; - this.viewModel = viewModel; - this.view = view; - this.hasRealView = hasRealView; - this.listenersToRemove = listenersToRemove; + constructor( + public readonly model: ITextModel, + public readonly viewModel: ViewModel, + public readonly view: View, + public readonly hasRealView: boolean, + public readonly listenersToRemove: IDisposable[], + public readonly attachedView: IAttachedView, + ) { } public dispose(): void { dispose(this.listenersToRemove); - this.model.onBeforeDetached(); + this.model.onBeforeDetached(this.attachedView); if (this.hasRealView) { this.view.dispose(); } @@ -118,7 +114,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE //#region Eventing - private readonly _deliveryQueue = new EventDeliveryQueue(); + private readonly _deliveryQueue = createEventDeliveryQueue(); protected readonly _contributions: CodeEditorContributions = this._register(new CodeEditorContributions()); private readonly _onDidDispose: Emitter = this._register(new Emitter()); @@ -259,6 +255,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE private _contentWidgets: { [key: string]: IContentWidgetData }; private _overlayWidgets: { [key: string]: IOverlayWidgetData }; + private _glyphMarginWidgets: { [key: string]: IGlyphMarginWidgetData }; /** * map from "parent" decoration type to live decoration ids. @@ -327,6 +324,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._contentWidgets = {}; this._overlayWidgets = {}; + this._glyphMarginWidgets = {}; let contributions: IEditorContributionDescription[]; if (Array.isArray(codeEditorWidgetOptions.contributions)) { @@ -492,7 +490,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE return this._modelData.model; } - public setModel(_model: ITextModel | editorCommon.IDiffEditorModel | null = null): void { + public setModel(_model: ITextModel | editorCommon.IDiffEditorModel | editorCommon.IDiffEditorViewModel | null = null): void { const model = _model; if (this._modelData === null && model === null) { // Current model is the new model @@ -980,6 +978,12 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE } this._modelData.viewModel.viewLayout.setScrollPosition(position, scrollType); } + public hasPendingScrollAnimation(): boolean { + if (!this._modelData) { + return false; + } + return this._modelData.viewModel.viewLayout.hasPendingScrollAnimation(); + } public saveViewState(): editorCommon.ICodeEditorViewState | null { if (!this._modelData) { @@ -1083,7 +1087,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE const action = this.getAction(handlerId); if (action) { - Promise.resolve(action.run()).then(undefined, onUnexpectedError); + Promise.resolve(action.run(payload)).then(undefined, onUnexpectedError); return; } @@ -1508,6 +1512,45 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE } } + public addGlyphMarginWidget(widget: editorBrowser.IGlyphMarginWidget): void { + const widgetData: IGlyphMarginWidgetData = { + widget: widget, + position: widget.getPosition() + }; + + if (this._glyphMarginWidgets.hasOwnProperty(widget.getId())) { + console.warn('Overwriting a glyph margin widget with the same id.'); + } + + this._glyphMarginWidgets[widget.getId()] = widgetData; + + if (this._modelData && this._modelData.hasRealView) { + this._modelData.view.addGlyphMarginWidget(widgetData); + } + } + + public layoutGlyphMarginWidget(widget: editorBrowser.IGlyphMarginWidget): void { + const widgetId = widget.getId(); + if (this._glyphMarginWidgets.hasOwnProperty(widgetId)) { + const widgetData = this._glyphMarginWidgets[widgetId]; + widgetData.position = widget.getPosition(); + if (this._modelData && this._modelData.hasRealView) { + this._modelData.view.layoutGlyphMarginWidget(widgetData); + } + } + } + + public removeGlyphMarginWidget(widget: editorBrowser.IGlyphMarginWidget): void { + const widgetId = widget.getId(); + if (this._glyphMarginWidgets.hasOwnProperty(widgetId)) { + const widgetData = this._glyphMarginWidgets[widgetId]; + delete this._glyphMarginWidgets[widgetId]; + if (this._modelData && this._modelData.hasRealView) { + this._modelData.view.removeGlyphMarginWidget(widgetData); + } + } + } + public changeViewZones(callback: (accessor: editorBrowser.IViewZoneChangeAccessor) => void): void { if (!this._modelData || !this._modelData.hasRealView) { return; @@ -1591,7 +1634,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._configuration.setIsDominatedByLongLines(model.isDominatedByLongLines()); this._configuration.setModelLineCount(model.getLineCount()); - model.onBeforeAttached(); + const attachedView = model.onBeforeAttached(); const viewModel = new ViewModel( this._id, @@ -1601,7 +1644,8 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE MonospaceLineBreaksComputerFactory.create(this._configuration.options), (callback) => dom.scheduleAtNextAnimationFrame(callback), this.languageConfigurationService, - this._themeService + this._themeService, + attachedView, ); // Someone might destroy the model from under the editor, so prevent any exceptions by setting a null model @@ -1715,11 +1759,17 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE view.addOverlayWidget(this._overlayWidgets[widgetId]); } + keys = Object.keys(this._glyphMarginWidgets); + for (let i = 0, len = keys.length; i < len; i++) { + const widgetId = keys[i]; + view.addGlyphMarginWidget(this._glyphMarginWidgets[widgetId]); + } + view.render(false, true); view.domNode.domNode.setAttribute('data-uri', model.uri.toString()); } - this._modelData = new ModelData(model, viewModel, view, hasRealView, listenersToRemove); + this._modelData = new ModelData(model, viewModel, view, hasRealView, listenersToRemove, attachedView); } protected _createView(viewModel: ViewModel): [View, boolean] { @@ -1861,6 +1911,10 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE private removeDropIndicator(): void { this._dropIntoEditorDecorations.clear(); } + + public setContextValue(key: string, value: ContextKeyValue): void { + this._contextKeyService.createKey(key, value); + } } const enum BooleanEventValue { @@ -1977,7 +2031,7 @@ class EditorContextKeysManager extends Disposable { private _updateFromConfig(): void { const options = this._editor.getOptions(); - this._editorTabMovesFocus.set(options.get(EditorOption.tabFocusMode)); + this._editorTabMovesFocus.set(TabFocus.getTabFocusMode(TabFocusContext.Editor)); this._editorReadonly.set(options.get(EditorOption.readOnly)); this._inDiffEditor.set(options.get(EditorOption.inDiffEditor)); this._editorColumnSelection.set(options.get(EditorOption.columnSelection)); @@ -2239,7 +2293,7 @@ class EditorDecorationsCollection implements editorCommon.IEditorDecorationsColl this.set([]); } - public set(newDecorations: IModelDeltaDecoration[]): void { + public set(newDecorations: readonly IModelDeltaDecoration[]): string[] { try { this._isChangingDecorations = true; this._editor.changeDecorations((accessor) => { @@ -2248,6 +2302,7 @@ class EditorDecorationsCollection implements editorCommon.IEditorDecorationsColl } finally { this._isChangingDecorations = false; } + return this._decorationIds; } } diff --git a/src/vs/editor/browser/widget/diffEditor.contribution.ts b/src/vs/editor/browser/widget/diffEditor.contribution.ts new file mode 100644 index 00000000000..665d845f164 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditor.contribution.ts @@ -0,0 +1,74 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorAction, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions'; +import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; +import { localize } from 'vs/nls'; +import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; +import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; + +class DiffReviewNext extends EditorAction { + constructor() { + super({ + id: 'editor.action.diffReview.next', + label: localize('editor.action.diffReview.next', "Go to Next Difference"), + alias: 'Go to Next Difference', + precondition: ContextKeyExpr.has('isInDiffEditor'), + kbOpts: { + kbExpr: null, + primary: KeyCode.F7, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const diffEditor = findFocusedDiffEditor(accessor); + diffEditor?.diffReviewNext(); + } +} + +class DiffReviewPrev extends EditorAction { + constructor() { + super({ + id: 'editor.action.diffReview.prev', + label: localize('editor.action.diffReview.prev', "Go to Previous Difference"), + alias: 'Go to Previous Difference', + precondition: ContextKeyExpr.has('isInDiffEditor'), + kbOpts: { + kbExpr: null, + primary: KeyMod.Shift | KeyCode.F7, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const diffEditor = findFocusedDiffEditor(accessor); + diffEditor?.diffReviewPrev(); + } +} + +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; + } + } + return null; +} + +registerEditorAction(DiffReviewNext); +registerEditorAction(DiffReviewPrev); diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 49830dc5284..e21c1e9f3be 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -6,6 +6,7 @@ import * as dom from 'vs/base/browser/dom'; import { createFastDomNode, FastDomNode } from 'vs/base/browser/fastDomNode'; import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vs/base/browser/ui/mouseCursor/mouseCursor'; import { IBoundarySashes, ISashEvent, IVerticalSashLayoutProvider, Orientation, Sash, SashState } from 'vs/base/browser/ui/sash/sash'; import * as assert from 'vs/base/common/assert'; @@ -14,7 +15,9 @@ import { Codicon } from 'vs/base/common/codicons'; import { Color } from 'vs/base/common/color'; import { onUnexpectedError } from 'vs/base/common/errors'; import { Emitter, Event } from 'vs/base/common/event'; +import { MarkdownString } from 'vs/base/common/htmlContent'; import { Disposable } from 'vs/base/common/lifecycle'; +import { ThemeIcon } from 'vs/base/common/themables'; import { Constants } from 'vs/base/common/uint'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/diffEditor'; @@ -26,10 +29,11 @@ import { EditorExtensionsRegistry, IDiffEditorContributionDescription } from 'vs import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditorWidget'; +import { DiffNavigator } from 'vs/editor/browser/widget/diffNavigator'; import { DiffReview } from 'vs/editor/browser/widget/diffReview'; import { IDiffLinesChange, InlineDiffMargin } from 'vs/editor/browser/widget/inlineDiffMargin'; import { WorkerBasedDocumentDiffProvider } from 'vs/editor/browser/widget/workerBasedDocumentDiffProvider'; -import { boolean as validateBooleanOption, clampedInt, EditorFontLigatures, EditorLayoutInfo, EditorOption, EditorOptions, IDiffEditorOptions, stringSet as validateStringSetOption, ValidDiffEditorBaseOptions } from 'vs/editor/common/config/editorOptions'; +import { clampedFloat, clampedInt, EditorFontLigatures, EditorLayoutInfo, EditorOption, EditorOptions, IDiffEditorOptions, boolean as validateBooleanOption, stringSet as validateStringSetOption, ValidDiffEditorBaseOptions } from 'vs/editor/common/config/editorOptions'; import { FontInfo } from 'vs/editor/common/config/fontInfo'; import { IDimension } from 'vs/editor/common/core/dimension'; import { IPosition, Position } from 'vs/editor/common/core/position'; @@ -38,6 +42,7 @@ import { ISelection, Selection } from 'vs/editor/common/core/selection'; import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; import { IChange, ICharChange, IDiffComputationResult, ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; import * as editorCommon from 'vs/editor/common/editorCommon'; +import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; import { IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model'; import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; import { ILineBreaksComputer } from 'vs/editor/common/modelLineProjectionData'; @@ -48,7 +53,7 @@ import { IEditorWhitespace, InlineDecoration, InlineDecorationType, IViewModel, import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager'; import * as nls from 'vs/nls'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; @@ -57,7 +62,6 @@ import { IEditorProgressService, IProgressRunner } from 'vs/platform/progress/co import { defaultInsertColor, defaultRemoveColor, diffDiagonalFill, diffInserted, diffOverviewRulerInserted, diffOverviewRulerRemoved, diffRemoved } from 'vs/platform/theme/common/colorRegistry'; import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; import { getThemeTypeSelector, IColorTheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { ThemeIcon } from 'vs/base/common/themables'; export interface IDiffCodeEditorWidgetOptions { originalEditor?: ICodeEditorWidgetOptions; @@ -139,6 +143,7 @@ class VisualEditorState { for (let i = 0, length = newDecorations.zones.length; i < length; i++) { const viewZone = newDecorations.zones[i]; viewZone.suppressMouseDown = true; + viewZone.showInHiddenAreas = true; const zoneId = viewChangeAccessor.addZone(viewZone); this._zones.push(zoneId); this._zonesMap[String(zoneId)] = true; @@ -170,7 +175,7 @@ let DIFF_EDITOR_ID = 0; const diffInsertIcon = registerIcon('diff-insert', Codicon.add, nls.localize('diffInsertIcon', 'Line decoration for inserts in the diff editor.')); const diffRemoveIcon = registerIcon('diff-remove', Codicon.remove, nls.localize('diffRemoveIcon', 'Line decoration for removals in the diff editor.')); -const ttPolicy = window.trustedTypes?.createPolicy('diffEditorWidget', { createHTML: value => value }); +export const diffEditorWidgetTtPolicy = createTrustedTypesPolicy('diffEditorWidget', { createHTML: value => value }); const ariaNavigationTip = nls.localize('diff-aria-navigation-tip', ' use Shift + F7 to navigate changes'); @@ -238,6 +243,10 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE private readonly _reviewPane: DiffReview; + private isEmbeddedDiffEditorKey: IContextKey; + + private _diffNavigator: DiffNavigator | undefined; + constructor( domElement: HTMLElement, options: Readonly, @@ -273,6 +282,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._options = validateDiffEditorOptions(options, { enableSplitViewResizing: true, + splitViewDefaultRatio: 0.5, renderSideBySide: true, renderMarginRevertIcon: true, maxComputationTime: 5000, @@ -283,15 +293,16 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE diffCodeLens: false, renderOverviewRuler: true, diffWordWrap: 'inherit', - diffAlgorithm: 'smart', + diffAlgorithm: 'advanced', + accessibilityVerbose: false, + experimental: { + collapseUnchangedRegions: false, + }, + isInEmbeddedEditor: false, }); - if (typeof options.isInEmbeddedEditor !== 'undefined') { - this._contextKeyService.createKey('isInEmbeddedDiffEditor', options.isInEmbeddedEditor); - } else { - this._contextKeyService.createKey('isInEmbeddedDiffEditor', false); - } - + this.isEmbeddedDiffEditorKey = EditorContextKeys.isEmbeddedDiffEditor.bindTo(this._contextKeyService); + this.isEmbeddedDiffEditorKey.set(typeof options.isInEmbeddedEditor !== 'undefined' ? options.isInEmbeddedEditor : false); this._updateDecorationsRunner = this._register(new RunOnceScheduler(() => this._updateDecorations(), 0)); this._containerDomElement = document.createElement('div'); @@ -364,7 +375,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._containerDomElement.appendChild(this._reviewPane.actionBarContainer.domNode); if (this._options.renderSideBySide) { - this._setStrategy(new DiffEditorWidgetSideBySide(this._createDataSource(), this._options.enableSplitViewResizing)); + this._setStrategy(new DiffEditorWidgetSideBySide(this._createDataSource(), this._options.enableSplitViewResizing, this._options.splitViewDefaultRatio)); } else { this._setStrategy(new DiffEditorWidgetInline(this._createDataSource(), this._options.enableSplitViewResizing)); } @@ -774,6 +785,8 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE const changed = changedDiffEditorOptions(this._options, newOptions); this._options = newOptions; + this.isEmbeddedDiffEditorKey.set(typeof _newOptions.isInEmbeddedEditor !== 'undefined' ? _newOptions.isInEmbeddedEditor : false); + const beginUpdateDecorations = (changed.ignoreTrimWhitespace || changed.renderIndicators || changed.renderMarginRevertIcon); const beginUpdateDecorationsSoon = (this._isVisible && (changed.maxComputationTime || changed.maxFileSize)); this._documentDiffProvider.setOptions(newOptions); @@ -788,12 +801,12 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._originalEditor.updateOptions(this._adjustOptionsForLeftHandSide(_newOptions)); // enableSplitViewResizing - this._strategy.setEnableSplitViewResizing(this._options.enableSplitViewResizing); + this._strategy.setEnableSplitViewResizing(this._options.enableSplitViewResizing, this._options.splitViewDefaultRatio); // renderSideBySide if (changed.renderSideBySide) { if (this._options.renderSideBySide) { - this._setStrategy(new DiffEditorWidgetSideBySide(this._createDataSource(), this._options.enableSplitViewResizing)); + this._setStrategy(new DiffEditorWidgetSideBySide(this._createDataSource(), this._options.enableSplitViewResizing, this._options.splitViewDefaultRatio)); } else { this._setStrategy(new DiffEditorWidgetInline(this._createDataSource(), this._options.enableSplitViewResizing)); } @@ -818,7 +831,20 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE }; } - public setModel(model: editorCommon.IDiffEditorModel | null): void { + public createViewModel(model: editorCommon.IDiffEditorModel): editorCommon.IDiffEditorViewModel { + return { + model, + async waitForDiff() { + // noop + }, + }; + } + + public setModel(model: editorCommon.IDiffEditorModel | editorCommon.IDiffEditorViewModel | null): void { + if (model && 'model' in model) { + model = model.model; + } + // Guard us against partial null model if (model && (!model.original || !model.modified)) { throw new Error(!model.original ? 'DiffEditorWidget.setModel: Original model is null' : 'DiffEditorWidget.setModel: Modified model is null'); @@ -856,12 +882,20 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._layoutOverviewViewport(); this._onDidChangeModel.fire(); + + // Diff navigator + this._diffNavigator = this._register(this._instantiationService.createInstance(DiffNavigator, this, { + alwaysRevealFirst: false, + findResultLoop: this.getModifiedEditor().getOption(EditorOption.find).loop + })); } public getContainerDomNode(): HTMLElement { return this._domElement; } + // #region editorBrowser.IDiffEditor: Delegating to modified Editor + public getVisibleColumnFromPosition(position: IPosition): number { return this._modifiedEditor.getVisibleColumnFromPosition(position); } @@ -974,12 +1008,30 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE return this._modifiedEditor.getSupportedActions(); } + public focus(): void { + this._modifiedEditor.focus(); + } + + public trigger(source: string | null | undefined, handlerId: string, payload: any): void { + this._modifiedEditor.trigger(source, handlerId, payload); + } + + public createDecorationsCollection(decorations?: IModelDeltaDecoration[]): editorCommon.IEditorDecorationsCollection { + return this._modifiedEditor.createDecorationsCollection(decorations); + } + + public changeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => any): any { + return this._modifiedEditor.changeDecorations(callback); + } + + // #endregion + public saveViewState(): editorCommon.IDiffEditorViewState { const originalViewState = this._originalEditor.saveViewState(); const modifiedViewState = this._modifiedEditor.saveViewState(); return { original: originalViewState, - modified: modifiedViewState + modified: modifiedViewState, }; } @@ -995,9 +1047,6 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._elementSizeObserver.observe(dimension); } - public focus(): void { - this._modifiedEditor.focus(); - } public hasTextFocus(): boolean { return this._originalEditor.hasTextFocus() || this._modifiedEditor.hasTextFocus(); @@ -1019,18 +1068,6 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._cleanViewZonesAndDecorations(); } - public trigger(source: string | null | undefined, handlerId: string, payload: any): void { - this._modifiedEditor.trigger(source, handlerId, payload); - } - - public createDecorationsCollection(decorations?: IModelDeltaDecoration[]): editorCommon.IEditorDecorationsCollection { - return this._modifiedEditor.createDecorationsCollection(decorations); - } - - public changeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => any): any { - return this._modifiedEditor.changeDecorations(callback); - } - //------------ end IDiffEditor methods @@ -1145,6 +1182,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._documentDiffProvider.computeDiff(currentOriginalModel, currentModifiedModel, { ignoreTrimWhitespace: this._options.ignoreTrimWhitespace, maxComputationTimeMs: this._options.maxComputationTime, + computeMoves: false, }).then(result => { if (currentToken === this._diffComputationToken && currentOriginalModel === this._originalEditor.getModel() @@ -1154,6 +1192,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._diffComputationResult = { identical: result.identical, quitEarly: result.quitEarly, + changes2: result.changes, changes: result.changes.map(m => { // TODO don't do this translation, but use the diff result directly let originalStartLineNumber: number; @@ -1265,13 +1304,14 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE // never wrap hidden editor result.wordWrapOverride1 = 'off'; result.wordWrapOverride2 = 'off'; + result.stickyScroll = { enabled: false }; } else { result.wordWrapOverride1 = this._options.diffWordWrap; } if (options.originalAriaLabel) { result.ariaLabel = options.originalAriaLabel; } - result.ariaLabel += ariaNavigationTip; + this._updateAriaLabel(result); result.readOnly = !this._options.originalEditable; result.dropIntoEditor = { enabled: !result.readOnly }; result.extraEditorClassName = 'original-in-monaco-diff-editor'; @@ -1284,12 +1324,22 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE }; } + private _updateAriaLabel(options: IEditorConstructionOptions): void { + let ariaLabel = options.ariaLabel ?? ''; + if (this._options.accessibilityVerbose) { + ariaLabel += ariaNavigationTip; + } else if (ariaLabel) { + ariaLabel = ariaLabel.replaceAll(ariaNavigationTip, ''); + } + options.ariaLabel = ariaLabel; + } + private _adjustOptionsForRightHandSide(options: Readonly): IEditorConstructionOptions { const result = this._adjustOptionsForSubEditor(options); if (options.modifiedAriaLabel) { result.ariaLabel = options.modifiedAriaLabel; } - result.ariaLabel += ariaNavigationTip; + this._updateAriaLabel(result); result.wordWrapOverride1 = this._options.diffWordWrap; result.revealHorizontalRightPadding = EditorOptions.revealHorizontalRightPadding.defaultValue + DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH; result.scrollbar!.verticalHasArrows = false; @@ -1426,95 +1476,19 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._doLayout(); } - private _getLineChangeAtOrBeforeLineNumber(lineNumber: number, startLineNumberExtractor: (lineChange: ILineChange) => number): ILineChange | null { - const lineChanges = (this._diffComputationResult ? this._diffComputationResult.changes : []); - if (lineChanges.length === 0 || lineNumber < startLineNumberExtractor(lineChanges[0])) { - // There are no changes or `lineNumber` is before the first change - return null; + public goToDiff(target: 'previous' | 'next'): void { + if (target === 'next') { + this._diffNavigator?.next(); + } else { + this._diffNavigator?.previous(); } - - let min = 0; - let max = lineChanges.length - 1; - while (min < max) { - const mid = Math.floor((min + max) / 2); - const midStart = startLineNumberExtractor(lineChanges[mid]); - const midEnd = (mid + 1 <= max ? startLineNumberExtractor(lineChanges[mid + 1]) : Constants.MAX_SAFE_SMALL_INTEGER); - - if (lineNumber < midStart) { - max = mid - 1; - } else if (lineNumber >= midEnd) { - min = mid + 1; - } else { - // HIT! - min = mid; - max = mid; - } - } - return lineChanges[min]; } - private _getEquivalentLineForOriginalLineNumber(lineNumber: number): number { - const lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, (lineChange) => lineChange.originalStartLineNumber); - - if (!lineChange) { - return lineNumber; + public revealFirstDiff(): void { + // This is a hack, but it works. + if (this._diffNavigator) { + this._diffNavigator.revealFirst = true; } - - const originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0); - const modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0); - const lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0); - const lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0); - - - const delta = lineNumber - originalEquivalentLineNumber; - - if (delta <= lineChangeOriginalLength) { - return modifiedEquivalentLineNumber + Math.min(delta, lineChangeModifiedLength); - } - - return modifiedEquivalentLineNumber + lineChangeModifiedLength - lineChangeOriginalLength + delta; - } - - private _getEquivalentLineForModifiedLineNumber(lineNumber: number): number { - const lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, (lineChange) => lineChange.modifiedStartLineNumber); - - if (!lineChange) { - return lineNumber; - } - - const originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0); - const modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0); - const lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0); - const lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0); - - - const delta = lineNumber - modifiedEquivalentLineNumber; - - if (delta <= lineChangeModifiedLength) { - return originalEquivalentLineNumber + Math.min(delta, lineChangeOriginalLength); - } - - return originalEquivalentLineNumber + lineChangeOriginalLength - lineChangeModifiedLength + delta; - } - - public getDiffLineInformationForOriginal(lineNumber: number): editorBrowser.IDiffLineInformation | null { - if (!this._diffComputationResult) { - // Cannot answer that which I don't know - return null; - } - return { - equivalentLineNumber: this._getEquivalentLineForOriginalLineNumber(lineNumber) - }; - } - - public getDiffLineInformationForModified(lineNumber: number): editorBrowser.IDiffLineInformation | null { - if (!this._diffComputationResult) { - // Cannot answer that which I don't know - return null; - } - return { - equivalentLineNumber: this._getEquivalentLineForModifiedLineNumber(lineNumber) - }; } } @@ -1583,7 +1557,7 @@ abstract class DiffEditorWidgetStyle extends Disposable { protected abstract _getOriginalEditorDecorations(zones: IEditorsZones, lineChanges: ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean): IEditorDiffDecorations; protected abstract _getModifiedEditorDecorations(zones: IEditorsZones, lineChanges: ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, renderMarginRevertIcon: boolean): IEditorDiffDecorations; - public abstract setEnableSplitViewResizing(enableSplitViewResizing: boolean): void; + public abstract setEnableSplitViewResizing(enableSplitViewResizing: boolean, defaultRatio: number): void; public abstract layout(): number; setBoundarySashes(_sashes: IBoundarySashes): void { @@ -1908,7 +1882,9 @@ const DECORATIONS = { arrowRevertChange: ModelDecorationOptions.register({ description: 'diff-editor-arrow-revert-change', + glyphMarginHoverMessage: new MarkdownString(undefined, { isTrusted: true, supportThemeIcons: true }).appendMarkdown(nls.localize('revertChangeHoverMessage', 'Click to revert change')), glyphMarginClassName: 'arrow-revert-change ' + ThemeIcon.asClassName(Codicon.arrowRight), + zIndex: 10001, }), charDelete: ModelDecorationOptions.register({ @@ -1972,14 +1948,16 @@ class DiffEditorWidgetSideBySide extends DiffEditorWidgetStyle implements IVerti private _disableSash: boolean; private readonly _sash: Sash; + private _defaultRatio: number; private _sashRatio: number | null; private _sashPosition: number | null; private _startSashPosition: number | null; - constructor(dataSource: IDataSource, enableSplitViewResizing: boolean) { + constructor(dataSource: IDataSource, enableSplitViewResizing: boolean, defaultSashRatio: number) { super(dataSource); this._disableSash = (enableSplitViewResizing === false); + this._defaultRatio = defaultSashRatio; this._sashRatio = null; this._sashPosition = null; this._startSashPosition = null; @@ -1995,7 +1973,8 @@ class DiffEditorWidgetSideBySide extends DiffEditorWidgetStyle implements IVerti this._sash.onDidReset(() => this._onSashReset()); } - public setEnableSplitViewResizing(enableSplitViewResizing: boolean): void { + public setEnableSplitViewResizing(enableSplitViewResizing: boolean, defaultRatio: number): void { + this._defaultRatio = defaultRatio; const newDisableSash = (enableSplitViewResizing === false); if (this._disableSash !== newDisableSash) { this._disableSash = newDisableSash; @@ -2003,12 +1982,12 @@ class DiffEditorWidgetSideBySide extends DiffEditorWidgetStyle implements IVerti } } - public layout(sashRatio: number | null = this._sashRatio): number { + public layout(sashRatio: number | null = this._sashRatio || this._defaultRatio): number { const w = this._dataSource.getWidth(); const contentWidth = w - (this._dataSource.getOptions().renderOverviewRuler ? DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH : 0); - let sashPosition = Math.floor((sashRatio || 0.5) * contentWidth); - const midPoint = Math.floor(0.5 * contentWidth); + let sashPosition = Math.floor((sashRatio || this._defaultRatio) * contentWidth); + const midPoint = Math.floor(this._defaultRatio * contentWidth); sashPosition = this._disableSash ? midPoint : sashPosition || midPoint; @@ -2051,7 +2030,7 @@ class DiffEditorWidgetSideBySide extends DiffEditorWidgetStyle implements IVerti } private _onSashReset(): void { - this._sashRatio = 0.5; + this._sashRatio = this._defaultRatio; this._dataSource.relayoutEditors(); this._sash.layout(); } @@ -2610,7 +2589,7 @@ class InlineViewZonesComputer extends ViewZonesComputer { maxCharsPerLine += scrollBeyondLastColumn; const html = sb.build(); - const trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html; + const trustedhtml = diffEditorWidgetTtPolicy ? diffEditorWidgetTtPolicy.createHTML(html) : html; domNode.innerHTML = trustedhtml as string; viewZone.minWidthInPx = (maxCharsPerLine * typicalHalfwidthCharacterWidth); @@ -2747,6 +2726,7 @@ function getViewRange(model: ITextModel, viewModel: IViewModel, startLineNumber: function validateDiffEditorOptions(options: Readonly, defaults: ValidDiffEditorBaseOptions): ValidDiffEditorBaseOptions { return { enableSplitViewResizing: validateBooleanOption(options.enableSplitViewResizing, defaults.enableSplitViewResizing), + splitViewDefaultRatio: clampedFloat(options.splitViewDefaultRatio, 0.5, 0.1, 0.9), renderSideBySide: validateBooleanOption(options.renderSideBySide, defaults.renderSideBySide), renderMarginRevertIcon: validateBooleanOption(options.renderMarginRevertIcon, defaults.renderMarginRevertIcon), maxComputationTime: clampedInt(options.maxComputationTime, defaults.maxComputationTime, 0, Constants.MAX_SAFE_SMALL_INTEGER), @@ -2757,7 +2737,12 @@ function validateDiffEditorOptions(options: Readonly, defaul diffCodeLens: validateBooleanOption(options.diffCodeLens, defaults.diffCodeLens), renderOverviewRuler: validateBooleanOption(options.renderOverviewRuler, defaults.renderOverviewRuler), diffWordWrap: validateDiffWordWrap(options.diffWordWrap, defaults.diffWordWrap), - diffAlgorithm: validateStringSetOption(options.diffAlgorithm, defaults.diffAlgorithm, ['smart', 'experimental']), + diffAlgorithm: validateStringSetOption(options.diffAlgorithm, defaults.diffAlgorithm, ['legacy', 'advanced'], { 'smart': 'legacy', 'experimental': 'advanced' }), + accessibilityVerbose: validateBooleanOption(options.accessibilityVerbose, defaults.accessibilityVerbose), + experimental: { + collapseUnchangedRegions: false, + }, + isInEmbeddedEditor: validateBooleanOption(options.isInEmbeddedEditor, defaults.isInEmbeddedEditor), }; } @@ -2775,6 +2760,7 @@ function changedDiffEditorOptions(a: ValidDiffEditorBaseOptions, b: ValidDiffEdi renderOverviewRuler: (a.renderOverviewRuler !== b.renderOverviewRuler), diffWordWrap: (a.diffWordWrap !== b.diffWordWrap), diffAlgorithm: (a.diffAlgorithm !== b.diffAlgorithm), + accessibilityVerbose: (a.accessibilityVerbose !== b.accessibilityVerbose), }; } diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/colors.ts b/src/vs/editor/browser/widget/diffEditorWidget2/colors.ts new file mode 100644 index 00000000000..8c78445d74b --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/colors.ts @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { registerColor } from 'vs/platform/theme/common/colorRegistry'; + +export const diffMoveBorder = registerColor( + 'diffEditor.move.border', + { dark: '#8b8b8b9c', light: '#8b8b8b9c', hcDark: '#8b8b8b9c', hcLight: '#8b8b8b9c', }, + localize('diffEditor.move.border', 'The border color for text that got moved in the diff editor.') +); diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/decorations.ts b/src/vs/editor/browser/widget/diffEditorWidget2/decorations.ts new file mode 100644 index 00000000000..bc56c23694d --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/decorations.ts @@ -0,0 +1,86 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Codicon } from 'vs/base/common/codicons'; +import { MarkdownString } from 'vs/base/common/htmlContent'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; +import { localize } from 'vs/nls'; +import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; + +export const diffInsertIcon = registerIcon('diff-insert', Codicon.add, localize('diffInsertIcon', 'Line decoration for inserts in the diff editor.')); +export const diffRemoveIcon = registerIcon('diff-remove', Codicon.remove, localize('diffRemoveIcon', 'Line decoration for removals in the diff editor.')); + +export const diffLineAddDecorationBackgroundWithIndicator = ModelDecorationOptions.register({ + className: 'line-insert', + description: 'line-insert', + isWholeLine: true, + linesDecorationsClassName: 'insert-sign ' + ThemeIcon.asClassName(diffInsertIcon), + marginClassName: 'gutter-insert', +}); + +export const diffLineDeleteDecorationBackgroundWithIndicator = ModelDecorationOptions.register({ + className: 'line-delete', + description: 'line-delete', + isWholeLine: true, + linesDecorationsClassName: 'delete-sign ' + ThemeIcon.asClassName(diffRemoveIcon), + marginClassName: 'gutter-delete', +}); + +export const diffLineAddDecorationBackground = ModelDecorationOptions.register({ + className: 'line-insert', + description: 'line-insert', + isWholeLine: true, + marginClassName: 'gutter-insert', +}); + +export const diffLineDeleteDecorationBackground = ModelDecorationOptions.register({ + className: 'line-delete', + description: 'line-delete', + isWholeLine: true, + marginClassName: 'gutter-delete', +}); + +export const diffAddDecoration = ModelDecorationOptions.register({ + className: 'char-insert', + description: 'char-insert', + shouldFillLineOnLineBreak: true, +}); + +export const diffWholeLineAddDecoration = ModelDecorationOptions.register({ + className: 'char-insert', + description: 'char-insert', + isWholeLine: true, +}); + +export const diffAddDecorationEmpty = ModelDecorationOptions.register({ + className: 'char-insert diff-range-empty', + description: 'char-insert diff-range-empty', +}); + +export const diffDeleteDecoration = ModelDecorationOptions.register({ + className: 'char-delete', + description: 'char-delete', + shouldFillLineOnLineBreak: true, +}); + +export const diffWholeLineDeleteDecoration = ModelDecorationOptions.register({ + className: 'char-delete', + description: 'char-delete', + isWholeLine: true, +}); + +export const diffDeleteDecorationEmpty = ModelDecorationOptions.register({ + className: 'char-delete diff-range-empty', + description: 'char-delete diff-range-empty', +}); + + +export const arrowRevertChange = ModelDecorationOptions.register({ + description: 'diff-editor-arrow-revert-change', + glyphMarginHoverMessage: new MarkdownString(undefined, { isTrusted: true, supportThemeIcons: true }).appendMarkdown(localize('revertChangeHoverMessage', 'Click to revert change')), + glyphMarginClassName: 'arrow-revert-change ' + ThemeIcon.asClassName(Codicon.arrowRight), + zIndex: 10001, +}); diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/delegatingEditorImpl.ts b/src/vs/editor/browser/widget/diffEditorWidget2/delegatingEditorImpl.ts new file mode 100644 index 00000000000..ff3b66c5e09 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/delegatingEditorImpl.ts @@ -0,0 +1,170 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Emitter } from 'vs/base/common/event'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; +import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { IDimension } from 'vs/editor/common/core/dimension'; +import { IPosition, Position } from 'vs/editor/common/core/position'; +import { IRange, Range } from 'vs/editor/common/core/range'; +import { ISelection, Selection } from 'vs/editor/common/core/selection'; +import { IDiffEditorViewModel, IEditor, IEditorAction, IEditorDecorationsCollection, IEditorModel, IEditorViewState, ScrollType } from 'vs/editor/common/editorCommon'; +import { IModelDecorationsChangeAccessor, IModelDeltaDecoration } from 'vs/editor/common/model'; + +export abstract class DelegatingEditor extends Disposable implements IEditor { + private static idCounter = 0; + private readonly _id = ++DelegatingEditor.idCounter; + + private readonly _onDidDispose = this._register(new Emitter()); + public readonly onDidDispose = this._onDidDispose.event; + + protected abstract get _targetEditor(): CodeEditorWidget; + + getId(): string { return this.getEditorType() + ':v2:' + this._id; } + + abstract getEditorType(): string; + abstract updateOptions(newOptions: IEditorOptions): void; + abstract onVisible(): void; + abstract onHide(): void; + abstract layout(dimension?: IDimension | undefined): void; + abstract hasTextFocus(): boolean; + abstract saveViewState(): IEditorViewState | null; + abstract restoreViewState(state: IEditorViewState | null): void; + abstract getModel(): IEditorModel | null; + abstract setModel(model: IEditorModel | null | IDiffEditorViewModel): void; + + // #region editorBrowser.IDiffEditor: Delegating to modified Editor + + public getVisibleColumnFromPosition(position: IPosition): number { + return this._targetEditor.getVisibleColumnFromPosition(position); + } + + public getStatusbarColumn(position: IPosition): number { + return this._targetEditor.getStatusbarColumn(position); + } + + public getPosition(): Position | null { + return this._targetEditor.getPosition(); + } + + public setPosition(position: IPosition, source: string = 'api'): void { + this._targetEditor.setPosition(position, source); + } + + public revealLine(lineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLine(lineNumber, scrollType); + } + + public revealLineInCenter(lineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLineInCenter(lineNumber, scrollType); + } + + public revealLineInCenterIfOutsideViewport(lineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLineInCenterIfOutsideViewport(lineNumber, scrollType); + } + + public revealLineNearTop(lineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLineNearTop(lineNumber, scrollType); + } + + public revealPosition(position: IPosition, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealPosition(position, scrollType); + } + + public revealPositionInCenter(position: IPosition, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealPositionInCenter(position, scrollType); + } + + public revealPositionInCenterIfOutsideViewport(position: IPosition, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealPositionInCenterIfOutsideViewport(position, scrollType); + } + + public revealPositionNearTop(position: IPosition, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealPositionNearTop(position, scrollType); + } + + public getSelection(): Selection | null { + return this._targetEditor.getSelection(); + } + + public getSelections(): Selection[] | null { + return this._targetEditor.getSelections(); + } + + public setSelection(range: IRange, source?: string): void; + public setSelection(editorRange: Range, source?: string): void; + public setSelection(selection: ISelection, source?: string): void; + public setSelection(editorSelection: Selection, source?: string): void; + public setSelection(something: any, source: string = 'api'): void { + this._targetEditor.setSelection(something, source); + } + + public setSelections(ranges: readonly ISelection[], source: string = 'api'): void { + this._targetEditor.setSelections(ranges, source); + } + + public revealLines(startLineNumber: number, endLineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLines(startLineNumber, endLineNumber, scrollType); + } + + public revealLinesInCenter(startLineNumber: number, endLineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLinesInCenter(startLineNumber, endLineNumber, scrollType); + } + + public revealLinesInCenterIfOutsideViewport(startLineNumber: number, endLineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType); + } + + public revealLinesNearTop(startLineNumber: number, endLineNumber: number, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealLinesNearTop(startLineNumber, endLineNumber, scrollType); + } + + public revealRange(range: IRange, scrollType: ScrollType = ScrollType.Smooth, revealVerticalInCenter: boolean = false, revealHorizontal: boolean = true): void { + this._targetEditor.revealRange(range, scrollType, revealVerticalInCenter, revealHorizontal); + } + + public revealRangeInCenter(range: IRange, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealRangeInCenter(range, scrollType); + } + + public revealRangeInCenterIfOutsideViewport(range: IRange, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealRangeInCenterIfOutsideViewport(range, scrollType); + } + + public revealRangeNearTop(range: IRange, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealRangeNearTop(range, scrollType); + } + + public revealRangeNearTopIfOutsideViewport(range: IRange, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealRangeNearTopIfOutsideViewport(range, scrollType); + } + + public revealRangeAtTop(range: IRange, scrollType: ScrollType = ScrollType.Smooth): void { + this._targetEditor.revealRangeAtTop(range, scrollType); + } + + public getSupportedActions(): IEditorAction[] { + return this._targetEditor.getSupportedActions(); + } + + public focus(): void { + this._targetEditor.focus(); + } + + public trigger(source: string | null | undefined, handlerId: string, payload: any): void { + this._targetEditor.trigger(source, handlerId, payload); + } + + public createDecorationsCollection(decorations?: IModelDeltaDecoration[]): IEditorDecorationsCollection { + return this._targetEditor.createDecorationsCollection(decorations); + } + + public changeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => any): any { + return this._targetEditor.changeDecorations(callback); + } + + // #endregion +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorDecorations.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorDecorations.ts new file mode 100644 index 00000000000..8a821c0b135 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorDecorations.ts @@ -0,0 +1,125 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, derived } from 'vs/base/common/observable'; +import { isDefined } from 'vs/base/common/types'; +import { arrowRevertChange, diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecoration, diffDeleteDecorationEmpty, diffLineAddDecorationBackground, diffLineAddDecorationBackgroundWithIndicator, diffLineDeleteDecorationBackground, diffLineDeleteDecorationBackgroundWithIndicator, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from 'vs/editor/browser/widget/diffEditorWidget2/decorations'; +import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors'; +import { DiffEditorOptions } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorOptions'; +import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel'; +import { MovedBlocksLinesPart } from 'vs/editor/browser/widget/diffEditorWidget2/movedBlocksLines'; +import { applyObservableDecorations } from 'vs/editor/browser/widget/diffEditorWidget2/utils'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { Position } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { IModelDeltaDecoration } from 'vs/editor/common/model'; + +export class DiffEditorDecorations extends Disposable { + constructor( + private readonly _editors: DiffEditorEditors, + private readonly _diffModel: IObservable, + private readonly _options: DiffEditorOptions, + ) { + super(); + + this._register(applyObservableDecorations(this._editors.original, this._decorations.map(d => d?.originalDecorations || []))); + this._register(applyObservableDecorations(this._editors.modified, this._decorations.map(d => d?.modifiedDecorations || []))); + } + + private readonly _decorations = derived('decorations', (reader) => { + const diff = this._diffModel.read(reader)?.diff.read(reader); + if (!diff) { + return null; + } + + const currentMove = this._diffModel.read(reader)!.syncedMovedTexts.read(reader); + const renderIndicators = this._options.renderIndicators.read(reader); + const showEmptyDecorations = this._options.showEmptyDecorations.read(reader); + + const originalDecorations: IModelDeltaDecoration[] = []; + const modifiedDecorations: IModelDeltaDecoration[] = []; + for (const m of diff.mappings) { + const fullRangeOriginal = LineRange.subtract(m.lineRangeMapping.originalRange, currentMove?.lineRangeMapping.originalRange) + .map(i => i.toInclusiveRange()).filter(isDefined); + for (const range of fullRangeOriginal) { + originalDecorations.push({ range, options: renderIndicators ? diffLineDeleteDecorationBackgroundWithIndicator : diffLineDeleteDecorationBackground }); + } + + const fullRangeModified = LineRange.subtract(m.lineRangeMapping.modifiedRange, currentMove?.lineRangeMapping.modifiedRange) + .map(i => i.toInclusiveRange()).filter(isDefined); + for (const range of fullRangeModified) { + modifiedDecorations.push({ range, options: renderIndicators ? diffLineAddDecorationBackgroundWithIndicator : diffLineAddDecorationBackground }); + } + + if (m.lineRangeMapping.modifiedRange.isEmpty || m.lineRangeMapping.originalRange.isEmpty) { + for (const range of fullRangeOriginal) { + originalDecorations.push({ range, options: diffWholeLineDeleteDecoration }); + } + for (const range of fullRangeModified) { + modifiedDecorations.push({ range, options: diffWholeLineAddDecoration }); + } + } else { + for (const i of m.lineRangeMapping.innerChanges || []) { + if (currentMove + && (currentMove.lineRangeMapping.originalRange.intersect(new LineRange(i.originalRange.startLineNumber, i.originalRange.endLineNumber)) + || currentMove.lineRangeMapping.modifiedRange.intersect(new LineRange(i.modifiedRange.startLineNumber, i.modifiedRange.endLineNumber)))) { + continue; + } + + // Don't show empty markers outside the line range + if (m.lineRangeMapping.originalRange.contains(i.originalRange.startLineNumber)) { + originalDecorations.push({ range: i.originalRange, options: (i.originalRange.isEmpty() && showEmptyDecorations) ? diffDeleteDecorationEmpty : diffDeleteDecoration }); + } + if (m.lineRangeMapping.modifiedRange.contains(i.modifiedRange.startLineNumber)) { + modifiedDecorations.push({ range: i.modifiedRange, options: (i.modifiedRange.isEmpty() && showEmptyDecorations) ? diffAddDecorationEmpty : diffAddDecoration }); + } + } + } + + if (!m.lineRangeMapping.modifiedRange.isEmpty && this._options.shouldRenderRevertArrows.read(reader) && !currentMove) { + modifiedDecorations.push({ range: Range.fromPositions(new Position(m.lineRangeMapping.modifiedRange.startLineNumber, 1)), options: arrowRevertChange }); + } + } + + if (currentMove) { + for (const m of currentMove.changes) { + const fullRangeOriginal = m.originalRange.toInclusiveRange(); + if (fullRangeOriginal) { + originalDecorations.push({ range: fullRangeOriginal, options: renderIndicators ? diffLineDeleteDecorationBackgroundWithIndicator : diffLineDeleteDecorationBackground }); + } + const fullRangeModified = m.modifiedRange.toInclusiveRange(); + if (fullRangeModified) { + modifiedDecorations.push({ range: fullRangeModified, options: renderIndicators ? diffLineAddDecorationBackgroundWithIndicator : diffLineAddDecorationBackground }); + } + + for (const i of m.innerChanges || []) { + originalDecorations.push({ range: i.originalRange, options: diffDeleteDecoration }); + modifiedDecorations.push({ range: i.modifiedRange, options: diffAddDecoration }); + } + } + } + + for (const m of diff.movedTexts) { + originalDecorations.push({ + range: m.lineRangeMapping.originalRange.toInclusiveRange()!, options: { + description: 'moved', + blockClassName: 'movedOriginal', + blockPadding: [MovedBlocksLinesPart.movedCodeBlockPadding, 0, MovedBlocksLinesPart.movedCodeBlockPadding, MovedBlocksLinesPart.movedCodeBlockPadding], + } + }); + + modifiedDecorations.push({ + range: m.lineRangeMapping.modifiedRange.toInclusiveRange()!, options: { + description: 'moved', + blockClassName: 'movedModified', + blockPadding: [4, 0, 4, 4], + } + }); + } + + return { originalDecorations, modifiedDecorations }; + }); +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors.ts new file mode 100644 index 00000000000..e900b4e55ab --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors.ts @@ -0,0 +1,160 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { Emitter } from 'vs/base/common/event'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { autorunHandleChanges } from 'vs/base/common/observableImpl/autorun'; +import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; +import { IDiffEditorConstructionOptions } from 'vs/editor/browser/editorBrowser'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditorWidget'; +import { IDiffCodeEditorWidgetOptions } from 'vs/editor/browser/widget/diffEditorWidget'; +import { OverviewRulerPart } from 'vs/editor/browser/widget/diffEditorWidget2/overviewRulerPart'; +import { EditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { IContentSizeChangedEvent } from 'vs/editor/common/editorCommon'; +import { localize } from 'vs/nls'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { DiffEditorOptions } from './diffEditorOptions'; +import { IObservable, IReader } from 'vs/base/common/observable'; + +export class DiffEditorEditors extends Disposable { + public readonly modified: CodeEditorWidget; + public readonly original: CodeEditorWidget; + + private readonly _onDidContentSizeChange = this._register(new Emitter()); + public get onDidContentSizeChange() { return this._onDidContentSizeChange.event; } + + constructor( + private readonly originalEditorElement: HTMLElement, + private readonly modifiedEditorElement: HTMLElement, + private readonly _options: DiffEditorOptions, + codeEditorWidgetOptions: IDiffCodeEditorWidgetOptions, + private readonly _createInnerEditor: (instantiationService: IInstantiationService, container: HTMLElement, options: Readonly, editorWidgetOptions: ICodeEditorWidgetOptions) => CodeEditorWidget, + private readonly _modifiedReadOnlyOverride: IObservable, + @IInstantiationService private readonly _instantiationService: IInstantiationService + ) { + super(); + + this.original = this._createLeftHandSideEditor(_options.editorOptions.get(), codeEditorWidgetOptions.originalEditor || {}); + this.modified = this._createRightHandSideEditor(_options.editorOptions.get(), codeEditorWidgetOptions.modifiedEditor || {}); + + this._register(autorunHandleChanges('update editor options', { + createEmptyChangeSummary: () => ({} as IDiffEditorConstructionOptions), + handleChange: (ctx, changeSummary) => { + if (ctx.didChange(_options.editorOptions)) { + Object.assign(changeSummary, ctx.change.changedOptions); + } + return true; + } + }, (reader, changeSummary) => { + _options.editorOptions.read(reader); + + this.modified.updateOptions(this._adjustOptionsForRightHandSide(reader, changeSummary)); + this.original.updateOptions(this._adjustOptionsForLeftHandSide(reader, changeSummary)); + })); + } + + private _createLeftHandSideEditor(options: Readonly, codeEditorWidgetOptions: ICodeEditorWidgetOptions): CodeEditorWidget { + const leftHandSideOptions = this._adjustOptionsForLeftHandSide(undefined, options); + const editor = this._constructInnerEditor(this._instantiationService, this.originalEditorElement, leftHandSideOptions, codeEditorWidgetOptions); + editor.setContextValue('isInDiffLeftEditor', true); + return editor; + } + + private _createRightHandSideEditor(options: Readonly, codeEditorWidgetOptions: ICodeEditorWidgetOptions): CodeEditorWidget { + const rightHandSideOptions = this._adjustOptionsForRightHandSide(undefined, options); + const editor = this._constructInnerEditor(this._instantiationService, this.modifiedEditorElement, rightHandSideOptions, codeEditorWidgetOptions); + editor.setContextValue('isInDiffRightEditor', true); + return editor; + } + + private _constructInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: Readonly, editorWidgetOptions: ICodeEditorWidgetOptions): CodeEditorWidget { + const editor = this._createInnerEditor(instantiationService, container, options, editorWidgetOptions); + + this._register(editor.onDidContentSizeChange(e => { + const width = this.original.getContentWidth() + this.modified.getContentWidth() + OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH; + const height = Math.max(this.modified.getContentHeight(), this.original.getContentHeight()); + + this._onDidContentSizeChange.fire({ + contentHeight: height, + contentWidth: width, + contentHeightChanged: e.contentHeightChanged, + contentWidthChanged: e.contentWidthChanged + }); + })); + return editor; + } + + private _adjustOptionsForLeftHandSide(_reader: IReader | undefined, changedOptions: Readonly): IEditorConstructionOptions { + const result = this._adjustOptionsForSubEditor(changedOptions); + if (!this._options.renderSideBySide.get()) { + // never wrap hidden editor + result.wordWrapOverride1 = 'off'; + result.wordWrapOverride2 = 'off'; + result.stickyScroll = { enabled: false }; + } else { + result.wordWrapOverride1 = this._options.diffWordWrap.get(); + } + if (changedOptions.originalAriaLabel) { + result.ariaLabel = changedOptions.originalAriaLabel; + } + result.ariaLabel = this._updateAriaLabel(result.ariaLabel); + result.readOnly = !this._options.originalEditable.get(); + result.dropIntoEditor = { enabled: !result.readOnly }; + result.extraEditorClassName = 'original-in-monaco-diff-editor'; + return result; + } + + private _adjustOptionsForRightHandSide(reader: IReader | undefined, changedOptions: Readonly): IEditorConstructionOptions { + const result = this._adjustOptionsForSubEditor(changedOptions); + if (changedOptions.modifiedAriaLabel) { + result.ariaLabel = changedOptions.modifiedAriaLabel; + } + result.ariaLabel = this._updateAriaLabel(result.ariaLabel); + result.wordWrapOverride1 = this._options.diffWordWrap.get(); + result.revealHorizontalRightPadding = EditorOptions.revealHorizontalRightPadding.defaultValue + OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH; + result.scrollbar!.verticalHasArrows = false; + result.extraEditorClassName = 'modified-in-monaco-diff-editor'; + result.readOnly = this._modifiedReadOnlyOverride.read(reader) || this._options.editorOptions.get().readOnly; + return result; + } + + private _adjustOptionsForSubEditor(options: Readonly): IEditorConstructionOptions { + const clonedOptions = { + ...options, + dimension: { + height: 0, + width: 0 + }, + }; + clonedOptions.inDiffEditor = true; + clonedOptions.automaticLayout = false; + // Clone scrollbar options before changing them + clonedOptions.scrollbar = { ...(clonedOptions.scrollbar || {}) }; + clonedOptions.scrollbar.vertical = 'visible'; + clonedOptions.folding = false; + clonedOptions.codeLens = this._options.diffCodeLens.get(); + clonedOptions.fixedOverflowWidgets = true; + // clonedOptions.lineDecorationsWidth = '2ch'; + // Clone minimap options before changing them + clonedOptions.minimap = { ...(clonedOptions.minimap || {}) }; + clonedOptions.minimap.enabled = false; + + if (this._options.collapseUnchangedRegions.get()) { + clonedOptions.stickyScroll = { enabled: false }; + } else { + clonedOptions.stickyScroll = this._options.editorOptions.get().stickyScroll; + } + return clonedOptions; + } + + private _updateAriaLabel(ariaLabel: string | undefined): string | undefined { + const ariaNavigationTip = localize('diff-aria-navigation-tip', ' use Shift + F7 to navigate changes'); + if (this._options.accessibilityVerbose.get()) { + return ariaLabel + ariaNavigationTip; + } else if (ariaLabel) { + return ariaLabel.replaceAll(ariaNavigationTip, ''); + } + return undefined; + } +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorOptions.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorOptions.ts new file mode 100644 index 00000000000..fcec4e86f09 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorOptions.ts @@ -0,0 +1,103 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IObservable, ISettableObservable, derived, observableValue } from 'vs/base/common/observable'; +import { Constants } from 'vs/base/common/uint'; +import { IDiffEditorConstructionOptions } from 'vs/editor/browser/editorBrowser'; +import { IDiffEditorBaseOptions, IDiffEditorOptions, IEditorOptions, ValidDiffEditorBaseOptions, clampedFloat, clampedInt, boolean as validateBooleanOption, stringSet as validateStringSetOption } from 'vs/editor/common/config/editorOptions'; + +export class DiffEditorOptions { + + private readonly _options: ISettableObservable, { changedOptions: IDiffEditorOptions }>; + + public get editorOptions(): IObservable { return this._options; } + + constructor(options: Readonly) { + const optionsCopy = { ...options, ...validateDiffEditorOptions(options, diffEditorDefaultOptions) }; + this._options = observableValue('options', optionsCopy); + } + + public readonly renderOverviewRuler = derived('renderOverviewRuler', reader => this._options.read(reader).renderOverviewRuler); + public readonly renderSideBySide = derived('renderSideBySide', reader => this._options.read(reader).renderSideBySide); + public readonly readOnly = derived('readOnly', reader => this._options.read(reader).readOnly); + + public readonly shouldRenderRevertArrows = derived('shouldRenderRevertArrows', (reader) => { + if (!this._options.read(reader).renderMarginRevertIcon) { return false; } + if (!this.renderSideBySide.read(reader)) { return false; } + if (this.readOnly.read(reader)) { return false; } + return true; + }); + public readonly renderIndicators = derived('renderIndicators', reader => this._options.read(reader).renderIndicators); + public readonly enableSplitViewResizing = derived('enableSplitViewResizing', reader => this._options.read(reader).enableSplitViewResizing); + public readonly collapseUnchangedRegions = derived('hideUnchangedRegions', reader => this._options.read(reader).experimental.collapseUnchangedRegions!); + public readonly splitViewDefaultRatio = derived('splitViewDefaultRatio', reader => this._options.read(reader).splitViewDefaultRatio); + public readonly ignoreTrimWhitespace = derived('ignoreTrimWhitespace', reader => this._options.read(reader).ignoreTrimWhitespace); + public readonly maxComputationTimeMs = derived('maxComputationTime', reader => this._options.read(reader).maxComputationTime); + public readonly showMoves = derived('showMoves', reader => { + const o = this._options.read(reader); + return o.experimental.showMoves! && o.renderSideBySide; + }); + public readonly isInEmbeddedEditor = derived('isInEmbeddedEditor', reader => this._options.read(reader).isInEmbeddedEditor); + public readonly diffWordWrap = derived('diffWordWrap', reader => this._options.read(reader).diffWordWrap); + public readonly originalEditable = derived('originalEditable', reader => this._options.read(reader).originalEditable); + public readonly diffCodeLens = derived('diffCodeLens', reader => this._options.read(reader).diffCodeLens); + public readonly accessibilityVerbose = derived('accessibilityVerbose', reader => this._options.read(reader).accessibilityVerbose); + public readonly diffAlgorithm = derived('diffAlgorithm', reader => this._options.read(reader).diffAlgorithm); + public readonly showEmptyDecorations = derived('showEmptyDecorations', reader => this._options.read(reader).experimental.showEmptyDecorations!); + + public updateOptions(changedOptions: IDiffEditorOptions): void { + const newDiffEditorOptions = validateDiffEditorOptions(changedOptions, this._options.get()); + const newOptions = { ...this._options.get(), ...changedOptions, ...newDiffEditorOptions }; + this._options.set(newOptions, undefined, { changedOptions: changedOptions }); + } +} + +const diffEditorDefaultOptions: ValidDiffEditorBaseOptions = { + enableSplitViewResizing: true, + splitViewDefaultRatio: 0.5, + renderSideBySide: true, + renderMarginRevertIcon: true, + maxComputationTime: 5000, + maxFileSize: 50, + ignoreTrimWhitespace: true, + renderIndicators: true, + originalEditable: false, + diffCodeLens: false, + renderOverviewRuler: true, + diffWordWrap: 'inherit', + diffAlgorithm: 'advanced', + accessibilityVerbose: false, + experimental: { + collapseUnchangedRegions: false, + showMoves: false, + showEmptyDecorations: true, + }, + isInEmbeddedEditor: false, +}; + +function validateDiffEditorOptions(options: Readonly, defaults: ValidDiffEditorBaseOptions): ValidDiffEditorBaseOptions { + return { + enableSplitViewResizing: validateBooleanOption(options.enableSplitViewResizing, defaults.enableSplitViewResizing), + splitViewDefaultRatio: clampedFloat(options.splitViewDefaultRatio, 0.5, 0.1, 0.9), + renderSideBySide: validateBooleanOption(options.renderSideBySide, defaults.renderSideBySide), + renderMarginRevertIcon: validateBooleanOption(options.renderMarginRevertIcon, defaults.renderMarginRevertIcon), + maxComputationTime: clampedInt(options.maxComputationTime, defaults.maxComputationTime, 0, Constants.MAX_SAFE_SMALL_INTEGER), + maxFileSize: clampedInt(options.maxFileSize, defaults.maxFileSize, 0, Constants.MAX_SAFE_SMALL_INTEGER), + ignoreTrimWhitespace: validateBooleanOption(options.ignoreTrimWhitespace, defaults.ignoreTrimWhitespace), + renderIndicators: validateBooleanOption(options.renderIndicators, defaults.renderIndicators), + originalEditable: validateBooleanOption(options.originalEditable, defaults.originalEditable), + diffCodeLens: validateBooleanOption(options.diffCodeLens, defaults.diffCodeLens), + renderOverviewRuler: validateBooleanOption(options.renderOverviewRuler, defaults.renderOverviewRuler), + diffWordWrap: validateStringSetOption<'off' | 'on' | 'inherit'>(options.diffWordWrap, defaults.diffWordWrap, ['off', 'on', 'inherit']), + diffAlgorithm: validateStringSetOption(options.diffAlgorithm, defaults.diffAlgorithm, ['legacy', 'advanced'], { 'smart': 'legacy', 'experimental': 'advanced' }), + accessibilityVerbose: validateBooleanOption(options.accessibilityVerbose, defaults.accessibilityVerbose), + experimental: { + collapseUnchangedRegions: validateBooleanOption(options.experimental?.collapseUnchangedRegions, defaults.experimental.collapseUnchangedRegions!), + showMoves: validateBooleanOption(options.experimental?.showMoves, defaults.experimental.showMoves!), + showEmptyDecorations: validateBooleanOption(options.experimental?.showEmptyDecorations, defaults.experimental.showEmptyDecorations!), + }, + isInEmbeddedEditor: validateBooleanOption(options.isInEmbeddedEditor, defaults.isInEmbeddedEditor), + }; +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorSash.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorSash.ts new file mode 100644 index 00000000000..953a41f5a0c --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorSash.ts @@ -0,0 +1,74 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IBoundarySashes, ISashEvent, Orientation, Sash, SashState } from 'vs/base/browser/ui/sash/sash'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, IReader, autorun, derived, observableValue } from 'vs/base/common/observable'; +import { DiffEditorOptions } from './diffEditorOptions'; + +export class DiffEditorSash extends Disposable { + private readonly _sashRatio = observableValue('sashRatio', undefined); + + public readonly sashLeft = derived('sashLeft', reader => { + const ratio = this._sashRatio.read(reader) ?? this._options.splitViewDefaultRatio.read(reader); + return this._computeSashLeft(ratio, reader); + }); + + private readonly _sash = this._register(new Sash(this._domNode, { + getVerticalSashTop: (_sash: Sash): number => 0, + getVerticalSashLeft: (_sash: Sash): number => this.sashLeft.get(), + getVerticalSashHeight: (_sash: Sash): number => this._dimensions.height.get(), + }, { orientation: Orientation.VERTICAL })); + + private _startSashPosition: number | undefined = undefined; + + constructor( + private readonly _options: DiffEditorOptions, + private readonly _domNode: HTMLElement, + private readonly _dimensions: { height: IObservable; width: IObservable }, + ) { + super(); + + this._register(this._sash.onDidStart(() => { + this._startSashPosition = this.sashLeft.get(); + })); + this._register(this._sash.onDidChange((e: ISashEvent) => { + const contentWidth = this._dimensions.width.get(); + const sashPosition = this._computeSashLeft((this._startSashPosition! + (e.currentX - e.startX)) / contentWidth, undefined); + this._sashRatio.set(sashPosition / contentWidth, undefined); + })); + this._register(this._sash.onDidEnd(() => this._sash.layout())); + this._register(this._sash.onDidReset(() => this._sashRatio.set(undefined, undefined))); + + this._register(autorun('update sash layout', (reader) => { + const enabled = this._options.enableSplitViewResizing.read(reader); + this._sash.state = enabled ? SashState.Enabled : SashState.Disabled; + this.sashLeft.read(reader); + this._sash.layout(); + })); + } + + setBoundarySashes(sashes: IBoundarySashes): void { + this._sash.orthogonalEndSash = sashes.bottom; + } + + private _computeSashLeft(desiredRatio: number, reader: IReader | undefined): number { + const contentWidth = this._dimensions.width.read(reader); + const midPoint = Math.floor(this._options.splitViewDefaultRatio.read(reader) * contentWidth); + const sashLeft = this._options.enableSplitViewResizing.read(reader) ? Math.floor(desiredRatio * contentWidth) : midPoint; + + const MINIMUM_EDITOR_WIDTH = 100; + if (contentWidth <= MINIMUM_EDITOR_WIDTH * 2) { + return midPoint; + } + if (sashLeft < MINIMUM_EDITOR_WIDTH) { + return MINIMUM_EDITOR_WIDTH; + } + if (sashLeft > contentWidth - MINIMUM_EDITOR_WIDTH) { + return contentWidth - MINIMUM_EDITOR_WIDTH; + } + return sashLeft; + } +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel.ts new file mode 100644 index 00000000000..bcb4c13371d --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel.ts @@ -0,0 +1,514 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { RunOnceScheduler } from 'vs/base/common/async'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, IReader, ISettableObservable, ITransaction, derived, observableSignal, observableSignalFromEvent, observableValue, transaction, waitForState } from 'vs/base/common/observable'; +import { autorunWithStore2 } from 'vs/base/common/observableImpl/autorun'; +import { isDefined } from 'vs/base/common/types'; +import { ISerializedLineRange, LineRange } from 'vs/editor/common/core/lineRange'; +import { Range } from 'vs/editor/common/core/range'; +import { IDocumentDiff, IDocumentDiffProvider } from 'vs/editor/common/diff/documentDiffProvider'; +import { LineRangeMapping, MovedText, RangeMapping, SimpleLineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { lineRangeMappingFromRangeMappings } from 'vs/editor/common/diff/standardLinesDiffComputer'; +import { IDiffEditorModel, IDiffEditorViewModel } from 'vs/editor/common/editorCommon'; +import { ITextModel } from 'vs/editor/common/model'; +import { TextEditInfo } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper'; +import { combineTextEditInfos } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos'; +import { lengthAdd, lengthDiffNonNegative, lengthGetLineCount, lengthOfRange, lengthToPosition, lengthZero, positionToLength } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length'; +import { DiffEditorOptions } from './diffEditorOptions'; + +export class DiffEditorViewModel extends Disposable implements IDiffEditorViewModel { + private readonly _isDiffUpToDate = observableValue('isDiffUpToDate', false); + public readonly isDiffUpToDate: IObservable = this._isDiffUpToDate; + + private _lastDiff: IDocumentDiff | undefined; + private readonly _diff = observableValue('diff', undefined); + public readonly diff: IObservable = this._diff; + + private readonly _unchangedRegions = observableValue<{ regions: UnchangedRegion[]; originalDecorationIds: string[]; modifiedDecorationIds: string[] }>( + 'unchangedRegion', + { regions: [], originalDecorationIds: [], modifiedDecorationIds: [] } + ); + public readonly unchangedRegions: IObservable = derived('unchangedRegions', r => { + if (this._options.collapseUnchangedRegions.read(r)) { + return this._unchangedRegions.read(r).regions; + } else { + // Reset state + transaction(tx => { + for (const r of this._unchangedRegions.get().regions) { + r.setState(0, 0, tx); + } + }); + return []; + } + } + ); + + public readonly syncedMovedTexts = observableValue('syncedMovedText', undefined); + + constructor( + public readonly model: IDiffEditorModel, + private readonly _options: DiffEditorOptions, + documentDiffProvider: IDocumentDiffProvider, + ) { + super(); + + const contentChangedSignal = observableSignal('contentChangedSignal'); + const debouncer = this._register(new RunOnceScheduler(() => contentChangedSignal.trigger(undefined), 200)); + + this._register(model.modified.onDidChangeContent((e) => { + const diff = this._diff.get(); + if (!diff) { + return; + } + + const textEdits = TextEditInfo.fromModelContentChanges(e.changes); + const result = applyModifiedEdits(this._lastDiff!, textEdits, model.original, model.modified); + if (result) { + this._lastDiff = result; + this._diff.set(DiffState.fromDiffResult(this._lastDiff), undefined); + const currentSyncedMovedText = this.syncedMovedTexts.get(); + this.syncedMovedTexts.set(currentSyncedMovedText ? this._lastDiff.moves.find(m => m.lineRangeMapping.modifiedRange.intersect(currentSyncedMovedText.lineRangeMapping.modifiedRange)) : undefined, undefined); + } + + debouncer.schedule(); + })); + this._register(model.original.onDidChangeContent((e) => { + const diff = this._diff.get(); + if (!diff) { + return; + } + + const textEdits = TextEditInfo.fromModelContentChanges(e.changes); + const result = applyOriginalEdits(this._lastDiff!, textEdits, model.original, model.modified); + if (result) { + this._lastDiff = result; + this._diff.set(DiffState.fromDiffResult(this._lastDiff), undefined); + const currentSyncedMovedText = this.syncedMovedTexts.get(); + this.syncedMovedTexts.set(currentSyncedMovedText ? this._lastDiff.moves.find(m => m.lineRangeMapping.modifiedRange.intersect(currentSyncedMovedText.lineRangeMapping.modifiedRange)) : undefined, undefined); + } + + debouncer.schedule(); + })); + + const documentDiffProviderOptionChanged = observableSignalFromEvent('documentDiffProviderOptionChanged', documentDiffProvider.onDidChange); + + this._register(autorunWithStore2('compute diff', async (reader, store) => { + debouncer.cancel(); + contentChangedSignal.read(reader); + documentDiffProviderOptionChanged.read(reader); + + this._isDiffUpToDate.set(false, undefined); + + let originalTextEditInfos: TextEditInfo[] = []; + store.add(model.original.onDidChangeContent((e) => { + const edits = TextEditInfo.fromModelContentChanges(e.changes); + originalTextEditInfos = combineTextEditInfos(originalTextEditInfos, edits); + })); + + let modifiedTextEditInfos: TextEditInfo[] = []; + store.add(model.modified.onDidChangeContent((e) => { + const edits = TextEditInfo.fromModelContentChanges(e.changes); + modifiedTextEditInfos = combineTextEditInfos(modifiedTextEditInfos, edits); + })); + + let result = await documentDiffProvider.computeDiff(model.original, model.modified, { + ignoreTrimWhitespace: this._options.ignoreTrimWhitespace.read(reader), + maxComputationTimeMs: this._options.maxComputationTimeMs.read(reader), + computeMoves: this._options.showMoves.read(reader), + }); + + result = applyOriginalEdits(result, originalTextEditInfos, model.original, model.modified) ?? result; + result = applyModifiedEdits(result, modifiedTextEditInfos, model.original, model.modified) ?? result; + + const newUnchangedRegions = UnchangedRegion.fromDiffs(result.changes, model.original.getLineCount(), model.modified.getLineCount()); + + // Transfer state from cur state + const lastUnchangedRegions = this._unchangedRegions.get(); + const lastUnchangedRegionsOrigRanges = lastUnchangedRegions.originalDecorationIds + .map(id => model.original.getDecorationRange(id)) + .filter(r => !!r) + .map(r => LineRange.fromRange(r!)); + const lastUnchangedRegionsModRanges = lastUnchangedRegions.modifiedDecorationIds + .map(id => model.modified.getDecorationRange(id)) + .filter(r => !!r) + .map(r => LineRange.fromRange(r!)); + + const originalDecorationIds = model.original.deltaDecorations( + lastUnchangedRegions.originalDecorationIds, + newUnchangedRegions.map(r => ({ range: r.originalRange.toInclusiveRange()!, options: { description: 'unchanged' } })) + ); + const modifiedDecorationIds = model.modified.deltaDecorations( + lastUnchangedRegions.modifiedDecorationIds, + newUnchangedRegions.map(r => ({ range: r.modifiedRange.toInclusiveRange()!, options: { description: 'unchanged' } })) + ); + + transaction(tx => { + for (const r of newUnchangedRegions) { + for (let i = 0; i < lastUnchangedRegions.regions.length; i++) { + if (r.originalRange.intersectsStrict(lastUnchangedRegionsOrigRanges[i]) + && r.modifiedRange.intersectsStrict(lastUnchangedRegionsModRanges[i])) { + r.setHiddenModifiedRange(lastUnchangedRegions.regions[i].getHiddenModifiedRange(undefined), tx); + break; + } + } + } + + this._lastDiff = result; + const state = DiffState.fromDiffResult(result); + this._diff.set(state, tx); + this._isDiffUpToDate.set(true, tx); + const currentSyncedMovedText = this.syncedMovedTexts.get(); + this.syncedMovedTexts.set(currentSyncedMovedText ? this._lastDiff.moves.find(m => m.lineRangeMapping.modifiedRange.intersect(currentSyncedMovedText.lineRangeMapping.modifiedRange)) : undefined, tx); + + this._unchangedRegions.set( + { + regions: newUnchangedRegions, + originalDecorationIds, + modifiedDecorationIds + }, + tx + ); + }); + })); + } + + public ensureModifiedLineIsVisible(lineNumber: number, tx: ITransaction): void { + if (this.diff.get()?.mappings.length === 0) { + return; + } + const unchangedRegions = this._unchangedRegions.get().regions; + for (const r of unchangedRegions) { + if (r.getHiddenModifiedRange(undefined).contains(lineNumber)) { + r.showAll(tx); // TODO only unhide what is needed + return; + } + } + } + + public ensureOriginalLineIsVisible(lineNumber: number, tx: ITransaction): void { + if (this.diff.get()?.mappings.length === 0) { + return; + } + const unchangedRegions = this._unchangedRegions.get().regions; + for (const r of unchangedRegions) { + if (r.getHiddenOriginalRange(undefined).contains(lineNumber)) { + r.showAll(tx); // TODO only unhide what is needed + return; + } + } + } + + public async waitForDiff(): Promise { + await waitForState(this.isDiffUpToDate, s => s); + } + + public serializeState(): SerializedState { + const regions = this._unchangedRegions.get(); + return { + collapsedRegions: regions.regions.map(r => ({ range: r.getHiddenModifiedRange(undefined).serialize() })) + }; + } + + public restoreSerializedState(state: SerializedState): void { + const ranges = state.collapsedRegions.map(r => LineRange.deserialize(r.range)); + const regions = this._unchangedRegions.get(); + transaction(tx => { + for (const r of regions.regions) { + for (const range of ranges) { + if (r.modifiedRange.intersect(range)) { + r.setHiddenModifiedRange(range, tx); + break; + } + } + } + }); + } +} + +interface SerializedState { + collapsedRegions: { range: ISerializedLineRange }[]; +} + +export class DiffState { + public static fromDiffResult(result: IDocumentDiff): DiffState { + return new DiffState( + result.changes.map(c => new DiffMapping(c)), + result.moves || [], + result.identical, + result.quitEarly, + ); + } + + constructor( + public readonly mappings: readonly DiffMapping[], + public readonly movedTexts: readonly MovedText[], + public readonly identical: boolean, + public readonly quitEarly: boolean, + ) { } +} + +export class DiffMapping { + constructor( + readonly lineRangeMapping: LineRangeMapping, + ) { + /* + readonly movedTo: MovedText | undefined, + readonly movedFrom: MovedText | undefined, + + if (movedTo) { + assertFn(() => + movedTo.lineRangeMapping.modifiedRange.equals(lineRangeMapping.modifiedRange) + && lineRangeMapping.originalRange.isEmpty + && !movedFrom + ); + } else if (movedFrom) { + assertFn(() => + movedFrom.lineRangeMapping.originalRange.equals(lineRangeMapping.originalRange) + && lineRangeMapping.modifiedRange.isEmpty + && !movedTo + ); + } + */ + } +} + +export class UnchangedRegion { + public static fromDiffs(changes: readonly LineRangeMapping[], originalLineCount: number, modifiedLineCount: number): UnchangedRegion[] { + const inversedMappings = LineRangeMapping.inverse(changes, originalLineCount, modifiedLineCount); + const result: UnchangedRegion[] = []; + + const minHiddenLineCount = 3; + const minContext = 3; + + for (const mapping of inversedMappings) { + let origStart = mapping.originalRange.startLineNumber; + let modStart = mapping.modifiedRange.startLineNumber; + let length = mapping.originalRange.length; + + const atStart = origStart === 1 && modStart === 1; + const atEnd = origStart + length === originalLineCount + 1 && modStart + length === modifiedLineCount + 1; + + if ((atStart || atEnd) && length > minContext + minHiddenLineCount) { + if (atStart && !atEnd) { + length -= minContext; + } + if (atEnd && !atStart) { + origStart += minContext; + modStart += minContext; + length -= minContext; + } + result.push(new UnchangedRegion(origStart, modStart, length, 0, 0)); + } else if (length > minContext * 2 + minHiddenLineCount) { + origStart += minContext; + modStart += minContext; + length -= minContext * 2; + result.push(new UnchangedRegion(origStart, modStart, length, 0, 0)); + } + } + + return result; + } + + public get originalRange(): LineRange { + return LineRange.ofLength(this.originalLineNumber, this.lineCount); + } + + public get modifiedRange(): LineRange { + return LineRange.ofLength(this.modifiedLineNumber, this.lineCount); + } + + private readonly _visibleLineCountTop = observableValue('visibleLineCountTop', 0); + public readonly visibleLineCountTop: ISettableObservable = this._visibleLineCountTop; + + private readonly _visibleLineCountBottom = observableValue('visibleLineCountBottom', 0); + public readonly visibleLineCountBottom: ISettableObservable = this._visibleLineCountBottom; + + private readonly _shouldHideControls = derived('isVisible', reader => this.visibleLineCountTop.read(reader) + this.visibleLineCountBottom.read(reader) === this.lineCount && !this.isDragged.read(reader)); + + public readonly isDragged = observableValue('isDragged', false); + + constructor( + public readonly originalLineNumber: number, + public readonly modifiedLineNumber: number, + public readonly lineCount: number, + visibleLineCountTop: number, + visibleLineCountBottom: number, + ) { + this._visibleLineCountTop.set(visibleLineCountTop, undefined); + this._visibleLineCountBottom.set(visibleLineCountBottom, undefined); + } + + public shouldHideControls(reader: IReader | undefined): boolean { + return this._shouldHideControls.read(reader); + } + + public getHiddenOriginalRange(reader: IReader | undefined): LineRange { + return LineRange.ofLength( + this.originalLineNumber + this._visibleLineCountTop.read(reader), + this.lineCount - this._visibleLineCountTop.read(reader) - this._visibleLineCountBottom.read(reader), + ); + } + + public getHiddenModifiedRange(reader: IReader | undefined): LineRange { + return LineRange.ofLength( + this.modifiedLineNumber + this._visibleLineCountTop.read(reader), + this.lineCount - this._visibleLineCountTop.read(reader) - this._visibleLineCountBottom.read(reader), + ); + } + + public setHiddenModifiedRange(range: LineRange, tx: ITransaction) { + const visibleLineCountTop = range.startLineNumber - this.modifiedLineNumber; + const visibleLineCountBottom = (this.modifiedLineNumber + this.lineCount) - range.endLineNumberExclusive; + this.setState(visibleLineCountTop, visibleLineCountBottom, tx); + } + + public getMaxVisibleLineCountTop() { + return this.lineCount - this._visibleLineCountBottom.get(); + } + + public getMaxVisibleLineCountBottom() { + return this.lineCount - this._visibleLineCountTop.get(); + } + + public showMoreAbove(count = 10, tx: ITransaction | undefined): void { + const maxVisibleLineCountTop = this.getMaxVisibleLineCountTop(); + this._visibleLineCountTop.set(Math.min(this._visibleLineCountTop.get() + count, maxVisibleLineCountTop), tx); + } + + public showMoreBelow(count = 10, tx: ITransaction | undefined): void { + const maxVisibleLineCountBottom = this.lineCount - this._visibleLineCountTop.get(); + this._visibleLineCountBottom.set(Math.min(this._visibleLineCountBottom.get() + count, maxVisibleLineCountBottom), tx); + } + + public showAll(tx: ITransaction | undefined): void { + this._visibleLineCountBottom.set(this.lineCount - this._visibleLineCountTop.get(), tx); + } + + public setState(visibleLineCountTop: number, visibleLineCountBottom: number, tx: ITransaction | undefined): void { + visibleLineCountTop = Math.max(Math.min(visibleLineCountTop, this.lineCount), 0); + visibleLineCountBottom = Math.max(Math.min(visibleLineCountBottom, this.lineCount - visibleLineCountTop), 0); + + this._visibleLineCountTop.set(visibleLineCountTop, tx); + this._visibleLineCountBottom.set(visibleLineCountBottom, tx); + } +} + +function applyOriginalEdits(diff: IDocumentDiff, textEdits: TextEditInfo[], originalTextModel: ITextModel, modifiedTextModel: ITextModel): IDocumentDiff | undefined { + if (textEdits.length === 0) { + return diff; + } + + const diff2 = flip(diff); + const diff3 = applyModifiedEdits(diff2, textEdits, modifiedTextModel, originalTextModel); + if (!diff3) { + return undefined; + } + return flip(diff3); +} + +function flip(diff: IDocumentDiff): IDocumentDiff { + return { + changes: diff.changes.map(c => c.flip()), + moves: diff.moves.map(m => m.flip()), + identical: diff.identical, + quitEarly: diff.quitEarly, + }; +} + +function applyModifiedEdits(diff: IDocumentDiff, textEdits: TextEditInfo[], originalTextModel: ITextModel, modifiedTextModel: ITextModel): IDocumentDiff | undefined { + if (textEdits.length === 0) { + return diff; + } + if (diff.changes.some(c => !c.innerChanges) || diff.moves.length > 0) { + // TODO support these cases + return undefined; + } + + const changes = applyModifiedEditsToLineRangeMappings(diff.changes, textEdits, originalTextModel, modifiedTextModel); + + const moves = diff.moves.map(m => { + const newModifiedRange = applyEditToLineRange(m.lineRangeMapping.modifiedRange, textEdits); + return newModifiedRange ? new MovedText( + new SimpleLineRangeMapping(m.lineRangeMapping.originalRange, newModifiedRange), + applyModifiedEditsToLineRangeMappings(m.changes, textEdits, originalTextModel, modifiedTextModel), + ) : undefined; + }).filter(isDefined); + + return { + identical: false, + quitEarly: false, + changes, + moves, + }; +} + +function applyEditToLineRange(range: LineRange, textEdits: TextEditInfo[]): LineRange | undefined { + let rangeStartLineNumber = range.startLineNumber; + let rangeEndLineNumberEx = range.endLineNumberExclusive; + + for (let i = textEdits.length - 1; i >= 0; i--) { + const textEdit = textEdits[i]; + const textEditStartLineNumber = lengthGetLineCount(textEdit.startOffset) + 1; + const textEditEndLineNumber = lengthGetLineCount(textEdit.endOffset) + 1; + const newLengthLineCount = lengthGetLineCount(textEdit.newLength); + const delta = newLengthLineCount - (textEditEndLineNumber - textEditStartLineNumber); + + if (textEditEndLineNumber < rangeStartLineNumber) { + // the text edit is before us + rangeStartLineNumber += delta; + rangeEndLineNumberEx += delta; + } else if (textEditStartLineNumber > rangeEndLineNumberEx) { + // the text edit is after us + // NOOP + } else if (textEditStartLineNumber < rangeStartLineNumber && rangeEndLineNumberEx < textEditEndLineNumber) { + // the range is fully contained in the text edit + return undefined; + } else if (textEditStartLineNumber < rangeStartLineNumber && textEditEndLineNumber <= rangeEndLineNumberEx) { + // the text edit ends inside our range + rangeStartLineNumber = textEditEndLineNumber + 1; + rangeStartLineNumber += delta; + rangeEndLineNumberEx += delta; + } else if (rangeStartLineNumber <= textEditStartLineNumber && textEditEndLineNumber < rangeStartLineNumber) { + // the text edit starts inside our range + rangeEndLineNumberEx = textEditStartLineNumber; + } else { + rangeEndLineNumberEx += delta; + } + } + + return new LineRange(rangeStartLineNumber, rangeEndLineNumberEx); +} + +function applyModifiedEditsToLineRangeMappings(changes: readonly LineRangeMapping[], textEdits: TextEditInfo[], originalTextModel: ITextModel, modifiedTextModel: ITextModel): LineRangeMapping[] { + const diffTextEdits = changes.flatMap(c => c.innerChanges!.map(c => new TextEditInfo( + positionToLength(c.originalRange.getStartPosition()), + positionToLength(c.originalRange.getEndPosition()), + lengthOfRange(c.modifiedRange).toLength(), + ))); + + const combined = combineTextEditInfos(diffTextEdits, textEdits); + + let lastOriginalEndOffset = lengthZero; + let lastModifiedEndOffset = lengthZero; + const rangeMappings = combined.map(c => { + const modifiedStartOffset = lengthAdd(lastModifiedEndOffset, lengthDiffNonNegative(lastOriginalEndOffset, c.startOffset)); + lastOriginalEndOffset = c.endOffset; + lastModifiedEndOffset = lengthAdd(modifiedStartOffset, c.newLength); + + return new RangeMapping( + Range.fromPositions(lengthToPosition(c.startOffset), lengthToPosition(c.endOffset)), + Range.fromPositions(lengthToPosition(modifiedStartOffset), lengthToPosition(lastModifiedEndOffset)), + ); + }); + + const newChanges = lineRangeMappingFromRangeMappings( + rangeMappings, + originalTextModel.getLinesContent(), + modifiedTextModel.getLinesContent(), + ); + return newChanges; +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.contribution.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.contribution.ts new file mode 100644 index 00000000000..11543c2c18d --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.contribution.ts @@ -0,0 +1,90 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Codicon } from 'vs/base/common/codicons'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { localize } from 'vs/nls'; +import { Action2, MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ContextKeyEqualsExpr, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; +import './colors'; + +export class ToggleCollapseUnchangedRegions extends Action2 { + constructor() { + super({ + id: 'diffEditor.toggleCollapseUnchangedRegions', + title: { value: localize('toggleCollapseUnchangedRegions', "Toggle Collapse Unchanged Regions"), original: 'Toggle Collapse Unchanged Regions' }, + icon: Codicon.map, + precondition: ContextKeyEqualsExpr.create('diffEditorVersion', 2), + }); + } + + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configurationService = accessor.get(IConfigurationService); + const newValue = !configurationService.getValue('diffEditor.experimental.collapseUnchangedRegions'); + configurationService.updateValue('diffEditor.experimental.collapseUnchangedRegions', newValue); + } +} + +registerAction2(ToggleCollapseUnchangedRegions); + +MenuRegistry.appendMenuItem(MenuId.EditorTitle, { + command: { + id: new ToggleCollapseUnchangedRegions().desc.id, + title: localize('collapseUnchangedRegions', "Show Unchanged Regions"), + icon: Codicon.map + }, + order: 22, + group: 'navigation', + when: ContextKeyExpr.and( + ContextKeyExpr.has('config.diffEditor.experimental.collapseUnchangedRegions'), + ContextKeyEqualsExpr.create('diffEditorVersion', 2) + ) +}); + +MenuRegistry.appendMenuItem(MenuId.EditorTitle, { + command: { + id: new ToggleCollapseUnchangedRegions().desc.id, + title: localize('showUnchangedRegions', "Collapse Unchanged Regions"), + icon: ThemeIcon.modify(Codicon.map, 'disabled'), + }, + order: 22, + group: 'navigation', + when: ContextKeyExpr.and( + ContextKeyExpr.has('config.diffEditor.experimental.collapseUnchangedRegions').negate(), + ContextKeyEqualsExpr.create('diffEditorVersion', 2) + ) +}); + +export class ToggleShowMovedCodeBlocks extends Action2 { + constructor() { + super({ + id: 'diffEditor.toggleShowMovedCodeBlocks', + title: { value: localize('toggleShowMovedCodeBlocks', "Toggle Show Moved Code Blocks"), original: 'Toggle Show Moved Code Blocks' }, + precondition: ContextKeyEqualsExpr.create('diffEditorVersion', 2), + }); + } + + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configurationService = accessor.get(IConfigurationService); + const newValue = !configurationService.getValue('diffEditor.experimental.showMoves'); + configurationService.updateValue('diffEditor.experimental.showMoves', newValue); + } +} + +registerAction2(ToggleShowMovedCodeBlocks); + +MenuRegistry.appendMenuItem(MenuId.EditorTitle, { + command: { + id: new ToggleShowMovedCodeBlocks().desc.id, + title: localize('showMoves', "Show Moves"), + icon: Codicon.move, + toggled: ContextKeyEqualsExpr.create('config.diffEditor.experimental.showMoves', true), + }, + order: 10, + group: '1_diff', + when: ContextKeyEqualsExpr.create('diffEditorVersion', 2) +}); diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.ts new file mode 100644 index 00000000000..7930581e426 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.ts @@ -0,0 +1,489 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { $, h } from 'vs/base/browser/dom'; +import { IBoundarySashes } from 'vs/base/browser/ui/sash/sash'; +import { findLast } from 'vs/base/common/arrays'; +import { onUnexpectedError } from 'vs/base/common/errors'; +import { Event } from 'vs/base/common/event'; +import { IObservable, autorun, derived, keepAlive, observableValue } from 'vs/base/common/observable'; +import { autorunWithStore2 } from 'vs/base/common/observableImpl/autorun'; +import { disposableObservableValue, transaction } from 'vs/base/common/observableImpl/base'; +import { derivedWithStore } from 'vs/base/common/observableImpl/derived'; +import 'vs/css!./style'; +import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; +import { ICodeEditor, IDiffEditor, IDiffEditorConstructionOptions, IMouseTargetViewZone } from 'vs/editor/browser/editorBrowser'; +import { EditorExtensionsRegistry, IDiffEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; +import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditorWidget'; +import { IDiffCodeEditorWidgetOptions } from 'vs/editor/browser/widget/diffEditorWidget'; +import { DiffEditorDecorations } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorDecorations'; +import { DiffEditorSash } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorSash'; +import { DiffReview2 } from 'vs/editor/browser/widget/diffEditorWidget2/diffReview'; +import { ViewZoneManager } from 'vs/editor/browser/widget/diffEditorWidget2/lineAlignment'; +import { MovedBlocksLinesPart } from 'vs/editor/browser/widget/diffEditorWidget2/movedBlocksLines'; +import { OverviewRulerPart } from 'vs/editor/browser/widget/diffEditorWidget2/overviewRulerPart'; +import { UnchangedRangesFeature } from 'vs/editor/browser/widget/diffEditorWidget2/unchangedRanges'; +import { ObservableElementSizeObserver, applyStyle, readHotReloadableExport } from 'vs/editor/browser/widget/diffEditorWidget2/utils'; +import { WorkerBasedDocumentDiffProvider } from 'vs/editor/browser/widget/workerBasedDocumentDiffProvider'; +import { IDiffEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { IDimension } from 'vs/editor/common/core/dimension'; +import { Position } from 'vs/editor/common/core/position'; +import { LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { IDiffComputationResult, ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; +import { EditorType, IDiffEditorModel, IDiffEditorViewModel, IDiffEditorViewState } from 'vs/editor/common/editorCommon'; +import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; +import { IIdentifiedSingleEditOperation } from 'vs/editor/common/model'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { DelegatingEditor } from './delegatingEditorImpl'; +import { DiffEditorEditors } from './diffEditorEditors'; +import { DiffEditorOptions } from './diffEditorOptions'; +import { DiffEditorViewModel, DiffMapping, DiffState } from './diffEditorViewModel'; + +export class DiffEditorWidget2 extends DelegatingEditor implements IDiffEditor { + private readonly elements = h('div.monaco-diff-editor.side-by-side', { style: { position: 'relative', height: '100%' } }, [ + h('div.noModificationsOverlay@overlay', { style: { position: 'absolute', height: '100%', visibility: 'hidden', } }, [$('span', {}, 'No Changes')]), + h('div.editor.original@original', { style: { position: 'absolute', height: '100%' } }), + h('div.editor.modified@modified', { style: { position: 'absolute', height: '100%' } }), + ]); + private readonly _diffModel = this._register(disposableObservableValue('diffModel', undefined)); + public readonly onDidChangeModel = Event.fromObservableLight(this._diffModel); + + public get onDidContentSizeChange() { return this._editors.onDidContentSizeChange; } + + private readonly _contextKeyService = this._register(this._parentContextKeyService.createScoped(this._domElement)); + private readonly _instantiationService = this._parentInstantiationService.createChild( + new ServiceCollection([IContextKeyService, this._contextKeyService]) + ); + private readonly _rootSizeObserver: ObservableElementSizeObserver; + + private readonly _sash: IObservable; + private readonly _boundarySashes = observableValue('boundarySashes', undefined); + + private unchangedRangesFeature!: UnchangedRangesFeature; + + private readonly _reviewPane: DiffReview2; + private readonly _options: DiffEditorOptions; + private readonly _editors: DiffEditorEditors; + + constructor( + private readonly _domElement: HTMLElement, + options: Readonly, + codeEditorWidgetOptions: IDiffCodeEditorWidgetOptions, + @IContextKeyService private readonly _parentContextKeyService: IContextKeyService, + @IInstantiationService private readonly _parentInstantiationService: IInstantiationService, + @ICodeEditorService codeEditorService: ICodeEditorService, + ) { + super(); + codeEditorService.willCreateDiffEditor(); + + this._contextKeyService.createKey('isInDiffEditor', true); + this._contextKeyService.createKey('diffEditorVersion', 2); + + this._options = new DiffEditorOptions(options); + + this._contextKeyService.createKey(EditorContextKeys.isEmbeddedDiffEditor.key, false); + const isEmbeddedDiffEditorKey = EditorContextKeys.isEmbeddedDiffEditor.bindTo(this._contextKeyService); + this._register(autorun('update isEmbeddedDiffEditorKey', reader => { + isEmbeddedDiffEditorKey.set(this._options.isInEmbeddedEditor.read(reader)); + })); + + this._domElement.appendChild(this.elements.root); + + this._rootSizeObserver = this._register(new ObservableElementSizeObserver(this.elements.root, options.dimension)); + this._rootSizeObserver.setAutomaticLayout(options.automaticLayout ?? false); + + const reviewPaneObservable = observableValue('reviewPane', undefined); + this._editors = this._register(this._instantiationService.createInstance( + DiffEditorEditors, + this.elements.original, + this.elements.modified, + this._options, + codeEditorWidgetOptions, + (i, c, o, o2) => this._createInnerEditor(i, c, o, o2), + reviewPaneObservable.map((r, reader) => r?.isVisible.read(reader) ?? false), + )); + + this._sash = derivedWithStore('sash', (reader, store) => { + const showSash = this._options.renderSideBySide.read(reader); + this.elements.root.classList.toggle('side-by-side', showSash); + if (!showSash) { return undefined; } + const result = store.add(new DiffEditorSash( + this._options, + this.elements.root, + { + height: this._rootSizeObserver.height, + width: this._rootSizeObserver.width.map((w, reader) => w - (this._options.renderOverviewRuler.read(reader) ? OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH : 0)), + } + )); + store.add(autorun('setBoundarySashes', reader => { + const boundarySashes = this._boundarySashes.read(reader); + if (boundarySashes) { + result.setBoundarySashes(boundarySashes); + } + })); + return result; + }); + this._register(keepAlive(this._sash, true)); + + this._register(autorunWithStore2('UnchangedRangesFeature', (reader, store) => { + this.unchangedRangesFeature = store.add(new (readHotReloadableExport(UnchangedRangesFeature, reader))(this._editors, this._diffModel, this._options)); + })); + + this._register(autorunWithStore2('DiffEditorDecorations', (reader, store) => { + store.add(new (readHotReloadableExport(DiffEditorDecorations, reader))(this._editors, this._diffModel, this._options)); + })); + + this._register(this._instantiationService.createInstance( + ViewZoneManager, + this._editors, + this._diffModel, + this._options, + this, + () => this.unchangedRangesFeature.isUpdatingViewZones, + )); + + this._register(autorunWithStore2('OverviewRulerPart', (reader, store) => { + store.add(this._instantiationService.createInstance(readHotReloadableExport(OverviewRulerPart, reader), this._editors, + this.elements.root, + this._diffModel, + this._rootSizeObserver.width, + this._rootSizeObserver.height, + this._layoutInfo.map(i => i.modifiedEditor), + this._options, + )); + })); + + this._reviewPane = this._register(this._instantiationService.createInstance(DiffReview2, this)); + this.elements.root.appendChild(this._reviewPane.domNode.domNode); + this.elements.root.appendChild(this._reviewPane.shadow.domNode); + this.elements.root.appendChild(this._reviewPane.actionBarContainer.domNode); + reviewPaneObservable.set(this._reviewPane, undefined); + + this._createDiffEditorContributions(); + + codeEditorService.addDiffEditor(this); + + this._register(keepAlive(this._layoutInfo, true)); + + this._register(new MovedBlocksLinesPart( + this.elements.root, + this._diffModel, + this._layoutInfo.map(i => i.originalEditor), + this._layoutInfo.map(i => i.modifiedEditor), + this._editors, + )); + + this._register(applyStyle(this.elements.overlay, { + width: this._layoutInfo.map((i, r) => i.originalEditor.width + (this._options.renderSideBySide.read(r) ? 0 : i.modifiedEditor.width)), + visibility: derived('visibility', reader => + (this._options.collapseUnchangedRegions.read(reader) && this._diffModel.read(reader)?.diff.read(reader)?.mappings.length === 0) + ? 'visible' : 'hidden' + ), + })); + + this._register(this._editors.original.onDidChangeCursorPosition(e => { + const m = this._diffModel.get(); + if (!m) { return; } + const movedText = m.diff.get()!.movedTexts.find(m => m.lineRangeMapping.originalRange.contains(e.position.lineNumber)); + m.syncedMovedTexts.set(movedText, undefined); + })); + this._register(this._editors.modified.onDidChangeCursorPosition(e => { + const m = this._diffModel.get(); + if (!m) { return; } + const movedText = m.diff.get()!.movedTexts.find(m => m.lineRangeMapping.modifiedRange.contains(e.position.lineNumber)); + m.syncedMovedTexts.set(movedText, undefined); + })); + + // Revert change when an arrow is clicked. + this._register(this._editors.modified.onMouseDown(event => { + if (!event.event.rightButton && event.target.position && event.target.element?.className.includes('arrow-revert-change')) { + const lineNumber = event.target.position.lineNumber; + const viewZone = event.target as IMouseTargetViewZone | undefined; + + const model = this._diffModel.get(); + if (!model) { return; } + const diffs = model.diff.get()?.mappings; + if (!diffs) { return; } + const diff = diffs.find(d => + viewZone?.detail.afterLineNumber === d.lineRangeMapping.modifiedRange.startLineNumber - 1 || + d.lineRangeMapping.modifiedRange.startLineNumber === lineNumber + ); + if (!diff) { return; } + this.revert(diff.lineRangeMapping); + + event.event.stopPropagation(); + } + })); + } + + protected _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: Readonly, editorWidgetOptions: ICodeEditorWidgetOptions): CodeEditorWidget { + const editor = instantiationService.createInstance(CodeEditorWidget, container, options, editorWidgetOptions); + return editor; + } + + private readonly _layoutInfo = derived('modifiedEditorLayoutInfo', (reader) => { + const width = this._rootSizeObserver.width.read(reader); + const height = this._rootSizeObserver.height.read(reader); + const sashLeft = this._sash.read(reader)?.sashLeft.read(reader); + + const originalWidth = sashLeft ?? Math.max(5, this._editors.original.getLayoutInfo().decorationsLeft); + + this.elements.original.style.width = originalWidth + 'px'; + this.elements.original.style.left = '0px'; + + this.elements.modified.style.width = (width - originalWidth) + 'px'; + this.elements.modified.style.left = originalWidth + 'px'; + + this._editors.original.layout({ width: originalWidth, height: height }); + this._editors.modified.layout({ + width: width - originalWidth - + (this._options.renderOverviewRuler.read(reader) ? OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH : 0), + height + }); + this._reviewPane.layout(0, width, height); + + return { + modifiedEditor: this._editors.modified.getLayoutInfo(), + originalEditor: this._editors.original.getLayoutInfo(), + }; + }); + + private _createDiffEditorContributions() { + const contributions: IDiffEditorContributionDescription[] = EditorExtensionsRegistry.getDiffEditorContributions(); + for (const desc of contributions) { + try { + this._register(this._instantiationService.createInstance(desc.ctor, this)); + } catch (err) { + onUnexpectedError(err); + } + } + } + + protected override get _targetEditor(): CodeEditorWidget { return this._editors.modified; } + + override getEditorType(): string { return EditorType.IDiffEditor; } + + override onVisible(): void { + // TODO: Only compute diffs when diff editor is visible + this._editors.original.onVisible(); + this._editors.modified.onVisible(); + } + + override onHide(): void { + this._editors.original.onHide(); + this._editors.modified.onHide(); + } + + override layout(dimension?: IDimension | undefined): void { this._rootSizeObserver.observe(dimension); } + + override hasTextFocus(): boolean { return this._editors.original.hasTextFocus() || this._editors.modified.hasTextFocus(); } + + public override saveViewState(): IDiffEditorViewState { + const originalViewState = this._editors.original.saveViewState(); + const modifiedViewState = this._editors.modified.saveViewState(); + return { + original: originalViewState, + modified: modifiedViewState, + modelState: this._diffModel.get()?.serializeState(), + }; + } + + public override restoreViewState(s: IDiffEditorViewState): void { + if (s && s.original && s.modified) { + const diffEditorState = s as IDiffEditorViewState; + this._editors.original.restoreViewState(diffEditorState.original); + this._editors.modified.restoreViewState(diffEditorState.modified); + if (diffEditorState.modelState) { + this._diffModel.get()?.restoreSerializedState(diffEditorState.modelState as any); + } + } + } + + public createViewModel(model: IDiffEditorModel): IDiffEditorViewModel { + return new DiffEditorViewModel( + model, + this._options, + // TODO@hediet make diffAlgorithm observable + this._instantiationService.createInstance(WorkerBasedDocumentDiffProvider, { diffAlgorithm: this._options.diffAlgorithm.get() }) + ); + } + + override getModel(): IDiffEditorModel | null { return this._diffModel.get()?.model ?? null; } + + override setModel(model: IDiffEditorModel | null | IDiffEditorViewModel): void { + if (!model && this._diffModel.get()) { + // Transitioning from a model to no-model + this._reviewPane.hide(); + } + + const vm = model ? ('model' in model) ? model : this.createViewModel(model) : undefined; + this._editors.original.setModel(vm ? vm.model.original : null); + this._editors.modified.setModel(vm ? vm.model.modified : null); + transaction(tx => { + this._diffModel.set(vm as (DiffEditorViewModel | undefined), tx); + }); + } + + /** + * @param changedOptions Only has values for top-level options that have actually changed. + */ + override updateOptions(changedOptions: IDiffEditorOptions): void { + this._options.updateOptions(changedOptions); + } + + getContainerDomNode(): HTMLElement { return this._domElement; } + getOriginalEditor(): ICodeEditor { return this._editors.original; } + getModifiedEditor(): ICodeEditor { return this._editors.modified; } + + setBoundarySashes(sashes: IBoundarySashes): void { + this._boundarySashes.set(sashes, undefined); + } + + private readonly _diffValue = this._diffModel.map((m, r) => m?.diff.read(r)); + readonly onDidUpdateDiff: Event = Event.fromObservableLight(this._diffValue); + + get ignoreTrimWhitespace(): boolean { return this._options.ignoreTrimWhitespace.get(); } + + get maxComputationTime(): number { return this._options.maxComputationTimeMs.get(); } + + get renderSideBySide(): boolean { return this._options.renderSideBySide.get(); } + + /** + * @deprecated Use `this.getDiffComputationResult().changes2` instead. + */ + getLineChanges(): ILineChange[] | null { + const diffState = this._diffModel.get()?.diff.get(); + if (!diffState) { return null; } + return toLineChanges(diffState); + } + + getDiffComputationResult(): IDiffComputationResult | null { + const diffState = this._diffModel.get()?.diff.get(); + if (!diffState) { return null; } + + return { + changes: this.getLineChanges()!, + changes2: diffState.mappings.map(m => m.lineRangeMapping), + identical: diffState.identical, + quitEarly: diffState.quitEarly, + }; + } + + revert(diff: LineRangeMapping): void { + const model = this._diffModel.get()?.model; + if (!model) { return; } + + const changes: IIdentifiedSingleEditOperation[] = diff.innerChanges + ? diff.innerChanges.map(c => ({ + range: c.modifiedRange, + text: model.original.getValueInRange(c.originalRange) + })) + : [ + { + range: diff.modifiedRange.toExclusiveRange(), + text: model.original.getValueInRange(diff.originalRange.toExclusiveRange()) + } + ]; + + this._editors.modified.executeEdits('diffEditor', changes); + } + + private _goTo(diff: DiffMapping): void { + this._editors.modified.setPosition(new Position(diff.lineRangeMapping.modifiedRange.startLineNumber, 1)); + this._editors.modified.revealRangeInCenter(diff.lineRangeMapping.modifiedRange.toExclusiveRange()); + } + + goToDiff(target: 'previous' | 'next'): void { + const diffs = this._diffModel.get()?.diff.get()?.mappings; + if (!diffs || diffs.length === 0) { + return; + } + + const curLineNumber = this._editors.modified.getPosition()!.lineNumber; + + let diff: DiffMapping | undefined; + if (target === 'next') { + diff = diffs.find(d => d.lineRangeMapping.modifiedRange.startLineNumber > curLineNumber) ?? diffs[0]; + } else { + diff = findLast(diffs, d => d.lineRangeMapping.modifiedRange.startLineNumber < curLineNumber) ?? diffs[diffs.length - 1]; + } + this._goTo(diff); + } + + revealFirstDiff(): void { + const diffModel = this._diffModel.get(); + if (!diffModel) { + return; + } + // wait for the diff computation to finish + this.waitForDiff().then(() => { + const diffs = diffModel.diff.get()?.mappings; + if (!diffs || diffs.length === 0) { + return; + } + this._goTo(diffs[0]); + }); + } + + diffReviewNext(): void { this._reviewPane.next(); } + + diffReviewPrev(): void { this._reviewPane.prev(); } + + async waitForDiff(): Promise { + const diffModel = this._diffModel.get(); + if (!diffModel) { return; } + await diffModel.waitForDiff(); + } +} + +function toLineChanges(state: DiffState): ILineChange[] { + return state.mappings.map(x => { + const m = x.lineRangeMapping; + let originalStartLineNumber: number; + let originalEndLineNumber: number; + let modifiedStartLineNumber: number; + let modifiedEndLineNumber: number; + let innerChanges = m.innerChanges; + + if (m.originalRange.isEmpty) { + // Insertion + originalStartLineNumber = m.originalRange.startLineNumber - 1; + originalEndLineNumber = 0; + innerChanges = undefined; + } else { + originalStartLineNumber = m.originalRange.startLineNumber; + originalEndLineNumber = m.originalRange.endLineNumberExclusive - 1; + } + + if (m.modifiedRange.isEmpty) { + // Deletion + modifiedStartLineNumber = m.modifiedRange.startLineNumber - 1; + modifiedEndLineNumber = 0; + innerChanges = undefined; + } else { + modifiedStartLineNumber = m.modifiedRange.startLineNumber; + modifiedEndLineNumber = m.modifiedRange.endLineNumberExclusive - 1; + } + + return { + originalStartLineNumber, + originalEndLineNumber, + modifiedStartLineNumber, + modifiedEndLineNumber, + charChanges: innerChanges?.map(m => ({ + originalStartLineNumber: m.originalRange.startLineNumber, + originalStartColumn: m.originalRange.startColumn, + originalEndLineNumber: m.originalRange.endLineNumber, + originalEndColumn: m.originalRange.endColumn, + modifiedStartLineNumber: m.modifiedRange.startLineNumber, + modifiedStartColumn: m.modifiedRange.startColumn, + modifiedEndLineNumber: m.modifiedRange.endLineNumber, + modifiedEndColumn: m.modifiedRange.endColumn, + })) + }; + }); +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/diffReview.ts b/src/vs/editor/browser/widget/diffEditorWidget2/diffReview.ts new file mode 100644 index 00000000000..ed1c345f5e5 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/diffReview.ts @@ -0,0 +1,828 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as dom from 'vs/base/browser/dom'; +import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; +import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; +import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; +import { Action } from 'vs/base/common/actions'; +import { Codicon } from 'vs/base/common/codicons'; +import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, observableValue } from 'vs/base/common/observable'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { Constants } from 'vs/base/common/uint'; +import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; +import { DiffEditorWidget2 } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2'; +import { DiffReview } from 'vs/editor/browser/widget/diffReview'; +import { EditorFontLigatures, EditorOption, IComputedEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { Position } from 'vs/editor/common/core/position'; +import { ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; +import { ScrollType } from 'vs/editor/common/editorCommon'; +import { ILanguageIdCodec } from 'vs/editor/common/languages'; +import { ILanguageService } from 'vs/editor/common/languages/language'; +import { ITextModel, TextModelResolvedOptions } from 'vs/editor/common/model'; +import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { RenderLineInput, renderViewLine2 as renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; +import { ViewLineRenderingData } from 'vs/editor/common/viewModel'; +import * as nls from 'vs/nls'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; + +const DIFF_LINES_PADDING = 3; + +const enum DiffEntryType { + Equal = 0, + Insert = 1, + Delete = 2 +} + +class DiffEntry { + readonly originalLineStart: number; + readonly originalLineEnd: number; + readonly modifiedLineStart: number; + readonly modifiedLineEnd: number; + + constructor(originalLineStart: number, originalLineEnd: number, modifiedLineStart: number, modifiedLineEnd: number) { + this.originalLineStart = originalLineStart; + this.originalLineEnd = originalLineEnd; + this.modifiedLineStart = modifiedLineStart; + this.modifiedLineEnd = modifiedLineEnd; + } + + public getType(): DiffEntryType { + if (this.originalLineStart === 0) { + return DiffEntryType.Insert; + } + if (this.modifiedLineStart === 0) { + return DiffEntryType.Delete; + } + return DiffEntryType.Equal; + } +} + +const enum DiffEditorLineClasses { + Insert = 'line-insert', + Delete = 'line-delete' +} + +class Diff { + readonly entries: DiffEntry[]; + + constructor(entries: DiffEntry[]) { + this.entries = entries; + } +} + +const diffReviewInsertIcon = registerIcon('diff-review-insert', Codicon.add, nls.localize('diffReviewInsertIcon', 'Icon for \'Insert\' in diff review.')); +const diffReviewRemoveIcon = registerIcon('diff-review-remove', Codicon.remove, nls.localize('diffReviewRemoveIcon', 'Icon for \'Remove\' in diff review.')); +const diffReviewCloseIcon = registerIcon('diff-review-close', Codicon.close, nls.localize('diffReviewCloseIcon', 'Icon for \'Close\' in diff review.')); + +export class DiffReview2 extends Disposable { + + private static _ttPolicy = DiffReview._ttPolicy; // TODO inline once DiffReview is deprecated. + + private readonly _diffEditor: DiffEditorWidget2; + private get _isVisible() { return this._isVisibleObs.get(); } + public readonly shadow: FastDomNode; + private readonly _actionBar: ActionBar; + public readonly actionBarContainer: FastDomNode; + public readonly domNode: FastDomNode; + private readonly _content: FastDomNode; + private readonly scrollbar: DomScrollableElement; + private _diffs: Diff[]; + private _currentDiff: Diff | null; + + private readonly _isVisibleObs = observableValue('isVisible', false); + + public readonly isVisible: IObservable = this._isVisibleObs; + + constructor( + diffEditor: DiffEditorWidget2, + @ILanguageService private readonly _languageService: ILanguageService, + @IAudioCueService private readonly _audioCueService: IAudioCueService, + @IConfigurationService private readonly _configurationService: IConfigurationService + ) { + super(); + this._diffEditor = diffEditor; + + this.shadow = createFastDomNode(document.createElement('div')); + this.shadow.setClassName('diff-review-shadow'); + + this.actionBarContainer = createFastDomNode(document.createElement('div')); + this.actionBarContainer.setClassName('diff-review-actions'); + this._actionBar = this._register(new ActionBar( + this.actionBarContainer.domNode + )); + + this._actionBar.push(new Action('diffreview.close', nls.localize('label.close', "Close"), 'close-diff-review ' + ThemeIcon.asClassName(diffReviewCloseIcon), true, async () => this.hide()), { label: false, icon: true }); + + this.domNode = createFastDomNode(document.createElement('div')); + this.domNode.setClassName('diff-review monaco-editor-background'); + + this._content = createFastDomNode(document.createElement('div')); + this._content.setClassName('diff-review-content'); + this._content.setAttribute('role', 'code'); + this.scrollbar = this._register(new DomScrollableElement(this._content.domNode, {})); + this.domNode.domNode.appendChild(this.scrollbar.getDomNode()); + + this._register(diffEditor.onDidUpdateDiff(() => { + if (!this._isVisible) { + return; + } + this._diffs = this._compute(); + this._render(); + })); + this._register(diffEditor.getModifiedEditor().onDidChangeCursorPosition(() => { + if (!this._isVisible) { + return; + } + this._render(); + })); + this._register(dom.addStandardDisposableListener(this.domNode.domNode, 'click', (e) => { + e.preventDefault(); + + const row = dom.findParentWithClass(e.target, 'diff-review-row'); + if (row) { + this._goToRow(row); + } + })); + this._register(dom.addStandardDisposableListener(this.domNode.domNode, 'keydown', (e) => { + if ( + e.equals(KeyCode.DownArrow) + || e.equals(KeyMod.CtrlCmd | KeyCode.DownArrow) + || e.equals(KeyMod.Alt | KeyCode.DownArrow) + ) { + e.preventDefault(); + this._goToRow(this._getNextRow(), 'next'); + } + + if ( + e.equals(KeyCode.UpArrow) + || e.equals(KeyMod.CtrlCmd | KeyCode.UpArrow) + || e.equals(KeyMod.Alt | KeyCode.UpArrow) + ) { + e.preventDefault(); + this._goToRow(this._getPrevRow(), 'previous'); + } + + if ( + e.equals(KeyCode.Escape) + || e.equals(KeyMod.CtrlCmd | KeyCode.Escape) + || e.equals(KeyMod.Alt | KeyCode.Escape) + || e.equals(KeyMod.Shift | KeyCode.Escape) + || e.equals(KeyCode.Space) + || e.equals(KeyCode.Enter) + ) { + e.preventDefault(); + this.accept(); + } + })); + this._register(this._configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('accessibility.verbosity.diffEditor')) { + this._diffEditor.updateOptions({ accessibilityVerbose: this._configurationService.getValue('accessibility.verbosity.diffEditor') }); + } + })); + this._diffs = []; + this._currentDiff = null; + } + + public prev(): void { + let index = 0; + + if (!this._isVisible) { + this._diffs = this._compute(); + } + + if (this._isVisible) { + let currentIndex = -1; + for (let i = 0, len = this._diffs.length; i < len; i++) { + if (this._diffs[i] === this._currentDiff) { + currentIndex = i; + break; + } + } + index = (this._diffs.length + currentIndex - 1); + } else { + index = this._findDiffIndex(this._diffEditor.getPosition()!); + } + + if (this._diffs.length === 0) { + // Nothing to do + return; + } + + index = index % this._diffs.length; + const entries = this._diffs[index].entries; + this._diffEditor.setPosition(new Position(entries[0].modifiedLineStart, 1)); + this._diffEditor.setSelection({ startColumn: 1, startLineNumber: entries[0].modifiedLineStart, endColumn: Constants.MAX_SAFE_SMALL_INTEGER, endLineNumber: entries[entries.length - 1].modifiedLineEnd }); + this._isVisibleObs.set(true, undefined); + this.layout(); + this._render(); + this._goToRow(this._getPrevRow(), 'previous'); + } + + public next(): void { + let index = 0; + + if (!this._isVisible) { + this._diffs = this._compute(); + } + + if (this._isVisible) { + let currentIndex = -1; + for (let i = 0, len = this._diffs.length; i < len; i++) { + if (this._diffs[i] === this._currentDiff) { + currentIndex = i; + break; + } + } + index = (currentIndex + 1); + } else { + index = this._findDiffIndex(this._diffEditor.getPosition()!); + } + + if (this._diffs.length === 0) { + // Nothing to do + return; + } + + index = index % this._diffs.length; + const entries = this._diffs[index].entries; + this._diffEditor.setPosition(new Position(entries[0].modifiedLineStart, 1)); + this._diffEditor.setSelection({ startColumn: 1, startLineNumber: entries[0].modifiedLineStart, endColumn: Constants.MAX_SAFE_SMALL_INTEGER, endLineNumber: entries[entries.length - 1].modifiedLineEnd }); + this._isVisibleObs.set(true, undefined); + this.layout(); + this._render(); + this._goToRow(this._getNextRow(), 'next'); + } + + private accept(): void { + let jumpToLineNumber = -1; + const current = this._getCurrentFocusedRow(); + if (current) { + const lineNumber = parseInt(current.getAttribute('data-line')!, 10); + if (!isNaN(lineNumber)) { + jumpToLineNumber = lineNumber; + } + } + this.hide(); + + if (jumpToLineNumber !== -1) { + this._diffEditor.setPosition(new Position(jumpToLineNumber, 1)); + this._diffEditor.revealPosition(new Position(jumpToLineNumber, 1), ScrollType.Immediate); + } + } + + public hide(): void { + this._isVisibleObs.set(false, undefined); + this._diffEditor.focus(); + this.layout(); + this._render(); + } + + private _getPrevRow(): HTMLElement { + const current = this._getCurrentFocusedRow(); + if (!current) { + return this._getFirstRow(); + } + if (current.previousElementSibling) { + return current.previousElementSibling; + } + return current; + } + + private _getNextRow(): HTMLElement { + const current = this._getCurrentFocusedRow(); + if (!current) { + return this._getFirstRow(); + } + if (current.nextElementSibling) { + return current.nextElementSibling; + } + return current; + } + + private _getFirstRow(): HTMLElement { + return this.domNode.domNode.querySelector('.diff-review-row'); + } + + private _getCurrentFocusedRow(): HTMLElement | null { + const result = document.activeElement; + if (result && /diff-review-row/.test(result.className)) { + return result; + } + return null; + } + + private _goToRow(row: HTMLElement, type?: 'next' | 'previous'): void { + const current = this._getCurrentFocusedRow(); + row.tabIndex = 0; + row.focus(); + if (current && current !== row) { + current.tabIndex = -1; + } + const element = !type ? current : type === 'next' ? current?.nextElementSibling : current?.previousElementSibling; + if (element?.classList.contains(DiffEditorLineClasses.Insert)) { + this._audioCueService.playAudioCue(AudioCue.diffLineInserted, true); + } else if (element?.classList.contains(DiffEditorLineClasses.Delete)) { + this._audioCueService.playAudioCue(AudioCue.diffLineDeleted, true); + } + this.scrollbar.scanDomNode(); + } + + private _width: number = 0; + private _top: number = 0; + private _height: number = 0; + + public layout(top: number = this._top, width: number = this._width, height: number = this._height): void { + this._width = width; + this._top = top; + this._height = height; + + this.shadow.setTop(top - 6); + this.shadow.setWidth(width); + this.shadow.setHeight(this._isVisible ? 6 : 0); + this.domNode.setTop(top); + this.domNode.setWidth(width); + this.domNode.setHeight(height); + this._content.setHeight(height); + this._content.setWidth(width); + + if (this._isVisible) { + this.domNode.setDisplay('block'); + this.actionBarContainer.setAttribute('aria-hidden', 'false'); + this.actionBarContainer.setDisplay('block'); + } else { + this.domNode.setDisplay('none'); + this.actionBarContainer.setAttribute('aria-hidden', 'true'); + this.actionBarContainer.setDisplay('none'); + } + } + + private _compute(): Diff[] { + const lineChanges = this._diffEditor.getLineChanges(); + if (!lineChanges || lineChanges.length === 0) { + return []; + } + const originalModel = this._diffEditor.getOriginalEditor().getModel(); + const modifiedModel = this._diffEditor.getModifiedEditor().getModel(); + + if (!originalModel || !modifiedModel) { + return []; + } + + return DiffReview2._mergeAdjacent(lineChanges, originalModel.getLineCount(), modifiedModel.getLineCount()); + } + + private static _mergeAdjacent(lineChanges: ILineChange[], originalLineCount: number, modifiedLineCount: number): Diff[] { + if (!lineChanges || lineChanges.length === 0) { + return []; + } + + const diffs: Diff[] = []; + let diffsLength = 0; + + for (let i = 0, len = lineChanges.length; i < len; i++) { + const lineChange = lineChanges[i]; + + const originalStart = lineChange.originalStartLineNumber; + const originalEnd = lineChange.originalEndLineNumber; + const modifiedStart = lineChange.modifiedStartLineNumber; + const modifiedEnd = lineChange.modifiedEndLineNumber; + + const r: DiffEntry[] = []; + let rLength = 0; + + // Emit before anchors + { + const originalEqualAbove = (originalEnd === 0 ? originalStart : originalStart - 1); + const modifiedEqualAbove = (modifiedEnd === 0 ? modifiedStart : modifiedStart - 1); + + // Make sure we don't step into the previous diff + let minOriginal = 1; + let minModified = 1; + if (i > 0) { + const prevLineChange = lineChanges[i - 1]; + + if (prevLineChange.originalEndLineNumber === 0) { + minOriginal = prevLineChange.originalStartLineNumber + 1; + } else { + minOriginal = prevLineChange.originalEndLineNumber + 1; + } + + if (prevLineChange.modifiedEndLineNumber === 0) { + minModified = prevLineChange.modifiedStartLineNumber + 1; + } else { + minModified = prevLineChange.modifiedEndLineNumber + 1; + } + } + + let fromOriginal = originalEqualAbove - DIFF_LINES_PADDING + 1; + let fromModified = modifiedEqualAbove - DIFF_LINES_PADDING + 1; + if (fromOriginal < minOriginal) { + const delta = minOriginal - fromOriginal; + fromOriginal = fromOriginal + delta; + fromModified = fromModified + delta; + } + if (fromModified < minModified) { + const delta = minModified - fromModified; + fromOriginal = fromOriginal + delta; + fromModified = fromModified + delta; + } + + r[rLength++] = new DiffEntry( + fromOriginal, originalEqualAbove, + fromModified, modifiedEqualAbove + ); + } + + // Emit deleted lines + { + if (originalEnd !== 0) { + r[rLength++] = new DiffEntry(originalStart, originalEnd, 0, 0); + } + } + + // Emit inserted lines + { + if (modifiedEnd !== 0) { + r[rLength++] = new DiffEntry(0, 0, modifiedStart, modifiedEnd); + } + } + + // Emit after anchors + { + const originalEqualBelow = (originalEnd === 0 ? originalStart + 1 : originalEnd + 1); + const modifiedEqualBelow = (modifiedEnd === 0 ? modifiedStart + 1 : modifiedEnd + 1); + + // Make sure we don't step into the next diff + let maxOriginal = originalLineCount; + let maxModified = modifiedLineCount; + if (i + 1 < len) { + const nextLineChange = lineChanges[i + 1]; + + if (nextLineChange.originalEndLineNumber === 0) { + maxOriginal = nextLineChange.originalStartLineNumber; + } else { + maxOriginal = nextLineChange.originalStartLineNumber - 1; + } + + if (nextLineChange.modifiedEndLineNumber === 0) { + maxModified = nextLineChange.modifiedStartLineNumber; + } else { + maxModified = nextLineChange.modifiedStartLineNumber - 1; + } + } + + let toOriginal = originalEqualBelow + DIFF_LINES_PADDING - 1; + let toModified = modifiedEqualBelow + DIFF_LINES_PADDING - 1; + + if (toOriginal > maxOriginal) { + const delta = maxOriginal - toOriginal; + toOriginal = toOriginal + delta; + toModified = toModified + delta; + } + if (toModified > maxModified) { + const delta = maxModified - toModified; + toOriginal = toOriginal + delta; + toModified = toModified + delta; + } + + r[rLength++] = new DiffEntry( + originalEqualBelow, toOriginal, + modifiedEqualBelow, toModified, + ); + } + + diffs[diffsLength++] = new Diff(r); + } + + // Merge adjacent diffs + let curr: DiffEntry[] = diffs[0].entries; + const r: Diff[] = []; + let rLength = 0; + for (let i = 1, len = diffs.length; i < len; i++) { + const thisDiff = diffs[i].entries; + + const currLast = curr[curr.length - 1]; + const thisFirst = thisDiff[0]; + + if ( + currLast.getType() === DiffEntryType.Equal + && thisFirst.getType() === DiffEntryType.Equal + && thisFirst.originalLineStart <= currLast.originalLineEnd + ) { + // We are dealing with equal lines that overlap + + curr[curr.length - 1] = new DiffEntry( + currLast.originalLineStart, thisFirst.originalLineEnd, + currLast.modifiedLineStart, thisFirst.modifiedLineEnd + ); + curr = curr.concat(thisDiff.slice(1)); + continue; + } + + r[rLength++] = new Diff(curr); + curr = thisDiff; + } + r[rLength++] = new Diff(curr); + return r; + } + + private _findDiffIndex(pos: Position): number { + const lineNumber = pos.lineNumber; + for (let i = 0, len = this._diffs.length; i < len; i++) { + const diff = this._diffs[i].entries; + const lastModifiedLine = diff[diff.length - 1].modifiedLineEnd; + if (lineNumber <= lastModifiedLine) { + return i; + } + } + return 0; + } + + private _render(): void { + + const originalOptions = this._diffEditor.getOriginalEditor().getOptions(); + const modifiedOptions = this._diffEditor.getModifiedEditor().getOptions(); + + const originalModel = this._diffEditor.getOriginalEditor().getModel(); + const modifiedModel = this._diffEditor.getModifiedEditor().getModel(); + + const originalModelOpts = originalModel!.getOptions(); + const modifiedModelOpts = modifiedModel!.getOptions(); + + if (!this._isVisible || !originalModel || !modifiedModel) { + dom.clearNode(this._content.domNode); + this._currentDiff = null; + this.scrollbar.scanDomNode(); + return; + } + + const diffIndex = this._findDiffIndex(this._diffEditor.getPosition()!); + + if (this._diffs[diffIndex] === this._currentDiff) { + return; + } + this._currentDiff = this._diffs[diffIndex]; + + const diffs = this._diffs[diffIndex].entries; + const container = document.createElement('div'); + container.className = 'diff-review-table'; + container.setAttribute('role', 'list'); + container.setAttribute('aria-label', 'Difference review. Use "Stage | Unstage | Revert Selected Ranges" commands'); + applyFontInfo(container, modifiedOptions.get(EditorOption.fontInfo)); + + let minOriginalLine = 0; + let maxOriginalLine = 0; + let minModifiedLine = 0; + let maxModifiedLine = 0; + for (let i = 0, len = diffs.length; i < len; i++) { + const diffEntry = diffs[i]; + const originalLineStart = diffEntry.originalLineStart; + const originalLineEnd = diffEntry.originalLineEnd; + const modifiedLineStart = diffEntry.modifiedLineStart; + const modifiedLineEnd = diffEntry.modifiedLineEnd; + + if (originalLineStart !== 0 && ((minOriginalLine === 0 || originalLineStart < minOriginalLine))) { + minOriginalLine = originalLineStart; + } + if (originalLineEnd !== 0 && ((maxOriginalLine === 0 || originalLineEnd > maxOriginalLine))) { + maxOriginalLine = originalLineEnd; + } + if (modifiedLineStart !== 0 && ((minModifiedLine === 0 || modifiedLineStart < minModifiedLine))) { + minModifiedLine = modifiedLineStart; + } + if (modifiedLineEnd !== 0 && ((maxModifiedLine === 0 || modifiedLineEnd > maxModifiedLine))) { + maxModifiedLine = modifiedLineEnd; + } + } + + const header = document.createElement('div'); + header.className = 'diff-review-row'; + + const cell = document.createElement('div'); + cell.className = 'diff-review-cell diff-review-summary'; + const originalChangedLinesCnt = maxOriginalLine - minOriginalLine + 1; + const modifiedChangedLinesCnt = maxModifiedLine - minModifiedLine + 1; + cell.appendChild(document.createTextNode(`${diffIndex + 1}/${this._diffs.length}: @@ -${minOriginalLine},${originalChangedLinesCnt} +${minModifiedLine},${modifiedChangedLinesCnt} @@`)); + header.setAttribute('data-line', String(minModifiedLine)); + + const getAriaLines = (lines: number) => { + if (lines === 0) { + return nls.localize('no_lines_changed', "no lines changed"); + } else if (lines === 1) { + return nls.localize('one_line_changed', "1 line changed"); + } else { + return nls.localize('more_lines_changed', "{0} lines changed", lines); + } + }; + + const originalChangedLinesCntAria = getAriaLines(originalChangedLinesCnt); + const modifiedChangedLinesCntAria = getAriaLines(modifiedChangedLinesCnt); + header.setAttribute('aria-label', nls.localize({ + key: 'header', + comment: [ + 'This is the ARIA label for a git diff header.', + 'A git diff header looks like this: @@ -154,12 +159,39 @@.', + 'That encodes that at original line 154 (which is now line 159), 12 lines were removed/changed with 39 lines.', + 'Variables 0 and 1 refer to the diff index out of total number of diffs.', + 'Variables 2 and 4 will be numbers (a line number).', + 'Variables 3 and 5 will be "no lines changed", "1 line changed" or "X lines changed", localized separately.' + ] + }, "Difference {0} of {1}: original line {2}, {3}, modified line {4}, {5}", (diffIndex + 1), this._diffs.length, minOriginalLine, originalChangedLinesCntAria, minModifiedLine, modifiedChangedLinesCntAria)); + header.appendChild(cell); + + // @@ -504,7 +517,7 @@ + header.setAttribute('role', 'listitem'); + container.appendChild(header); + + const lineHeight = modifiedOptions.get(EditorOption.lineHeight); + let modLine = minModifiedLine; + for (let i = 0, len = diffs.length; i < len; i++) { + const diffEntry = diffs[i]; + DiffReview2._renderSection(container, diffEntry, modLine, lineHeight, this._width, originalOptions, originalModel, originalModelOpts, modifiedOptions, modifiedModel, modifiedModelOpts, this._languageService.languageIdCodec); + if (diffEntry.modifiedLineStart !== 0) { + modLine = diffEntry.modifiedLineEnd; + } + } + + dom.clearNode(this._content.domNode); + this._content.domNode.appendChild(container); + this.scrollbar.scanDomNode(); + } + + private static _renderSection( + dest: HTMLElement, diffEntry: DiffEntry, modLine: number, lineHeight: number, width: number, + originalOptions: IComputedEditorOptions, originalModel: ITextModel, originalModelOpts: TextModelResolvedOptions, + modifiedOptions: IComputedEditorOptions, modifiedModel: ITextModel, modifiedModelOpts: TextModelResolvedOptions, + languageIdCodec: ILanguageIdCodec + ): void { + + const type = diffEntry.getType(); + + let rowClassName: string = 'diff-review-row'; + let lineNumbersExtraClassName: string = ''; + const spacerClassName: string = 'diff-review-spacer'; + let spacerIcon: ThemeIcon | null = null; + switch (type) { + case DiffEntryType.Insert: + rowClassName = 'diff-review-row line-insert'; + lineNumbersExtraClassName = ' char-insert'; + spacerIcon = diffReviewInsertIcon; + break; + case DiffEntryType.Delete: + rowClassName = 'diff-review-row line-delete'; + lineNumbersExtraClassName = ' char-delete'; + spacerIcon = diffReviewRemoveIcon; + break; + } + + const originalLineStart = diffEntry.originalLineStart; + const originalLineEnd = diffEntry.originalLineEnd; + const modifiedLineStart = diffEntry.modifiedLineStart; + const modifiedLineEnd = diffEntry.modifiedLineEnd; + + const cnt = Math.max( + modifiedLineEnd - modifiedLineStart, + originalLineEnd - originalLineStart + ); + + const originalLayoutInfo = originalOptions.get(EditorOption.layoutInfo); + const originalLineNumbersWidth = originalLayoutInfo.glyphMarginWidth + originalLayoutInfo.lineNumbersWidth; + + const modifiedLayoutInfo = modifiedOptions.get(EditorOption.layoutInfo); + const modifiedLineNumbersWidth = 10 + modifiedLayoutInfo.glyphMarginWidth + modifiedLayoutInfo.lineNumbersWidth; + + for (let i = 0; i <= cnt; i++) { + const originalLine = (originalLineStart === 0 ? 0 : originalLineStart + i); + const modifiedLine = (modifiedLineStart === 0 ? 0 : modifiedLineStart + i); + + const row = document.createElement('div'); + row.style.minWidth = width + 'px'; + row.className = rowClassName; + row.setAttribute('role', 'listitem'); + if (modifiedLine !== 0) { + modLine = modifiedLine; + } + row.setAttribute('data-line', String(modLine)); + + const cell = document.createElement('div'); + cell.className = 'diff-review-cell'; + cell.style.height = `${lineHeight}px`; + row.appendChild(cell); + + const originalLineNumber = document.createElement('span'); + originalLineNumber.style.width = (originalLineNumbersWidth + 'px'); + originalLineNumber.style.minWidth = (originalLineNumbersWidth + 'px'); + originalLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName; + if (originalLine !== 0) { + originalLineNumber.appendChild(document.createTextNode(String(originalLine))); + } else { + originalLineNumber.innerText = '\u00a0'; + } + cell.appendChild(originalLineNumber); + + const modifiedLineNumber = document.createElement('span'); + modifiedLineNumber.style.width = (modifiedLineNumbersWidth + 'px'); + modifiedLineNumber.style.minWidth = (modifiedLineNumbersWidth + 'px'); + modifiedLineNumber.style.paddingRight = '10px'; + modifiedLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName; + if (modifiedLine !== 0) { + modifiedLineNumber.appendChild(document.createTextNode(String(modifiedLine))); + } else { + modifiedLineNumber.innerText = '\u00a0'; + } + cell.appendChild(modifiedLineNumber); + + const spacer = document.createElement('span'); + spacer.className = spacerClassName; + + if (spacerIcon) { + const spacerCodicon = document.createElement('span'); + spacerCodicon.className = ThemeIcon.asClassName(spacerIcon); + spacerCodicon.innerText = '\u00a0\u00a0'; + spacer.appendChild(spacerCodicon); + } else { + spacer.innerText = '\u00a0\u00a0'; + } + cell.appendChild(spacer); + + let lineContent: string; + if (modifiedLine !== 0) { + let html: string | TrustedHTML = this._renderLine(modifiedModel, modifiedOptions, modifiedModelOpts.tabSize, modifiedLine, languageIdCodec); + if (DiffReview2._ttPolicy) { + html = DiffReview2._ttPolicy.createHTML(html as string); + } + cell.insertAdjacentHTML('beforeend', html as string); + lineContent = modifiedModel.getLineContent(modifiedLine); + } else { + let html: string | TrustedHTML = this._renderLine(originalModel, originalOptions, originalModelOpts.tabSize, originalLine, languageIdCodec); + if (DiffReview2._ttPolicy) { + html = DiffReview2._ttPolicy.createHTML(html as string); + } + cell.insertAdjacentHTML('beforeend', html as string); + lineContent = originalModel.getLineContent(originalLine); + } + + if (lineContent.length === 0) { + lineContent = nls.localize('blankLine', "blank"); + } + + let ariaLabel: string = ''; + switch (type) { + case DiffEntryType.Equal: + if (originalLine === modifiedLine) { + ariaLabel = nls.localize({ key: 'unchangedLine', comment: ['The placeholders are contents of the line and should not be translated.'] }, "{0} unchanged line {1}", lineContent, originalLine); + } else { + ariaLabel = nls.localize('equalLine', "{0} original line {1} modified line {2}", lineContent, originalLine, modifiedLine); + } + break; + case DiffEntryType.Insert: + ariaLabel = nls.localize('insertLine', "+ {0} modified line {1}", lineContent, modifiedLine); + break; + case DiffEntryType.Delete: + ariaLabel = nls.localize('deleteLine', "- {0} original line {1}", lineContent, originalLine); + break; + } + row.setAttribute('aria-label', ariaLabel); + + dest.appendChild(row); + } + } + + private static _renderLine(model: ITextModel, options: IComputedEditorOptions, tabSize: number, lineNumber: number, languageIdCodec: ILanguageIdCodec): string { + const lineContent = model.getLineContent(lineNumber); + const fontInfo = options.get(EditorOption.fontInfo); + const lineTokens = LineTokens.createEmpty(lineContent, languageIdCodec); + const isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, model.mightContainNonBasicASCII()); + const containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, model.mightContainRTL()); + const r = renderViewLine(new RenderLineInput( + (fontInfo.isMonospace && !options.get(EditorOption.disableMonospaceOptimizations)), + fontInfo.canUseHalfwidthRightwardsArrow, + lineContent, + false, + isBasicASCII, + containsRTL, + 0, + lineTokens, + [], + tabSize, + 0, + fontInfo.spaceWidth, + fontInfo.middotWidth, + fontInfo.wsmiddotWidth, + options.get(EditorOption.stopRenderingLineAfter), + options.get(EditorOption.renderWhitespace), + options.get(EditorOption.renderControlCharacters), + options.get(EditorOption.fontLigatures) !== EditorFontLigatures.OFF, + null + )); + + return r.html; + } +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/inlineDiffDeletedCodeMargin.ts b/src/vs/editor/browser/widget/diffEditorWidget2/inlineDiffDeletedCodeMargin.ts new file mode 100644 index 00000000000..9e879b8240d --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/inlineDiffDeletedCodeMargin.ts @@ -0,0 +1,172 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { addStandardDisposableListener, getDomNodePagePosition } from 'vs/base/browser/dom'; +import { Action } from 'vs/base/common/actions'; +import { Codicon } from 'vs/base/common/codicons'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { isIOS } from 'vs/base/common/platform'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; +import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; +import { DiffEditorWidget2 } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { EndOfLineSequence, ITextModel } from 'vs/editor/common/model'; +import { localize } from 'vs/nls'; +import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; + +export class InlineDiffDeletedCodeMargin extends Disposable { + private readonly _diffActions: HTMLElement; + + private _visibility: boolean = false; + + get visibility(): boolean { + return this._visibility; + } + + set visibility(_visibility: boolean) { + if (this._visibility !== _visibility) { + this._visibility = _visibility; + this._diffActions.style.visibility = _visibility ? 'visible' : 'hidden'; + } + } + + constructor( + private readonly _getViewZoneId: () => string, + private readonly _marginDomNode: HTMLElement, + private readonly _modifiedEditor: CodeEditorWidget, + private readonly _diff: LineRangeMapping, + private readonly _editor: DiffEditorWidget2, + private readonly _viewLineCounts: number[], + private readonly _originalTextModel: ITextModel, + private readonly _contextMenuService: IContextMenuService, + private readonly _clipboardService: IClipboardService, + ) { + super(); + + // make sure the diff margin shows above overlay. + this._marginDomNode.style.zIndex = '10'; + + this._diffActions = document.createElement('div'); + this._diffActions.className = ThemeIcon.asClassName(Codicon.lightBulb) + ' lightbulb-glyph'; + this._diffActions.style.position = 'absolute'; + const lineHeight = this._modifiedEditor.getOption(EditorOption.lineHeight); + this._diffActions.style.right = '0px'; + this._diffActions.style.visibility = 'hidden'; + this._diffActions.style.height = `${lineHeight}px`; + this._diffActions.style.lineHeight = `${lineHeight}px`; + this._marginDomNode.appendChild(this._diffActions); + + let currentLineNumberOffset = 0; + + const useShadowDOM = _modifiedEditor.getOption(EditorOption.useShadowDOM) && !isIOS; // Do not use shadow dom on IOS #122035 + const showContextMenu = (x: number, y: number) => { + this._contextMenuService.showContextMenu({ + domForShadowRoot: useShadowDOM ? _modifiedEditor.getDomNode() ?? undefined : undefined, + getAnchor: () => ({ x, y }), + getActions: () => { + const actions: Action[] = []; + const isDeletion = _diff.modifiedRange.isEmpty; + + // default action + actions.push(new Action( + 'diff.clipboard.copyDeletedContent', + isDeletion + ? (_diff.originalRange.length > 1 + ? localize('diff.clipboard.copyDeletedLinesContent.label', "Copy deleted lines") + : localize('diff.clipboard.copyDeletedLinesContent.single.label', "Copy deleted line")) + : (_diff.originalRange.length > 1 + ? localize('diff.clipboard.copyChangedLinesContent.label', "Copy changed lines") + : localize('diff.clipboard.copyChangedLinesContent.single.label', "Copy changed line")), + undefined, + true, + async () => { + const originalText = this._originalTextModel.getValueInRange(_diff.originalRange.toExclusiveRange()); + await this._clipboardService.writeText(originalText); + } + )); + + if (_diff.originalRange.length > 1) { + actions.push(new Action( + 'diff.clipboard.copyDeletedLineContent', + isDeletion + ? localize('diff.clipboard.copyDeletedLineContent.label', "Copy deleted line ({0})", _diff.originalRange.startLineNumber + currentLineNumberOffset) + : localize('diff.clipboard.copyChangedLineContent.label', "Copy changed line ({0})", _diff.originalRange.startLineNumber + currentLineNumberOffset), + undefined, + true, + async () => { + let lineContent = this._originalTextModel.getLineContent(_diff.originalRange.startLineNumber + currentLineNumberOffset); + if (lineContent === '') { + // empty line -> new line + const eof = this._originalTextModel.getEndOfLineSequence(); + lineContent = eof === EndOfLineSequence.LF ? '\n' : '\r\n'; + } + await this._clipboardService.writeText(lineContent); + } + )); + } + const readOnly = _modifiedEditor.getOption(EditorOption.readOnly); + if (!readOnly) { + actions.push(new Action('diff.inline.revertChange', localize('diff.inline.revertChange.label', "Revert this change"), undefined, true, async () => { + this._editor.revert(this._diff); + })); + } + return actions; + }, + autoSelectFirstItem: true + }); + }; + + this._register(addStandardDisposableListener(this._diffActions, 'mousedown', e => { + const { top, height } = getDomNodePagePosition(this._diffActions); + const pad = Math.floor(lineHeight / 3); + e.preventDefault(); + showContextMenu(e.posx, top + height + pad); + })); + + this._register(_modifiedEditor.onMouseMove((e: IEditorMouseEvent) => { + if ((e.target.type === MouseTargetType.CONTENT_VIEW_ZONE || e.target.type === MouseTargetType.GUTTER_VIEW_ZONE) && e.target.detail.viewZoneId === this._getViewZoneId()) { + currentLineNumberOffset = this._updateLightBulbPosition(this._marginDomNode, e.event.browserEvent.y, lineHeight); + this.visibility = true; + } else { + this.visibility = false; + } + })); + + this._register(_modifiedEditor.onMouseDown((e: IEditorMouseEvent) => { + if (!e.event.rightButton) { return; } + + if (e.target.type === MouseTargetType.CONTENT_VIEW_ZONE || e.target.type === MouseTargetType.GUTTER_VIEW_ZONE) { + const viewZoneId = e.target.detail.viewZoneId; + + if (viewZoneId === this._getViewZoneId()) { + e.event.preventDefault(); + currentLineNumberOffset = this._updateLightBulbPosition(this._marginDomNode, e.event.browserEvent.y, lineHeight); + showContextMenu(e.event.posx, e.event.posy + lineHeight); + } + } + })); + } + + private _updateLightBulbPosition(marginDomNode: HTMLElement, y: number, lineHeight: number): number { + const { top } = getDomNodePagePosition(marginDomNode); + const offset = y - top; + const lineNumberOffset = Math.floor(offset / lineHeight); + const newTop = lineNumberOffset * lineHeight; + this._diffActions.style.top = `${newTop}px`; + if (this._viewLineCounts) { + let acc = 0; + for (let i = 0; i < this._viewLineCounts.length; i++) { + acc += this._viewLineCounts[i]; + if (lineNumberOffset < acc) { + return i; + } + } + } + return lineNumberOffset; + } +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/lineAlignment.ts b/src/vs/editor/browser/widget/diffEditorWidget2/lineAlignment.ts new file mode 100644 index 00000000000..8fca03ee704 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/lineAlignment.ts @@ -0,0 +1,569 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { $ } from 'vs/base/browser/dom'; +import { ArrayQueue } from 'vs/base/common/arrays'; +import { RunOnceScheduler } from 'vs/base/common/async'; +import { Codicon } from 'vs/base/common/codicons'; +import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { IObservable, derived, observableFromEvent, observableValue } from 'vs/base/common/observable'; +import { autorun, autorunWithStore2 } from 'vs/base/common/observableImpl/autorun'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { assertIsDefined } from 'vs/base/common/types'; +import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; +import { IViewZone } from 'vs/editor/browser/editorBrowser'; +import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; +import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; +import { diffDeleteDecoration, diffRemoveIcon } from 'vs/editor/browser/widget/diffEditorWidget2/decorations'; +import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors'; +import { DiffEditorViewModel, DiffMapping } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel'; +import { DiffEditorWidget2 } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2'; +import { InlineDiffDeletedCodeMargin } from 'vs/editor/browser/widget/diffEditorWidget2/inlineDiffDeletedCodeMargin'; +import { LineSource, RenderOptions, renderLines } from 'vs/editor/browser/widget/diffEditorWidget2/renderLines'; +import { animatedObservable, joinCombine } from 'vs/editor/browser/widget/diffEditorWidget2/utils'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { Position } from 'vs/editor/common/core/position'; +import { LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { ScrollType } from 'vs/editor/common/editorCommon'; +import { BackgroundTokenizationState } from 'vs/editor/common/tokenizationTextModelPart'; +import { InlineDecoration, InlineDecorationType } from 'vs/editor/common/viewModel'; +import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { DiffEditorOptions } from './diffEditorOptions'; + +/** + * Ensures both editors have the same height by aligning unchanged lines. + * In inline view mode, inserts viewzones to show deleted code from the original text model in the modified code editor. + * Synchronizes scrolling. + */ +export class ViewZoneManager extends Disposable { + private readonly _originalTopPadding = observableValue('originalTopPadding', 0); + private readonly _originalScrollTop: IObservable; + private readonly _originalScrollOffset = observableValue('originalScrollOffset', 0); + private readonly _originalScrollOffsetAnimated = animatedObservable(this._originalScrollOffset, this._store); + + private readonly _modifiedTopPadding = observableValue('modifiedTopPadding', 0); + private readonly _modifiedScrollTop: IObservable; + private readonly _modifiedScrollOffset = observableValue('modifiedScrollOffset', 0); + private readonly _modifiedScrollOffsetAnimated = animatedObservable(this._modifiedScrollOffset, this._store); + + constructor( + private readonly _editors: DiffEditorEditors, + private readonly _diffModel: IObservable, + private readonly _options: DiffEditorOptions, + private readonly _diffEditorWidget: DiffEditorWidget2, + private readonly _canIgnoreViewZoneUpdateEvent: () => boolean, + @IClipboardService private readonly _clipboardService: IClipboardService, + @IContextMenuService private readonly _contextMenuService: IContextMenuService, + ) { + super(); + + let isChangingViewZones = false; + const state = observableValue('state', 0); + + const updateImmediately = this._register(new RunOnceScheduler(() => { + state.set(state.get() + 1, undefined); + }, 0)); + + this._register(this._editors.original.onDidChangeViewZones((args) => { if (!isChangingViewZones && !this._canIgnoreViewZoneUpdateEvent()) { updateImmediately.schedule(); } })); + this._register(this._editors.modified.onDidChangeViewZones((args) => { if (!isChangingViewZones && !this._canIgnoreViewZoneUpdateEvent()) { updateImmediately.schedule(); } })); + this._register(this._editors.original.onDidChangeConfiguration((args) => { if (args.hasChanged(EditorOption.wrappingInfo)) { updateImmediately.schedule(); } })); + this._register(this._editors.modified.onDidChangeConfiguration((args) => { if (args.hasChanged(EditorOption.wrappingInfo)) { updateImmediately.schedule(); } })); + + const originalModelTokenizationCompleted = this._diffModel.map(m => + m ? observableFromEvent(m.model.original.onDidChangeTokens, () => m.model.original.tokenization.backgroundTokenizationState === BackgroundTokenizationState.Completed) : undefined + ).map((m, reader) => m?.read(reader)); + + const alignmentViewZoneIdsOrig = new Set(); + const alignmentViewZoneIdsMod = new Set(); + + const alignments = derived('alignments', (reader) => { + const diffModel = this._diffModel.read(reader); + const diff = diffModel?.diff.read(reader); + if (!diffModel || !diff) { return null; } + state.read(reader); + return computeRangeAlignment(this._editors.original, this._editors.modified, diff.mappings, alignmentViewZoneIdsOrig, alignmentViewZoneIdsMod); + }); + + const alignmentsSyncedMovedText = derived('alignments', (reader) => { + const syncedMovedText = this._diffModel.read(reader)?.syncedMovedTexts.read(reader); + if (!syncedMovedText) { return null; } + state.read(reader); + const mappings = syncedMovedText.changes.map(c => new DiffMapping(c)); + // TODO dont include alignments outside syncedMovedText + return computeRangeAlignment(this._editors.original, this._editors.modified, mappings, alignmentViewZoneIdsOrig, alignmentViewZoneIdsMod); + }); + + function createFakeLinesDiv(): HTMLElement { + const r = document.createElement('div'); + r.className = 'diagonal-fill'; + return r; + } + + const alignmentViewZonesDisposables = this._register(new DisposableStore()); + const alignmentViewZones = derived<{ orig: IViewZoneWithZoneId[]; mod: IViewZoneWithZoneId[] }>('alignment viewzones', (reader) => { + alignmentViewZonesDisposables.clear(); + + const alignmentsVal = alignments.read(reader) || []; + + const origViewZones: IViewZoneWithZoneId[] = []; + const modViewZones: IViewZoneWithZoneId[] = []; + + const modifiedTopPaddingVal = this._modifiedTopPadding.read(reader); + if (modifiedTopPaddingVal > 0) { + modViewZones.push({ + afterLineNumber: 0, + domNode: document.createElement('div'), + heightInPx: modifiedTopPaddingVal, + showInHiddenAreas: true, + }); + } + const originalTopPaddingVal = this._originalTopPadding.read(reader); + if (originalTopPaddingVal > 0) { + origViewZones.push({ + afterLineNumber: 0, + domNode: document.createElement('div'), + heightInPx: originalTopPaddingVal, + showInHiddenAreas: true, + }); + } + + const renderSideBySide = this._options.renderSideBySide.read(reader); + + const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined; + if (deletedCodeLineBreaksComputer) { + for (const a of alignmentsVal) { + if (a.diff) { + for (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) { + deletedCodeLineBreaksComputer?.addRequest(this._editors.original.getModel()!.getLineContent(i), null, null); + } + } + } + } + + const lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? []; + let lineBreakDataIdx = 0; + + const modLineHeight = this._editors.modified.getOption(EditorOption.lineHeight); + + const syncedMovedText = this._diffModel.read(reader)?.syncedMovedTexts.read(reader); + + const mightContainNonBasicASCII = this._editors.original.getModel()?.mightContainNonBasicASCII() ?? false; + const mightContainRTL = this._editors.original.getModel()?.mightContainRTL() ?? false; + const renderOptions = RenderOptions.fromEditor(this._editors.modified); + + for (const a of alignmentsVal) { + if (a.diff && !renderSideBySide) { + if (!a.originalRange.isEmpty) { + originalModelTokenizationCompleted.read(reader); // Update view-zones once tokenization completes + + const deletedCodeDomNode = document.createElement('div'); + deletedCodeDomNode.classList.add('view-lines', 'line-delete', 'monaco-mouse-cursor-text'); + const source = new LineSource( + a.originalRange.mapToLineArray(l => this._editors.original.getModel()!.tokenization.getLineTokens(l)), + a.originalRange.mapToLineArray(_ => lineBreakData[lineBreakDataIdx++]), + mightContainNonBasicASCII, + mightContainRTL, + ); + const decorations: InlineDecoration[] = []; + for (const i of a.diff.innerChanges || []) { + decorations.push(new InlineDecoration( + i.originalRange.delta(-(a.diff.originalRange.startLineNumber - 1)), + diffDeleteDecoration.className!, + InlineDecorationType.Regular + )); + } + const result = renderLines(source, renderOptions, decorations, deletedCodeDomNode); + + const marginDomNode = document.createElement('div'); + marginDomNode.className = 'inline-deleted-margin-view-zone'; + applyFontInfo(marginDomNode, renderOptions.fontInfo); + + if (this._options.renderIndicators.read(reader)) { + for (let i = 0; i < result.heightInLines; i++) { + const marginElement = document.createElement('div'); + marginElement.className = `delete-sign ${ThemeIcon.asClassName(diffRemoveIcon)}`; + marginElement.setAttribute('style', `position:absolute;top:${i * modLineHeight}px;width:${renderOptions.lineDecorationsWidth}px;height:${modLineHeight}px;right:0;`); + marginDomNode.appendChild(marginElement); + } + } + + let zoneId: string | undefined = undefined; + alignmentViewZonesDisposables.add( + new InlineDiffDeletedCodeMargin( + () => assertIsDefined(zoneId), + marginDomNode, + this._editors.modified, + a.diff, + this._diffEditorWidget, + result.viewLineCounts, + this._editors.original.getModel()!, + this._contextMenuService, + this._clipboardService, + ) + ); + + for (let i = 0; i < result.viewLineCounts.length; i++) { + const count = result.viewLineCounts[i]; + // Account for wrapped lines in the (collapsed) original editor (which doesn't wrap lines). + if (count > 1) { + origViewZones.push({ + afterLineNumber: a.originalRange.startLineNumber + i, + domNode: createFakeLinesDiv(), + heightInPx: (count - 1) * modLineHeight, + showInHiddenAreas: true, + }); + } + } + + modViewZones.push({ + afterLineNumber: a.modifiedRange.startLineNumber - 1, + domNode: deletedCodeDomNode, + heightInPx: result.heightInLines * modLineHeight, + minWidthInPx: result.minWidthInPx, + marginDomNode, + setZoneId(id) { zoneId = id; }, + showInHiddenAreas: true, + }); + } + + const marginDomNode = document.createElement('div'); + marginDomNode.className = 'gutter-delete'; + + origViewZones.push({ + afterLineNumber: a.originalRange.endLineNumberExclusive - 1, + domNode: createFakeLinesDiv(), + heightInPx: a.modifiedHeightInPx, + marginDomNode, + showInHiddenAreas: true, + }); + } else { + const delta = a.modifiedHeightInPx - a.originalHeightInPx; + if (delta > 0) { + if (syncedMovedText?.lineRangeMapping.originalRange.contains(a.originalRange.endLineNumberExclusive - 1)) { + continue; + } + + origViewZones.push({ + afterLineNumber: a.originalRange.endLineNumberExclusive - 1, + domNode: createFakeLinesDiv(), + heightInPx: delta, + showInHiddenAreas: true, + }); + } else { + if (syncedMovedText?.lineRangeMapping.modifiedRange.contains(a.modifiedRange.endLineNumberExclusive - 1)) { + continue; + } + + function createViewZoneMarginArrow(): HTMLElement { + const arrow = document.createElement('div'); + arrow.className = 'arrow-revert-change ' + ThemeIcon.asClassName(Codicon.arrowRight); + return $('div', {}, arrow); + } + + let marginDomNode: HTMLElement | undefined = undefined; + if (a.diff && a.diff.modifiedRange.isEmpty && this._options.shouldRenderRevertArrows.read(reader)) { + marginDomNode = createViewZoneMarginArrow(); + } + + modViewZones.push({ + afterLineNumber: a.modifiedRange.endLineNumberExclusive - 1, + domNode: createFakeLinesDiv(), + heightInPx: -delta, + marginDomNode, + showInHiddenAreas: true, + }); + } + } + } + + for (const a of alignmentsSyncedMovedText.read(reader) ?? []) { + if (!syncedMovedText?.lineRangeMapping.originalRange.intersect(a.originalRange) + && !syncedMovedText?.lineRangeMapping.modifiedRange.intersect(a.modifiedRange)) { + // ignore unrelated alignments outside the synced moved text + continue; + } + + const delta = a.modifiedHeightInPx - a.originalHeightInPx; + if (delta > 0) { + origViewZones.push({ + afterLineNumber: a.originalRange.endLineNumberExclusive - 1, + domNode: createFakeLinesDiv(), + heightInPx: delta, + showInHiddenAreas: true, + }); + } else { + modViewZones.push({ + afterLineNumber: a.modifiedRange.endLineNumberExclusive - 1, + domNode: createFakeLinesDiv(), + heightInPx: -delta, + showInHiddenAreas: true, + }); + } + } + + return { orig: origViewZones, mod: modViewZones }; + }); + + this._register(autorunWithStore2('alignment viewzones', (reader) => { + const scrollState = StableEditorScrollState.capture(this._editors.modified); + + const alignmentViewZones_ = alignmentViewZones.read(reader); + isChangingViewZones = true; + this._editors.original.changeViewZones((aOrig) => { + for (const id of alignmentViewZoneIdsOrig) { aOrig.removeZone(id); } + alignmentViewZoneIdsOrig.clear(); + for (const z of alignmentViewZones_.orig) { + const id = aOrig.addZone(z); + if (z.setZoneId) { + z.setZoneId(id); + } + alignmentViewZoneIdsOrig.add(id); + } + }); + this._editors.modified.changeViewZones(aMod => { + for (const id of alignmentViewZoneIdsMod) { aMod.removeZone(id); } + alignmentViewZoneIdsMod.clear(); + for (const z of alignmentViewZones_.mod) { + const id = aMod.addZone(z); + if (z.setZoneId) { + z.setZoneId(id); + } + alignmentViewZoneIdsMod.add(id); + } + }); + isChangingViewZones = false; + + scrollState.restore(this._editors.modified); + })); + + let ignoreChange = false; + this._register(this._editors.original.onDidScrollChange(e => { + if (e.scrollLeftChanged && !ignoreChange) { + ignoreChange = true; + this._editors.modified.setScrollLeft(e.scrollLeft); + ignoreChange = false; + } + })); + this._register(this._editors.modified.onDidScrollChange(e => { + if (e.scrollLeftChanged && !ignoreChange) { + ignoreChange = true; + this._editors.original.setScrollLeft(e.scrollLeft); + ignoreChange = false; + } + })); + + this._originalScrollTop = observableFromEvent(this._editors.original.onDidScrollChange, () => this._editors.original.getScrollTop()); + this._modifiedScrollTop = observableFromEvent(this._editors.modified.onDidScrollChange, () => this._editors.modified.getScrollTop()); + + // origExtraHeight + origOffset - origScrollTop = modExtraHeight + modOffset - modScrollTop + + // origScrollTop = origExtraHeight + origOffset - modExtraHeight - modOffset + modScrollTop + // modScrollTop = modExtraHeight + modOffset - origExtraHeight - origOffset + origScrollTop + + // origOffset - modOffset = heightOfLines(1..Y) - heightOfLines(1..X) + // origScrollTop >= 0, modScrollTop >= 0 + + this._register(autorun('update scroll modified', (reader) => { + const newScrollTopModified = this._originalScrollTop.read(reader) + - (this._originalScrollOffsetAnimated.get() - this._modifiedScrollOffsetAnimated.read(reader)) + - (this._originalTopPadding.get() - this._modifiedTopPadding.read(reader)); + if (newScrollTopModified !== this._editors.modified.getScrollTop()) { + this._editors.modified.setScrollTop(newScrollTopModified, ScrollType.Immediate); + } + })); + + this._register(autorun('update scroll original', (reader) => { + const newScrollTopOriginal = this._modifiedScrollTop.read(reader) + - (this._modifiedScrollOffsetAnimated.get() - this._originalScrollOffsetAnimated.read(reader)) + - (this._modifiedTopPadding.get() - this._originalTopPadding.read(reader)); + if (newScrollTopOriginal !== this._editors.original.getScrollTop()) { + this._editors.original.setScrollTop(newScrollTopOriginal, ScrollType.Immediate); + } + })); + + + this._register(autorun('update', reader => { + const m = this._diffModel.read(reader)?.syncedMovedTexts.read(reader); + + let deltaOrigToMod = 0; + if (m) { + const trueTopOriginal = this._editors.original.getTopForLineNumber(m.lineRangeMapping.originalRange.startLineNumber, true) - this._originalTopPadding.get(); + const trueTopModified = this._editors.modified.getTopForLineNumber(m.lineRangeMapping.modifiedRange.startLineNumber, true) - this._modifiedTopPadding.get(); + deltaOrigToMod = trueTopModified - trueTopOriginal; + } + + if (deltaOrigToMod > 0) { + this._modifiedTopPadding.set(0, undefined); + this._originalTopPadding.set(deltaOrigToMod, undefined); + } else if (deltaOrigToMod < 0) { + this._modifiedTopPadding.set(-deltaOrigToMod, undefined); + this._originalTopPadding.set(0, undefined); + } else { + setTimeout(() => { + this._modifiedTopPadding.set(0, undefined); + this._originalTopPadding.set(0, undefined); + }, 400); + } + + if (this._editors.modified.hasTextFocus()) { + this._originalScrollOffset.set(this._modifiedScrollOffset.get() - deltaOrigToMod, undefined, true); + } else { + this._modifiedScrollOffset.set(this._originalScrollOffset.get() + deltaOrigToMod, undefined, true); + } + })); + } +} + +interface IViewZoneWithZoneId extends IViewZone { + // Tells a view zone its id. + setZoneId?(zoneId: string): void; +} + +interface ILineRangeAlignment { + originalRange: LineRange; + modifiedRange: LineRange; + + // accounts for foreign viewzones and line wrapping + originalHeightInPx: number; + modifiedHeightInPx: number; + + /** + * If this range alignment is a direct result of a diff, then this is the diff's line mapping. + * Only used for inline-view. + */ + diff?: LineRangeMapping; +} + +function computeRangeAlignment( + originalEditor: CodeEditorWidget, + modifiedEditor: CodeEditorWidget, + diffs: readonly DiffMapping[], + originalEditorAlignmentViewZones: ReadonlySet, + modifiedEditorAlignmentViewZones: ReadonlySet, +): ILineRangeAlignment[] { + const originalLineHeightOverrides = new ArrayQueue(getAdditionalLineHeights(originalEditor, originalEditorAlignmentViewZones)); + const modifiedLineHeightOverrides = new ArrayQueue(getAdditionalLineHeights(modifiedEditor, modifiedEditorAlignmentViewZones)); + + const origLineHeight = originalEditor.getOption(EditorOption.lineHeight); + const modLineHeight = modifiedEditor.getOption(EditorOption.lineHeight); + + const result: ILineRangeAlignment[] = []; + + let lastOriginalLineNumber = 0; + let lastModifiedLineNumber = 0; + + function handleAlignmentsOutsideOfDiffs(untilOriginalLineNumberExclusive: number, untilModifiedLineNumberExclusive: number) { + while (true) { + let origNext = originalLineHeightOverrides.peek(); + let modNext = modifiedLineHeightOverrides.peek(); + if (origNext && origNext.lineNumber >= untilOriginalLineNumberExclusive) { + origNext = undefined; + } + if (modNext && modNext.lineNumber >= untilModifiedLineNumberExclusive) { + modNext = undefined; + } + if (!origNext && !modNext) { + break; + } + + const distOrig = origNext ? origNext.lineNumber - lastOriginalLineNumber : Number.MAX_VALUE; + const distNext = modNext ? modNext.lineNumber - lastModifiedLineNumber : Number.MAX_VALUE; + + if (distOrig < distNext) { + originalLineHeightOverrides.dequeue(); + modNext = { + lineNumber: origNext!.lineNumber - lastOriginalLineNumber + lastModifiedLineNumber, + heightInPx: 0, + }; + } else if (distOrig > distNext) { + modifiedLineHeightOverrides.dequeue(); + origNext = { + lineNumber: modNext!.lineNumber - lastModifiedLineNumber + lastOriginalLineNumber, + heightInPx: 0, + }; + } else { + originalLineHeightOverrides.dequeue(); + modifiedLineHeightOverrides.dequeue(); + } + + result.push({ + originalRange: LineRange.ofLength(origNext!.lineNumber, 1), + modifiedRange: LineRange.ofLength(modNext!.lineNumber, 1), + originalHeightInPx: origLineHeight + origNext!.heightInPx, + modifiedHeightInPx: modLineHeight + modNext!.heightInPx, + diff: undefined, + }); + } + } + + for (const m of diffs) { + const c = m.lineRangeMapping; + handleAlignmentsOutsideOfDiffs(c.originalRange.startLineNumber, c.modifiedRange.startLineNumber); + + const originalAdditionalHeight = originalLineHeightOverrides + .takeWhile(v => v.lineNumber < c.originalRange.endLineNumberExclusive) + ?.reduce((p, c) => p + c.heightInPx, 0) ?? 0; + const modifiedAdditionalHeight = modifiedLineHeightOverrides + .takeWhile(v => v.lineNumber < c.modifiedRange.endLineNumberExclusive) + ?.reduce((p, c) => p + c.heightInPx, 0) ?? 0; + + result.push({ + originalRange: c.originalRange, + modifiedRange: c.modifiedRange, + originalHeightInPx: c.originalRange.length * origLineHeight + originalAdditionalHeight, + modifiedHeightInPx: c.modifiedRange.length * modLineHeight + modifiedAdditionalHeight, + diff: m.lineRangeMapping, + }); + + lastOriginalLineNumber = c.originalRange.endLineNumberExclusive; + lastModifiedLineNumber = c.modifiedRange.endLineNumberExclusive; + } + handleAlignmentsOutsideOfDiffs(Number.MAX_VALUE, Number.MAX_VALUE); + + return result; +} + +interface AdditionalLineHeightInfo { + lineNumber: number; + heightInPx: number; +} + +function getAdditionalLineHeights(editor: CodeEditorWidget, viewZonesToIgnore: ReadonlySet): readonly AdditionalLineHeightInfo[] { + const viewZoneHeights: { lineNumber: number; heightInPx: number }[] = []; + const wrappingZoneHeights: { lineNumber: number; heightInPx: number }[] = []; + + const hasWrapping = editor.getOption(EditorOption.wrappingInfo).wrappingColumn !== -1; + const coordinatesConverter = editor._getViewModel()!.coordinatesConverter; + const editorLineHeight = editor.getOption(EditorOption.lineHeight); + if (hasWrapping) { + for (let i = 1; i <= editor.getModel()!.getLineCount(); i++) { + const lineCount = coordinatesConverter.getModelLineViewLineCount(i); + if (lineCount > 1) { + wrappingZoneHeights.push({ lineNumber: i, heightInPx: editorLineHeight * (lineCount - 1) }); + } + } + } + + for (const w of editor.getWhitespaces()) { + if (viewZonesToIgnore.has(w.id)) { + continue; + } + const modelLineNumber = w.afterLineNumber === 0 ? 0 : coordinatesConverter.convertViewPositionToModelPosition( + new Position(w.afterLineNumber, 1) + ).lineNumber; + viewZoneHeights.push({ lineNumber: modelLineNumber, heightInPx: w.height }); + } + + const result = joinCombine( + viewZoneHeights, + wrappingZoneHeights, + v => v.lineNumber, + (v1, v2) => ({ lineNumber: v1.lineNumber, heightInPx: v1.heightInPx + v2.heightInPx }) + ); + + return result; +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/movedBlocksLines.ts b/src/vs/editor/browser/widget/diffEditorWidget2/movedBlocksLines.ts new file mode 100644 index 00000000000..4c85fd8afa6 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/movedBlocksLines.ts @@ -0,0 +1,89 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, autorun, observableFromEvent, observableSignalFromEvent } from 'vs/base/common/observable'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors'; +import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel'; +import { EditorLayoutInfo } from 'vs/editor/common/config/editorOptions'; +import { LineRange } from 'vs/editor/common/core/lineRange'; + +export class MovedBlocksLinesPart extends Disposable { + public static readonly movedCodeBlockPadding = 4; + + constructor( + private readonly _rootElement: HTMLElement, + private readonly _diffModel: IObservable, + private readonly _originalEditorLayoutInfo: IObservable, + private readonly _modifiedEditorLayoutInfo: IObservable, + private readonly _editors: DiffEditorEditors, + ) { + super(); + + const element = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + element.setAttribute('class', 'moved-blocks-lines'); + this._rootElement.appendChild(element); + + this._register(autorun('update', (reader) => { + const info = this._originalEditorLayoutInfo.read(reader); + const info2 = this._modifiedEditorLayoutInfo.read(reader); + if (!info || !info2) { + return; + } + + element.style.left = `${info.width - info.verticalScrollbarWidth}px`; + element.style.height = `${info.height}px`; + element.style.width = `${info.verticalScrollbarWidth + info.contentLeft - MovedBlocksLinesPart.movedCodeBlockPadding}px`; + })); + + const originalScrollTop = observableFromEvent(this._editors.original.onDidScrollChange, () => this._editors.original.getScrollTop()); + const modifiedScrollTop = observableFromEvent(this._editors.modified.onDidScrollChange, () => this._editors.modified.getScrollTop()); + const viewZonesChanged = observableSignalFromEvent('onDidChangeViewZones', this._editors.modified.onDidChangeViewZones); + + this._register(autorun('update', (reader) => { + element.replaceChildren(); + viewZonesChanged.read(reader); + + const info = this._originalEditorLayoutInfo.read(reader); + const info2 = this._modifiedEditorLayoutInfo.read(reader); + if (!info || !info2) { + return; + } + const width = info.verticalScrollbarWidth + info.contentLeft - MovedBlocksLinesPart.movedCodeBlockPadding; + + const moves = this._diffModel.read(reader)?.diff.read(reader)?.movedTexts; + if (!moves) { + return; + } + + let idx = 0; + for (const m of moves) { + function computeLineStart(range: LineRange, editor: ICodeEditor) { + const t1 = editor.getTopForLineNumber(range.startLineNumber); + const t2 = editor.getTopForLineNumber(range.endLineNumberExclusive); + return (t1 + t2) / 2; + } + + const start = computeLineStart(m.lineRangeMapping.originalRange, this._editors.original); + const startOffset = originalScrollTop.read(reader); + const end = computeLineStart(m.lineRangeMapping.modifiedRange, this._editors.modified); + const endOffset = modifiedScrollTop.read(reader); + + const top = start - startOffset; + const bottom = end - endOffset; + + const center = (width / 2) - moves.length * 5 + idx * 10; + idx++; + + const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); + path.setAttribute('d', `M ${0} ${top} L ${center} ${top} L ${center} ${bottom} L ${width} ${bottom}`); + + path.setAttribute('fill', 'none'); + element.appendChild(path); + } + })); + } +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/overviewRulerPart.ts b/src/vs/editor/browser/widget/diffEditorWidget2/overviewRulerPart.ts new file mode 100644 index 00000000000..e1e0f6ce8c5 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/overviewRulerPart.ts @@ -0,0 +1,174 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { EventType, addDisposableListener, addStandardDisposableListener, h } from 'vs/base/browser/dom'; +import { createFastDomNode } from 'vs/base/browser/fastDomNode'; +import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; +import { ScrollbarState } from 'vs/base/browser/ui/scrollbar/scrollbarState'; +import { Color } from 'vs/base/common/color'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, autorun, derived, observableFromEvent, observableSignalFromEvent } from 'vs/base/common/observable'; +import { autorunWithStore2 } from 'vs/base/common/observableImpl/autorun'; +import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; +import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors'; +import { DiffEditorViewModel } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel'; +import { appendRemoveOnDispose } from 'vs/editor/browser/widget/diffEditorWidget2/utils'; +import { EditorLayoutInfo, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { Position } from 'vs/editor/common/core/position'; +import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager'; +import { defaultInsertColor, defaultRemoveColor, diffInserted, diffOverviewRulerInserted, diffOverviewRulerRemoved, diffRemoved } from 'vs/platform/theme/common/colorRegistry'; +import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { DiffEditorOptions } from './diffEditorOptions'; + +export class OverviewRulerPart extends Disposable { + public static readonly ONE_OVERVIEW_WIDTH = 15; + public static readonly ENTIRE_DIFF_OVERVIEW_WIDTH = OverviewRulerPart.ONE_OVERVIEW_WIDTH * 2; + + constructor( + private readonly _editors: DiffEditorEditors, + private readonly _rootElement: HTMLElement, + private readonly _diffModel: IObservable, + private readonly _rootWidth: IObservable, + private readonly _rootHeight: IObservable, + private readonly _modifiedEditorLayoutInfo: IObservable, + public readonly _options: DiffEditorOptions, + @IThemeService private readonly _themeService: IThemeService, + ) { + super(); + + const currentColorTheme = observableFromEvent(this._themeService.onDidColorThemeChange, () => this._themeService.getColorTheme()); + + const currentColors = derived('colors', reader => { + const theme = currentColorTheme.read(reader); + const insertColor = theme.getColor(diffOverviewRulerInserted) || (theme.getColor(diffInserted) || defaultInsertColor).transparent(2); + const removeColor = theme.getColor(diffOverviewRulerRemoved) || (theme.getColor(diffRemoved) || defaultRemoveColor).transparent(2); + return { insertColor, removeColor }; + }); + + const scrollTopObservable = observableFromEvent(this._editors.modified.onDidScrollChange, () => this._editors.modified.getScrollTop()); + const scrollHeightObservable = observableFromEvent(this._editors.modified.onDidScrollChange, () => this._editors.modified.getScrollHeight()); + + // overview ruler + this._register(autorunWithStore2('create diff editor overview ruler if enabled', (reader, store) => { + if (!this._options.renderOverviewRuler.read(reader)) { + return; + } + + const viewportDomElement = createFastDomNode(document.createElement('div')); + viewportDomElement.setClassName('diffViewport'); + viewportDomElement.setPosition('absolute'); + + const diffOverviewRoot = h('div.diffOverview', { + style: { position: 'absolute', top: '0px', width: OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH + 'px' } + }).root; + store.add(appendRemoveOnDispose(diffOverviewRoot, viewportDomElement.domNode)); + store.add(addStandardDisposableListener(diffOverviewRoot, EventType.POINTER_DOWN, (e) => { + this._editors.modified.delegateVerticalScrollbarPointerDown(e); + })); + store.add(addDisposableListener(diffOverviewRoot, EventType.MOUSE_WHEEL, (e: IMouseWheelEvent) => { + this._editors.modified.delegateScrollFromMouseWheelEvent(e); + }, { passive: false })); + store.add(appendRemoveOnDispose(this._rootElement, diffOverviewRoot)); + + store.add(autorunWithStore2('recreate overview rules when model changes', (reader, store) => { + const m = this._diffModel.read(reader); + + const originalOverviewRuler = this._editors.original.createOverviewRuler('original diffOverviewRuler'); + if (originalOverviewRuler) { + store.add(originalOverviewRuler); + store.add(appendRemoveOnDispose(diffOverviewRoot, originalOverviewRuler.getDomNode())); + } + + const modifiedOverviewRuler = this._editors.modified.createOverviewRuler('modified diffOverviewRuler'); + if (modifiedOverviewRuler) { + store.add(modifiedOverviewRuler); + store.add(appendRemoveOnDispose(diffOverviewRoot, modifiedOverviewRuler.getDomNode())); + } + + if (!originalOverviewRuler || !modifiedOverviewRuler) { + // probably no model + return; + } + + const origViewZonesChanged = observableSignalFromEvent('viewZoneChanged', this._editors.original.onDidChangeViewZones); + const modViewZonesChanged = observableSignalFromEvent('viewZoneChanged', this._editors.modified.onDidChangeViewZones); + const origHiddenRangesChanged = observableSignalFromEvent('hiddenRangesChanged', this._editors.original.onDidChangeHiddenAreas); + const modHiddenRangesChanged = observableSignalFromEvent('hiddenRangesChanged', this._editors.modified.onDidChangeHiddenAreas); + + store.add(autorun('set overview ruler zones', (reader) => { + origViewZonesChanged.read(reader); + modViewZonesChanged.read(reader); + origHiddenRangesChanged.read(reader); + modHiddenRangesChanged.read(reader); + + const colors = currentColors.read(reader); + const diff = m?.diff.read(reader)?.mappings; + + function createZones(ranges: LineRange[], color: Color, editor: CodeEditorWidget) { + const vm = editor._getViewModel(); + if (!vm) { + return []; + } + return ranges + .filter(d => d.length > 0) + .map(r => { + const start = vm.coordinatesConverter.convertModelPositionToViewPosition(new Position(r.startLineNumber, 1)); + const end = vm.coordinatesConverter.convertModelPositionToViewPosition(new Position(r.endLineNumberExclusive, 1)); + + return new OverviewRulerZone(start.lineNumber, end.lineNumber, 0, color.toString()); + }); + } + + originalOverviewRuler?.setZones(createZones((diff || []).map(d => d.lineRangeMapping.originalRange), colors.removeColor, this._editors.original)); + modifiedOverviewRuler?.setZones(createZones((diff || []).map(d => d.lineRangeMapping.modifiedRange), colors.insertColor, this._editors.modified)); + })); + + store.add(autorun('layout overview ruler', (reader) => { + const height = this._rootHeight.read(reader); + const width = this._rootWidth.read(reader); + const layoutInfo = this._modifiedEditorLayoutInfo.read(reader); + if (layoutInfo) { + const freeSpace = OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH - 2 * OverviewRulerPart.ONE_OVERVIEW_WIDTH; + originalOverviewRuler.setLayout({ + top: 0, + height: height, + right: freeSpace + OverviewRulerPart.ONE_OVERVIEW_WIDTH, + width: OverviewRulerPart.ONE_OVERVIEW_WIDTH, + }); + modifiedOverviewRuler.setLayout({ + top: 0, + height: height, + right: 0, + width: OverviewRulerPart.ONE_OVERVIEW_WIDTH, + }); + const scrollTop = scrollTopObservable.read(reader); + const scrollHeight = scrollHeightObservable.read(reader); + + const scrollBarOptions = this._editors.modified.getOption(EditorOption.scrollbar); + const state = new ScrollbarState( + scrollBarOptions.verticalHasArrows ? scrollBarOptions.arrowSize : 0, + scrollBarOptions.verticalScrollbarSize, + 0, + layoutInfo.height, + scrollHeight, + scrollTop + ); + + viewportDomElement.setTop(state.getSliderPosition()); + viewportDomElement.setHeight(state.getSliderSize()); + } else { + viewportDomElement.setTop(0); + viewportDomElement.setHeight(0); + } + + diffOverviewRoot.style.height = height + 'px'; + diffOverviewRoot.style.left = (width - OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH) + 'px'; + viewportDomElement.setWidth(OverviewRulerPart.ENTIRE_DIFF_OVERVIEW_WIDTH); + })); + })); + })); + } +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/renderLines.ts b/src/vs/editor/browser/widget/diffEditorWidget2/renderLines.ts new file mode 100644 index 00000000000..c90137175ad --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/renderLines.ts @@ -0,0 +1,200 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { diffEditorWidgetTtPolicy } from 'vs/editor/browser/widget/diffEditorWidget'; +import { EditorFontLigatures, EditorOption, FindComputedEditorOptionValueById } from 'vs/editor/common/config/editorOptions'; +import { FontInfo } from 'vs/editor/common/config/fontInfo'; +import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; +import { ModelLineProjectionData } from 'vs/editor/common/modelLineProjectionData'; +import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; +import { RenderLineInput, renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; +import { InlineDecoration, ViewLineRenderingData } from 'vs/editor/common/viewModel'; + +const ttPolicy = diffEditorWidgetTtPolicy; + +export function renderLines(source: LineSource, options: RenderOptions, decorations: InlineDecoration[], domNode: HTMLElement): RenderLinesResult { + applyFontInfo(domNode, options.fontInfo); + + const hasCharChanges = (decorations.length > 0); + + const sb = new StringBuilder(10000); + let maxCharsPerLine = 0; + let renderedLineCount = 0; + const viewLineCounts: number[] = []; + for (let lineIndex = 0; lineIndex < source.lineTokens.length; lineIndex++) { + const lineNumber = lineIndex + 1; + const lineTokens = source.lineTokens[lineIndex]; + const lineBreakData = source.lineBreakData[lineIndex]; + const actualDecorations = LineDecoration.filter(decorations, lineNumber, 1, Number.MAX_SAFE_INTEGER); + + if (lineBreakData) { + let lastBreakOffset = 0; + for (const breakOffset of lineBreakData.breakOffsets) { + const viewLineTokens = lineTokens.sliceAndInflate(lastBreakOffset, breakOffset, 0); + maxCharsPerLine = Math.max(maxCharsPerLine, renderOriginalLine( + renderedLineCount, + viewLineTokens, + LineDecoration.extractWrapped(actualDecorations, lastBreakOffset, breakOffset), + hasCharChanges, + source.mightContainNonBasicASCII, + source.mightContainRTL, + options, + sb, + //marginDomNode + )); + renderedLineCount++; + lastBreakOffset = breakOffset; + } + viewLineCounts.push(lineBreakData.breakOffsets.length); + + + /* + const marginDomNode2 = document.createElement('div'); + marginDomNode2.className = 'gutter-delete'; + result.original.push({ + afterLineNumber: lineNumber, + afterColumn: 0, + heightInLines: lineBreakData.breakOffsets.length - 1, + domNode: createFakeLinesDiv(), + marginDomNode: marginDomNode2 + }); + */ + } else { + viewLineCounts.push(1); + maxCharsPerLine = Math.max(maxCharsPerLine, renderOriginalLine( + renderedLineCount, + lineTokens, + actualDecorations, + hasCharChanges, + source.mightContainNonBasicASCII, + source.mightContainRTL, + options, + sb, + )); + renderedLineCount++; + } + } + maxCharsPerLine += options.scrollBeyondLastColumn; + + const html = sb.build(); + const trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html; + domNode.innerHTML = trustedhtml as string; + const minWidthInPx = (maxCharsPerLine * options.typicalHalfwidthCharacterWidth); + + return { + heightInLines: renderedLineCount, + minWidthInPx, + viewLineCounts, + }; +} + + +export class LineSource { + constructor( + public readonly lineTokens: LineTokens[], + public readonly lineBreakData: (ModelLineProjectionData | null)[], + public readonly mightContainNonBasicASCII: boolean, + public readonly mightContainRTL: boolean, + ) { } +} + +export class RenderOptions { + public static fromEditor(editor: ICodeEditor): RenderOptions { + + const modifiedEditorOptions = editor.getOptions(); + const fontInfo = modifiedEditorOptions.get(EditorOption.fontInfo); + const layoutInfo = modifiedEditorOptions.get(EditorOption.layoutInfo); + + return new RenderOptions( + editor.getModel()?.getOptions().tabSize || 0, + fontInfo, + modifiedEditorOptions.get(EditorOption.disableMonospaceOptimizations), + fontInfo.typicalHalfwidthCharacterWidth, + modifiedEditorOptions.get(EditorOption.scrollBeyondLastColumn), + + modifiedEditorOptions.get(EditorOption.lineHeight), + + layoutInfo.decorationsWidth, + modifiedEditorOptions.get(EditorOption.stopRenderingLineAfter), + modifiedEditorOptions.get(EditorOption.renderWhitespace), + modifiedEditorOptions.get(EditorOption.renderControlCharacters), + modifiedEditorOptions.get(EditorOption.fontLigatures), + ); + } + + constructor( + public readonly tabSize: number, + public readonly fontInfo: FontInfo, + public readonly disableMonospaceOptimizations: boolean, + public readonly typicalHalfwidthCharacterWidth: number, + public readonly scrollBeyondLastColumn: number, + public readonly lineHeight: number, + public readonly lineDecorationsWidth: number, + public readonly stopRenderingLineAfter: number, + public readonly renderWhitespace: FindComputedEditorOptionValueById, + public readonly renderControlCharacters: boolean, + public readonly fontLigatures: FindComputedEditorOptionValueById, + ) { } +} + +export interface RenderLinesResult { + minWidthInPx: number; + heightInLines: number; + viewLineCounts: number[]; +} + +function renderOriginalLine( + viewLineIdx: number, + lineTokens: IViewLineTokens, + decorations: LineDecoration[], + hasCharChanges: boolean, + mightContainNonBasicASCII: boolean, + mightContainRTL: boolean, + options: RenderOptions, + sb: StringBuilder, +): number { + + sb.appendString('
'); + + const lineContent = lineTokens.getLineContent(); + const isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, mightContainNonBasicASCII); + const containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, mightContainRTL); + const output = renderViewLine(new RenderLineInput( + (options.fontInfo.isMonospace && !options.disableMonospaceOptimizations), + options.fontInfo.canUseHalfwidthRightwardsArrow, + lineContent, + false, + isBasicASCII, + containsRTL, + 0, + lineTokens, + decorations, + options.tabSize, + 0, + options.fontInfo.spaceWidth, + options.fontInfo.middotWidth, + options.fontInfo.wsmiddotWidth, + options.stopRenderingLineAfter, + options.renderWhitespace, + options.renderControlCharacters, + options.fontLigatures !== EditorFontLigatures.OFF, + null // Send no selections, original line cannot be selected + ), sb); + + sb.appendString('
'); + + return output.characterMapping.getHorizontalOffset(output.characterMapping.length); +} + diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/style.css b/src/vs/editor/browser/widget/diffEditorWidget2/style.css new file mode 100644 index 00000000000..f8243853b70 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/style.css @@ -0,0 +1,103 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +.monaco-editor .diff-hidden-lines-widget { + width: 100%; +} + +.monaco-editor .diff-hidden-lines { + height: 0px; /* The children each have a fixed height, the transform confuses the browser */ + transform: translate(0px, -10px); + font-size: 13px; + line-height: 14px; +} + +.monaco-editor .diff-hidden-lines:not(.dragging) .top:hover, .diff-hidden-lines:not(.dragging) .bottom:hover, .diff-hidden-lines .top.dragging, .diff-hidden-lines .bottom.dragging { + background-color: var(--vscode-focusBorder); +} + +.monaco-editor .diff-hidden-lines .top, .diff-hidden-lines .bottom { + transition: background-color 0.1s ease-out; + height: 4px; + background-color: transparent; + background-clip: padding-box; + border-bottom: 2px solid transparent; + border-top: 4px solid transparent; + cursor: ns-resize; +} + +.monaco-editor .diff-hidden-lines .top { + transform: translate(0px, 4px); +} + +.monaco-editor .diff-hidden-lines .bottom { + transform: translate(0px, -6px); +} + +.monaco-editor .diff-unchanged-lines { + background: var(--vscode-diffEditor-unchangedCodeBackground); +} + +.monaco-editor .noModificationsOverlay { + z-index: 1; + background: var(--vscode-editor-background); + + display: flex; + justify-content: center; + align-items: center; +} + + +.monaco-editor .diff-hidden-lines .center { + background: var(--vscode-diffEditor-unchangedRegionBackground); + color: var(--vscode-diffEditor-unchangedRegionForeground); + overflow: hidden; + display: block; + text-overflow: ellipsis; + white-space: nowrap; + + height: 24px; +} + +.monaco-editor .diff-hidden-lines .center span.codicon { + vertical-align: middle; +} + +.monaco-editor .diff-hidden-lines .center a:hover .codicon { + cursor: pointer; + color: var(--vscode-editorLink-activeForeground) !important; +} + +.monaco-editor .movedOriginal { + border: 2px solid var(--vscode-diffEditor-move-border); +} + +.monaco-editor .movedModified { + border: 2px solid var(--vscode-diffEditor-move-border); +} + +.monaco-diff-editor .moved-blocks-lines { + position: absolute; + pointer-events: none; +} + +.monaco-diff-editor .moved-blocks-lines path { + fill: none; + stroke: var(--vscode-diffEditor-move-border); + stroke-width: 2; +} + +.monaco-editor .char-delete.diff-range-empty { + margin-left: -1px; + border-left: solid var(--vscode-diffEditor-removedTextBackground) 3px; +} + +.monaco-editor .char-insert.diff-range-empty { + border-left: solid var(--vscode-diffEditor-insertedTextBackground) 3px; +} + +.monaco-editor .fold-unchanged { + cursor: pointer; +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/unchangedRanges.ts b/src/vs/editor/browser/widget/diffEditorWidget2/unchangedRanges.ts new file mode 100644 index 00000000000..844dcc30f2e --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/unchangedRanges.ts @@ -0,0 +1,311 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { $, addDisposableListener, h, reset } from 'vs/base/browser/dom'; +import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels'; +import { Codicon } from 'vs/base/common/codicons'; +import { MarkdownString } from 'vs/base/common/htmlContent'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, observableFromEvent, transaction } from 'vs/base/common/observable'; +import { autorun, autorunWithStore2 } from 'vs/base/common/observableImpl/autorun'; +import { derived, derivedWithStore } from 'vs/base/common/observableImpl/derived'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { isDefined } from 'vs/base/common/types'; +import { ICodeEditor, IViewZone } from 'vs/editor/browser/editorBrowser'; +import { DiffEditorEditors } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorEditors'; +import { DiffEditorOptions } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorOptions'; +import { DiffEditorViewModel, UnchangedRegion } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel'; +import { PlaceholderViewZone, ViewZoneOverlayWidget, applyObservableDecorations, applyStyle, applyViewZones } from 'vs/editor/browser/widget/diffEditorWidget2/utils'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { Position } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; +import { IModelDecorationOptions, IModelDeltaDecoration } from 'vs/editor/common/model'; +import { localize } from 'vs/nls'; + +export class UnchangedRangesFeature extends Disposable { + private _isUpdatingViewZones = false; + public get isUpdatingViewZones(): boolean { return this._isUpdatingViewZones; } + + constructor( + private readonly _editors: DiffEditorEditors, + private readonly _diffModel: IObservable, + private readonly _options: DiffEditorOptions, + ) { + super(); + + this._register(this._editors.original.onDidChangeCursorPosition(e => { + if (e.reason === CursorChangeReason.Explicit) { + const m = this._diffModel.get(); + transaction(tx => { + for (const s of this._editors.original.getSelections() || []) { + m?.ensureOriginalLineIsVisible(s.getStartPosition().lineNumber, tx); + m?.ensureOriginalLineIsVisible(s.getEndPosition().lineNumber, tx); + } + }); + } + })); + + this._register(this._editors.modified.onDidChangeCursorPosition(e => { + if (e.reason === CursorChangeReason.Explicit) { + const m = this._diffModel.get(); + transaction(tx => { + for (const s of this._editors.modified.getSelections() || []) { + m?.ensureModifiedLineIsVisible(s.getStartPosition().lineNumber, tx); + m?.ensureModifiedLineIsVisible(s.getEndPosition().lineNumber, tx); + } + }); + } + })); + + const unchangedRegions = this._diffModel.map((m, reader) => m?.diff.read(reader)?.mappings.length === 0 ? [] : m?.unchangedRegions.read(reader) ?? []); + + const viewZones = derivedWithStore('view zones', (reader, store) => { + const origViewZones: IViewZone[] = []; + const modViewZones: IViewZone[] = []; + const sideBySide = this._options.renderSideBySide.read(reader); + + const curUnchangedRegions = unchangedRegions.read(reader); + for (const r of curUnchangedRegions) { + if (r.shouldHideControls(reader)) { + continue; + } + + { + const d = derived('hiddenOriginalRangeStart', reader => r.getHiddenOriginalRange(reader).startLineNumber - 1); + const origVz = new PlaceholderViewZone(d, 24); + origViewZones.push(origVz); + store.add(new CollapsedCodeOverlayWidget(this._editors.original, origVz, r, !sideBySide)); + } + { + const d = derived('hiddenModifiedRangeStart', reader => r.getHiddenModifiedRange(reader).startLineNumber - 1); + const modViewZone = new PlaceholderViewZone(d, 24); + modViewZones.push(modViewZone); + store.add(new CollapsedCodeOverlayWidget(this._editors.modified, modViewZone, r, false)); + } + } + + return { origViewZones, modViewZones, }; + }); + + + const unchangedLinesDecoration: IModelDecorationOptions = { + description: 'unchanged lines', + className: 'diff-unchanged-lines', + isWholeLine: true, + }; + const unchangedLinesDecorationShow: IModelDecorationOptions = { + description: 'Fold Unchanged', + glyphMarginHoverMessage: new MarkdownString(undefined, { isTrusted: true, supportThemeIcons: true }).appendMarkdown(localize('foldUnchanged', 'Fold Unchanged Region')), + glyphMarginClassName: 'fold-unchanged ' + ThemeIcon.asClassName(Codicon.fold), + zIndex: 10001, + }; + + this._register(applyObservableDecorations(this._editors.original, derived('decorations', (reader) => { + const curUnchangedRegions = unchangedRegions.read(reader); + const result = curUnchangedRegions.map(r => ({ + range: r.originalRange.toInclusiveRange()!, + options: unchangedLinesDecoration, + })); + for (const r of curUnchangedRegions) { + if (r.shouldHideControls(reader)) { + result.push({ + range: Range.fromPositions(new Position(r.originalLineNumber, 1)), + options: unchangedLinesDecorationShow + }); + } + } + return result; + }))); + + this._register(applyObservableDecorations(this._editors.modified, derived('decorations', (reader) => { + const curUnchangedRegions = unchangedRegions.read(reader); + const result = curUnchangedRegions.map(r => ({ + range: r.modifiedRange.toInclusiveRange()!, + options: unchangedLinesDecoration, + })); + for (const r of curUnchangedRegions) { + if (r.shouldHideControls(reader)) { + result.push({ + range: LineRange.ofLength(r.modifiedLineNumber, 1).toInclusiveRange()!, + options: unchangedLinesDecorationShow + }); + } + } + return result; + }))); + + this._register(applyViewZones(this._editors.original, viewZones.map(v => v.origViewZones), v => this._isUpdatingViewZones = v)); + this._register(applyViewZones(this._editors.modified, viewZones.map(v => v.modViewZones), v => this._isUpdatingViewZones = v)); + + this._register(autorunWithStore2('update folded unchanged regions', (reader, store) => { + const curUnchangedRegions = unchangedRegions.read(reader); + this._editors.original.setHiddenAreas(curUnchangedRegions.map(r => r.getHiddenOriginalRange(reader).toInclusiveRange()).filter(isDefined)); + this._editors.modified.setHiddenAreas(curUnchangedRegions.map(r => r.getHiddenModifiedRange(reader).toInclusiveRange()).filter(isDefined)); + })); + + this._register(this._editors.modified.onMouseUp(event => { + if (!event.event.rightButton && event.target.position && event.target.element?.className.includes('fold-unchanged')) { + const lineNumber = event.target.position.lineNumber; + const model = this._diffModel.get(); + if (!model) { return; } + const region = model.unchangedRegions.get().find(r => r.modifiedRange.includes(lineNumber)); + if (!region) { return; } + region.setState(0, 0, undefined); + event.event.stopPropagation(); + event.event.preventDefault(); + } + })); + + this._register(this._editors.original.onMouseUp(event => { + if (!event.event.rightButton && event.target.position && event.target.element?.className.includes('fold-unchanged')) { + const lineNumber = event.target.position.lineNumber; + const model = this._diffModel.get(); + if (!model) { return; } + const region = model.unchangedRegions.get().find(r => r.originalRange.includes(lineNumber)); + if (!region) { return; } + region.setState(0, 0, undefined); + event.event.stopPropagation(); + event.event.preventDefault(); + } + })); + } +} + +class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget { + private readonly _nodes = h('div.diff-hidden-lines', [ + h('div.top@top', { title: 'Click or drag to show more above' }), + h('div.center@content', { style: { display: 'flex' } }, [ + h('div@first', { style: { display: 'flex', justifyContent: 'center', alignItems: 'center' } }, + [$('a', { title: 'Show all', role: 'button', onclick: () => { this._unchangedRegion.showAll(undefined); } }, ...renderLabelWithIcons('$(unfold)'))] + ), + h('div@others', { style: { display: 'flex', justifyContent: 'center', alignItems: 'center' } }), + ]), + h('div.bottom@bottom', { title: 'Click or drag to show more below', role: 'button' }), + ]); + + constructor( + private readonly _editor: ICodeEditor, + _viewZone: PlaceholderViewZone, + private readonly _unchangedRegion: UnchangedRegion, + private readonly hide: boolean, + ) { + const root = h('div.diff-hidden-lines-widget'); + super(_editor, _viewZone, root.root); + root.root.appendChild(this._nodes.root); + + const layoutInfo = observableFromEvent(this._editor.onDidLayoutChange, () => + this._editor.getLayoutInfo() + ); + + if (!this.hide) { + this._register(applyStyle(this._nodes.first, { width: layoutInfo.map((l) => l.contentLeft) })); + } else { + reset(this._nodes.first); + } + + const editor = this._editor; + + this._register(addDisposableListener(this._nodes.top, 'mousedown', e => { + if (e.button !== 0) { + return; + } + this._nodes.top.classList.toggle('dragging', true); + this._nodes.root.classList.toggle('dragging', true); + e.preventDefault(); + const startTop = e.clientY; + let didMove = false; + const cur = this._unchangedRegion.visibleLineCountTop.get(); + this._unchangedRegion.isDragged.set(true, undefined); + + + const mouseMoveListener = addDisposableListener(window, 'mousemove', e => { + const currentTop = e.clientY; + const delta = currentTop - startTop; + didMove = didMove || Math.abs(delta) > 2; + const lineDelta = Math.round(delta / editor.getOption(EditorOption.lineHeight)); + const newVal = Math.max(0, Math.min(cur + lineDelta, this._unchangedRegion.getMaxVisibleLineCountTop())); + this._unchangedRegion.visibleLineCountTop.set(newVal, undefined); + }); + + const mouseUpListener = addDisposableListener(window, 'mouseup', e => { + if (!didMove) { + this._unchangedRegion.showMoreAbove(20, undefined); + } + this._nodes.top.classList.toggle('dragging', false); + this._nodes.root.classList.toggle('dragging', false); + this._unchangedRegion.isDragged.set(false, undefined); + mouseMoveListener.dispose(); + mouseUpListener.dispose(); + }); + })); + + this._register(addDisposableListener(this._nodes.bottom, 'mousedown', e => { + if (e.button !== 0) { + return; + } + this._nodes.bottom.classList.toggle('dragging', true); + this._nodes.root.classList.toggle('dragging', true); + e.preventDefault(); + const startTop = e.clientY; + let didMove = false; + const cur = this._unchangedRegion.visibleLineCountBottom.get(); + this._unchangedRegion.isDragged.set(true, undefined); + + const mouseMoveListener = addDisposableListener(window, 'mousemove', e => { + const currentTop = e.clientY; + const delta = currentTop - startTop; + didMove = didMove || Math.abs(delta) > 2; + const lineDelta = Math.round(delta / editor.getOption(EditorOption.lineHeight)); + const newVal = Math.max(0, Math.min(cur - lineDelta, this._unchangedRegion.getMaxVisibleLineCountBottom())); + const top = editor.getTopForLineNumber(this._unchangedRegion.originalRange.endLineNumberExclusive); + this._unchangedRegion.visibleLineCountBottom.set(newVal, undefined); + const top2 = editor.getTopForLineNumber(this._unchangedRegion.originalRange.endLineNumberExclusive); + editor.setScrollTop(editor.getScrollTop() + (top2 - top)); + }); + + const mouseUpListener = addDisposableListener(window, 'mouseup', e => { + this._unchangedRegion.isDragged.set(false, undefined); + + if (!didMove) { + const top = editor.getTopForLineNumber(this._unchangedRegion.originalRange.endLineNumberExclusive); + + this._unchangedRegion.showMoreBelow(20, undefined); + const top2 = editor.getTopForLineNumber(this._unchangedRegion.originalRange.endLineNumberExclusive); + editor.setScrollTop(editor.getScrollTop() + (top2 - top)); + } + this._nodes.bottom.classList.toggle('dragging', false); + this._nodes.root.classList.toggle('dragging', false); + mouseMoveListener.dispose(); + mouseUpListener.dispose(); + }); + })); + + this._register(autorun('update labels', (reader) => { + + const children: HTMLElement[] = []; + if (!this.hide && true) { + const lineCount = _unchangedRegion.getHiddenModifiedRange(reader).length; + const linesHiddenText = `${lineCount} Hidden Lines`; + children.push($('span', { title: linesHiddenText }, linesHiddenText)); + } + + // TODO@hediet implement breadcrumbs for collapsed regions + /* + if (_unchangedRegion.originalLineNumber === 48) { + children.push($('span', undefined, '\u00a0|\u00a0')); + children.push($('span', { title: 'test' }, ...renderLabelWithIcons('$(symbol-class) DiffEditorWidget2'))); + } else if (_unchangedRegion.originalLineNumber === 88) { + children.push($('span', undefined, '\u00a0|\u00a0')); + children.push($('span', { title: 'test' }, ...renderLabelWithIcons('$(symbol-constructor) constructor'))); + } + */ + + reset(this._nodes.others, ...children); + + })); + } +} diff --git a/src/vs/editor/browser/widget/diffEditorWidget2/utils.ts b/src/vs/editor/browser/widget/diffEditorWidget2/utils.ts new file mode 100644 index 00000000000..7d497d55628 --- /dev/null +++ b/src/vs/editor/browser/widget/diffEditorWidget2/utils.ts @@ -0,0 +1,369 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IDimension } from 'vs/base/browser/dom'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { IObservable, IReader, ISettableObservable, autorun, autorunHandleChanges, observableFromEvent, observableSignalFromEvent, observableValue, transaction } from 'vs/base/common/observable'; +import { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver'; +import { ICodeEditor, IOverlayWidget, IViewZone } from 'vs/editor/browser/editorBrowser'; +import { IModelDeltaDecoration } from 'vs/editor/common/model'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; + +export function joinCombine(arr1: readonly T[], arr2: readonly T[], keySelector: (val: T) => number, combine: (v1: T, v2: T) => T): readonly T[] { + if (arr1.length === 0) { + return arr2; + } + if (arr2.length === 0) { + return arr1; + } + + const result: T[] = []; + let i = 0; + let j = 0; + while (i < arr1.length && j < arr2.length) { + const val1 = arr1[i]; + const val2 = arr2[j]; + const key1 = keySelector(val1); + const key2 = keySelector(val2); + + if (key1 < key2) { + result.push(val1); + i++; + } else if (key1 > key2) { + result.push(val2); + j++; + } else { + result.push(combine(val1, val2)); + i++; + j++; + } + } + while (i < arr1.length) { + result.push(arr1[i]); + i++; + } + while (j < arr2.length) { + result.push(arr2[j]); + j++; + } + return result; +} + +// TODO make utility +export function applyObservableDecorations(editor: ICodeEditor, decorations: IObservable): IDisposable { + const d = new DisposableStore(); + const decorationsCollection = editor.createDecorationsCollection(); + d.add(autorun(`Apply decorations from ${decorations.debugName}`, reader => { + const d = decorations.read(reader); + decorationsCollection.set(d); + })); + d.add({ + dispose: () => { + decorationsCollection.clear(); + } + }); + return d; +} + +export function appendRemoveOnDispose(parent: HTMLElement, child: HTMLElement) { + parent.appendChild(child); + return toDisposable(() => { + parent.removeChild(child); + }); +} + +export function observableConfigValue(key: string, defaultValue: T, configurationService: IConfigurationService): IObservable { + return observableFromEvent( + (handleChange) => configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration(key)) { + handleChange(e); + } + }), + () => configurationService.getValue(key) ?? defaultValue, + ); +} + +export class ObservableElementSizeObserver extends Disposable { + private readonly elementSizeObserver: ElementSizeObserver; + + private readonly _width: ISettableObservable; + public get width(): ISettableObservable { return this._width; } + + private readonly _height: ISettableObservable; + public get height(): ISettableObservable { return this._height; } + + constructor(element: HTMLElement | null, dimension: IDimension | undefined) { + super(); + + this.elementSizeObserver = this._register(new ElementSizeObserver(element, dimension)); + this._width = observableValue('width', this.elementSizeObserver.getWidth()); + this._height = observableValue('height', this.elementSizeObserver.getHeight()); + + this._register(this.elementSizeObserver.onDidChange(e => transaction(tx => { + this._width.set(this.elementSizeObserver.getWidth(), tx); + this._height.set(this.elementSizeObserver.getHeight(), tx); + }))); + } + + public observe(dimension?: IDimension): void { + this.elementSizeObserver.observe(dimension); + } + + public setAutomaticLayout(automaticLayout: boolean): void { + if (automaticLayout) { + this.elementSizeObserver.startObserving(); + } else { + this.elementSizeObserver.stopObserving(); + } + } +} + +export function animatedObservable(base: IObservable, store: DisposableStore): IObservable { + let targetVal = base.get(); + let startVal = targetVal; + let curVal = targetVal; + const result = observableValue('animatedValue', targetVal); + + let animationStartMs: number = -1; + const durationMs = 300; + let animationFrame: number | undefined = undefined; + + store.add(autorunHandleChanges('update value', { + createEmptyChangeSummary: () => ({ animate: false }), + handleChange: (ctx, s) => { + if (ctx.didChange(base)) { + s.animate = s.animate || ctx.change; + } + return true; + } + }, (reader, s) => { + if (animationFrame !== undefined) { + cancelAnimationFrame(animationFrame); + animationFrame = undefined; + } + + startVal = curVal; + targetVal = base.read(reader); + animationStartMs = Date.now() - (s.animate ? 0 : durationMs); + + update(); + })); + + function update() { + const passedMs = Date.now() - animationStartMs; + curVal = Math.floor(easeOutExpo(passedMs, startVal, targetVal - startVal, durationMs)); + + if (passedMs < durationMs) { + animationFrame = requestAnimationFrame(update); + } else { + curVal = targetVal; + } + + result.set(curVal, undefined); + } + + return result; +} + +function easeOutExpo(t: number, b: number, c: number, d: number): number { + return t === d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; +} + +export function deepMerge(source1: T, source2: Partial): T { + const result = {} as T; + for (const key in source1) { + result[key] = source1[key]; + } + for (const key in source2) { + const source2Value = source2[key]; + if (typeof result[key] === 'object' && source2Value && typeof source2Value === 'object') { + result[key] = deepMerge(result[key], source2Value); + } else { + result[key] = source2Value as any; + } + } + return result; +} + +export abstract class ViewZoneOverlayWidget extends Disposable { + constructor( + editor: ICodeEditor, + viewZone: PlaceholderViewZone, + htmlElement: HTMLElement, + ) { + super(); + + this._register(new ManagedOverlayWidget(editor, htmlElement)); + this._register(applyStyle(htmlElement, { + height: viewZone.actualHeight, + top: viewZone.actualTop, + })); + } +} + +export interface IObservableViewZone extends IViewZone { + onChange?: IObservable; +} + +export class PlaceholderViewZone implements IObservableViewZone { + public readonly domNode = document.createElement('div'); + + private readonly _actualTop = observableValue('actualTop', undefined); + private readonly _actualHeight = observableValue('actualHeight', undefined); + + public readonly actualTop: IObservable = this._actualTop; + public readonly actualHeight: IObservable = this._actualHeight; + + public readonly showInHiddenAreas = true; + + public get afterLineNumber(): number { return this._afterLineNumber.get(); } + + public readonly onChange?: IObservable = this._afterLineNumber; + + constructor( + private readonly _afterLineNumber: IObservable, + public readonly heightInPx: number, + ) { + } + + onDomNodeTop = (top: number) => { + this._actualTop.set(top, undefined); + }; + + onComputedHeight = (height: number) => { + this._actualHeight.set(height, undefined); + }; +} + + +export class ManagedOverlayWidget implements IDisposable { + private static _counter = 0; + private readonly _overlayWidgetId = `managedOverlayWidget-${ManagedOverlayWidget._counter++}`; + + private readonly _overlayWidget: IOverlayWidget = { + getId: () => this._overlayWidgetId, + getDomNode: () => this._domElement, + getPosition: () => null + }; + + constructor( + private readonly _editor: ICodeEditor, + private readonly _domElement: HTMLElement, + ) { + this._editor.addOverlayWidget(this._overlayWidget); + } + + dispose(): void { + this._editor.removeOverlayWidget(this._overlayWidget); + } +} + +export interface CSSStyle { + height: number | string; + width: number | string; + top: number | string; + visibility: 'visible' | 'hidden' | 'collapse'; + display: 'block' | 'inline' | 'inline-block' | 'flex' | 'none'; +} + +export function applyStyle(domNode: HTMLElement, style: Partial<{ [TKey in keyof CSSStyle]: CSSStyle[TKey] | IObservable | undefined }>) { + return autorun('applyStyle', (reader) => { + for (let [key, val] of Object.entries(style)) { + if (val && typeof val === 'object' && 'read' in val) { + val = val.read(reader) as any; + } + if (typeof val === 'number') { + val = `${val}px`; + } + domNode.style[key as any] = val as any; + } + }); +} + +export function readHotReloadableExport(value: T, reader: IReader | undefined): T { + observeHotReloadableExports([value], reader); + return value; +} + +export function observeHotReloadableExports(values: any[], reader: IReader | undefined): void { + const hotReload_deprecateExports = (globalThis as unknown as { + // This property it defined by the monaco editor playground server + $hotReload_deprecateExports: Set<(oldExports: Record, newExports: Record) => boolean>; + }).$hotReload_deprecateExports; + if (!hotReload_deprecateExports) { + return; + } + + const o = observableSignalFromEvent('reload', e => { + function handleExports(oldExports: Record, _newExports: Record) { + if ([...Object.values(oldExports)].some(v => values.includes(v))) { + e(undefined); + return true; + } + return false; + } + hotReload_deprecateExports.add(handleExports); + return { + dispose() { hotReload_deprecateExports.delete(handleExports); } + }; + }); + o.read(reader); +} + +export function applyViewZones(editor: ICodeEditor, viewZones: IObservable, setIsUpdating?: (isUpdatingViewZones: boolean) => void): IDisposable { + const store = new DisposableStore(); + const lastViewZoneIds: string[] = []; + + store.add(autorun('applyViewZones', (reader) => { + const curViewZones = viewZones.read(reader); + + const viewZonIdsPerViewZone = new Map(); + const viewZoneIdPerOnChangeObservable = new Map, string>(); + + if (setIsUpdating) { setIsUpdating(true); } + editor.changeViewZones(a => { + for (const id of lastViewZoneIds) { a.removeZone(id); } + lastViewZoneIds.length = 0; + + for (const z of curViewZones) { + const id = a.addZone(z); + lastViewZoneIds.push(id); + viewZonIdsPerViewZone.set(z, id); + } + }); + if (setIsUpdating) { setIsUpdating(false); } + + store.add(autorunHandleChanges('layoutZone on change', { + createEmptyChangeSummary() { + return [] as string[]; + }, + handleChange(context, changeSummary) { + const id = viewZoneIdPerOnChangeObservable.get(context.changedObservable); + if (id !== undefined) { changeSummary.push(id); } + return true; + }, + }, (reader, changeSummary) => { + for (const vz of curViewZones) { + if (vz.onChange) { + viewZoneIdPerOnChangeObservable.set(vz.onChange, viewZonIdsPerViewZone.get(vz)!); + vz.onChange.read(reader); + } + } + if (setIsUpdating) { setIsUpdating(true); } + editor.changeViewZones(a => { for (const id of changeSummary) { a.layoutZone(id); } }); + if (setIsUpdating) { setIsUpdating(false); } + })); + })); + + store.add({ + dispose() { + if (setIsUpdating) { setIsUpdating(true); } + editor.changeViewZones(a => { for (const id of lastViewZoneIds) { a.removeZone(id); } }); + if (setIsUpdating) { setIsUpdating(false); } + } + }); + + return store; +} diff --git a/src/vs/editor/browser/widget/diffNavigator.ts b/src/vs/editor/browser/widget/diffNavigator.ts index 37151de5997..0b221d7c7a4 100644 --- a/src/vs/editor/browser/widget/diffNavigator.ts +++ b/src/vs/editor/browser/widget/diffNavigator.ts @@ -55,7 +55,7 @@ export class DiffNavigator extends Disposable implements IDiffNavigator { readonly onDidUpdate: Event = this._onDidUpdate.event; private disposed: boolean; - private revealFirst: boolean; + public revealFirst: boolean; private nextIdx: number; private ranges: IDiffRange[]; private ignoreSelectionChange: boolean; @@ -78,8 +78,6 @@ export class DiffNavigator extends Disposable implements IDiffNavigator { this.ignoreSelectionChange = false; this.revealFirst = Boolean(this._options.alwaysRevealFirst); - // hook up to diff editor for diff, disposal, and caret move - this._register(this._editor.onDidDispose(() => this.dispose())); this._register(this._editor.onDidUpdateDiff(() => this._onDiffUpdated())); if (this._options.followsCaret) { @@ -91,11 +89,6 @@ export class DiffNavigator extends Disposable implements IDiffNavigator { this.nextIdx = -1; })); } - if (this._options.alwaysRevealFirst) { - this._register(this._editor.getModifiedEditor().onDidChangeModel((e) => { - this.revealFirst = true; - })); - } // init things this._init(); diff --git a/src/vs/editor/browser/widget/diffReview.ts b/src/vs/editor/browser/widget/diffReview.ts index f768f14750e..66ec0c678e1 100644 --- a/src/vs/editor/browser/widget/diffReview.ts +++ b/src/vs/editor/browser/widget/diffReview.ts @@ -3,37 +3,34 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/diffReview'; -import * as nls from 'vs/nls'; import * as dom from 'vs/base/browser/dom'; import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; import { Action } from 'vs/base/common/actions'; +import { Codicon } from 'vs/base/common/codicons'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; -import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditorWidget'; -import { IComputedEditorOptions, EditorOption, EditorFontLigatures } from 'vs/editor/common/config/editorOptions'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { Position } from 'vs/editor/common/core/position'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { ITextModel, TextModelResolvedOptions } from 'vs/editor/common/model'; -import { RenderLineInput, renderViewLine2 as renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { ViewLineRenderingData } from 'vs/editor/common/viewModel'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ThemeIcon } from 'vs/base/common/themables'; import { Constants } from 'vs/base/common/uint'; -import { Codicon } from 'vs/base/common/codicons'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; +import 'vs/css!./media/diffReview'; +import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; +import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditorWidget'; +import { EditorFontLigatures, EditorOption, IComputedEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { Position } from 'vs/editor/common/core/position'; +import { ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; +import { ScrollType } from 'vs/editor/common/editorCommon'; import { ILanguageIdCodec } from 'vs/editor/common/languages'; import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; +import { ITextModel, TextModelResolvedOptions } from 'vs/editor/common/model'; +import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; +import { RenderLineInput, renderViewLine2 as renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; +import { ViewLineRenderingData } from 'vs/editor/common/viewModel'; +import * as nls from 'vs/nls'; import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; const DIFF_LINES_PADDING = 3; @@ -86,7 +83,7 @@ const diffReviewCloseIcon = registerIcon('diff-review-close', Codicon.close, nls export class DiffReview extends Disposable { - private static _ttPolicy = window.trustedTypes?.createPolicy('diffReview', { createHTML: value => value }); + public static _ttPolicy = createTrustedTypesPolicy('diffReview', { createHTML: value => value }); private readonly _diffEditor: DiffEditorWidget; private _isVisible: boolean; @@ -102,7 +99,8 @@ export class DiffReview extends Disposable { constructor( diffEditor: DiffEditorWidget, @ILanguageService private readonly _languageService: ILanguageService, - @IAudioCueService private readonly _audioCueService: IAudioCueService + @IAudioCueService private readonly _audioCueService: IAudioCueService, + @IConfigurationService private readonly _configurationService: IConfigurationService ) { super(); this._diffEditor = diffEditor; @@ -180,6 +178,11 @@ export class DiffReview extends Disposable { this.accept(); } })); + this._register(this._configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('accessibility.verbosity.diffEditor')) { + this._diffEditor.updateOptions({ accessibilityVerbose: this._configurationService.getValue('accessibility.verbosity.diffEditor') }); + } + })); this._diffs = []; this._currentDiff = null; } @@ -821,65 +824,3 @@ export class DiffReview extends Disposable { } // theming - -class DiffReviewNext extends EditorAction { - constructor() { - super({ - id: 'editor.action.diffReview.next', - label: nls.localize('editor.action.diffReview.next', "Go to Next Difference"), - alias: 'Go to Next Difference', - precondition: ContextKeyExpr.has('isInDiffEditor'), - kbOpts: { - kbExpr: null, - primary: KeyCode.F7, - weight: KeybindingWeight.EditorContrib - } - }); - } - - public run(accessor: ServicesAccessor, editor: ICodeEditor): void { - const diffEditor = findFocusedDiffEditor(accessor); - diffEditor?.diffReviewNext(); - } -} - -class DiffReviewPrev extends EditorAction { - constructor() { - super({ - id: 'editor.action.diffReview.prev', - label: nls.localize('editor.action.diffReview.prev', "Go to Previous Difference"), - alias: 'Go to Previous Difference', - precondition: ContextKeyExpr.has('isInDiffEditor'), - kbOpts: { - kbExpr: null, - primary: KeyMod.Shift | KeyCode.F7, - weight: KeybindingWeight.EditorContrib - } - }); - } - - public run(accessor: ServicesAccessor, editor: ICodeEditor): void { - const diffEditor = findFocusedDiffEditor(accessor); - diffEditor?.diffReviewPrev(); - } -} - -function findFocusedDiffEditor(accessor: ServicesAccessor): DiffEditorWidget | null { - const codeEditorService = accessor.get(ICodeEditorService); - const diffEditors = codeEditorService.listDiffEditors(); - const activeCodeEditor = 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; - } - } - return null; -} - -registerEditorAction(DiffReviewNext); -registerEditorAction(DiffReviewPrev); diff --git a/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts b/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts index 1d24e5e5887..553470a8494 100644 --- a/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts +++ b/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts @@ -6,8 +6,8 @@ import * as objects from 'vs/base/common/objects'; import { ICodeEditor, IDiffEditorConstructionOptions } from 'vs/editor/browser/editorBrowser'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; -import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditorWidget'; +import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditorWidget'; +import { DiffEditorWidget, IDiffCodeEditorWidgetOptions } from 'vs/editor/browser/widget/diffEditorWidget'; import { ConfigurationChangedEvent, IDiffEditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; @@ -29,6 +29,7 @@ export class EmbeddedCodeEditorWidget extends CodeEditorWidget { constructor( domElement: HTMLElement, options: IEditorOptions, + codeEditorWidgetOptions: ICodeEditorWidgetOptions, parentEditor: ICodeEditor, @IInstantiationService instantiationService: IInstantiationService, @ICodeEditorService codeEditorService: ICodeEditorService, @@ -40,7 +41,7 @@ export class EmbeddedCodeEditorWidget extends CodeEditorWidget { @ILanguageConfigurationService languageConfigurationService: ILanguageConfigurationService, @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, ) { - super(domElement, { ...parentEditor.getRawOptions(), overflowWidgetsDomNode: parentEditor.getOverflowWidgetsDomNode() }, {}, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService); + super(domElement, { ...parentEditor.getRawOptions(), overflowWidgetsDomNode: parentEditor.getOverflowWidgetsDomNode() }, codeEditorWidgetOptions, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService); this._parentEditor = parentEditor; this._overwriteOptions = options; @@ -74,6 +75,7 @@ export class EmbeddedDiffEditorWidget extends DiffEditorWidget { constructor( domElement: HTMLElement, options: Readonly, + codeEditorWidgetOptions: IDiffCodeEditorWidgetOptions, parentEditor: ICodeEditor, @IContextKeyService contextKeyService: IContextKeyService, @IInstantiationService instantiationService: IInstantiationService, @@ -84,7 +86,7 @@ export class EmbeddedDiffEditorWidget extends DiffEditorWidget { @IClipboardService clipboardService: IClipboardService, @IEditorProgressService editorProgressService: IEditorProgressService, ) { - super(domElement, parentEditor.getRawOptions(), {}, clipboardService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService); + super(domElement, parentEditor.getRawOptions(), codeEditorWidgetOptions, clipboardService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService); this._parentEditor = parentEditor; this._overwriteOptions = options; diff --git a/src/vs/editor/browser/widget/inlineDiffMargin.ts b/src/vs/editor/browser/widget/inlineDiffMargin.ts index 69dfd17560c..1388f64a8f0 100644 --- a/src/vs/editor/browser/widget/inlineDiffMargin.ts +++ b/src/vs/editor/browser/widget/inlineDiffMargin.ts @@ -16,6 +16,7 @@ import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Codicon } from 'vs/base/common/codicons'; import { ThemeIcon } from 'vs/base/common/themables'; import { EndOfLineSequence, ITextModel } from 'vs/editor/common/model'; +import { isIOS } from 'vs/base/common/platform'; export interface IDiffLinesChange { readonly originalStartLineNumber: number; @@ -145,8 +146,11 @@ export class InlineDiffMargin extends Disposable { })); } + const useShadowDOM = editor.getOption(EditorOption.useShadowDOM) && !isIOS; // Do not use shadow dom on IOS #122035 + const showContextMenu = (x: number, y: number) => { this._contextMenuService.showContextMenu({ + domForShadowRoot: useShadowDOM ? editor.getDomNode() ?? undefined : undefined, getAnchor: () => { return { x, diff --git a/src/vs/editor/browser/widget/media/diffReview.css b/src/vs/editor/browser/widget/media/diffReview.css index 24fe722bc98..cca9d486aa6 100644 --- a/src/vs/editor/browser/widget/media/diffReview.css +++ b/src/vs/editor/browser/widget/media/diffReview.css @@ -13,6 +13,7 @@ position: absolute; user-select: none; -webkit-user-select: none; + z-index: 99; } .monaco-diff-editor .diff-review-summary { @@ -53,6 +54,7 @@ position: absolute; right: 10px; top: 2px; + z-index: 100; } .monaco-diff-editor .diff-review-actions .action-label { diff --git a/src/vs/editor/browser/widget/workerBasedDocumentDiffProvider.ts b/src/vs/editor/browser/widget/workerBasedDocumentDiffProvider.ts index 3f837f75657..8994275abc1 100644 --- a/src/vs/editor/browser/widget/workerBasedDocumentDiffProvider.ts +++ b/src/vs/editor/browser/widget/workerBasedDocumentDiffProvider.ts @@ -5,20 +5,27 @@ import { Emitter, Event } from 'vs/base/common/event'; import { IDisposable } from 'vs/base/common/lifecycle'; +import { StopWatch } from 'vs/base/common/stopwatch'; +import { LineRange } from 'vs/editor/common/core/lineRange'; import { IDocumentDiff, IDocumentDiffProvider, IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; +import { LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; import { ITextModel } from 'vs/editor/common/model'; import { DiffAlgorithmName, IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; +import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; export class WorkerBasedDocumentDiffProvider implements IDocumentDiffProvider, IDisposable { private onDidChangeEventEmitter = new Emitter(); public readonly onDidChange: Event = this.onDidChangeEventEmitter.event; - private diffAlgorithm: DiffAlgorithmName | IDocumentDiffProvider = 'smart'; + private diffAlgorithm: DiffAlgorithmName | IDocumentDiffProvider = 'advanced'; private diffAlgorithmOnDidChangeSubscription: IDisposable | undefined = undefined; + private static readonly diffCache = new Map(); + constructor( options: IWorkerBasedDocumentDiffProviderOptions, @IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService, + @ITelemetryService private readonly telemetryService: ITelemetryService, ) { this.setOptions(options); } @@ -32,11 +39,63 @@ export class WorkerBasedDocumentDiffProvider implements IDocumentDiffProvider, I return this.diffAlgorithm.computeDiff(original, modified, options); } + // This significantly speeds up the case when the original file is empty + if (original.getLineCount() === 1 && original.getLineMaxColumn(1) === 1) { + return { + changes: [ + new LineRangeMapping( + new LineRange(1, 2), + new LineRange(1, modified.getLineCount() + 1), + [ + new RangeMapping( + original.getFullModelRange(), + modified.getFullModelRange(), + ) + ] + ) + ], + identical: false, + quitEarly: false, + moves: [], + }; + } + + const uriKey = JSON.stringify([original.uri.toString(), modified.uri.toString()]); + const context = JSON.stringify([original.id, modified.id, original.getAlternativeVersionId(), modified.getAlternativeVersionId(), JSON.stringify(options)]); + const c = WorkerBasedDocumentDiffProvider.diffCache.get(uriKey); + if (c && c.context === context) { + return c.result; + } + + const sw = StopWatch.create(); const result = await this.editorWorkerService.computeDiff(original.uri, modified.uri, options, this.diffAlgorithm); + const timeMs = sw.elapsed(); + + this.telemetryService.publicLog2<{ + timeMs: number; + timedOut: boolean; + }, { + owner: 'hediet'; + + timeMs: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'To understand if the new diff algorithm is slower/faster than the old one' }; + timedOut: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'To understand how often the new diff algorithm times out' }; + + comment: 'This event gives insight about the performance of the new diff algorithm.'; + }>('diffEditor.computeDiff', { + timeMs, + timedOut: result?.quitEarly ?? true, + }); + if (!result) { throw new Error('no diff result available'); } + // max 10 items in cache + if (WorkerBasedDocumentDiffProvider.diffCache.size > 10) { + WorkerBasedDocumentDiffProvider.diffCache.delete(WorkerBasedDocumentDiffProvider.diffCache.keys().next().value); + } + + WorkerBasedDocumentDiffProvider.diffCache.set(uriKey, { result, context }); return result; } @@ -61,5 +120,5 @@ export class WorkerBasedDocumentDiffProvider implements IDocumentDiffProvider, I } interface IWorkerBasedDocumentDiffProviderOptions { - readonly diffAlgorithm?: 'smart' | 'experimental' | IDocumentDiffProvider; + readonly diffAlgorithm?: 'legacy' | 'advanced' | IDocumentDiffProvider; } diff --git a/src/vs/editor/common/config/editorConfiguration.ts b/src/vs/editor/common/config/editorConfiguration.ts index 454d81cb089..415f8532d85 100644 --- a/src/vs/editor/common/config/editorConfiguration.ts +++ b/src/vs/editor/common/config/editorConfiguration.ts @@ -55,4 +55,8 @@ export interface IEditorConfiguration extends IDisposable { * Set reserved height above. */ setReservedHeight(reservedHeight: number): void; + /** + * Set the number of decoration lanes to be rendered in the glyph margin. + */ + setGlyphMarginDecorationLaneCount(decorationLaneCount: number): void; } diff --git a/src/vs/editor/common/config/editorConfigurationSchema.ts b/src/vs/editor/common/config/editorConfigurationSchema.ts index a2c3d886017..70dd0b515db 100644 --- a/src/vs/editor/common/config/editorConfigurationSchema.ts +++ b/src/vs/editor/common/config/editorConfigurationSchema.ts @@ -101,6 +101,16 @@ const editorConfiguration: IConfigurationNode = { description: nls.localize('editor.experimental.asyncTokenization', "Controls whether the tokenization should happen asynchronously on a web worker."), tags: ['experimental'], }, + 'editor.experimental.asyncTokenizationLogging': { + type: 'boolean', + default: false, + description: nls.localize('editor.experimental.asyncTokenizationLogging', "Controls whether async tokenization should be logged. For debugging only."), + }, + 'editor.experimental.asyncTokenizationVerification': { + type: 'boolean', + default: false, + description: nls.localize('editor.experimental.asyncTokenizationVerification', "Controls whether async tokenization should be verified against legacy background tokenization. Might slow down tokenization. For debugging only."), + }, 'editor.language.brackets': { type: ['array', 'null'], default: null, // We want to distinguish the empty array from not configured. @@ -184,13 +194,34 @@ const editorConfiguration: IConfigurationNode = { }, 'diffEditor.diffAlgorithm': { type: 'string', - enum: ['smart', 'experimental'], - default: 'smart', + enum: ['legacy', 'advanced'], + default: 'legacy', markdownEnumDescriptions: [ - nls.localize('diffAlgorithm.smart', "Uses the default diffing algorithm."), - nls.localize('diffAlgorithm.experimental', "Uses an experimental diffing algorithm."), - ] + nls.localize('diffAlgorithm.legacy', "Uses the legacy diffing algorithm."), + nls.localize('diffAlgorithm.advanced', "Uses the advanced diffing algorithm."), + ], + tags: ['experimental'], }, + 'diffEditor.experimental.collapseUnchangedRegions': { + type: 'boolean', + default: false, + markdownDescription: nls.localize('collapseUnchangedRegions', "Controls whether the diff editor shows unchanged regions. Only works when {0} is set.", '`#diffEditor.experimental.useVersion2#`'), + }, + 'diffEditor.experimental.showMoves': { + type: 'boolean', + default: false, + markdownDescription: nls.localize('showMoves', "Controls whether the diff editor should show detected code moves. Only works when {0} is set.", '`#diffEditor.experimental.useVersion2#`') + }, + 'diffEditor.experimental.useVersion2': { + type: 'boolean', + default: false, + description: nls.localize('useVersion2', "Controls whether the diff editor uses the new or the old implementation."), + }, + 'diffEditor.experimental.showEmptyDecorations': { + type: 'boolean', + default: true, + description: nls.localize('showEmptyDecorations', "Controls whether the diff editor shows empty decorations to see where characters got inserted or deleted."), + } } }; diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index 3383600a83b..b2f09749f2f 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -3,19 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as nls from 'vs/nls'; +import * as arrays from 'vs/base/common/arrays'; +import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { IJSONSchema } from 'vs/base/common/jsonSchema'; +import * as objects from 'vs/base/common/objects'; import * as platform from 'vs/base/common/platform'; import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { FontInfo } from 'vs/editor/common/config/fontInfo'; import { Constants } from 'vs/base/common/uint'; +import { FontInfo } from 'vs/editor/common/config/fontInfo'; +import { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/core/textModelDefaults'; import { USUAL_WORD_SEPARATORS } from 'vs/editor/common/core/wordHelper'; +import { IDocumentDiffProvider } from 'vs/editor/common/diff/documentDiffProvider'; +import * as nls from 'vs/nls'; import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; import { IConfigurationPropertySchema } from 'vs/platform/configuration/common/configurationRegistry'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import * as arrays from 'vs/base/common/arrays'; -import * as objects from 'vs/base/common/objects'; -import { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/core/textModelDefaults'; -import { IDocumentDiffProvider } from 'vs/editor/common/diff/documentDiffProvider'; //#region typed options @@ -57,6 +58,10 @@ export interface IEditorOptions { * The aria label for the editor's textarea (when it is focused). */ ariaLabel?: string; + /** + * Control whether a screen reader announces inline suggestion content immediately. + */ + screenReaderAnnounceInlineSuggestion?: boolean; /** * The `tabindex` property of the editor's textarea */ @@ -147,6 +152,10 @@ export interface IEditorOptions { * Defaults to false. */ readOnly?: boolean; + /** + * The message to display when the editor is readonly. + */ + readOnlyMessage?: IMarkdownString; /** * Should the textarea used for input use the DOM `readonly` attribute. * Defaults to false. @@ -236,6 +245,10 @@ export interface IEditorOptions { * Defaults to false. */ fontVariations?: boolean | string; + /** + * Controls whether to use default color decorations or not using the default document color provider + */ + defaultColorDecorators?: boolean; /** * Disable the use of `transform: translate3d(0px, 0px, 0px)` for the editor margin and lines layers. * The usage of `transform: translate3d(0px, 0px, 0px)` acts as a hint for browsers to create an extra layer. @@ -341,6 +354,10 @@ export interface IEditorOptions { * Enable inline color decorators and color picker rendering. */ colorDecorators?: boolean; + /** + * Controls what is the condition to spawn a color picker from a color dectorator + */ + colorDecoratorsActivatedOn?: 'clickAndHover' | 'click' | 'hover'; /** * Controls the max number of color decorators that can be rendered in an editor at once. */ @@ -699,6 +716,11 @@ export interface IEditorOptions { */ dropIntoEditor?: IDropIntoEditorOptions; + /** + * Controls support for changing how content is pasted into the editor. + */ + pasteAs?: IPasteAsOptions; + /** * Controls whether the editor receives tabs or defers them to the workbench for navigation. */ @@ -717,6 +739,12 @@ export interface IDiffEditorBaseOptions { * Defaults to true. */ enableSplitViewResizing?: boolean; + /** + * The default ratio when rendering side-by-side editors. + * Must be a number between 0 and 1, min sizes apply. + * Defaults to 0.5 + */ + splitViewDefaultRatio?: number; /** * Render the differences in two side-by-side editors. * Defaults to true. @@ -769,7 +797,31 @@ export interface IDiffEditorBaseOptions { /** * Diff Algorithm */ - diffAlgorithm?: 'smart' | 'experimental' | IDocumentDiffProvider; + diffAlgorithm?: 'legacy' | 'advanced' | IDocumentDiffProvider; + + /** + * Whether the diff editor aria label should be verbose. + */ + accessibilityVerbose?: boolean; + + experimental?: { + /** + * Defaults to false. + */ + collapseUnchangedRegions?: boolean; + /** + * Defaults to false. + */ + showMoves?: boolean; + + showEmptyDecorations?: boolean; + }; + + /** + * Is the diff editor inside another editor + * Defaults to false + */ + isInEmbeddedEditor?: boolean; } /** @@ -826,6 +878,7 @@ export interface IEnvironmentalOptions { readonly pixelRatio: number; readonly tabFocusMode: boolean; readonly accessibilitySupport: AccessibilitySupport; + readonly glyphMarginDecorationLaneCount: number; } /** @@ -1059,6 +1112,16 @@ class EditorIntOption extends SimpleEditorOption(value: any, defaultValue: T, minimum: number, maximum: number): number | T { + if (typeof value === 'undefined') { + return defaultValue; + } + const r = EditorFloatOption.float(value, defaultValue); + return EditorFloatOption.clamp(r, minimum, maximum); +} class EditorFloatOption extends SimpleEditorOption { @@ -1124,10 +1187,13 @@ class EditorStringOption extends SimpleEditorOption(value: T | undefined, defaultValue: T, allowedValues: ReadonlyArray): T { +export function stringSet(value: T | undefined, defaultValue: T, allowedValues: ReadonlyArray, renamedValues?: Record): T { if (typeof value !== 'string') { return defaultValue; } + if (renamedValues && value in renamedValues) { + return renamedValues[value]; + } if (allowedValues.indexOf(value) === -1) { return defaultValue; } @@ -2059,6 +2125,11 @@ export interface EditorLayoutInfo { */ readonly glyphMarginWidth: number; + /** + * The number of decoration lanes to render in the glyph margin. + */ + readonly glyphMarginDecorationLaneCount: number; + /** * Left position for the line numbers. */ @@ -2146,6 +2217,7 @@ export interface EditorLayoutInfoComputerEnv { readonly typicalHalfwidthCharacterWidth: number; readonly maxDigitWidth: number; readonly pixelRatio: number; + readonly glyphMarginDecorationLaneCount: number; } /** @@ -2213,7 +2285,8 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption { constructor() { - const defaults: EditorStickyScrollOptions = { enabled: false, maxLineCount: 5 }; + const defaults: EditorStickyScrollOptions = { enabled: false, maxLineCount: 5, defaultModel: 'outlineModel' }; super( EditorOption.stickyScroll, 'stickyScroll', defaults, { 'editor.stickyScroll.enabled': { type: 'boolean', default: defaults.enabled, - description: nls.localize('editor.stickyScroll', "Shows the nested current scopes during the scroll at the top of the editor.") + description: nls.localize('editor.stickyScroll.enabled', "Shows the nested current scopes during the scroll at the top of the editor.") }, 'editor.stickyScroll.maxLineCount': { type: 'number', default: defaults.maxLineCount, minimum: 1, maximum: 10, - description: nls.localize('editor.stickyScroll.', "Defines the maximum number of sticky lines to show.") + description: nls.localize('editor.stickyScroll.maxLineCount', "Defines the maximum number of sticky lines to show.") + }, + 'editor.stickyScroll.defaultModel': { + type: 'string', + enum: ['outlineModel', 'foldingProviderModel', 'indentationModel'], + default: defaults.defaultModel, + description: nls.localize('editor.stickyScroll.defaultModel', "Defines the model to use for determining which lines to stick. If the outline model does not exist, it will fall back on the folding provider model which falls back on the indentation model. This order is respected in all three cases.") }, } ); @@ -2693,6 +2776,7 @@ class EditorStickyScroll extends BaseEditorOption(input.defaultModel, this.defaultValue.defaultModel, ['outlineModel', 'foldingProviderModel', 'indentationModel']), }; } } @@ -3383,6 +3467,30 @@ class EditorRulers extends BaseEditorOption { + constructor() { + const defaults = undefined; + + super( + EditorOption.readOnlyMessage, 'readOnlyMessage', defaults + ); + } + + public validate(_input: any): IMarkdownString | undefined { + if (!_input || typeof _input !== 'object') { + return this.defaultValue; + } + return _input as IMarkdownString; + } +} + +//#endregion + //#region scrollbar /** @@ -3791,6 +3899,13 @@ export interface IInlineSuggestOptions { mode?: 'prefix' | 'subword' | 'subwordSmart'; showToolbar?: 'always' | 'onHover'; + + suppressSuggestions?: boolean; + + /** + * Does not clear active inline suggestions when the editor loses focus. + */ + keepOnBlur?: boolean; } /** @@ -3807,6 +3922,8 @@ class InlineEditorSuggest extends BaseEditorOption { constructor() { - const defaults: EditorDropIntoEditorOptions = { enabled: true }; + const defaults: EditorDropIntoEditorOptions = { enabled: true, showDropSelector: 'afterDrop' }; super( EditorOption.dropIntoEditor, 'dropIntoEditor', defaults, { @@ -4701,6 +4839,19 @@ class EditorDropIntoEditor extends BaseEditorOption>; + +class EditorPasteAs extends BaseEditorOption { + + constructor() { + const defaults: EditorPasteAsOptions = { enabled: true, showPasteSelector: 'afterPaste' }; + super( + EditorOption.pasteAs, 'pasteAs', defaults, + { + 'editor.pasteAs.enabled': { + type: 'boolean', + default: defaults.enabled, + markdownDescription: nls.localize('pasteAs.enabled', "Controls whether you can paste content in different ways."), + }, + 'editor.pasteAs.showPasteSelector': { + type: 'string', + markdownDescription: nls.localize('pasteAs.showPasteSelector', "Controls if a widget is shown when pasting content in to the editor. This widget lets you control how the file is pasted."), + enum: [ + 'afterPaste', + 'never' + ], + enumDescriptions: [ + nls.localize('pasteAs.showPasteSelector.afterPaste', "Show the paste selector widget after content is pasted into the editor."), + nls.localize('pasteAs.showPasteSelector.never', "Never show the paste selector widget. Instead the default pasting behavior is always used."), + ], + default: 'afterPaste', + }, + } + ); + } + + public validate(_input: any): EditorPasteAsOptions { + if (!_input || typeof _input !== 'object') { + return this.defaultValue; + } + const input = _input as IPasteAsOptions; + return { + enabled: boolean(input.enabled, this.defaultValue.enabled), + showPasteSelector: stringSet(input.showPasteSelector, this.defaultValue.showPasteSelector, ['afterPaste', 'never']), }; } } @@ -4754,6 +4973,7 @@ export const enum EditorOption { accessibilityPageSize, ariaLabel, autoClosingBrackets, + screenReaderAnnounceInlineSuggestion, autoClosingDelete, autoClosingOvertype, autoClosingQuotes, @@ -4829,12 +5049,14 @@ export const enum EditorOption { overviewRulerBorder, overviewRulerLanes, padding, + pasteAs, parameterHints, peekWidgetDefaultFocus, definitionLinkOpensInPeek, quickSuggestions, quickSuggestionsDelay, readOnly, + readOnlyMessage, renameOnType, renderControlCharacters, renderFinalNewline, @@ -4889,6 +5111,8 @@ export const enum EditorOption { tabFocusMode, layoutInfo, wrappingInfo, + defaultColorDecorators, + colorDecoratorsActivatedOn } export const EditorOptions = { @@ -4918,6 +5142,13 @@ export const EditorOptions = { ariaLabel: register(new EditorStringOption( EditorOption.ariaLabel, 'ariaLabel', nls.localize('editorViewAccessibleLabel', "Editor content") )), + screenReaderAnnounceInlineSuggestion: register(new EditorBooleanOption( + EditorOption.screenReaderAnnounceInlineSuggestion, 'screenReaderAnnounceInlineSuggestion', true, + { + description: nls.localize('screenReaderAnnounceInlineSuggestion', "Control whether inline suggestions are announced by a screen reader."), + tags: ['accessibility'] + } + )), autoClosingBrackets: register(new EditorStringEnumOption( EditorOption.autoClosingBrackets, 'autoClosingBrackets', 'languageDefined' as 'always' | 'languageDefined' | 'beforeWhitespace' | 'never', @@ -5030,6 +5261,14 @@ export const EditorOptions = { EditorOption.colorDecorators, 'colorDecorators', true, { description: nls.localize('colorDecorators', "Controls whether the editor should render the inline color decorators and color picker.") } )), + colorDecoratorActivatedOn: register(new EditorStringEnumOption(EditorOption.colorDecoratorsActivatedOn, 'colorDecoratorsActivatedOn', 'clickAndHover' as 'clickAndHover' | 'hover' | 'click', ['clickAndHover', 'hover', 'click'] as const, { + enumDescriptions: [ + nls.localize('editor.colorDecoratorActivatedOn.clickAndHover', "Make the color picker appear both on click and hover of the color decorator"), + nls.localize('editor.colorDecoratorActivatedOn.hover', "Make the color picker appear on hover of the color decorator"), + nls.localize('editor.colorDecoratorActivatedOn.click', "Make the color picker appear on click of the color decorator") + ], + description: nls.localize('colorDecoratorActivatedOn', "Controls the condition to make a color picker appear from a color decorator") + })), colorDecoratorsLimit: register(new EditorIntOption( EditorOption.colorDecoratorsLimit, 'colorDecoratorsLimit', 500, 1, 1000000, { @@ -5297,6 +5536,7 @@ export const EditorOptions = { 3, 0, 3 )), padding: register(new EditorPadding()), + pasteAs: register(new EditorPasteAs()), parameterHints: register(new EditorParameterHints()), peekWidgetDefaultFocus: register(new EditorStringEnumOption( EditorOption.peekWidgetDefaultFocus, 'peekWidgetDefaultFocus', @@ -5323,6 +5563,7 @@ export const EditorOptions = { readOnly: register(new EditorBooleanOption( EditorOption.readOnly, 'readOnly', false, )), + readOnlyMessage: register(new ReadonlyMessage()), renameOnType: register(new EditorBooleanOption( EditorOption.renameOnType, 'renameOnType', false, { description: nls.localize('renameOnType', "Controls whether the editor auto renames on type."), markdownDeprecationMessage: nls.localize('renameOnTypeDeprecate', "Deprecated, use `editor.linkedEditing` instead.") } @@ -5607,6 +5848,10 @@ export const EditorOptions = { // Leave these at the end (because they have dependencies!) editorClassName: register(new EditorClassName()), + defaultColorDecorators: register(new EditorBooleanOption( + EditorOption.defaultColorDecorators, 'defaultColorDecorators', false, + { markdownDescription: nls.localize('defaultColorDecorators', "Controls whether inline color decorations should be shown using the default document color provider") } + )), pixelRatio: register(new EditorPixelRatio()), tabFocusMode: register(new EditorBooleanOption(EditorOption.tabFocusMode, 'tabFocusMode', false, { markdownDescription: nls.localize('tabFocusMode', "Controls whether the editor receives tabs or defers them to the workbench for navigation.") } diff --git a/src/vs/editor/common/core/editorColorRegistry.ts b/src/vs/editor/common/core/editorColorRegistry.ts index 30e2cdd1dd4..3d6668c6b60 100644 --- a/src/vs/editor/common/core/editorColorRegistry.ts +++ b/src/vs/editor/common/core/editorColorRegistry.ts @@ -21,10 +21,25 @@ export const editorSymbolHighlightBorder = registerColor('editor.symbolHighlight export const editorCursorForeground = registerColor('editorCursor.foreground', { dark: '#AEAFAD', light: Color.black, hcDark: Color.white, hcLight: '#0F4A85' }, nls.localize('caret', 'Color of the editor cursor.')); export const editorCursorBackground = registerColor('editorCursor.background', null, nls.localize('editorCursorBackground', 'The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.')); export const editorWhitespaces = registerColor('editorWhitespace.foreground', { dark: '#e3e4e229', light: '#33333333', hcDark: '#e3e4e229', hcLight: '#CCCCCC' }, nls.localize('editorWhitespaces', 'Color of whitespace characters in the editor.')); -export const editorIndentGuides = registerColor('editorIndentGuide.background', { dark: editorWhitespaces, light: editorWhitespaces, hcDark: editorWhitespaces, hcLight: editorWhitespaces }, nls.localize('editorIndentGuides', 'Color of the editor indentation guides.')); -export const editorActiveIndentGuides = registerColor('editorIndentGuide.activeBackground', { dark: editorWhitespaces, light: editorWhitespaces, hcDark: editorWhitespaces, hcLight: editorWhitespaces }, nls.localize('editorActiveIndentGuide', 'Color of the active editor indentation guides.')); export const editorLineNumbers = registerColor('editorLineNumber.foreground', { dark: '#858585', light: '#237893', hcDark: Color.white, hcLight: '#292929' }, nls.localize('editorLineNumbers', 'Color of editor line numbers.')); +export const deprecatedEditorIndentGuides = registerColor('editorIndentGuide.background', { dark: editorWhitespaces, light: editorWhitespaces, hcDark: editorWhitespaces, hcLight: editorWhitespaces }, nls.localize('editorIndentGuides', 'Color of the editor indentation guides.'), false, nls.localize('deprecatedEditorIndentGuides', '\'editorIndentGuide.background\' is deprecated. Use \'editorIndentGuide.background1\' instead.')); +export const deprecatedEditorActiveIndentGuides = registerColor('editorIndentGuide.activeBackground', { dark: editorWhitespaces, light: editorWhitespaces, hcDark: editorWhitespaces, hcLight: editorWhitespaces }, nls.localize('editorActiveIndentGuide', 'Color of the active editor indentation guides.'), false, nls.localize('deprecatedEditorActiveIndentGuide', '\'editorIndentGuide.activeBackground\' is deprecated. Use \'editorIndentGuide.activeBackground1\' instead.')); + +export const editorIndentGuide1 = registerColor('editorIndentGuide.background1', { dark: deprecatedEditorIndentGuides, light: deprecatedEditorIndentGuides, hcDark: deprecatedEditorIndentGuides, hcLight: deprecatedEditorIndentGuides }, nls.localize('editorIndentGuides1', 'Color of the editor indentation guides (1).')); +export const editorIndentGuide2 = registerColor('editorIndentGuide.background2', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorIndentGuides2', 'Color of the editor indentation guides (2).')); +export const editorIndentGuide3 = registerColor('editorIndentGuide.background3', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorIndentGuides3', 'Color of the editor indentation guides (3).')); +export const editorIndentGuide4 = registerColor('editorIndentGuide.background4', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorIndentGuides4', 'Color of the editor indentation guides (4).')); +export const editorIndentGuide5 = registerColor('editorIndentGuide.background5', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorIndentGuides5', 'Color of the editor indentation guides (5).')); +export const editorIndentGuide6 = registerColor('editorIndentGuide.background6', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorIndentGuides6', 'Color of the editor indentation guides (6).')); + +export const editorActiveIndentGuide1 = registerColor('editorIndentGuide.activeBackground1', { dark: deprecatedEditorActiveIndentGuides, light: deprecatedEditorActiveIndentGuides, hcDark: deprecatedEditorActiveIndentGuides, hcLight: deprecatedEditorActiveIndentGuides }, nls.localize('editorActiveIndentGuide1', 'Color of the active editor indentation guides (1).')); +export const editorActiveIndentGuide2 = registerColor('editorIndentGuide.activeBackground2', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorActiveIndentGuide2', 'Color of the active editor indentation guides (2).')); +export const editorActiveIndentGuide3 = registerColor('editorIndentGuide.activeBackground3', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorActiveIndentGuide3', 'Color of the active editor indentation guides (3).')); +export const editorActiveIndentGuide4 = registerColor('editorIndentGuide.activeBackground4', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorActiveIndentGuide4', 'Color of the active editor indentation guides (4).')); +export const editorActiveIndentGuide5 = registerColor('editorIndentGuide.activeBackground5', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorActiveIndentGuide5', 'Color of the active editor indentation guides (5).')); +export const editorActiveIndentGuide6 = registerColor('editorIndentGuide.activeBackground6', { dark: '#00000000', light: '#00000000', hcDark: '#00000000', hcLight: '#00000000' }, nls.localize('editorActiveIndentGuide6', 'Color of the active editor indentation guides (6).')); + const deprecatedEditorActiveLineNumber = registerColor('editorActiveLineNumber.foreground', { dark: '#c6c6c6', light: '#0B216F', hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('editorActiveLineNumber', 'Color of editor active line number'), false, nls.localize('deprecatedEditorActiveLineNumber', 'Id is deprecated. Use \'editorLineNumber.activeForeground\' instead.')); export const editorActiveLineNumber = registerColor('editorLineNumber.activeForeground', { dark: deprecatedEditorActiveLineNumber, light: deprecatedEditorActiveLineNumber, hcDark: deprecatedEditorActiveLineNumber, hcLight: deprecatedEditorActiveLineNumber }, nls.localize('editorActiveLineNumber', 'Color of editor active line number')); export const editorDimmedLineNumber = registerColor('editorLineNumber.dimmedForeground', { dark: null, light: null, hcDark: null, hcLight: null }, nls.localize('editorDimmedLineNumber', 'Color of the final editor line when editor.renderFinalNewline is set to dimmed.')); diff --git a/src/vs/editor/common/core/lineRange.ts b/src/vs/editor/common/core/lineRange.ts new file mode 100644 index 00000000000..d39b5e1901e --- /dev/null +++ b/src/vs/editor/common/core/lineRange.ts @@ -0,0 +1,234 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { BugIndicatingError } from 'vs/base/common/errors'; +import { Range } from 'vs/editor/common/core/range'; + +/** + * A range of lines (1-based). + */ +export class LineRange { + public static fromRange(range: Range): LineRange { + return new LineRange(range.startLineNumber, range.endLineNumber); + } + + public static subtract(a: LineRange, b: LineRange | undefined): LineRange[] { + if (!b) { + return [a]; + } + if (a.startLineNumber < b.startLineNumber && b.endLineNumberExclusive < a.endLineNumberExclusive) { + return [ + new LineRange(a.startLineNumber, b.startLineNumber), + new LineRange(b.endLineNumberExclusive, a.endLineNumberExclusive) + ]; + } else if (b.startLineNumber <= a.startLineNumber && a.endLineNumberExclusive <= b.endLineNumberExclusive) { + return []; + } else if (b.endLineNumberExclusive < a.endLineNumberExclusive) { + return [new LineRange(Math.max(b.endLineNumberExclusive, a.startLineNumber), a.endLineNumberExclusive)]; + } else { + return [new LineRange(a.startLineNumber, Math.min(b.startLineNumber, a.endLineNumberExclusive))]; + } + } + + /** + * @param lineRanges An array of sorted line ranges. + */ + public static joinMany(lineRanges: readonly (readonly LineRange[])[]): readonly LineRange[] { + if (lineRanges.length === 0) { + return []; + } + let result = lineRanges[0]; + for (let i = 1; i < lineRanges.length; i++) { + result = this.join(result, lineRanges[i]); + } + return result; + } + + /** + * @param lineRanges1 Must be sorted. + * @param lineRanges2 Must be sorted. + */ + public static join(lineRanges1: readonly LineRange[], lineRanges2: readonly LineRange[]): readonly LineRange[] { + if (lineRanges1.length === 0) { + return lineRanges2; + } + if (lineRanges2.length === 0) { + return lineRanges1; + } + + const result: LineRange[] = []; + let i1 = 0; + let i2 = 0; + let current: LineRange | null = null; + while (i1 < lineRanges1.length || i2 < lineRanges2.length) { + let next: LineRange | null = null; + if (i1 < lineRanges1.length && i2 < lineRanges2.length) { + const lineRange1 = lineRanges1[i1]; + const lineRange2 = lineRanges2[i2]; + if (lineRange1.startLineNumber < lineRange2.startLineNumber) { + next = lineRange1; + i1++; + } else { + next = lineRange2; + i2++; + } + } else if (i1 < lineRanges1.length) { + next = lineRanges1[i1]; + i1++; + } else { + next = lineRanges2[i2]; + i2++; + } + + if (current === null) { + current = next; + } else { + if (current.endLineNumberExclusive >= next.startLineNumber) { + // merge + current = new LineRange(current.startLineNumber, Math.max(current.endLineNumberExclusive, next.endLineNumberExclusive)); + } else { + // push + result.push(current); + current = next; + } + } + } + if (current !== null) { + result.push(current); + } + return result; + } + + public static ofLength(startLineNumber: number, length: number): LineRange { + return new LineRange(startLineNumber, startLineNumber + length); + } + + /** + * @internal + */ + public static deserialize(lineRange: ISerializedLineRange): LineRange { + return new LineRange(lineRange[0], lineRange[1]); + } + + /** + * The start line number. + */ + public readonly startLineNumber: number; + + /** + * The end line number (exclusive). + */ + public readonly endLineNumberExclusive: number; + + constructor( + startLineNumber: number, + endLineNumberExclusive: number, + ) { + if (startLineNumber > endLineNumberExclusive) { + throw new BugIndicatingError(`startLineNumber ${startLineNumber} cannot be after endLineNumberExclusive ${endLineNumberExclusive}`); + } + this.startLineNumber = startLineNumber; + this.endLineNumberExclusive = endLineNumberExclusive; + } + + /** + * Indicates if this line range contains the given line number. + */ + public contains(lineNumber: number): boolean { + return this.startLineNumber <= lineNumber && lineNumber < this.endLineNumberExclusive; + } + + /** + * Indicates if this line range is empty. + */ + get isEmpty(): boolean { + return this.startLineNumber === this.endLineNumberExclusive; + } + + /** + * Moves this line range by the given offset of line numbers. + */ + public delta(offset: number): LineRange { + return new LineRange(this.startLineNumber + offset, this.endLineNumberExclusive + offset); + } + + /** + * The number of lines this line range spans. + */ + public get length(): number { + return this.endLineNumberExclusive - this.startLineNumber; + } + + /** + * Creates a line range that combines this and the given line range. + */ + public join(other: LineRange): LineRange { + return new LineRange( + Math.min(this.startLineNumber, other.startLineNumber), + Math.max(this.endLineNumberExclusive, other.endLineNumberExclusive) + ); + } + + public toString(): string { + return `[${this.startLineNumber},${this.endLineNumberExclusive})`; + } + + /** + * The resulting range is empty if the ranges do not intersect, but touch. + * If the ranges don't even touch, the result is undefined. + */ + public intersect(other: LineRange): LineRange | undefined { + const startLineNumber = Math.max(this.startLineNumber, other.startLineNumber); + const endLineNumberExclusive = Math.min(this.endLineNumberExclusive, other.endLineNumberExclusive); + if (startLineNumber <= endLineNumberExclusive) { + return new LineRange(startLineNumber, endLineNumberExclusive); + } + return undefined; + } + + public intersectsStrict(other: LineRange): boolean { + return this.startLineNumber < other.endLineNumberExclusive && other.startLineNumber < this.endLineNumberExclusive; + } + + public overlapOrTouch(other: LineRange): boolean { + return this.startLineNumber <= other.endLineNumberExclusive && other.startLineNumber <= this.endLineNumberExclusive; + } + + public equals(b: LineRange): boolean { + return this.startLineNumber === b.startLineNumber && this.endLineNumberExclusive === b.endLineNumberExclusive; + } + + public toInclusiveRange(): Range | null { + if (this.isEmpty) { + return null; + } + return new Range(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER); + } + + public toExclusiveRange(): Range { + return new Range(this.startLineNumber, 1, this.endLineNumberExclusive, 1); + } + + public mapToLineArray(f: (lineNumber: number) => T): T[] { + const result: T[] = []; + for (let lineNumber = this.startLineNumber; lineNumber < this.endLineNumberExclusive; lineNumber++) { + result.push(f(lineNumber)); + } + return result; + } + + /** + * @internal + */ + public serialize(): ISerializedLineRange { + return [this.startLineNumber, this.endLineNumberExclusive]; + } + + public includes(lineNumber: number): boolean { + return this.startLineNumber <= lineNumber && lineNumber < this.endLineNumberExclusive; + } +} + +export type ISerializedLineRange = [startLineNumber: number, endLineNumberExclusive: number]; diff --git a/src/vs/editor/common/core/offsetRange.ts b/src/vs/editor/common/core/offsetRange.ts new file mode 100644 index 00000000000..14ff2039fc7 --- /dev/null +++ b/src/vs/editor/common/core/offsetRange.ts @@ -0,0 +1,93 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { BugIndicatingError } from 'vs/base/common/errors'; + +/** + * A range of offsets (0-based). +*/ +export class OffsetRange { + public static addRange(range: OffsetRange, sortedRanges: OffsetRange[]): void { + let i = 0; + while (i < sortedRanges.length && sortedRanges[i].endExclusive < range.start) { + i++; + } + let j = i; + while (j < sortedRanges.length && sortedRanges[j].start <= range.endExclusive) { + j++; + } + if (i === j) { + sortedRanges.splice(i, 0, range); + } else { + const start = Math.min(range.start, sortedRanges[i].start); + const end = Math.max(range.endExclusive, sortedRanges[j - 1].endExclusive); + sortedRanges.splice(i, j - i, new OffsetRange(start, end)); + } + } + + public static tryCreate(start: number, endExclusive: number): OffsetRange | undefined { + if (start > endExclusive) { + return undefined; + } + return new OffsetRange(start, endExclusive); + } + + constructor(public readonly start: number, public readonly endExclusive: number) { + if (start > endExclusive) { + throw new BugIndicatingError(`Invalid range: ${this.toString()}`); + } + } + + get isEmpty(): boolean { + return this.start === this.endExclusive; + } + + public delta(offset: number): OffsetRange { + return new OffsetRange(this.start + offset, this.endExclusive + offset); + } + + public get length(): number { + return this.endExclusive - this.start; + } + + public toString() { + return `[${this.start}, ${this.endExclusive})`; + } + + public equals(other: OffsetRange): boolean { + return this.start === other.start && this.endExclusive === other.endExclusive; + } + + public containsRange(other: OffsetRange): boolean { + return this.start <= other.start && other.endExclusive <= this.endExclusive; + } + + public contains(offset: number): boolean { + return this.start <= offset && offset < this.endExclusive; + } + + /** + * for all numbers n: range1.contains(n) or range2.contains(n) => range1.join(range2).contains(n) + * The joined range is the smallest range that contains both ranges. + */ + public join(other: OffsetRange): OffsetRange { + return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive)); + } + + /** + * for all numbers n: range1.contains(n) and range2.contains(n) <=> range1.intersect(range2).contains(n) + * + * The resulting range is empty if the ranges do not intersect, but touch. + * If the ranges don't even touch, the result is undefined. + */ + public intersect(other: OffsetRange): OffsetRange | undefined { + const start = Math.max(this.start, other.start); + const end = Math.min(this.endExclusive, other.endExclusive); + if (start <= end) { + return new OffsetRange(start, end); + } + return undefined; + } +} diff --git a/src/vs/editor/common/cursor/cursorMoveOperations.ts b/src/vs/editor/common/cursor/cursorMoveOperations.ts index a57cc00fad5..5699917a4f4 100644 --- a/src/vs/editor/common/cursor/cursorMoveOperations.ts +++ b/src/vs/editor/common/cursor/cursorMoveOperations.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CursorConfiguration, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from 'vs/editor/common/cursorCommon'; +import * as strings from 'vs/base/common/strings'; +import { Constants } from 'vs/base/common/uint'; import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; -import * as strings from 'vs/base/common/strings'; -import { Constants } from 'vs/base/common/uint'; import { AtomicTabMoveOperations, Direction } from 'vs/editor/common/cursor/cursorAtomicMoveOperations'; +import { CursorConfiguration, ICursorSimpleModel, SelectionStartKind, SingleCursorState } from 'vs/editor/common/cursorCommon'; import { PositionAffinity } from 'vs/editor/common/model'; export class CursorPosition { @@ -213,7 +213,15 @@ export class MoveOperations { column = cursor.position.column; } - const r = MoveOperations.down(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true); + let i = 0; + let r: CursorPosition; + do { + r = MoveOperations.down(config, model, lineNumber + i, column, cursor.leftoverVisibleColumns, linesCount, true); + const np = model.normalizePosition(new Position(r.lineNumber, r.column), PositionAffinity.None); + if (np.lineNumber > lineNumber) { + break; + } + } while (i++ < 10 && lineNumber + i < model.getLineCount()); return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns); } diff --git a/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts b/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts index 1ac613d3109..8628534a514 100644 --- a/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts +++ b/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts @@ -3,17 +3,39 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { BugIndicatingError } from 'vs/base/common/errors'; +import { OffsetRange } from 'vs/editor/common/core/offsetRange'; + /** * Represents a synchronous diff algorithm. Should be executed in a worker. */ export interface IDiffAlgorithm { - compute(sequence1: ISequence, sequence2: ISequence): SequenceDiff[]; + compute(sequence1: ISequence, sequence2: ISequence, timeout?: ITimeout): DiffAlgorithmResult; +} + +export class DiffAlgorithmResult { + static trivial(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult { + return new DiffAlgorithmResult([new SequenceDiff(new OffsetRange(0, seq1.length), new OffsetRange(0, seq2.length))], false); + } + + static trivialTimedOut(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult { + return new DiffAlgorithmResult([new SequenceDiff(new OffsetRange(0, seq1.length), new OffsetRange(0, seq2.length))], true); + } + + constructor( + public readonly diffs: SequenceDiff[], + /** + * Indicates if the time out was reached. + * In that case, the diffs might be an approximation and the user should be asked to rerun the diff with more time. + */ + public readonly hitTimeout: boolean, + ) { } } export class SequenceDiff { constructor( public readonly seq1Range: OffsetRange, - public readonly seq2Range: OffsetRange + public readonly seq2Range: OffsetRange, ) { } public reverse(): SequenceDiff { @@ -23,32 +45,16 @@ export class SequenceDiff { public toString(): string { return `${this.seq1Range} <-> ${this.seq2Range}`; } -} -/** - * Todo move this class to some top level utils. -*/ -export class OffsetRange { - constructor(public readonly start: number, public readonly endExclusive: number) { } - - get isEmpty(): boolean { - return this.start === this.endExclusive; + public join(other: SequenceDiff): SequenceDiff { + return new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range)); } - public delta(offset: number): OffsetRange { - return new OffsetRange(this.start + offset, this.endExclusive + offset); - } - - public get length(): number { - return this.endExclusive - this.start; - } - - public toString() { - return `[${this.start}, ${this.endExclusive})`; - } - - public join(other: OffsetRange): OffsetRange { - return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive)); + public delta(offset: number): SequenceDiff { + if (offset === 0) { + return this; + } + return new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset)); } } @@ -63,3 +69,43 @@ export interface ISequence { */ getBoundaryScore?(length: number): number; } + +export interface ITimeout { + isValid(): boolean; +} + +export class InfiniteTimeout implements ITimeout { + public static instance = new InfiniteTimeout(); + + isValid(): boolean { + return true; + } +} + +export class DateTimeout implements ITimeout { + private readonly startTime = Date.now(); + private valid = true; + + constructor(private timeout: number) { + if (timeout <= 0) { + throw new BugIndicatingError('timeout must be positive'); + } + } + + // Recommendation: Set a log-point `{this.disable()}` in the body + public isValid(): boolean { + const valid = Date.now() - this.startTime < this.timeout; + if (!valid && this.valid) { + this.valid = false; // timeout reached + // eslint-disable-next-line no-debugger + debugger; // WARNING: Most likely debugging caused the timeout. Call `this.disable()` to continue without timing out. + } + return this.valid; + } + + public disable() { + this.timeout = Number.MAX_SAFE_INTEGER; + this.isValid = () => true; + this.valid = true; + } +} diff --git a/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts b/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts index ef264e21b2e..2212ebef27e 100644 --- a/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts +++ b/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDiffAlgorithm, SequenceDiff, OffsetRange, ISequence } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; +import { OffsetRange } from 'vs/editor/common/core/offsetRange'; +import { IDiffAlgorithm, SequenceDiff, ISequence, ITimeout, InfiniteTimeout, DiffAlgorithmResult } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; import { Array2D } from 'vs/editor/common/diff/algorithms/utils'; /** @@ -11,7 +12,11 @@ import { Array2D } from 'vs/editor/common/diff/algorithms/utils'; * The algorithm can be improved by processing the 2d array diagonally. */ export class DynamicProgrammingDiffing implements IDiffAlgorithm { - compute(sequence1: ISequence, sequence2: ISequence, equalityScore?: (offset1: number, offset2: number) => number): SequenceDiff[] { + compute(sequence1: ISequence, sequence2: ISequence, timeout: ITimeout = InfiniteTimeout.instance, equalityScore?: (offset1: number, offset2: number) => number): DiffAlgorithmResult { + if (sequence1.length === 0 || sequence2.length === 0) { + return DiffAlgorithmResult.trivial(sequence1, sequence2); + } + /** * lcsLengths.get(i, j): Length of the longest common subsequence of sequence1.substring(0, i + 1) and sequence2.substring(0, j + 1). */ @@ -22,6 +27,10 @@ export class DynamicProgrammingDiffing implements IDiffAlgorithm { // ==== Initializing lcsLengths ==== for (let s1 = 0; s1 < sequence1.length; s1++) { for (let s2 = 0; s2 < sequence2.length; s2++) { + if (!timeout.isValid()) { + return DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2); + } + const horizontalLen = s1 === 0 ? 0 : lcsLengths.get(s1 - 1, s2); const verticalLen = s2 === 0 ? 0 : lcsLengths.get(s1, s2 - 1); @@ -93,6 +102,6 @@ export class DynamicProgrammingDiffing implements IDiffAlgorithm { } reportDecreasingAligningPositions(-1, -1); result.reverse(); - return result; + return new DiffAlgorithmResult(result, false); } } diff --git a/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts b/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts index 88a0a86741f..78fc69c2044 100644 --- a/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts +++ b/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ISequence, OffsetRange, SequenceDiff } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; +import { OffsetRange } from 'vs/editor/common/core/offsetRange'; +import { ISequence, SequenceDiff } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; export function optimizeSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] { let result = sequenceDiffs; @@ -49,34 +50,78 @@ export function joinSequenceDiffs(sequence1: ISequence, sequence2: ISequence, se result.push(sequenceDiffs[0]); } + // First move them all to the left as much as possible and join them if possible for (let i = 1; i < sequenceDiffs.length; i++) { - const lastResult = result[result.length - 1]; - const cur = sequenceDiffs[i]; + const prevResult = sequenceDiffs[i - 1]; + let cur = sequenceDiffs[i]; - if (cur.seq1Range.isEmpty) { - let all = true; - const length = cur.seq1Range.start - lastResult.seq1Range.endExclusive; - for (let i = 1; i <= length; i++) { - if (sequence2.getElement(cur.seq2Range.start - i) !== sequence2.getElement(cur.seq2Range.endExclusive - i)) { - all = false; + if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) { + const length = cur.seq1Range.start - prevResult.seq1Range.endExclusive; + let d; + for (d = 1; d <= length; d++) { + if ( + sequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) || + sequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) { break; } } + d--; - if (all) { + if (d === length) { // Merge previous and current diff - result[result.length - 1] = new SequenceDiff(lastResult.seq1Range, new OffsetRange( - lastResult.seq2Range.start, - cur.seq2Range.endExclusive - length - )); + result[result.length - 1] = new SequenceDiff( + new OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length), + new OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length), + ); continue; } + + cur = cur.delta(-d); } result.push(cur); } - return result; + const result2: SequenceDiff[] = []; + // Then move them all to the right and join them again if possible + for (let i = 0; i < result.length - 1; i++) { + const nextResult = result[i + 1]; + let cur = result[i]; + + if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) { + const length = nextResult.seq1Range.start - cur.seq1Range.endExclusive; + let d; + for (d = 0; d < length; d++) { + if ( + sequence1.getElement(cur.seq1Range.start + d) !== sequence1.getElement(cur.seq1Range.endExclusive + d) || + sequence2.getElement(cur.seq2Range.start + d) !== sequence2.getElement(cur.seq2Range.endExclusive + d) + ) { + break; + } + } + + if (d === length) { + // Merge previous and current diff, write to result! + result[i + 1] = new SequenceDiff( + new OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive), + new OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive), + ); + continue; + } + + if (d > 0) { + cur = cur.delta(d); + } + } + + result2.push(cur); + } + + if (result.length > 0) { + result2.push(result[result.length - 1]); + } + + return result2; } // align character level diffs at whitespace characters @@ -101,37 +146,45 @@ export function shiftSequenceDiffs(sequence1: ISequence, sequence2: ISequence, s } for (let i = 0; i < sequenceDiffs.length; i++) { + const prevDiff = (i > 0 ? sequenceDiffs[i - 1] : undefined); const diff = sequenceDiffs[i]; + const nextDiff = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : undefined); + + const seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.start + 1 : 0, nextDiff ? nextDiff.seq1Range.endExclusive - 1 : sequence1.length); + const seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.start + 1 : 0, nextDiff ? nextDiff.seq2Range.endExclusive - 1 : sequence2.length); + if (diff.seq1Range.isEmpty) { - const seq2PrevEndExclusive = (i > 0 ? sequenceDiffs[i - 1].seq2Range.endExclusive : -1); - const seq2NextStart = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1].seq2Range.start : sequence2.length); - sequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq2NextStart, seq2PrevEndExclusive); + sequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange); } else if (diff.seq2Range.isEmpty) { - const seq1PrevEndExclusive = (i > 0 ? sequenceDiffs[i - 1].seq1Range.endExclusive : -1); - const seq1NextStart = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1].seq1Range.start : sequence1.length); - sequenceDiffs[i] = shiftDiffToBetterPosition(diff.reverse(), sequence2, sequence1, seq1NextStart, seq1PrevEndExclusive).reverse(); + sequenceDiffs[i] = shiftDiffToBetterPosition(diff.reverse(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).reverse(); } } return sequenceDiffs; } -function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, sequence2: ISequence, seq2NextStart: number, seq2PrevEndExclusive: number) { - const maxShiftLimit = 20; // To prevent performance issues +function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, sequence2: ISequence, seq1ValidRange: OffsetRange, seq2ValidRange: OffsetRange,) { + const maxShiftLimit = 100; // To prevent performance issues // don't touch previous or next! let deltaBefore = 1; - while (diff.seq2Range.start - deltaBefore > seq2PrevEndExclusive && + while ( + diff.seq1Range.start - deltaBefore >= seq1ValidRange.start && + diff.seq2Range.start - deltaBefore >= seq2ValidRange.start && sequence2.getElement(diff.seq2Range.start - deltaBefore) === - sequence2.getElement(diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit) { + sequence2.getElement(diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit + ) { deltaBefore++; } deltaBefore--; let deltaAfter = 0; - while (diff.seq2Range.start + deltaAfter < seq2NextStart && + while ( + diff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive && + diff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive && sequence2.getElement(diff.seq2Range.start + deltaAfter) === - sequence2.getElement(diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit) { + sequence2.getElement(diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit + ) { deltaAfter++; } @@ -157,8 +210,5 @@ function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, seq } } - if (bestDelta !== 0) { - return new SequenceDiff(diff.seq1Range.delta(bestDelta), diff.seq2Range.delta(bestDelta)); - } - return diff; + return diff.delta(bestDelta); } diff --git a/src/vs/editor/common/diff/algorithms/myersDiffAlgorithm.ts b/src/vs/editor/common/diff/algorithms/myersDiffAlgorithm.ts index 525a3f4d2a7..049c5ff157c 100644 --- a/src/vs/editor/common/diff/algorithms/myersDiffAlgorithm.ts +++ b/src/vs/editor/common/diff/algorithms/myersDiffAlgorithm.ts @@ -3,19 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDiffAlgorithm, ISequence, SequenceDiff, OffsetRange } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; +import { OffsetRange } from 'vs/editor/common/core/offsetRange'; +import { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; /** * An O(ND) diff algorithm that has a quadratic space worst-case complexity. */ export class MyersDiffAlgorithm implements IDiffAlgorithm { - compute(seq1: ISequence, seq2: ISequence): SequenceDiff[] { + compute(seq1: ISequence, seq2: ISequence, timeout: ITimeout = InfiniteTimeout.instance): DiffAlgorithmResult { // These are common special cases. // The early return improves performance dramatically. - if (seq1.length === 0) { - return [new SequenceDiff(new OffsetRange(0, 0), new OffsetRange(0, seq2.length))]; - } else if (seq2.length === 0) { - return [new SequenceDiff(new OffsetRange(0, seq1.length), new OffsetRange(0, 0))]; + if (seq1.length === 0 || seq2.length === 0) { + return DiffAlgorithmResult.trivial(seq1, seq2); } function getXAfterSnake(x: number, y: number): number { @@ -40,11 +39,23 @@ export class MyersDiffAlgorithm implements IDiffAlgorithm { loop: while (true) { d++; - for (k = -d; k <= d; k += 2) { - const maxXofDLineTop = k === d ? -1 : V.get(k + 1); // We take a vertical non-diagonal - const maxXofDLineLeft = k === -d ? -1 : V.get(k - 1) + 1; // We take a horizontal non-diagonal (+1 x) + if (!timeout.isValid()) { + return DiffAlgorithmResult.trivialTimedOut(seq1, seq2); + } + // The paper has `for (k = -d; k <= d; k += 2)`, but we can ignore diagonals that cannot influence the result. + const lowerBound = -Math.min(d, seq2.length + (d % 2)); + const upperBound = Math.min(d, seq1.length + (d % 2)); + for (k = lowerBound; k <= upperBound; k += 2) { + // We can use the X values of (d-1)-lines to compute X value of the longest d-lines. + const maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1); // We take a vertical non-diagonal (add a symbol in seq1) + const maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1; // We take a horizontal non-diagonal (+1 x) (delete a symbol in seq1) const x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seq1.length); const y = x - k; + if (x > seq1.length || y > seq2.length) { + // This diagonal is irrelevant for the result. + // TODO: Don't pay the cost for this in the next iteration. + continue; + } const newMaxX = getXAfterSnake(x, y); V.set(k, newMaxX); const lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1); @@ -81,7 +92,7 @@ export class MyersDiffAlgorithm implements IDiffAlgorithm { } result.reverse(); - return result; + return new DiffAlgorithmResult(result, false); } } diff --git a/src/vs/editor/common/diff/documentDiffProvider.ts b/src/vs/editor/common/diff/documentDiffProvider.ts index c1023cadeec..ad707d114b5 100644 --- a/src/vs/editor/common/diff/documentDiffProvider.ts +++ b/src/vs/editor/common/diff/documentDiffProvider.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; -import { LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { LineRangeMapping, MovedText } from 'vs/editor/common/diff/linesDiffComputer'; import { ITextModel } from 'vs/editor/common/model'; /** @@ -28,7 +28,7 @@ export interface IDocumentDiffProvider { */ export interface IDocumentDiffProviderOptions { /** - * When set to true, the diff should ignore whitespace changes.i + * When set to true, the diff should ignore whitespace changes. */ ignoreTrimWhitespace: boolean; @@ -36,6 +36,11 @@ export interface IDocumentDiffProviderOptions { * A diff computation should throw if it takes longer than this value. */ maxComputationTimeMs: number; + + /** + * If set, the diff computation should compute moves in addition to insertions and deletions. + */ + computeMoves: boolean; } /** @@ -55,5 +60,11 @@ export interface IDocumentDiff { /** * Maps all modified line ranges in the original to the corresponding line ranges in the modified text model. */ - readonly changes: LineRangeMapping[]; + readonly changes: readonly LineRangeMapping[]; + + /** + * Sorted by original line ranges. + * The original line ranges and the modified line ranges must be disjoint (but can be touching). + */ + readonly moves: readonly MovedText[]; } diff --git a/src/vs/editor/common/diff/linesDiffComputer.ts b/src/vs/editor/common/diff/linesDiffComputer.ts index 9a9961f77cd..a096042419f 100644 --- a/src/vs/editor/common/diff/linesDiffComputer.ts +++ b/src/vs/editor/common/diff/linesDiffComputer.ts @@ -3,26 +3,70 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { LineRange } from 'vs/editor/common/core/lineRange'; import { Range } from 'vs/editor/common/core/range'; export interface ILinesDiffComputer { - computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): ILinesDiff; + computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff; } export interface ILinesDiffComputerOptions { readonly ignoreTrimWhitespace: boolean; readonly maxComputationTimeMs: number; + readonly computeMoves: boolean; } -export interface ILinesDiff { - readonly quitEarly: boolean; - readonly changes: LineRangeMapping[]; +export class LinesDiff { + constructor( + readonly changes: readonly LineRangeMapping[], + + /** + * Sorted by original line ranges. + * The original line ranges and the modified line ranges must be disjoint (but can be touching). + */ + readonly moves: readonly MovedText[], + + /** + * Indicates if the time out was reached. + * In that case, the diffs might be an approximation and the user should be asked to rerun the diff with more time. + */ + readonly hitTimeout: boolean, + ) { + } } /** * Maps a line range in the original text model to a line range in the modified text model. */ export class LineRangeMapping { + public static inverse(mapping: readonly LineRangeMapping[], originalLineCount: number, modifiedLineCount: number): LineRangeMapping[] { + const result: LineRangeMapping[] = []; + let lastOriginalEndLineNumber = 1; + let lastModifiedEndLineNumber = 1; + + for (const m of mapping) { + const r = new LineRangeMapping( + new LineRange(lastOriginalEndLineNumber, m.originalRange.startLineNumber), + new LineRange(lastModifiedEndLineNumber, m.modifiedRange.startLineNumber), + undefined + ); + if (!r.modifiedRange.isEmpty) { + result.push(r); + } + lastOriginalEndLineNumber = m.originalRange.endLineNumberExclusive; + lastModifiedEndLineNumber = m.modifiedRange.endLineNumberExclusive; + } + const r = new LineRangeMapping( + new LineRange(lastOriginalEndLineNumber, originalLineCount + 1), + new LineRange(lastModifiedEndLineNumber, modifiedLineCount + 1), + undefined + ); + if (!r.modifiedRange.isEmpty) { + result.push(r); + } + return result; + } + /** * The line range in the original text model. */ @@ -36,7 +80,7 @@ export class LineRangeMapping { /** * If inner changes have not been computed, this is set to undefined. * Otherwise, it represents the character-level diff in this line range. - * The original range of each range mapping should be contained in the original line range (same for modified). + * The original range of each range mapping should be contained in the original line range (same for modified), exceptions are new-lines. * Must not be an empty array. */ public readonly innerChanges: RangeMapping[] | undefined; @@ -54,6 +98,14 @@ export class LineRangeMapping { public toString(): string { return `{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`; } + + public get changedLineCount() { + return Math.max(this.originalRange.length, this.modifiedRange.length); + } + + public flip(): LineRangeMapping { + return new LineRangeMapping(this.modifiedRange, this.originalRange, this.innerChanges?.map(c => c.flip())); + } } /** @@ -82,62 +134,47 @@ export class RangeMapping { public toString(): string { return `{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`; } + + public flip(): RangeMapping { + return new RangeMapping(this.modifiedRange, this.originalRange); + } } -/** - * A range of lines (1-based). - */ -export class LineRange { - /** - * The start line number. - */ - public readonly startLineNumber: number; - - /** - * The end line number (exclusive). - */ - public readonly endLineNumberExclusive: number; - +export class SimpleLineRangeMapping { constructor( - startLineNumber: number, - endLineNumberExclusive: number, + public readonly originalRange: LineRange, + public readonly modifiedRange: LineRange, ) { - this.startLineNumber = startLineNumber; - this.endLineNumberExclusive = endLineNumberExclusive; - } - - /** - * Indicates if this line range is empty. - */ - get isEmpty(): boolean { - return this.startLineNumber === this.endLineNumberExclusive; - } - - /** - * Moves this line range by the given offset of line numbers. - */ - public delta(offset: number): LineRange { - return new LineRange(this.startLineNumber + offset, this.endLineNumberExclusive + offset); - } - - /** - * The number of lines this line range spans. - */ - public get length(): number { - return this.endLineNumberExclusive - this.startLineNumber; - } - - /** - * Creates a line range that combines this and the given line range. - */ - public join(other: LineRange): LineRange { - return new LineRange( - Math.min(this.startLineNumber, other.startLineNumber), - Math.max(this.endLineNumberExclusive, other.endLineNumberExclusive) - ); } public toString(): string { - return `[${this.startLineNumber},${this.endLineNumberExclusive})`; + return `{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`; + } + + public flip(): SimpleLineRangeMapping { + return new SimpleLineRangeMapping(this.modifiedRange, this.originalRange); + } +} + +export class MovedText { + public readonly lineRangeMapping: SimpleLineRangeMapping; + + /** + * The diff from the original text to the moved text. + * Must be contained in the original/modified line range. + * Can be empty if the text didn't change (only moved). + */ + public readonly changes: readonly LineRangeMapping[]; + + constructor( + lineRangeMapping: SimpleLineRangeMapping, + changes: readonly LineRangeMapping[], + ) { + this.lineRangeMapping = lineRangeMapping; + this.changes = changes; + } + + public flip(): MovedText { + return new MovedText(this.lineRangeMapping.flip(), this.changes.map(c => c.flip())); } } diff --git a/src/vs/editor/common/diff/linesDiffComputers.ts b/src/vs/editor/common/diff/linesDiffComputers.ts index 7a1a5b1ea13..415c72e8f04 100644 --- a/src/vs/editor/common/diff/linesDiffComputers.ts +++ b/src/vs/editor/common/diff/linesDiffComputers.ts @@ -7,6 +7,6 @@ import { SmartLinesDiffComputer } from 'vs/editor/common/diff/smartLinesDiffComp import { StandardLinesDiffComputer } from 'vs/editor/common/diff/standardLinesDiffComputer'; export const linesDiffComputers = { - smart: new SmartLinesDiffComputer(), - experimental: new StandardLinesDiffComputer(), + getLegacy: () => new SmartLinesDiffComputer(), + getAdvanced: () => new StandardLinesDiffComputer(), }; diff --git a/src/vs/editor/common/diff/smartLinesDiffComputer.ts b/src/vs/editor/common/diff/smartLinesDiffComputer.ts index 9c514f6a2d6..fe7fdcdc5bf 100644 --- a/src/vs/editor/common/diff/smartLinesDiffComputer.ts +++ b/src/vs/editor/common/diff/smartLinesDiffComputer.ts @@ -5,15 +5,16 @@ import { CharCode } from 'vs/base/common/charCode'; import { IDiffChange, ISequence, LcsDiff, IDiffResult } from 'vs/base/common/diff/diff'; -import { ILinesDiffComputer, ILinesDiff, ILinesDiffComputerOptions, LineRange, RangeMapping, LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { ILinesDiffComputer, ILinesDiffComputerOptions, RangeMapping, LineRangeMapping, LinesDiff } from 'vs/editor/common/diff/linesDiffComputer'; import * as strings from 'vs/base/common/strings'; import { Range } from 'vs/editor/common/core/range'; import { assertFn, checkAdjacentItems } from 'vs/base/common/assert'; +import { LineRange } from 'vs/editor/common/core/lineRange'; const MINIMUM_MATCHING_CHARACTER_LENGTH = 3; export class SmartLinesDiffComputer implements ILinesDiffComputer { - computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): ILinesDiff { + computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff { const diffComputer = new DiffComputer(originalLines, modifiedLines, { maxComputationTime: options.maxComputationTimeMs, shouldIgnoreTrimWhitespace: options.ignoreTrimWhitespace, @@ -74,17 +75,24 @@ export class SmartLinesDiffComputer implements ILinesDiffComputer { ); }); - return { - quitEarly: result.quitEarly, - changes, - }; + return new LinesDiff(changes, [], result.quitEarly); } } export interface IDiffComputationResult { quitEarly: boolean; identical: boolean; + + /** + * The changes as (legacy) line change array. + * @deprecated Use `changes2` instead. + */ changes: ILineChange[]; + + /** + * The changes as (modern) line range mapping array. + */ + changes2: readonly LineRangeMapping[]; } /** diff --git a/src/vs/editor/common/diff/standardLinesDiffComputer.ts b/src/vs/editor/common/diff/standardLinesDiffComputer.ts index de289902022..51f62509b02 100644 --- a/src/vs/editor/common/diff/standardLinesDiffComputer.ts +++ b/src/vs/editor/common/diff/standardLinesDiffComputer.ts @@ -5,22 +5,43 @@ import { assertFn, checkAdjacentItems } from 'vs/base/common/assert'; import { CharCode } from 'vs/base/common/charCode'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { OffsetRange } from 'vs/editor/common/core/offsetRange'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; -import { OffsetRange, SequenceDiff, ISequence } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; +import { DateTimeout, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; import { DynamicProgrammingDiffing } from 'vs/editor/common/diff/algorithms/dynamicProgrammingDiffing'; import { optimizeSequenceDiffs, smoothenSequenceDiffs } from 'vs/editor/common/diff/algorithms/joinSequenceDiffs'; import { MyersDiffAlgorithm } from 'vs/editor/common/diff/algorithms/myersDiffAlgorithm'; -import { ILinesDiff, ILinesDiffComputer, ILinesDiffComputerOptions, LineRange, LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { ILinesDiffComputer, ILinesDiffComputerOptions, LineRangeMapping, LinesDiff, MovedText, RangeMapping, SimpleLineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; export class StandardLinesDiffComputer implements ILinesDiffComputer { private readonly dynamicProgrammingDiffing = new DynamicProgrammingDiffing(); private readonly myersDiffingAlgorithm = new MyersDiffAlgorithm(); - constructor( - ) { } + computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff { + if (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) { + return { + changes: [ + new LineRangeMapping( + new LineRange(1, originalLines.length + 1), + new LineRange(1, modifiedLines.length + 1), + [ + new RangeMapping( + new Range(1, 1, originalLines.length, originalLines[0].length + 1), + new Range(1, 1, modifiedLines.length, modifiedLines[0].length + 1) + ) + ] + ) + ], + hitTimeout: false, + moves: [], + }; + } + + const timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs); + const considerWhitespaceChanges = !options.ignoreTrimWhitespace; - computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): ILinesDiff { const perfectHashes = new Map(); function getOrCreateHash(text: string): number { let hash = perfectHashes.get(text); @@ -37,12 +58,13 @@ export class StandardLinesDiffComputer implements ILinesDiffComputer { const sequence1 = new LineSequence(srcDocLines, originalLines); const sequence2 = new LineSequence(tgtDocLines, modifiedLines); - let lineAlignments = (() => { + const lineAlignmentResult = (() => { if (sequence1.length + sequence2.length < 1500) { // Use the improved algorithm for small files return this.dynamicProgrammingDiffing.compute( sequence1, sequence2, + timeout, (offset1, offset2) => originalLines[offset1] === modifiedLines[offset2] ? modifiedLines[offset2].length === 0 @@ -58,11 +80,17 @@ export class StandardLinesDiffComputer implements ILinesDiffComputer { ); })(); + let lineAlignments = lineAlignmentResult.diffs; + let hitTimeout = lineAlignmentResult.hitTimeout; lineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments); const alignments: RangeMapping[] = []; const scanForWhitespaceChanges = (equalLinesCount: number) => { + if (!considerWhitespaceChanges) { + return; + } + for (let i = 0; i < equalLinesCount; i++) { const seq1Offset = seq1LastStart + i; const seq2Offset = seq2LastStart + i; @@ -70,11 +98,14 @@ export class StandardLinesDiffComputer implements ILinesDiffComputer { // This is because of whitespace changes, diff these lines const characterDiffs = this.refineDiff(originalLines, modifiedLines, new SequenceDiff( new OffsetRange(seq1Offset, seq1Offset + 1), - new OffsetRange(seq2Offset, seq2Offset + 1) - )); - for (const a of characterDiffs) { + new OffsetRange(seq2Offset, seq2Offset + 1), + ), timeout, considerWhitespaceChanges); + for (const a of characterDiffs.mappings) { alignments.push(a); } + if (characterDiffs.hitTimeout) { + hitTimeout = true; + } } } }; @@ -92,68 +123,204 @@ export class StandardLinesDiffComputer implements ILinesDiffComputer { seq1LastStart = diff.seq1Range.endExclusive; seq2LastStart = diff.seq2Range.endExclusive; - const characterDiffs = this.refineDiff(originalLines, modifiedLines, diff); - for (const a of characterDiffs) { + const characterDiffs = this.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges); + if (characterDiffs.hitTimeout) { + hitTimeout = true; + } + for (const a of characterDiffs.mappings) { alignments.push(a); } } scanForWhitespaceChanges(originalLines.length - seq1LastStart); - const changes: LineRangeMapping[] = lineRangeMappingFromRangeMappings(alignments); + const changes = lineRangeMappingFromRangeMappings(alignments, originalLines, modifiedLines); - return { - quitEarly: false, - changes: changes, - }; + const moves: MovedText[] = []; + if (options.computeMoves) { + const deletions = changes + .filter(c => c.modifiedRange.isEmpty && c.originalRange.length >= 3) + .map(d => new LineRangeFragment(d.originalRange, originalLines)); + const insertions = new Set(changes + .filter(c => c.originalRange.isEmpty && c.modifiedRange.length >= 3) + .map(d => new LineRangeFragment(d.modifiedRange, modifiedLines))); + + for (const deletion of deletions) { + let highestSimilarity = -1; + let best: LineRangeFragment | undefined; + for (const insertion of insertions) { + const similarity = deletion.computeSimilarity(insertion); + if (similarity > highestSimilarity) { + highestSimilarity = similarity; + best = insertion; + } + } + + if (highestSimilarity > 0.90 && best) { + const moveChanges = this.refineDiff(originalLines, modifiedLines, new SequenceDiff( + new OffsetRange(deletion.range.startLineNumber - 1, deletion.range.endLineNumberExclusive - 1), + new OffsetRange(best.range.startLineNumber - 1, best.range.endLineNumberExclusive - 1), + ), timeout, considerWhitespaceChanges); + const mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, originalLines, modifiedLines, true); + + insertions.delete(best); + moves.push(new MovedText(new SimpleLineRangeMapping(deletion.range, best.range), mappings)); + } + } + } + + return new LinesDiff(changes, moves, hitTimeout); } - private refineDiff(originalLines: string[], modifiedLines: string[], diff: SequenceDiff): RangeMapping[] { - const sourceSlice = new Slice(originalLines, diff.seq1Range); - const targetSlice = new Slice(modifiedLines, diff.seq2Range); + private refineDiff(originalLines: string[], modifiedLines: string[], diff: SequenceDiff, timeout: ITimeout, considerWhitespaceChanges: boolean): { mappings: RangeMapping[]; hitTimeout: boolean } { + const slice1 = new Slice(originalLines, diff.seq1Range, considerWhitespaceChanges); + const slice2 = new Slice(modifiedLines, diff.seq2Range, considerWhitespaceChanges); - const originalDiffs = sourceSlice.length + targetSlice.length < 500 - ? this.dynamicProgrammingDiffing.compute(sourceSlice, targetSlice) - : this.myersDiffingAlgorithm.compute(sourceSlice, targetSlice); + const diffResult = slice1.length + slice2.length < 500 + ? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout) + : this.myersDiffingAlgorithm.compute(slice1, slice2, timeout); + + let diffs = diffResult.diffs; + diffs = optimizeSequenceDiffs(slice1, slice2, diffs); + diffs = coverFullWords(slice1, slice2, diffs); + diffs = smoothenSequenceDiffs(slice1, slice2, diffs); - let diffs = optimizeSequenceDiffs(sourceSlice, targetSlice, originalDiffs); - diffs = smoothenSequenceDiffs(sourceSlice, targetSlice, diffs); const result = diffs.map( (d) => new RangeMapping( - sourceSlice.translateRange(d.seq1Range).delta(diff.seq1Range.start), - targetSlice.translateRange(d.seq2Range).delta(diff.seq2Range.start) + slice1.translateRange(d.seq1Range), + slice2.translateRange(d.seq2Range) ) ); - return result; + + // Assert: result applied on original should be the same as diff applied to original + + return { + mappings: result, + hitTimeout: diffResult.hitTimeout, + }; } } -export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): LineRangeMapping[] { +function coverFullWords(sequence1: Slice, sequence2: Slice, sequenceDiffs: SequenceDiff[]): SequenceDiff[] { + const additional: SequenceDiff[] = []; + + let lastModifiedWord: { added: number; deleted: number; count: number; s1Range: OffsetRange; s2Range: OffsetRange } | undefined = undefined; + + function maybePushWordToAdditional() { + if (!lastModifiedWord) { + return; + } + + const originalLength1 = lastModifiedWord.s1Range.length - lastModifiedWord.deleted; + const originalLength2 = lastModifiedWord.s2Range.length - lastModifiedWord.added; + if (originalLength1 !== originalLength2) { + // TODO figure out why this happens + } + + if (Math.max(lastModifiedWord.deleted, lastModifiedWord.added) + (lastModifiedWord.count - 1) > originalLength1) { + additional.push(new SequenceDiff(lastModifiedWord.s1Range, lastModifiedWord.s2Range)); + } + + lastModifiedWord = undefined; + } + + for (const s of sequenceDiffs) { + function processWord(s1Range: OffsetRange, s2Range: OffsetRange) { + if (!lastModifiedWord || !lastModifiedWord.s1Range.containsRange(s1Range) || !lastModifiedWord.s2Range.containsRange(s2Range)) { + if (lastModifiedWord && !(lastModifiedWord.s1Range.endExclusive < s1Range.start && lastModifiedWord.s2Range.endExclusive < s2Range.start)) { + const s1Added = OffsetRange.tryCreate(lastModifiedWord.s1Range.endExclusive, s1Range.start); + const s2Added = OffsetRange.tryCreate(lastModifiedWord.s2Range.endExclusive, s2Range.start); + lastModifiedWord.deleted += s1Added?.length ?? 0; + lastModifiedWord.added += s2Added?.length ?? 0; + + lastModifiedWord.s1Range = lastModifiedWord.s1Range.join(s1Range); + lastModifiedWord.s2Range = lastModifiedWord.s2Range.join(s2Range); + } else { + maybePushWordToAdditional(); + lastModifiedWord = { added: 0, deleted: 0, count: 0, s1Range: s1Range, s2Range: s2Range }; + } + } + + const changedS1 = s1Range.intersect(s.seq1Range); + const changedS2 = s2Range.intersect(s.seq2Range); + lastModifiedWord.count++; + lastModifiedWord.deleted += changedS1?.length ?? 0; + lastModifiedWord.added += changedS2?.length ?? 0; + } + + const w1Before = sequence1.findWordContaining(s.seq1Range.start - 1); + const w2Before = sequence2.findWordContaining(s.seq2Range.start - 1); + + const w1After = sequence1.findWordContaining(s.seq1Range.endExclusive); + const w2After = sequence2.findWordContaining(s.seq2Range.endExclusive); + + if (w1Before && w1After && w2Before && w2After && w1Before.equals(w1After) && w2Before.equals(w2After)) { + processWord(w1Before, w2Before); + } else { + if (w1Before && w2Before) { + processWord(w1Before, w2Before); + } + if (w1After && w2After) { + processWord(w1After, w2After); + } + } + } + + maybePushWordToAdditional(); + + const merged = mergeSequenceDiffs(sequenceDiffs, additional); + return merged; +} + +function mergeSequenceDiffs(sequenceDiffs1: SequenceDiff[], sequenceDiffs2: SequenceDiff[]): SequenceDiff[] { + const result: SequenceDiff[] = []; + + while (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) { + const sd1 = sequenceDiffs1[0]; + const sd2 = sequenceDiffs2[0]; + + let next: SequenceDiff; + if (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) { + next = sequenceDiffs1.shift()!; + } else { + next = sequenceDiffs2.shift()!; + } + + if (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) { + result[result.length - 1] = result[result.length - 1].join(next); + } else { + result.push(next); + } + } + + return result; +} + +export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[], dontAssertStartLine: boolean = false): LineRangeMapping[] { const changes: LineRangeMapping[] = []; for (const g of group( - alignments, + alignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)), (a1, a2) => - (a2.originalRange.startLineNumber - (a1.originalRange.endLineNumber - (a1.originalRange.endColumn > 1 ? 0 : 1)) <= 1) - || (a2.modifiedRange.startLineNumber - (a1.modifiedRange.endLineNumber - (a1.modifiedRange.endColumn > 1 ? 0 : 1)) <= 1) + a1.originalRange.overlapOrTouch(a2.originalRange) + || a1.modifiedRange.overlapOrTouch(a2.modifiedRange) )) { const first = g[0]; const last = g[g.length - 1]; changes.push(new LineRangeMapping( - new LineRange( - first.originalRange.startLineNumber, - last.originalRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0) - ), - new LineRange( - first.modifiedRange.startLineNumber, - last.modifiedRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0) - ), - g + first.originalRange.join(last.originalRange), + first.modifiedRange.join(last.modifiedRange), + g.map(a => a.innerChanges![0]), )); } assertFn(() => { + if (!dontAssertStartLine) { + if (changes.length > 0 && changes[0].originalRange.startLineNumber !== changes[0].modifiedRange.startLineNumber) { + return false; + } + } return checkAdjacentItems(changes, (m1, m2) => m2.originalRange.startLineNumber - m1.originalRange.endLineNumberExclusive === m2.modifiedRange.startLineNumber - m1.modifiedRange.endLineNumberExclusive && // There has to be an unchanged line in between (otherwise both diffs should have been joined) @@ -162,10 +329,46 @@ export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): L ); }); - return changes; } +export function getLineRangeMapping(rangeMapping: RangeMapping, originalLines: string[], modifiedLines: string[]): LineRangeMapping { + let lineStartDelta = 0; + let lineEndDelta = 0; + + // rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`. + + // original: ]xxx \n <- this line is not modified + // modified: ]xx \n + if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1 + && rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber + && rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) { + // We can only do this if the range is not empty yet + lineEndDelta = -1; + } + + // original: xxx[ \n <- this line is not modified + // modified: xxx[ \n + if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines[rangeMapping.modifiedRange.startLineNumber - 1].length + && rangeMapping.originalRange.startColumn - 1 >= originalLines[rangeMapping.originalRange.startLineNumber - 1].length + && rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta + && rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) { + // We can only do this if the range is not empty yet + lineStartDelta = 1; + } + + const originalLineRange = new LineRange( + rangeMapping.originalRange.startLineNumber + lineStartDelta, + rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta + ); + const modifiedLineRange = new LineRange( + rangeMapping.modifiedRange.startLineNumber + lineStartDelta, + rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta + ); + + return new LineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]); +} + function* group(items: Iterable, shouldBeGrouped: (item1: T, item2: T) => boolean): Iterable { let currentGroup: T[] | undefined; let last: T | undefined; @@ -215,34 +418,56 @@ function getIndentation(str: string): number { } class Slice implements ISequence { - private readonly elements: Int32Array; - private readonly firstCharOnLineOffsets: Int32Array; + private readonly elements: number[] = []; + private readonly firstCharOffsetByLineMinusOne: number[] = []; + public readonly lineRange: OffsetRange; + // To account for trimming + private readonly offsetByLine: number[] = []; - constructor(public readonly lines: string[], public readonly lineRange: OffsetRange) { - let chars = 0; - this.firstCharOnLineOffsets = new Int32Array(lineRange.length); + constructor(public readonly lines: string[], lineRange: OffsetRange, public readonly considerWhitespaceChanges: boolean) { + // This slice has to have lineRange.length many \n! (otherwise diffing against an empty slice will be problematic) + // (Unless it covers the entire document, in that case the other slice also has to cover the entire document ands it's okay) - for (let i = lineRange.start; i < lineRange.endExclusive; i++) { - const line = lines[i]; - chars += line.length; - this.firstCharOnLineOffsets[i - lineRange.start] = chars + 1; - chars++; + // If the slice covers the end, but does not start at the beginning, we include just the \n of the previous line. + let trimFirstLineFully = false; + if (lineRange.start > 0 && lineRange.endExclusive >= lines.length) { + lineRange = new OffsetRange(lineRange.start - 1, lineRange.endExclusive); + trimFirstLineFully = true; } - this.elements = new Int32Array(chars); - let offset = 0; - for (let i = lineRange.start; i < lineRange.endExclusive; i++) { - const line = lines[i]; + this.lineRange = lineRange; + + for (let i = this.lineRange.start; i < this.lineRange.endExclusive; i++) { + let line = lines[i]; + let offset = 0; + if (trimFirstLineFully) { + offset = line.length; + line = ''; + trimFirstLineFully = false; + } else if (!considerWhitespaceChanges) { + const trimmedStartLine = line.trimStart(); + offset = line.length - trimmedStartLine.length; + line = trimmedStartLine.trimEnd(); + } + + this.offsetByLine.push(offset); for (let i = 0; i < line.length; i++) { - this.elements[offset + i] = line.charCodeAt(i); + this.elements.push(line.charCodeAt(i)); } - offset += line.length; + + // Don't add an \n that does not exist in the document. if (i < lines.length - 1) { - this.elements[offset] = '\n'.charCodeAt(0); - offset += 1; + this.elements.push('\n'.charCodeAt(0)); + this.firstCharOffsetByLineMinusOne[i - this.lineRange.start] = this.elements.length; } } + // To account for the last line + this.offsetByLine.push(0); + } + + toString() { + return `Slice: "${this.text}"`; } get text(): string { @@ -284,26 +509,62 @@ class Slice implements ISequence { } public translateOffset(offset: number): Position { - // find smallest i, so that lineBreakOffsets[i] > offset using binary search + // find smallest i, so that lineBreakOffsets[i] <= offset using binary search + if (this.lineRange.isEmpty) { + return new Position(this.lineRange.start + 1, 1); + } let i = 0; - let j = this.firstCharOnLineOffsets.length; + let j = this.firstCharOffsetByLineMinusOne.length; while (i < j) { const k = Math.floor((i + j) / 2); - if (this.firstCharOnLineOffsets[k] > offset) { + if (this.firstCharOffsetByLineMinusOne[k] > offset) { j = k; } else { i = k + 1; } } - const offsetOfPrevLineBreak = i === 0 ? 0 : this.firstCharOnLineOffsets[i - 1]; - return new Position(i + 1, offset - offsetOfPrevLineBreak + 1); + const offsetOfFirstCharInLine = i === 0 ? 0 : this.firstCharOffsetByLineMinusOne[i - 1]; + return new Position(this.lineRange.start + i + 1, offset - offsetOfFirstCharInLine + 1 + this.offsetByLine[i]); } public translateRange(range: OffsetRange): Range { return Range.fromPositions(this.translateOffset(range.start), this.translateOffset(range.endExclusive)); } + + /** + * Finds the word that contains the character at the given offset + */ + public findWordContaining(offset: number): OffsetRange | undefined { + if (offset < 0 || offset >= this.elements.length) { + return undefined; + } + + if (!isWordChar(this.elements[offset])) { + return undefined; + } + + // find start + let start = offset; + while (start > 0 && isWordChar(this.elements[start - 1])) { + start--; + } + + // find end + let end = offset; + while (end < this.elements.length && isWordChar(this.elements[end])) { + end++; + } + + return new OffsetRange(start, end); + } +} + +function isWordChar(charCode: number): boolean { + return charCode >= CharCode.a && charCode <= CharCode.z + || charCode >= CharCode.A && charCode <= CharCode.Z + || charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9; } const enum CharBoundaryCategory { @@ -355,3 +616,47 @@ function getCategory(charCode: number): CharBoundaryCategory { function isSpace(charCode: number): boolean { return charCode === CharCode.Space || charCode === CharCode.Tab; } + +const chrKeys = new Map(); +function getKey(chr: string): number { + let key = chrKeys.get(chr); + if (key === undefined) { + key = chrKeys.size; + chrKeys.set(chr, key); + } + return key; +} + +class LineRangeFragment { + private readonly totalCount: number; + private readonly histogram: number[] = []; + constructor( + public readonly range: LineRange, + public readonly lines: string[], + ) { + let counter = 0; + for (let i = range.startLineNumber - 1; i < range.endLineNumberExclusive - 1; i++) { + const line = lines[i]; + for (let j = 0; j < line.length; j++) { + counter++; + const chr = line[j]; + const key = getKey(chr); + this.histogram[key] = (this.histogram[key] || 0) + 1; + } + counter++; + const key = getKey('\n'); + this.histogram[key] = (this.histogram[key] || 0) + 1; + } + + this.totalCount = counter; + } + + public computeSimilarity(other: LineRangeFragment): number { + let sumDifferences = 0; + const maxLength = Math.max(this.histogram.length, other.histogram.length); + for (let i = 0; i < maxLength; i++) { + sumDifferences += Math.abs((this.histogram[i] ?? 0) - (other.histogram[i] ?? 0)); + } + return 1 - (sumDifferences / (this.totalCount + other.totalCount)); + } +} diff --git a/src/vs/editor/common/editorAction.ts b/src/vs/editor/common/editorAction.ts index 055a67fbd15..5cf40416a1e 100644 --- a/src/vs/editor/common/editorAction.ts +++ b/src/vs/editor/common/editorAction.ts @@ -13,7 +13,7 @@ export class InternalEditorAction implements IEditorAction { public readonly alias: string; private readonly _precondition: ContextKeyExpression | undefined; - private readonly _run: () => Promise; + private readonly _run: (args: unknown) => Promise; private readonly _contextKeyService: IContextKeyService; constructor( @@ -36,11 +36,11 @@ export class InternalEditorAction implements IEditorAction { return this._contextKeyService.contextMatchesRules(this._precondition); } - public run(): Promise { + public run(args: unknown): Promise { if (!this.isSupported()) { return Promise.resolve(undefined); } - return this._run(); + return this._run(args); } } diff --git a/src/vs/editor/common/editorCommon.ts b/src/vs/editor/common/editorCommon.ts index 3b10a9f14d9..6ce806ff109 100644 --- a/src/vs/editor/common/editorCommon.ts +++ b/src/vs/editor/common/editorCommon.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { Event } from 'vs/base/common/event'; import { IMarkdownString } from 'vs/base/common/htmlContent'; import { IDisposable } from 'vs/base/common/lifecycle'; -import { Event } from 'vs/base/common/event'; +import { ThemeColor } from 'vs/base/common/themables'; import { URI, UriComponents } from 'vs/base/common/uri'; import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { IDimension } from 'vs/editor/common/core/dimension'; import { IPosition, Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; import { ISelection, Selection } from 'vs/editor/common/core/selection'; -import { IModelDecorationsChangeAccessor, ITextModel, OverviewRulerLane, TrackedRangeStickiness, IValidEditOperation, IModelDeltaDecoration, IModelDecoration } from 'vs/editor/common/model'; -import { ThemeColor } from 'vs/base/common/themables'; -import { IDimension } from 'vs/editor/common/core/dimension'; +import { IModelDecoration, IModelDecorationsChangeAccessor, IModelDeltaDecoration, ITextModel, IValidEditOperation, OverviewRulerLane, TrackedRangeStickiness } from 'vs/editor/common/model'; import { IModelDecorationsChangedEvent } from 'vs/editor/common/textModelEvents'; /** @@ -104,6 +104,12 @@ export interface IDiffEditorModel { modified: ITextModel; } +export interface IDiffEditorViewModel { + readonly model: IDiffEditorModel; + + waitForDiff(): Promise; +} + /** * An event describing that an editor has had its model reset (i.e. `editor.setModel()`). */ @@ -150,10 +156,10 @@ export interface IEditorAction { readonly label: string; readonly alias: string; isSupported(): boolean; - run(): Promise; + run(args?: unknown): Promise; } -export type IEditorModel = ITextModel | IDiffEditorModel; +export type IEditorModel = ITextModel | IDiffEditorModel | IDiffEditorViewModel; /** * A (serializable) state of the cursors. @@ -189,6 +195,7 @@ export interface ICodeEditorViewState { export interface IDiffEditorViewState { original: ICodeEditorViewState | null; modified: ICodeEditorViewState | null; + modelState?: unknown; } /** * An editor view state. @@ -545,7 +552,7 @@ export interface IEditorDecorationsCollection { /** * Replace all previous decorations with `newDecorations`. */ - set(newDecorations: IModelDeltaDecoration[]): void; + set(newDecorations: readonly IModelDeltaDecoration[]): string[]; /** * Remove all previous decorations. */ diff --git a/src/vs/editor/common/editorContextKeys.ts b/src/vs/editor/common/editorContextKeys.ts index 11c78368665..899ad35781f 100644 --- a/src/vs/editor/common/editorContextKeys.ts +++ b/src/vs/editor/common/editorContextKeys.ts @@ -24,8 +24,9 @@ export namespace EditorContextKeys { */ export const textInputFocus = new RawContextKey('textInputFocus', false, nls.localize('textInputFocus', "Whether an editor or a rich text input has focus (cursor is blinking)")); - export const readOnly = new RawContextKey('editorReadonly', false, nls.localize('editorReadonly', "Whether the editor is read only")); + export const readOnly = new RawContextKey('editorReadonly', false, nls.localize('editorReadonly', "Whether the editor is read-only")); export const inDiffEditor = new RawContextKey('inDiffEditor', false, nls.localize('inDiffEditor', "Whether the context is a diff editor")); + export const isEmbeddedDiffEditor = new RawContextKey('isEmbeddedDiffEditor', false, nls.localize('isEmbeddedDiffEditor', "Whether the context is an embedded diff editor")); export const columnSelection = new RawContextKey('editorColumnSelection', false, nls.localize('editorColumnSelection', "Whether `editor.columnSelection` is enabled")); export const writable = readOnly.toNegated(); export const hasNonEmptySelection = new RawContextKey('editorHasSelection', false, nls.localize('editorHasSelection', "Whether the editor has text selected")); @@ -39,7 +40,13 @@ export namespace EditorContextKeys { export const canRedo = new RawContextKey('canRedo', false, true); export const hoverVisible = new RawContextKey('editorHoverVisible', false, nls.localize('editorHoverVisible', "Whether the editor hover is visible")); + export const hoverFocused = new RawContextKey('editorHoverFocused', false, nls.localize('editorHoverFocused', "Whether the editor hover is focused")); + export const stickyScrollFocused = new RawContextKey('stickyScrollFocused', false, nls.localize('stickyScrollFocused', "Whether the sticky scroll is focused")); + export const stickyScrollVisible = new RawContextKey('stickyScrollVisible', false, nls.localize('stickyScrollVisible', "Whether the sticky scroll is visible")); + + export const standaloneColorPickerVisible = new RawContextKey('standaloneColorPickerVisible', false, nls.localize('standaloneColorPickerVisible', "Whether the standalone color picker is visible")); + export const standaloneColorPickerFocused = new RawContextKey('standaloneColorPickerFocused', false, nls.localize('standaloneColorPickerFocused', "Whether the standalone color picker is focused")); /** * A context key that is set when an editor is part of a larger editor, like notebooks or * (future) a diff editor diff --git a/src/vs/editor/common/languageFeatureRegistry.ts b/src/vs/editor/common/languageFeatureRegistry.ts index 47e29ce4d04..53c14ac57b9 100644 --- a/src/vs/editor/common/languageFeatureRegistry.ts +++ b/src/vs/editor/common/languageFeatureRegistry.ts @@ -186,7 +186,16 @@ export class LanguageFeatureRegistry { return 1; } else if (a._score > b._score) { return -1; - } else if (a._time < b._time) { + } + + // De-prioritize built-in providers + if (isBuiltinSelector(a.selector) && !isBuiltinSelector(b.selector)) { + return 1; + } else if (!isBuiltinSelector(a.selector) && isBuiltinSelector(b.selector)) { + return -1; + } + + if (a._time < b._time) { return 1; } else if (a._time > b._time) { return -1; @@ -195,3 +204,16 @@ export class LanguageFeatureRegistry { } } } + +function isBuiltinSelector(selector: LanguageSelector): boolean { + if (typeof selector === 'string') { + return false; + } + + if (Array.isArray(selector)) { + return selector.some(isBuiltinSelector); + } + + return Boolean((selector as LanguageFilter).isBuiltin); +} + diff --git a/src/vs/editor/common/languageSelector.ts b/src/vs/editor/common/languageSelector.ts index b8b245d067f..e657a753376 100644 --- a/src/vs/editor/common/languageSelector.ts +++ b/src/vs/editor/common/languageSelector.ts @@ -17,6 +17,11 @@ export interface LanguageFilter { */ readonly hasAccessToAllModels?: boolean; readonly exclusive?: boolean; + + /** + * This provider comes from a builtin extension. + */ + readonly isBuiltin?: boolean; } export type LanguageSelector = string | LanguageFilter | ReadonlyArray; diff --git a/src/vs/editor/common/languages.ts b/src/vs/editor/common/languages.ts index ca0bb68c6bd..364998995e3 100644 --- a/src/vs/editor/common/languages.ts +++ b/src/vs/editor/common/languages.ts @@ -3,14 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { VSBuffer } from 'vs/base/common/buffer'; import { CancellationToken } from 'vs/base/common/cancellation'; import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; import { Color } from 'vs/base/common/color'; -import { VSDataTransfer } from 'vs/base/common/dataTransfer'; +import { IReadonlyVSDataTransfer } from 'vs/base/common/dataTransfer'; import { Event } from 'vs/base/common/event'; import { IMarkdownString } from 'vs/base/common/htmlContent'; import { IDisposable } from 'vs/base/common/lifecycle'; +import { ThemeIcon } from 'vs/base/common/themables'; import { URI, UriComponents } from 'vs/base/common/uri'; import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; import { IPosition, Position } from 'vs/editor/common/core/position'; @@ -89,6 +90,8 @@ export interface IBackgroundTokenizer extends IDisposable { * when the change does not even propagate to that viewport. */ requestTokens(startLineNumber: number, endLineNumberExclusive: number): void; + + reportMismatchingTokens?(lineNumber: number): void; } @@ -96,6 +99,11 @@ export interface IBackgroundTokenizer extends IDisposable { * @internal */ export interface ITokenizationSupport { + /** + * If true, the background tokenizer will only be used to verify tokens against the default background tokenizer. + * Used for debugging. + */ + readonly backgroundTokenizerShouldOnlyVerifyTokens?: boolean; getInitialState(): IState; @@ -576,9 +584,12 @@ export interface CompletionContext { export interface CompletionItemProvider { /** + * Used to identify completions in the (debug) UI and telemetry. This isn't the extension identifier because extensions + * often contribute multiple completion item providers. + * * @internal */ - _debugDisplayName?: string; + _debugDisplayName: string; triggerCharacters?: string[]; /** @@ -613,19 +624,29 @@ export enum InlineCompletionTriggerKind { } export interface InlineCompletionContext { + /** * How the completion was triggered. */ readonly triggerKind: InlineCompletionTriggerKind; - readonly selectedSuggestionInfo: SelectedSuggestionInfo | undefined; } -export interface SelectedSuggestionInfo { - range: IRange; - text: string; - isSnippetText: boolean; - completionKind: CompletionItemKind; +export class SelectedSuggestionInfo { + constructor( + public readonly range: IRange, + public readonly text: string, + public readonly completionKind: CompletionItemKind, + public readonly isSnippetText: boolean, + ) { + } + + public equals(other: SelectedSuggestionInfo) { + return Range.lift(this.range).equalsRange(other.range) + && this.text === other.text + && this.completionKind === other.completionKind + && this.isSnippetText === other.isSnippetText; + } } export interface InlineCompletion { @@ -673,15 +694,25 @@ export interface InlineCompletions { provideInlineCompletions(model: model.ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): ProviderResult; /** * Will be called when an item is shown. + * @param updatedInsertText Is useful to understand bracket completion. */ - handleItemDidShow?(completions: T, item: T['items'][number]): void; + handleItemDidShow?(completions: T, item: T['items'][number], updatedInsertText: string): void; /** * Will be called when an item is partially accepted. @@ -692,6 +723,20 @@ export interface InlineCompletionsProvider; + readonly copyMimeTypes?: readonly string[]; + readonly pasteMimeTypes?: readonly string[]; - provideDocumentPasteEdits(model: model.ITextModel, ranges: readonly IRange[], dataTransfer: VSDataTransfer, token: CancellationToken): Promise; + prepareDocumentPaste?(model: model.ITextModel, ranges: readonly IRange[], dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken): Promise; + + provideDocumentPasteEdits?(model: model.ITextModel, ranges: readonly IRange[], dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken): Promise; } /** @@ -1182,6 +1234,10 @@ export interface FormattingOptions { * Prefer spaces over tabs. */ insertSpaces: boolean; + /** + * The list of multiple ranges to format at once, if the provider supports it. + */ + ranges?: Range[]; } /** * The document formatting provider interface defines the contract between extensions and @@ -1221,6 +1277,8 @@ export interface DocumentRangeFormattingEditProvider { * of the range to full syntax nodes. */ provideDocumentRangeFormattingEdits(model: model.ITextModel, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult; + + provideDocumentRangesFormattingEdits?(model: model.ITextModel, ranges: Range[], options: FormattingOptions, token: CancellationToken): ProviderResult; } /** * The document formatting provider interface defines the contract between extensions and @@ -1465,7 +1523,11 @@ export interface WorkspaceFileEditOptions { folder?: boolean; skipTrashBin?: boolean; maxSize?: number; - contentsBase64?: string; + + /** + * @internal + */ + contents?: Promise; } export interface IWorkspaceFileEdit { @@ -1593,7 +1655,7 @@ export interface CommentThread { extensionId?: string; threadId: string; resource: string | null; - range: T; + range: T | undefined; label: string | undefined; contextValue: string | undefined; comments: Comment[] | undefined; @@ -1605,7 +1667,7 @@ export interface CommentThread { canReply: boolean; input?: CommentInput; onDidChangeInput: Event; - onDidChangeRange: Event; + onDidChangeRange: Event; onDidChangeLabel: Event; onDidChangeCollapsibleState: Event; onDidChangeState: Event; @@ -1621,6 +1683,7 @@ export interface CommentThread { export interface CommentingRanges { readonly resource: URI; ranges: IRange[]; + fileComments: boolean; } /** @@ -1657,6 +1720,14 @@ export enum CommentMode { Preview = 1 } +/** + * @internal + */ +export enum CommentState { + Published = 0, + Draft = 1 +} + /** * @internal */ @@ -1664,7 +1735,7 @@ export interface Comment { readonly uniqueIdInThread: number; readonly body: string | IMarkdownString; readonly userName: string; - readonly userIconPath?: string; + readonly userIconPath?: UriComponents; readonly contextValue?: string; readonly commentReactions?: CommentReaction[]; readonly label?: string; @@ -1789,8 +1860,35 @@ export interface ITokenizationSupportChangedEvent { /** * @internal */ -export interface ITokenizationSupportFactory { - createTokenizationSupport(): ProviderResult; +export interface ILazyTokenizationSupport { + get tokenizationSupport(): Promise; +} + +/** + * @internal + */ +export class LazyTokenizationSupport implements IDisposable, ILazyTokenizationSupport { + private _tokenizationSupport: Promise | null = null; + + constructor(private readonly createSupport: () => Promise) { + } + + dispose(): void { + if (this._tokenizationSupport) { + this._tokenizationSupport.then((support) => { + if (support) { + support.dispose(); + } + }); + } + } + + get tokenizationSupport(): Promise { + if (!this._tokenizationSupport) { + this._tokenizationSupport = this.createSupport(); + } + return this._tokenizationSupport; + } } /** @@ -1809,7 +1907,7 @@ export interface ITokenizationRegistry { * Fire a change event for a language. * This is useful for languages that embed other languages. */ - fire(languageIds: string[]): void; + handleChange(languageIds: string[]): void; /** * Register a tokenization support. @@ -1819,7 +1917,7 @@ export interface ITokenizationRegistry { /** * Register a tokenization support factory. */ - registerFactory(languageId: string, factory: ITokenizationSupportFactory): IDisposable; + registerFactory(languageId: string, factory: ILazyTokenizationSupport): IDisposable; /** * Get or create the tokenization support for a language. @@ -1868,7 +1966,10 @@ export enum ExternalUriOpenerPriority { * @internal */ export interface DocumentOnDropEdit { - insertText: string | { snippet: string }; + readonly id: string; + readonly label: string; + readonly priority: number; + insertText: string | { readonly snippet: string }; additionalEdit?: WorkspaceEdit; } @@ -1876,5 +1977,7 @@ export interface DocumentOnDropEdit { * @internal */ export interface DocumentOnDropEditProvider { - provideDocumentOnDropEdits(model: model.ITextModel, position: IPosition, dataTransfer: VSDataTransfer, token: CancellationToken): ProviderResult; + readonly dropMimeTypes?: readonly string[]; + + provideDocumentOnDropEdits(model: model.ITextModel, position: IPosition, dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken): ProviderResult; } diff --git a/src/vs/editor/common/languages/defaultDocumentColorsComputer.ts b/src/vs/editor/common/languages/defaultDocumentColorsComputer.ts new file mode 100644 index 00000000000..02e447145b7 --- /dev/null +++ b/src/vs/editor/common/languages/defaultDocumentColorsComputer.ts @@ -0,0 +1,149 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { Color, HSLA } from 'vs/base/common/color'; +import { IPosition } from 'vs/editor/common/core/position'; +import { IRange } from 'vs/editor/common/core/range'; +import { IColor, IColorInformation } from 'vs/editor/common/languages'; + +export interface IDocumentColorComputerTarget { + getValue(): string; + positionAt(offset: number): IPosition; + findMatches(regex: RegExp): RegExpMatchArray[]; +} + +function _parseCaptureGroups(captureGroups: IterableIterator) { + const values = []; + for (const captureGroup of captureGroups) { + const parsedNumber = Number(captureGroup); + if (parsedNumber || parsedNumber === 0 && captureGroup.replace(/\s/g, '') !== '') { + values.push(parsedNumber); + } + } + return values; +} + +function _toIColor(r: number, g: number, b: number, a: number): IColor { + return { + red: r / 255, + blue: b / 255, + green: g / 255, + alpha: a + }; +} + +function _findRange(model: IDocumentColorComputerTarget, match: RegExpMatchArray): IRange | undefined { + const index = match.index; + const length = match[0].length; + if (!index) { + return; + } + const startPosition = model.positionAt(index); + const range: IRange = { + startLineNumber: startPosition.lineNumber, + startColumn: startPosition.column, + endLineNumber: startPosition.lineNumber, + endColumn: startPosition.column + length + }; + return range; +} + +function _findHexColorInformation(range: IRange | undefined, hexValue: string) { + if (!range) { + return; + } + const parsedHexColor = Color.Format.CSS.parseHex(hexValue); + if (!parsedHexColor) { + return; + } + return { + range: range, + color: _toIColor(parsedHexColor.rgba.r, parsedHexColor.rgba.g, parsedHexColor.rgba.b, parsedHexColor.rgba.a) + }; +} + +function _findRGBColorInformation(range: IRange | undefined, matches: RegExpMatchArray[], isAlpha: boolean) { + if (!range || matches.length !== 1) { + return; + } + const match = matches[0]!; + const captureGroups = match.values(); + const parsedRegex = _parseCaptureGroups(captureGroups); + return { + range: range, + color: _toIColor(parsedRegex[0], parsedRegex[1], parsedRegex[2], isAlpha ? parsedRegex[3] : 1) + }; +} + +function _findHSLColorInformation(range: IRange | undefined, matches: RegExpMatchArray[], isAlpha: boolean) { + if (!range || matches.length !== 1) { + return; + } + const match = matches[0]!; + const captureGroups = match.values(); + const parsedRegex = _parseCaptureGroups(captureGroups); + const colorEquivalent = new Color(new HSLA(parsedRegex[0], parsedRegex[1] / 100, parsedRegex[2] / 100, isAlpha ? parsedRegex[3] : 1)); + return { + range: range, + color: _toIColor(colorEquivalent.rgba.r, colorEquivalent.rgba.g, colorEquivalent.rgba.b, colorEquivalent.rgba.a) + }; +} + +function _findMatches(model: IDocumentColorComputerTarget | string, regex: RegExp): RegExpMatchArray[] { + if (typeof model === 'string') { + return [...model.matchAll(regex)]; + } else { + return model.findMatches(regex); + } +} + +function computeColors(model: IDocumentColorComputerTarget): IColorInformation[] { + const result: IColorInformation[] = []; + // Early validation for RGB and HSL + const initialValidationRegex = /\b(rgb|rgba|hsl|hsla)(\([0-9\s,.\%]*\))|(#)([A-Fa-f0-9]{3})\b|(#)([A-Fa-f0-9]{4})\b|(#)([A-Fa-f0-9]{6})\b|(#)([A-Fa-f0-9]{8})\b/gm; + const initialValidationMatches = _findMatches(model, initialValidationRegex); + + // Potential colors have been found, validate the parameters + if (initialValidationMatches.length > 0) { + for (const initialMatch of initialValidationMatches) { + const initialCaptureGroups = initialMatch.filter(captureGroup => captureGroup !== undefined); + const colorScheme = initialCaptureGroups[1]; + const colorParameters = initialCaptureGroups[2]; + if (!colorParameters) { + continue; + } + let colorInformation; + if (colorScheme === 'rgb') { + const regexParameters = /^\(\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\s*,\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\s*,\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\s*\)$/gm; + colorInformation = _findRGBColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), false); + } else if (colorScheme === 'rgba') { + const regexParameters = /^\(\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\s*,\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\s*,\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\s*,\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\s*\)$/gm; + colorInformation = _findRGBColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), true); + } else if (colorScheme === 'hsl') { + const regexParameters = /^\(\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\s*,\s*(100|\d{1,2}[.]\d*|\d{1,2})%\s*,\s*(100|\d{1,2}[.]\d*|\d{1,2})%\s*\)$/gm; + colorInformation = _findHSLColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), false); + } else if (colorScheme === 'hsla') { + const regexParameters = /^\(\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\s*,\s*(100|\d{1,2}[.]\d*|\d{1,2})%\s*,\s*(100|\d{1,2}[.]\d*|\d{1,2})%\s*,\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\s*\)$/gm; + colorInformation = _findHSLColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), true); + } else if (colorScheme === '#') { + colorInformation = _findHexColorInformation(_findRange(model, initialMatch), colorScheme + colorParameters); + } + if (colorInformation) { + result.push(colorInformation); + } + } + } + return result; +} + +/** + * Returns an array of all default document colors in the provided document + */ +export function computeDefaultDocumentColors(model: IDocumentColorComputerTarget): IColorInformation[] { + if (!model || typeof model.getValue !== 'function' || typeof model.positionAt !== 'function') { + // Unknown caller! + return []; + } + return computeColors(model); +} diff --git a/src/vs/editor/common/model.ts b/src/vs/editor/common/model.ts index 846dd034eec..ea74d5c19b9 100644 --- a/src/vs/editor/common/model.ts +++ b/src/vs/editor/common/model.ts @@ -7,6 +7,7 @@ import { Event } from 'vs/base/common/event'; import { IMarkdownString } from 'vs/base/common/htmlContent'; import { IDisposable } from 'vs/base/common/lifecycle'; import { equals } from 'vs/base/common/objects'; +import { ThemeColor } from 'vs/base/common/themables'; import { URI } from 'vs/base/common/uri'; import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; import { IPosition, Position } from 'vs/editor/common/core/position'; @@ -16,13 +17,12 @@ import { TextChange } from 'vs/editor/common/core/textChange'; import { WordCharacterClassifier } from 'vs/editor/common/core/wordCharacterClassifier'; import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; import { FormattingOptions } from 'vs/editor/common/languages'; +import { ILanguageSelection } from 'vs/editor/common/languages/language'; import { IBracketPairsTextModelPart } from 'vs/editor/common/textModelBracketPairs'; import { IModelContentChange, IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent, InternalModelContentChangeEvent, ModelInjectedTextChangedEvent } from 'vs/editor/common/textModelEvents'; import { IGuidesTextModelPart } from 'vs/editor/common/textModelGuides'; import { ITokenizationTextModelPart } from 'vs/editor/common/tokenizationTextModelPart'; -import { ThemeColor } from 'vs/base/common/themables'; import { UndoRedoGroup } from 'vs/platform/undoRedo/common/undoRedo'; -import { ILanguageSelection } from 'vs/editor/common/languages/language'; /** * Vertical Lane in the overview ruler of the editor. @@ -34,6 +34,14 @@ export enum OverviewRulerLane { Full = 7 } +/** + * Vertical Lane in the glyph margin of the editor. + */ +export enum GlyphMarginLane { + Left = 1, + Right = 2 +} + /** * Position in the minimap to render the decoration. */ @@ -55,6 +63,13 @@ export interface IDecorationOptions { darkColor?: string | ThemeColor; } +export interface IModelDecorationGlyphMarginOptions { + /** + * The position in the glyph margin. + */ + position: GlyphMarginLane; +} + /** * Options for rendering a model decoration in the overview ruler. */ @@ -66,11 +81,11 @@ export interface IModelDecorationOverviewRulerOptions extends IDecorationOptions } /** - * Options for rendering a model decoration in the overview ruler. + * Options for rendering a model decoration in the minimap. */ export interface IModelDecorationMinimapOptions extends IDecorationOptions { /** - * The position in the overview ruler. + * The position in the minimap. */ position: MinimapPosition; } @@ -93,12 +108,19 @@ export interface IModelDecorationOptions { * CSS class name describing the decoration. */ className?: string | null; + /** + * Indicates whether the decoration should span across the entire line when it continues onto the next line. + */ + shouldFillLineOnLineBreak?: boolean | null; blockClassName?: string | null; /** * Indicates if this block should be rendered after the last line. * In this case, the range must be empty and set to the last line. */ blockIsAfterEnd?: boolean | null; + blockDoesNotCollapse?: boolean | null; + blockPadding?: [top: number, right: number, bottom: number, left: number] | null; + /** * Message to be rendered when hovering over the glyph margin decoration. */ @@ -138,6 +160,11 @@ export interface IModelDecorationOptions { * If set, the decoration will be rendered in the glyph margin with this CSS class name. */ glyphMarginClassName?: string | null; + /** + * If set and the decoration has {@link glyphMarginClassName} set, render this decoration + * with the specified {@link IModelDecorationGlyphMarginOptions} in the glyph margin. + */ + glyphMargin?: IModelDecorationGlyphMarginOptions | null; /** * If set, the decoration will be rendered in the lines decorations with this CSS class name. */ @@ -304,7 +331,7 @@ export interface IModelDecorationsChangeAccessor { * @param newDecorations Array describing what decorations should result after the call. * @return An array containing the new decorations identifiers. */ - deltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[]): string[]; + deltaDecorations(oldDecorations: readonly string[], newDecorations: readonly IModelDeltaDecoration[]): string[]; } /** @@ -971,9 +998,11 @@ export interface ITextModel { * @param range The range to search in * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). + * @param onlyMinimapDecorations If set, it will return only decorations that render in the minimap. + * @param onlyMarginDecorations If set, it will return only decorations that render in the glyph margin. * @return An array with the decorations */ - getDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: boolean, onlyMinimapDecorations?: boolean): IModelDecoration[]; + getDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: boolean, onlyMinimapDecorations?: boolean, onlyMarginDecorations?: boolean): IModelDecoration[]; /** * Gets all the decorations as an array. @@ -982,6 +1011,12 @@ export interface ITextModel { */ getAllDecorations(ownerId?: number, filterOutValidation?: boolean): IModelDecoration[]; + /** + * Gets all decorations that render in the glyph margin as an array. + * @param ownerId If set, it will ignore decorations belonging to other owners. + */ + getAllMarginDecorations(ownerId?: number): IModelDecoration[]; + /** * Gets all the decorations that should be rendered in the overview ruler as an array. * @param ownerId If set, it will ignore decorations belonging to other owners. @@ -1165,12 +1200,12 @@ export interface ITextModel { /** * @internal */ - onBeforeAttached(): void; + onBeforeAttached(): IAttachedView; /** * @internal */ - onBeforeDetached(): void; + onBeforeDetached(view: IAttachedView): void; /** * Returns if this model is attached to an editor or not. @@ -1221,6 +1256,18 @@ export interface ITextModel { readonly tokenization: ITokenizationTextModelPart; } +/** + * @internal + */ +export interface IAttachedView { + /** + * @param stabilized Indicates if the visible lines are probably going to change soon or can be considered stable. + * Is true on reveal range and false on scroll. + * Tokenizers should tokenize synchronously if stabilized is true. + */ + setVisibleLines(visibleLines: { startLineNumber: number; endLineNumber: number }[], stabilized: boolean): void; +} + export const enum PositionAffinity { /** * Prefers the left most position. diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts index cbabd157db0..e304dd1faa9 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.ts @@ -388,7 +388,7 @@ class TwoThreeListAstNode extends ListAstNode { } throw new Error('Invalid child index'); } - public setChild(idx: number, node: AstNode): void { + protected setChild(idx: number, node: AstNode): void { switch (idx) { case 0: this._item1 = node; return; case 1: this._item2 = node; return; @@ -506,7 +506,7 @@ class ArrayListAstNode extends ListAstNode { getChild(idx: number): AstNode | null { return this._children[idx]; } - setChild(idx: number, child: AstNode): void { + protected setChild(idx: number, child: AstNode): void { this._children[idx] = child; } get children(): readonly AstNode[] { diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts index a985d961511..501aa07c39b 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.ts @@ -3,9 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Length, lengthAdd, lengthDiffNonNegative, lengthLessThanEqual, LengthObj, lengthToObj, toLength } from './length'; +import { Range } from 'vs/editor/common/core/range'; +import { Length, lengthAdd, lengthDiffNonNegative, lengthLessThanEqual, LengthObj, lengthOfString, lengthToObj, positionToLength, toLength } from './length'; +import { IModelContentChange } from 'vs/editor/common/textModelEvents'; export class TextEditInfo { + public static fromModelContentChanges(changes: IModelContentChange[]): TextEditInfo[] { + // Must be sorted in ascending order + const edits = changes.map(c => { + const range = Range.lift(c.range); + return new TextEditInfo( + positionToLength(range.getStartPosition()), + positionToLength(range.getEndPosition()), + lengthOfString(c.text) + ); + }).reverse(); + return edits; + } + constructor( public readonly startOffset: Length, public readonly endOffset: Length, diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts index 215de67ef99..acb25d8bfeb 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.ts @@ -14,7 +14,7 @@ import { ResolvedLanguageConfiguration } from 'vs/editor/common/languages/langua import { AstNode, AstNodeKind } from './ast'; import { TextEditInfo } from './beforeEditPositionMapper'; import { LanguageAgnosticBracketTokens } from './brackets'; -import { Length, lengthAdd, lengthGreaterThanEqual, lengthLessThan, lengthLessThanEqual, lengthOfString, lengthsToRange, lengthZero, positionToLength, toLength } from './length'; +import { Length, lengthAdd, lengthGreaterThanEqual, lengthLessThan, lengthLessThanEqual, lengthsToRange, lengthZero, positionToLength, toLength } from './length'; import { parseDocument } from './parser'; import { DenseKeyProvider } from './smallImmutableSet'; import { FastTokenizer, TextBufferTokenizer } from './tokenizer'; @@ -103,16 +103,7 @@ export class BracketPairsTree extends Disposable { } public handleContentChanged(change: IModelContentChangedEvent) { - // Must be sorted in ascending order - const edits = change.changes.map(c => { - const range = Range.lift(c.range); - return new TextEditInfo( - positionToLength(range.getStartPosition()), - positionToLength(range.getEndPosition()), - lengthOfString(c.text) - ); - }).reverse(); - + const edits = TextEditInfo.fromModelContentChanges(change.changes); this.handleEdits(edits, false); } diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts index 564cd5ab4b7..40cb0255688 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.ts @@ -216,6 +216,14 @@ export function lengthsToRange(lengthStart: Length, lengthEnd: Length): Range { return new Range(lineCount + 1, colCount + 1, lineCount2 + 1, colCount2 + 1); } +export function lengthOfRange(range: Range): LengthObj { + if (range.startLineNumber === range.endLineNumber) { + return new LengthObj(0, range.endColumn - range.startColumn); + } else { + return new LengthObj(range.endLineNumber - range.startLineNumber, range.endColumn - 1); + } +} + export function lengthCompare(length1: Length, length2: Length): number { const l1 = length1 as any as number; const l2 = length2 as any as number; diff --git a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts index 8758dfb3ea0..cdf202699d3 100644 --- a/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts +++ b/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.ts @@ -60,7 +60,7 @@ class Parser { this._itemsConstructed = 0; this._itemsFromCache = 0; - let result = this.parseList(SmallImmutableSet.getEmpty()); + let result = this.parseList(SmallImmutableSet.getEmpty(), 0); if (!result) { result = ListAstNode.getEmpty(); } @@ -70,6 +70,7 @@ class Parser { private parseList( openedBracketIds: SmallImmutableSet, + level: number, ): AstNode | null { const items: AstNode[] = []; @@ -86,7 +87,7 @@ class Parser { break; } - child = this.parseChild(openedBracketIds); + child = this.parseChild(openedBracketIds, level + 1); } if (child.kind === AstNodeKind.List && child.childrenLength === 0) { @@ -129,6 +130,7 @@ class Parser { private parseChild( openedBracketIds: SmallImmutableSet, + level: number, ): AstNode { this._itemsConstructed++; @@ -142,8 +144,13 @@ class Parser { return token.astNode as TextAstNode; case TokenKind.OpeningBracket: { + if (level > 300) { + // To prevent stack overflows + return new TextAstNode(token.length); + } + const set = openedBracketIds.merge(token.bracketIds); - const child = this.parseList(set); + const child = this.parseList(set, level + 1); const nextToken = this.tokenizer.peek(); if ( diff --git a/src/vs/editor/common/model/fixedArray.ts b/src/vs/editor/common/model/fixedArray.ts new file mode 100644 index 00000000000..1d57ce2914b --- /dev/null +++ b/src/vs/editor/common/model/fixedArray.ts @@ -0,0 +1,77 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { arrayInsert } from 'vs/base/common/arrays'; + +/** + * An array that avoids being sparse by always + * filling up unused indices with a default value. + */ +export class FixedArray { + private _store: T[] = []; + + constructor( + private readonly _default: T + ) { } + + public get(index: number): T { + if (index < this._store.length) { + return this._store[index]; + } + return this._default; + } + + public set(index: number, value: T): void { + while (index >= this._store.length) { + this._store[this._store.length] = this._default; + } + this._store[index] = value; + } + + public replace(index: number, oldLength: number, newLength: number): void { + if (index >= this._store.length) { + return; + } + + if (oldLength === 0) { + this.insert(index, newLength); + return; + } else if (newLength === 0) { + this.delete(index, oldLength); + return; + } + + const before = this._store.slice(0, index); + const after = this._store.slice(index + oldLength); + const insertArr = arrayFill(newLength, this._default); + this._store = before.concat(insertArr, after); + } + + public delete(deleteIndex: number, deleteCount: number): void { + if (deleteCount === 0 || deleteIndex >= this._store.length) { + return; + } + this._store.splice(deleteIndex, deleteCount); + } + + public insert(insertIndex: number, insertCount: number): void { + if (insertCount === 0 || insertIndex >= this._store.length) { + return; + } + const arr: T[] = []; + for (let i = 0; i < insertCount; i++) { + arr[i] = this._default; + } + this._store = arrayInsert(this._store, insertIndex, arr); + } +} + +function arrayFill(length: number, value: T): T[] { + const arr: T[] = []; + for (let i = 0; i < length; i++) { + arr[i] = value; + } + return arr; +} diff --git a/src/vs/editor/common/model/guidesTextModelPart.ts b/src/vs/editor/common/model/guidesTextModelPart.ts index 8d99b36c026..d8e264475ac 100644 --- a/src/vs/editor/common/model/guidesTextModelPart.ts +++ b/src/vs/editor/common/model/guidesTextModelPart.ts @@ -13,6 +13,7 @@ import { TextModelPart } from 'vs/editor/common/model/textModelPart'; import { computeIndentLevel } from 'vs/editor/common/model/utils'; import { ILanguageConfigurationService, ResolvedLanguageConfiguration } from 'vs/editor/common/languages/languageConfigurationRegistry'; import { BracketGuideOptions, HorizontalGuidesState, IActiveIndentGuideInfo, IGuidesTextModelPart, IndentGuide, IndentGuideHorizontalLine } from 'vs/editor/common/textModelGuides'; +import { BugIndicatingError } from 'vs/base/common/errors'; export class GuidesTextModelPart extends TextModelPart implements IGuidesTextModelPart { constructor( @@ -46,7 +47,7 @@ export class GuidesTextModelPart extends TextModelPart implements IGuidesTextMod const lineCount = this.textModel.getLineCount(); if (lineNumber < 1 || lineNumber > lineCount) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } const foldingRules = this.getLanguageConfiguration( diff --git a/src/vs/editor/common/model/intervalTree.ts b/src/vs/editor/common/model/intervalTree.ts index ce7ffeaa1ca..ff5d9105dd2 100644 --- a/src/vs/editor/common/model/intervalTree.ts +++ b/src/vs/editor/common/model/intervalTree.ts @@ -47,6 +47,10 @@ const enum Constants { CollapseOnReplaceEditMaskInverse = 0b11011111, CollapseOnReplaceEditOffset = 5, + IsMarginMask = 0b01000000, + IsMarginMaskInverse = 0b10111111, + IsMarginOffset = 6, + /** * Due to how deletion works (in order to avoid always walking the right subtree of the deleted node), * the deltas for nodes can grow and shrink dramatically. It has been observed, in practice, that unless @@ -94,6 +98,14 @@ function setNodeIsForValidation(node: IntervalNode, value: boolean): void { (node.metadata & Constants.IsForValidationMaskInverse) | ((value ? 1 : 0) << Constants.IsForValidationOffset) ); } +function getNodeIsInGlyphMargin(node: IntervalNode): boolean { + return ((node.metadata & Constants.IsMarginMask) >>> Constants.IsMarginOffset) === 1; +} +function setNodeIsInGlyphMargin(node: IntervalNode, value: boolean): void { + node.metadata = ( + (node.metadata & Constants.IsMarginMaskInverse) | ((value ? 1 : 0) << Constants.IsMarginOffset) + ); +} function getNodeStickiness(node: IntervalNode): TrackedRangeStickiness { return ((node.metadata & Constants.StickinessMask) >>> Constants.StickinessOffset); } @@ -157,6 +169,7 @@ export class IntervalNode { this.ownerId = 0; this.options = null!; setNodeIsForValidation(this, false); + setNodeIsInGlyphMargin(this, false); _setNodeStickiness(this, TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges); setCollapseOnReplaceEdit(this, false); @@ -186,6 +199,7 @@ export class IntervalNode { || className === ClassName.EditorWarningDecoration || className === ClassName.EditorInfoDecoration )); + setNodeIsInGlyphMargin(this, this.options.glyphMarginClassName !== null); _setNodeStickiness(this, this.options.stickiness); setCollapseOnReplaceEdit(this, this.options.collapseOnReplaceEdit); } @@ -222,18 +236,18 @@ export class IntervalTree { this.requestNormalizeDelta = false; } - public intervalSearch(start: number, end: number, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number): IntervalNode[] { + public intervalSearch(start: number, end: number, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number, onlyMarginDecorations: boolean): IntervalNode[] { if (this.root === SENTINEL) { return []; } - return intervalSearch(this, start, end, filterOwnerId, filterOutValidation, cachedVersionId); + return intervalSearch(this, start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); } - public search(filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number): IntervalNode[] { + public search(filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number, onlyMarginDecorations: boolean): IntervalNode[] { if (this.root === SENTINEL) { return []; } - return search(this, filterOwnerId, filterOutValidation, cachedVersionId); + return search(this, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); } /** @@ -305,7 +319,7 @@ export class IntervalTree { } public getAllInOrder(): IntervalNode[] { - return search(this, 0, false, 0); + return search(this, 0, false, 0, false); } private _normalizeDeltaIfNecessary(): void { @@ -680,7 +694,7 @@ function collectNodesPostOrder(T: IntervalTree): IntervalNode[] { return result; } -function search(T: IntervalTree, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number): IntervalNode[] { +function search(T: IntervalTree, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number, onlyMarginDecorations: boolean): IntervalNode[] { let node = T.root; let delta = 0; let nodeStart = 0; @@ -718,6 +732,10 @@ function search(T: IntervalTree, filterOwnerId: number, filterOutValidation: boo if (filterOutValidation && getNodeIsForValidation(node)) { include = false; } + if (onlyMarginDecorations && !getNodeIsInGlyphMargin(node)) { + include = false; + } + if (include) { result[resultLen++] = node; } @@ -737,7 +755,7 @@ function search(T: IntervalTree, filterOwnerId: number, filterOutValidation: boo return result; } -function intervalSearch(T: IntervalTree, intervalStart: number, intervalEnd: number, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number): IntervalNode[] { +function intervalSearch(T: IntervalTree, intervalStart: number, intervalEnd: number, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number, onlyMarginDecorations: boolean): IntervalNode[] { // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree // Now, it is known that two intervals A and B overlap only when both // A.low <= B.high and A.high >= B.low. When searching the trees for @@ -803,6 +821,9 @@ function intervalSearch(T: IntervalTree, intervalStart: number, intervalEnd: num if (filterOutValidation && getNodeIsForValidation(node)) { include = false; } + if (onlyMarginDecorations && !getNodeIsInGlyphMargin(node)) { + include = false; + } if (include) { result[resultLen++] = node; diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts index 405b13f5d5b..b75d0d75a70 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts @@ -104,7 +104,7 @@ interface NodePosition { */ node: TreeNode; /** - * remainer in current piece. + * remainder in current piece. */ remainder: number; /** @@ -374,7 +374,7 @@ export class PieceTreeBase { return false; } - const offset = 0; + let offset = 0; const ret = this.iterate(this.root, node => { if (node === SENTINEL) { return true; @@ -385,6 +385,7 @@ export class PieceTreeBase { const endPosition = other.nodeAt(offset + len); const val = other.getValueInRange2(startPosition, endPosition); + offset += len; return str === val; }); diff --git a/src/vs/editor/common/model/textModel.ts b/src/vs/editor/common/model/textModel.ts index 32ee664464b..b600bd7e3bb 100644 --- a/src/vs/editor/common/model/textModel.ts +++ b/src/vs/editor/common/model/textModel.ts @@ -6,17 +6,19 @@ import { ArrayQueue, pushMany } from 'vs/base/common/arrays'; import { VSBuffer, VSBufferReadableStream } from 'vs/base/common/buffer'; import { Color } from 'vs/base/common/color'; -import { illegalArgument, onUnexpectedError } from 'vs/base/common/errors'; +import { BugIndicatingError, illegalArgument, onUnexpectedError } from 'vs/base/common/errors'; import { Emitter, Event } from 'vs/base/common/event'; import { IMarkdownString } from 'vs/base/common/htmlContent'; -import { combinedDisposable, Disposable, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { Disposable, IDisposable, MutableDisposable, combinedDisposable } from 'vs/base/common/lifecycle'; import { listenStream } from 'vs/base/common/stream'; import * as strings from 'vs/base/common/strings'; +import { ThemeColor } from 'vs/base/common/themables'; import { Constants } from 'vs/base/common/uint'; import { URI } from 'vs/base/common/uri'; import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; import { countEOL } from 'vs/editor/common/core/eolCounter'; import { normalizeIndentation } from 'vs/editor/common/core/indentation'; +import { LineRange } from 'vs/editor/common/core/lineRange'; import { IPosition, Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; import { Selection } from 'vs/editor/common/core/selection'; @@ -42,7 +44,6 @@ import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelOptions import { IGuidesTextModelPart } from 'vs/editor/common/textModelGuides'; import { ITokenizationTextModelPart } from 'vs/editor/common/tokenizationTextModelPart'; import { IColorTheme } from 'vs/platform/theme/common/themeService'; -import { ThemeColor } from 'vs/base/common/themables'; import { IUndoRedoService, ResourceEditStackSnapshot, UndoRedoGroup } from 'vs/platform/undoRedo/common/undoRedo'; export function createTextBufferFactory(text: string): model.ITextBufferFactory { @@ -286,6 +287,8 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati private readonly _guidesTextModelPart: GuidesTextModelPart; public get guides(): IGuidesTextModelPart { return this._guidesTextModelPart; } + private readonly _attachedViews = new AttachedViews(); + constructor( source: string | model.ITextBufferFactory, languageIdOrSelection: string | ILanguageSelection, @@ -327,7 +330,8 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati this._languageConfigurationService, this, this._bracketPairs, - languageId + languageId, + this._attachedViews, ); const bufferLineCount = this._buffer.getLineCount(); @@ -439,7 +443,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati this._setValueFromTextBuffer(textBuffer, disposable); } - private _createContentChanged2(range: Range, rangeOffset: number, rangeLength: number, text: string, isUndoing: boolean, isRedoing: boolean, isFlush: boolean): IModelContentChangedEvent { + private _createContentChanged2(range: Range, rangeOffset: number, rangeLength: number, text: string, isUndoing: boolean, isRedoing: boolean, isFlush: boolean, isEolChange: boolean): IModelContentChangedEvent { return { changes: [{ range: range, @@ -448,6 +452,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati text: text, }], eol: this._buffer.getEOL(), + isEolChange: isEolChange, versionId: this.getVersionId(), isUndoing: isUndoing, isRedoing: isRedoing, @@ -467,9 +472,6 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati this._bufferDisposable = textBufferDisposable; this._increaseVersionId(); - // Flush all tokens - this._tokenizationTextModelPart.flush(); - // Destroy all my decorations this._decorations = Object.create(null); this._decorationsTree = new DecorationsTrees(); @@ -487,7 +489,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati false, false ), - this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, true) + this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, true, false) ); } @@ -518,7 +520,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati false, false ), - this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, false) + this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, false, true) ); } @@ -551,20 +553,22 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati } } - public onBeforeAttached(): void { + public onBeforeAttached(): model.IAttachedView { this._attachedEditorCount++; if (this._attachedEditorCount === 1) { this._tokenizationTextModelPart.handleDidChangeAttached(); this._onDidChangeAttached.fire(undefined); } + return this._attachedViews.attachView(); } - public onBeforeDetached(): void { + public onBeforeDetached(view: model.IAttachedView): void { this._attachedEditorCount--; if (this._attachedEditorCount === 0) { this._tokenizationTextModelPart.handleDidChangeAttached(); this._onDidChangeAttached.fire(undefined); } + this._attachedViews.detachView(view); } public isAttachedToEditor(): boolean { @@ -788,7 +792,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati public getLineContent(lineNumber: number): string { this._assertNotDisposed(); if (lineNumber < 1 || lineNumber > this.getLineCount()) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } return this._buffer.getLineContent(lineNumber); @@ -797,7 +801,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati public getLineLength(lineNumber: number): number { this._assertNotDisposed(); if (lineNumber < 1 || lineNumber > this.getLineCount()) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } return this._buffer.getLineLength(lineNumber); @@ -830,7 +834,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati public getLineMaxColumn(lineNumber: number): number { this._assertNotDisposed(); if (lineNumber < 1 || lineNumber > this.getLineCount()) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } return this._buffer.getLineLength(lineNumber) + 1; } @@ -838,7 +842,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati public getLineFirstNonWhitespaceColumn(lineNumber: number): number { this._assertNotDisposed(); if (lineNumber < 1 || lineNumber > this.getLineCount()) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } return this._buffer.getLineFirstNonWhitespaceColumn(lineNumber); } @@ -846,7 +850,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati public getLineLastNonWhitespaceColumn(lineNumber: number): number { this._assertNotDisposed(); if (lineNumber < 1 || lineNumber > this.getLineCount()) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } return this._buffer.getLineLastNonWhitespaceColumn(lineNumber); } @@ -1410,14 +1414,12 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati this._trimAutoWhitespaceLines = result.trimAutoWhitespaceLineNumbers; if (contentChanges.length !== 0) { - // We do a first pass to update tokens and decorations + // We do a first pass to update decorations // because we want to read decorations in the second pass // where we will emit content change events // and we want to read the final decorations for (let i = 0, len = contentChanges.length; i < len; i++) { const change = contentChanges[i]; - const [eolCount, firstLineLength, lastLineLength] = countEOL(change.text); - this._tokenizationTextModelPart.acceptEdit(change.range, change.text, eolCount, firstLineLength, lastLineLength); this._decorationsTree.acceptReplace(change.rangeOffset, change.rangeLength, change.text.length, change.forceMoveMarkers); } @@ -1515,6 +1517,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati { changes: contentChanges, eol: this._buffer.getEOL(), + isEolChange: false, versionId: this.getVersionId(), isUndoing: this._isUndoing, isRedoing: this._isRedoing, @@ -1646,7 +1649,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati return null; } // node doesn't exist, the request is to set => add the tracked range - return this._deltaDecorationsImpl(0, [], [{ range: newRange, options: TRACKED_RANGE_OPTIONS[newStickiness] }])[0]; + return this._deltaDecorationsImpl(0, [], [{ range: newRange, options: TRACKED_RANGE_OPTIONS[newStickiness] }], true)[0]; } if (!newRange) { @@ -1703,28 +1706,28 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati return this.getLinesDecorations(lineNumber, lineNumber, ownerId, filterOutValidation); } - public getLinesDecorations(_startLineNumber: number, _endLineNumber: number, ownerId: number = 0, filterOutValidation: boolean = false): model.IModelDecoration[] { + public getLinesDecorations(_startLineNumber: number, _endLineNumber: number, ownerId: number = 0, filterOutValidation: boolean = false, onlyMarginDecorations: boolean = false): model.IModelDecoration[] { const lineCount = this.getLineCount(); const startLineNumber = Math.min(lineCount, Math.max(1, _startLineNumber)); const endLineNumber = Math.min(lineCount, Math.max(1, _endLineNumber)); const endColumn = this.getLineMaxColumn(endLineNumber); const range = new Range(startLineNumber, 1, endLineNumber, endColumn); - const decorations = this._getDecorationsInRange(range, ownerId, filterOutValidation); + const decorations = this._getDecorationsInRange(range, ownerId, filterOutValidation, onlyMarginDecorations); pushMany(decorations, this._decorationProvider.getDecorationsInRange(range, ownerId, filterOutValidation)); return decorations; } - public getDecorationsInRange(range: IRange, ownerId: number = 0, filterOutValidation: boolean = false, onlyMinimapDecorations: boolean = false): model.IModelDecoration[] { + public getDecorationsInRange(range: IRange, ownerId: number = 0, filterOutValidation: boolean = false, onlyMinimapDecorations: boolean = false, onlyMarginDecorations: boolean = false): model.IModelDecoration[] { const validatedRange = this.validateRange(range); - const decorations = this._getDecorationsInRange(validatedRange, ownerId, filterOutValidation); + const decorations = this._getDecorationsInRange(validatedRange, ownerId, filterOutValidation, onlyMarginDecorations); pushMany(decorations, this._decorationProvider.getDecorationsInRange(validatedRange, ownerId, filterOutValidation, onlyMinimapDecorations)); return decorations; } public getOverviewRulerDecorations(ownerId: number = 0, filterOutValidation: boolean = false): model.IModelDecoration[] { - return this._decorationsTree.getAll(this, ownerId, filterOutValidation, true); + return this._decorationsTree.getAll(this, ownerId, filterOutValidation, true, false); } public getInjectedTextDecorations(ownerId: number = 0): model.IModelDecoration[] { @@ -1740,15 +1743,19 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati } public getAllDecorations(ownerId: number = 0, filterOutValidation: boolean = false): model.IModelDecoration[] { - let result = this._decorationsTree.getAll(this, ownerId, filterOutValidation, false); + let result = this._decorationsTree.getAll(this, ownerId, filterOutValidation, false, false); result = result.concat(this._decorationProvider.getAllDecorations(ownerId, filterOutValidation)); return result; } - private _getDecorationsInRange(filterRange: Range, filterOwnerId: number, filterOutValidation: boolean): model.IModelDecoration[] { + public getAllMarginDecorations(ownerId: number = 0): model.IModelDecoration[] { + return this._decorationsTree.getAll(this, ownerId, false, false, true); + } + + private _getDecorationsInRange(filterRange: Range, filterOwnerId: number, filterOutValidation: boolean, onlyMarginDecorations: boolean): model.IModelDecoration[] { const startOffset = this._buffer.getOffsetAt(filterRange.startLineNumber, filterRange.startColumn); const endOffset = this._buffer.getOffsetAt(filterRange.endLineNumber, filterRange.endColumn); - return this._decorationsTree.getAllInInterval(this, startOffset, endOffset, filterOwnerId, filterOutValidation); + return this._decorationsTree.getAllInInterval(this, startOffset, endOffset, filterOwnerId, filterOutValidation, onlyMarginDecorations); } public getRangeAt(start: number, end: number): Range { @@ -1818,7 +1825,7 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati } } - private _deltaDecorationsImpl(ownerId: number, oldDecorationsIds: string[], newDecorations: model.IModelDeltaDecoration[]): string[] { + private _deltaDecorationsImpl(ownerId: number, oldDecorationsIds: string[], newDecorations: model.IModelDeltaDecoration[], suppressEvents: boolean = false): string[] { const versionId = this.getVersionId(); const oldDecorationsLen = oldDecorationsIds.length; @@ -1853,7 +1860,9 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati this._decorationsTree.delete(node); - this._onDidChangeDecorations.checkAffectedAndFire(node.options); + if (!suppressEvents) { + this._onDidChangeDecorations.checkAffectedAndFire(node.options); + } } } @@ -1884,7 +1893,9 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.startLineNumber); } - this._onDidChangeDecorations.checkAffectedAndFire(options); + if (!suppressEvents) { + this._onDidChangeDecorations.checkAffectedAndFire(options); + } this._decorationsTree.insert(node); @@ -1931,9 +1942,6 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati public getLanguageIdAtPosition(lineNumber: number, column: number): string { return this.tokenization.getLanguageIdAtPosition(lineNumber, column); } - public setLineTokens(lineNumber: number, tokens: Uint32Array | ArrayBuffer | null): void { - this._tokenizationTextModelPart.setLineTokens(lineNumber, tokens); - } public getWordAtPosition(position: IPosition): IWordAtPosition | null { return this._tokenizationTextModelPart.getWordAtPosition(position); @@ -2009,7 +2017,7 @@ class DecorationsTrees { } public ensureAllNodesHaveRanges(host: IDecorationsTreesHost): void { - this.getAll(host, 0, false, false); + this.getAll(host, 0, false, false, false); } private _ensureNodesHaveRanges(host: IDecorationsTreesHost, nodes: IntervalNode[]): model.IModelDecoration[] { @@ -2021,44 +2029,44 @@ class DecorationsTrees { return nodes; } - public getAllInInterval(host: IDecorationsTreesHost, start: number, end: number, filterOwnerId: number, filterOutValidation: boolean): model.IModelDecoration[] { + public getAllInInterval(host: IDecorationsTreesHost, start: number, end: number, filterOwnerId: number, filterOutValidation: boolean, onlyMarginDecorations: boolean): model.IModelDecoration[] { const versionId = host.getVersionId(); - const result = this._intervalSearch(start, end, filterOwnerId, filterOutValidation, versionId); + const result = this._intervalSearch(start, end, filterOwnerId, filterOutValidation, versionId, onlyMarginDecorations); return this._ensureNodesHaveRanges(host, result); } - private _intervalSearch(start: number, end: number, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number): IntervalNode[] { - const r0 = this._decorationsTree0.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId); - const r1 = this._decorationsTree1.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId); - const r2 = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId); + private _intervalSearch(start: number, end: number, filterOwnerId: number, filterOutValidation: boolean, cachedVersionId: number, onlyMarginDecorations: boolean): IntervalNode[] { + const r0 = this._decorationsTree0.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); + const r1 = this._decorationsTree1.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); + const r2 = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); return r0.concat(r1).concat(r2); } public getInjectedTextInInterval(host: IDecorationsTreesHost, start: number, end: number, filterOwnerId: number): model.IModelDecoration[] { const versionId = host.getVersionId(); - const result = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, false, versionId); + const result = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, false, versionId, false); return this._ensureNodesHaveRanges(host, result).filter((i) => i.options.showIfCollapsed || !i.range.isEmpty()); } public getAllInjectedText(host: IDecorationsTreesHost, filterOwnerId: number): model.IModelDecoration[] { const versionId = host.getVersionId(); - const result = this._injectedTextDecorationsTree.search(filterOwnerId, false, versionId); + const result = this._injectedTextDecorationsTree.search(filterOwnerId, false, versionId, false); return this._ensureNodesHaveRanges(host, result).filter((i) => i.options.showIfCollapsed || !i.range.isEmpty()); } - public getAll(host: IDecorationsTreesHost, filterOwnerId: number, filterOutValidation: boolean, overviewRulerOnly: boolean): model.IModelDecoration[] { + public getAll(host: IDecorationsTreesHost, filterOwnerId: number, filterOutValidation: boolean, overviewRulerOnly: boolean, onlyMarginDecorations: boolean): model.IModelDecoration[] { const versionId = host.getVersionId(); - const result = this._search(filterOwnerId, filterOutValidation, overviewRulerOnly, versionId); + const result = this._search(filterOwnerId, filterOutValidation, overviewRulerOnly, versionId, onlyMarginDecorations); return this._ensureNodesHaveRanges(host, result); } - private _search(filterOwnerId: number, filterOutValidation: boolean, overviewRulerOnly: boolean, cachedVersionId: number): IntervalNode[] { + private _search(filterOwnerId: number, filterOutValidation: boolean, overviewRulerOnly: boolean, cachedVersionId: number, onlyMarginDecorations: boolean): IntervalNode[] { if (overviewRulerOnly) { - return this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId); + return this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); } else { - const r0 = this._decorationsTree0.search(filterOwnerId, filterOutValidation, cachedVersionId); - const r1 = this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId); - const r2 = this._injectedTextDecorationsTree.search(filterOwnerId, filterOutValidation, cachedVersionId); + const r0 = this._decorationsTree0.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); + const r1 = this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); + const r2 = this._injectedTextDecorationsTree.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations); return r0.concat(r1).concat(r2); } } @@ -2177,6 +2185,14 @@ export class ModelDecorationOverviewRulerOptions extends DecorationOptions { } } +export class ModelDecorationGlyphMarginOptions { + readonly position: model.GlyphMarginLane; + + constructor(options: model.IModelDecorationGlyphMarginOptions | null | undefined) { + this.position = options?.position ?? model.GlyphMarginLane.Left; + } +} + export class ModelDecorationMinimapOptions extends DecorationOptions { readonly position: model.MinimapPosition; private _resolvedColor: Color | undefined; @@ -2245,13 +2261,15 @@ export class ModelDecorationOptions implements model.IModelDecorationOptions { public static createDynamic(options: model.IModelDecorationOptions): ModelDecorationOptions { return new ModelDecorationOptions(options); } - readonly description: string; readonly blockClassName: string | null; readonly blockIsAfterEnd: boolean | null; + readonly blockDoesNotCollapse?: boolean | null; + readonly blockPadding: [top: number, right: number, bottom: number, left: number] | null; readonly stickiness: model.TrackedRangeStickiness; readonly zIndex: number; readonly className: string | null; + readonly shouldFillLineOnLineBreak: boolean | null; readonly hoverMessage: IMarkdownString | IMarkdownString[] | null; readonly glyphMarginHoverMessage: IMarkdownString | IMarkdownString[] | null; readonly isWholeLine: boolean; @@ -2259,6 +2277,7 @@ export class ModelDecorationOptions implements model.IModelDecorationOptions { readonly collapseOnReplaceEdit: boolean; readonly overviewRuler: ModelDecorationOverviewRulerOptions | null; readonly minimap: ModelDecorationMinimapOptions | null; + readonly glyphMargin?: model.IModelDecorationGlyphMarginOptions | null | undefined; readonly glyphMarginClassName: string | null; readonly linesDecorationsClassName: string | null; readonly firstLineDecorationClassName: string | null; @@ -2272,14 +2291,16 @@ export class ModelDecorationOptions implements model.IModelDecorationOptions { readonly hideInCommentTokens: boolean | null; readonly hideInStringTokens: boolean | null; - private constructor(options: model.IModelDecorationOptions) { this.description = options.description; this.blockClassName = options.blockClassName ? cleanClassName(options.blockClassName) : null; + this.blockDoesNotCollapse = options.blockDoesNotCollapse ?? null; this.blockIsAfterEnd = options.blockIsAfterEnd ?? null; + this.blockPadding = options.blockPadding ?? null; this.stickiness = options.stickiness || model.TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges; this.zIndex = options.zIndex || 0; this.className = options.className ? cleanClassName(options.className) : null; + this.shouldFillLineOnLineBreak = options.shouldFillLineOnLineBreak ?? null; this.hoverMessage = options.hoverMessage || null; this.glyphMarginHoverMessage = options.glyphMarginHoverMessage || null; this.isWholeLine = options.isWholeLine || false; @@ -2287,6 +2308,7 @@ export class ModelDecorationOptions implements model.IModelDecorationOptions { this.collapseOnReplaceEdit = options.collapseOnReplaceEdit || false; this.overviewRuler = options.overviewRuler ? new ModelDecorationOverviewRulerOptions(options.overviewRuler) : null; this.minimap = options.minimap ? new ModelDecorationMinimapOptions(options.minimap) : null; + this.glyphMargin = options.glyphMarginClassName ? new ModelDecorationGlyphMarginOptions(options.glyphMargin) : null; this.glyphMarginClassName = options.glyphMarginClassName ? cleanClassName(options.glyphMarginClassName) : null; this.linesDecorationsClassName = options.linesDecorationsClassName ? cleanClassName(options.linesDecorationsClassName) : null; this.firstLineDecorationClassName = options.firstLineDecorationClassName ? cleanClassName(options.firstLineDecorationClassName) : null; @@ -2330,6 +2352,7 @@ class DidChangeDecorationsEmitter extends Disposable { private _affectsMinimap: boolean; private _affectsOverviewRuler: boolean; private _affectedInjectedTextLines: Set | null = null; + private _affectsGlyphMargin: boolean; constructor(private readonly handleBeforeFire: (affectedInjectedTextLines: Set | null) => void) { super(); @@ -2337,6 +2360,7 @@ class DidChangeDecorationsEmitter extends Disposable { this._shouldFireDeferred = false; this._affectsMinimap = false; this._affectsOverviewRuler = false; + this._affectsGlyphMargin = false; } hasListeners(): boolean { @@ -2373,12 +2397,16 @@ class DidChangeDecorationsEmitter extends Disposable { if (!this._affectsOverviewRuler) { this._affectsOverviewRuler = options.overviewRuler && options.overviewRuler.color ? true : false; } + if (!this._affectsGlyphMargin) { + this._affectsGlyphMargin = options.glyphMarginClassName ? true : false; + } this.tryFire(); } public fire(): void { this._affectsMinimap = true; this._affectsOverviewRuler = true; + this._affectsGlyphMargin = true; this.tryFire(); } @@ -2395,11 +2423,13 @@ class DidChangeDecorationsEmitter extends Disposable { const event: IModelDecorationsChangedEvent = { affectsMinimap: this._affectsMinimap, - affectsOverviewRuler: this._affectsOverviewRuler + affectsOverviewRuler: this._affectsOverviewRuler, + affectsGlyphMargin: this._affectsGlyphMargin }; this._shouldFireDeferred = false; this._affectsMinimap = false; this._affectsOverviewRuler = false; + this._affectsGlyphMargin = false; this._actual.fire(event); } } @@ -2462,3 +2492,43 @@ class DidChangeContentEmitter extends Disposable { this._slowEmitter.fire(e); } } + +/** + * @internal + */ +export class AttachedViews { + private readonly _onDidChangeVisibleRanges = new Emitter<{ view: model.IAttachedView; state: IAttachedViewState | undefined }>(); + public readonly onDidChangeVisibleRanges = this._onDidChangeVisibleRanges.event; + + private readonly _views = new Set(); + + public attachView(): model.IAttachedView { + const view = new AttachedViewImpl((state) => { + this._onDidChangeVisibleRanges.fire({ view, state }); + }); + this._views.add(view); + return view; + } + + public detachView(view: model.IAttachedView): void { + this._views.delete(view as AttachedViewImpl); + this._onDidChangeVisibleRanges.fire({ view, state: undefined }); + } +} + +/** + * @internal + */ +export interface IAttachedViewState { + readonly visibleLineRanges: readonly LineRange[]; + readonly stabilized: boolean; +} + +class AttachedViewImpl implements model.IAttachedView { + constructor(private readonly handleStateChange: (state: IAttachedViewState) => void) { } + + setVisibleLines(visibleLines: { startLineNumber: number; endLineNumber: number }[], stabilized: boolean): void { + const visibleLineRanges = visibleLines.map((line) => new LineRange(line.startLineNumber, line.endLineNumber + 1)); + this.handleStateChange({ visibleLineRanges, stabilized }); + } +} diff --git a/src/vs/editor/common/model/textModelTokens.ts b/src/vs/editor/common/model/textModelTokens.ts index 39ccb948fcc..deb5fbf628f 100644 --- a/src/vs/editor/common/model/textModelTokens.ts +++ b/src/vs/editor/common/model/textModelTokens.ts @@ -3,22 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as arrays from 'vs/base/common/arrays'; import { IdleDeadline, runWhenIdle } from 'vs/base/common/async'; -import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { onUnexpectedError } from 'vs/base/common/errors'; import { setTimeout0 } from 'vs/base/common/platform'; import { StopWatch } from 'vs/base/common/stopwatch'; import { countEOL } from 'vs/editor/common/core/eolCounter'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { OffsetRange } from 'vs/editor/common/core/offsetRange'; import { Position } from 'vs/editor/common/core/position'; -import { IRange } from 'vs/editor/common/core/range'; import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; +import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport } from 'vs/editor/common/languages'; import { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; import { ITextModel } from 'vs/editor/common/model'; -import { TextModel } from 'vs/editor/common/model/textModel'; -import { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart'; -import { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents'; +import { FixedArray } from 'vs/editor/common/model/fixedArray'; +import { IModelContentChange } from 'vs/editor/common/textModelEvents'; import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; @@ -26,286 +24,58 @@ const enum Constants { CHEAP_TOKENIZATION_LENGTH_LIMIT = 2048 } -/** - * An array that avoids being sparse by always - * filling up unused indices with a default value. - */ -export class ContiguousGrowingArray { +export class TokenizerWithStateStore { + private readonly initialState = this.tokenizationSupport.getInitialState(); - private _store: T[] = []; + public readonly store: TrackingTokenizationStateStore; constructor( - private readonly _default: T - ) { } - - public get(index: number): T { - if (index < this._store.length) { - return this._store[index]; - } - return this._default; + lineCount: number, + public readonly tokenizationSupport: ITokenizationSupport + ) { + this.store = new TrackingTokenizationStateStore(lineCount); } - public set(index: number, value: T): void { - while (index >= this._store.length) { - this._store[this._store.length] = this._default; + public getStartState(lineNumber: number): TState | null { + if (lineNumber === 1) { + return this.initialState as TState; } - this._store[index] = value; - } - - // TODO have `replace` instead of `delete` and `insert` - public delete(deleteIndex: number, deleteCount: number): void { - if (deleteCount === 0 || deleteIndex >= this._store.length) { - return; - } - this._store.splice(deleteIndex, deleteCount); - } - - public insert(insertIndex: number, insertCount: number): void { - if (insertCount === 0 || insertIndex >= this._store.length) { - return; - } - const arr: T[] = []; - for (let i = 0; i < insertCount; i++) { - arr[i] = this._default; - } - this._store = arrays.arrayInsert(this._store, insertIndex, arr); + return this.store.getEndState(lineNumber - 1); } } -/** - * Stores the states at the start of each line and keeps track of which lines - * must be re-tokenized. Also uses state equality to quickly validate lines - * that don't need to be re-tokenized. - * - * For example, when typing on a line, the line gets marked as needing to be tokenized. - * Once the line is tokenized, the end state is checked for equality against the begin - * state of the next line. If the states are equal, tokenization doesn't need to run - * again over the rest of the file. If the states are not equal, the next line gets marked - * as needing to be tokenized. - */ -export class TokenizationStateStore { - - /** - * `lineBeginState[i]` contains the begin state used to tokenize line number `i + 1`. - */ - private readonly _lineBeginState = new ContiguousGrowingArray(null); - /** - * `lineNeedsTokenization[i]` describes if line number `i + 1` needs to be tokenized. - */ - private readonly _lineNeedsTokenization = new ContiguousGrowingArray(true); - /** - * `invalidLineStartIndex` indicates that line number `invalidLineStartIndex + 1` - * is the first one that needs to be re-tokenized. - */ - private _firstLineNeedsTokenization: number; - - public get invalidLineStartIndex() { - return this._firstLineNeedsTokenization; - } - +export class TokenizerWithStateStoreAndTextModel extends TokenizerWithStateStore { constructor( - public readonly tokenizationSupport: ITokenizationSupport, - public readonly initialState: IState + lineCount: number, + tokenizationSupport: ITokenizationSupport, + public readonly _textModel: ITextModel, + public readonly _languageIdCodec: ILanguageIdCodec ) { - this._firstLineNeedsTokenization = 0; - this._lineBeginState.set(0, this.initialState); + super(lineCount, tokenizationSupport); } - public markMustBeTokenized(lineIndex: number): void { - this._lineNeedsTokenization.set(lineIndex, true); - this._firstLineNeedsTokenization = Math.min(this._firstLineNeedsTokenization, lineIndex); - } + public updateTokensUntilLine(builder: ContiguousMultilineTokensBuilder, lineNumber: number): void { + const languageId = this._textModel.getLanguageId(); - public getBeginState(lineIndex: number): IState | null { - return this._lineBeginState.get(lineIndex); - } - - public setEndState(linesLength: number, lineIndex: number, endState: IState): boolean { - this._lineNeedsTokenization.set(lineIndex, false); - this._firstLineNeedsTokenization = lineIndex + 1; - - // Check if this was the last line - if (lineIndex === linesLength - 1) { - return false; - } - - // Check if the end state has changed - const previousEndState = this._lineBeginState.get(lineIndex + 1); - if (previousEndState === null || !endState.equals(previousEndState)) { - this._lineBeginState.set(lineIndex + 1, endState); - this.markMustBeTokenized(lineIndex + 1); - return true; - } - - // Perhaps we can skip tokenizing some lines... - let i = lineIndex + 1; - while (i < linesLength) { - if (this._lineNeedsTokenization.get(i)) { + while (true) { + const nextLineNumber = this.store.getFirstInvalidEndStateLineNumber(); + if (!nextLineNumber || nextLineNumber > lineNumber) { break; } - i++; - } - this._firstLineNeedsTokenization = i; - return false; - } - public applyEdits(range: IRange, eolCount: number): void { - this.markMustBeTokenized(range.startLineNumber - 1); + const text = this._textModel.getLineContent(nextLineNumber); + const lineStartState = this.getStartState(nextLineNumber); - this._lineBeginState.delete(range.startLineNumber, range.endLineNumber - range.startLineNumber); - this._lineNeedsTokenization.delete(range.startLineNumber, range.endLineNumber - range.startLineNumber); - - this._lineBeginState.insert(range.startLineNumber, eolCount); - this._lineNeedsTokenization.insert(range.startLineNumber, eolCount); - } - - public updateTokensUntilLine(textModel: ITextModel, languageIdCodec: ILanguageIdCodec, builder: ContiguousMultilineTokensBuilder, lineNumber: number): void { - const languageId = textModel.getLanguageId(); - const linesLength = textModel.getLineCount(); - const endLineIndex = lineNumber - 1; - - // Validate all states up to and including endLineIndex - for (let lineIndex = this.invalidLineStartIndex; lineIndex <= endLineIndex; lineIndex++) { - const text = textModel.getLineContent(lineIndex + 1); - const lineStartState = this.getBeginState(lineIndex); - - const r = safeTokenize(languageIdCodec, languageId, this.tokenizationSupport, text, true, lineStartState!); - builder.add(lineIndex + 1, r.tokens); - this.setEndState(linesLength, lineIndex, r.endState); - lineIndex = this.invalidLineStartIndex - 1; // -1 because the outer loop increments it + const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, text, true, lineStartState!); + builder.add(nextLineNumber, r.tokens); + this!.store.setEndState(nextLineNumber, r.endState as TState); } } - isTokenizationComplete(textModel: ITextModel): boolean { - return this.invalidLineStartIndex >= textModel.getLineCount(); - } -} - -export class TextModelTokenization extends Disposable { - - private _tokenizationStateStore: TokenizationStateStore | null = null; - private _defaultBackgroundTokenizer: DefaultBackgroundTokenizer | null = null; - - private readonly backgroundTokenizer = this._register(new MutableDisposable()); - - constructor( - private readonly _textModel: TextModel, - private readonly _tokenizationPart: TokenizationTextModelPart, - private readonly _languageIdCodec: ILanguageIdCodec - ) { - super(); - - this._register(TokenizationRegistry.onDidChange((e) => { - const languageId = this._textModel.getLanguageId(); - if (e.changedLanguages.indexOf(languageId) === -1) { - return; - } - - this._resetTokenizationState(); - this._tokenizationPart.clearTokens(); - })); - - this._resetTokenizationState(); - } - - public handleDidChangeContent(e: IModelContentChangedEvent): void { - if (e.isFlush) { - this._resetTokenizationState(); - return; - } - if (this._tokenizationStateStore) { - for (let i = 0, len = e.changes.length; i < len; i++) { - const change = e.changes[i]; - const [eolCount] = countEOL(change.text); - this._tokenizationStateStore.applyEdits(change.range, eolCount); - } - } - - this._defaultBackgroundTokenizer?.handleChanges(); - } - - public handleDidChangeAttached(): void { - this._defaultBackgroundTokenizer?.handleChanges(); - } - - public handleDidChangeLanguage(e: IModelLanguageChangedEvent): void { - this._resetTokenizationState(); - this._tokenizationPart.clearTokens(); - } - - private _resetTokenizationState(): void { - const [tokenizationSupport, initialState] = initializeTokenization(this._textModel, this._tokenizationPart); - if (tokenizationSupport && initialState) { - this._tokenizationStateStore = new TokenizationStateStore(tokenizationSupport, initialState); - } else { - this._tokenizationStateStore = null; - } - - this.backgroundTokenizer.clear(); - - this._defaultBackgroundTokenizer = null; - if (this._tokenizationStateStore) { - const b: IBackgroundTokenizationStore = { - setTokens: (tokens) => { - this._tokenizationPart.setTokens(tokens); - }, - backgroundTokenizationFinished: () => { - this._tokenizationPart.handleBackgroundTokenizationFinished(); - }, - setEndState: (lineNumber, state) => { - if (!state) { - throw new BugIndicatingError(); - } - const invalidLineStartIndex = this._tokenizationStateStore?.invalidLineStartIndex; - if (invalidLineStartIndex !== undefined && lineNumber - 1 >= invalidLineStartIndex) { - // Don't accept states for definitely valid states - this._tokenizationStateStore?.setEndState(this._textModel.getLineCount(), lineNumber - 1, state); - } - }, - }; - - if (tokenizationSupport && tokenizationSupport.createBackgroundTokenizer) { - this.backgroundTokenizer.value = tokenizationSupport.createBackgroundTokenizer(this._textModel, b); - } - if (!this.backgroundTokenizer.value) { - this.backgroundTokenizer.value = this._defaultBackgroundTokenizer = - new DefaultBackgroundTokenizer( - this._textModel, - this._tokenizationStateStore, - b, - this._languageIdCodec - ); - this._defaultBackgroundTokenizer.handleChanges(); - } - } - } - - public tokenizeViewport(startLineNumber: number, endLineNumber: number): void { - const builder = new ContiguousMultilineTokensBuilder(); - this._heuristicallyTokenizeViewport(builder, startLineNumber, endLineNumber); - this._tokenizationPart.setTokens(builder.finalize()); - this._defaultBackgroundTokenizer?.checkFinished(); - } - - public reset(): void { - this._resetTokenizationState(); - this._tokenizationPart.clearTokens(); - } - - public forceTokenization(lineNumber: number): void { - const builder = new ContiguousMultilineTokensBuilder(); - this._tokenizationStateStore?.updateTokensUntilLine(this._textModel, this._languageIdCodec, builder, lineNumber); - this._tokenizationPart.setTokens(builder.finalize()); - this._defaultBackgroundTokenizer?.checkFinished(); - } - + /** assumes state is up to date */ public getTokenTypeIfInsertingCharacter(position: Position, character: string): StandardTokenType { - if (!this._tokenizationStateStore) { - return StandardTokenType.Other; - } - - this.forceTokenization(position.lineNumber); - const lineStartState = this._tokenizationStateStore.getBeginState(position.lineNumber - 1); + // TODO@hediet: use tokenizeLineWithEdit + const lineStartState = this.getStartState(position.lineNumber); if (!lineStartState) { return StandardTokenType.Other; } @@ -320,7 +90,7 @@ export class TextModelTokenization extends Disposable { + lineContent.substring(position.column - 1) ); - const r = safeTokenize(this._languageIdCodec, languageId, this._tokenizationStateStore.tokenizationSupport, text, true, lineStartState); + const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, text, true, lineStartState); const lineTokens = new LineTokens(r.tokens, text, this._languageIdCodec); if (lineTokens.getCount() === 0) { return StandardTokenType.Other; @@ -330,16 +100,12 @@ export class TextModelTokenization extends Disposable { return lineTokens.getStandardTokenType(tokenIndex); } + /** assumes state is up to date */ public tokenizeLineWithEdit(position: Position, length: number, newText: string): LineTokens | null { const lineNumber = position.lineNumber; const column = position.column; - if (!this._tokenizationStateStore) { - return null; - } - - this.forceTokenization(lineNumber); - const lineStartState = this._tokenizationStateStore.getBeginState(lineNumber - 1); + const lineStartState = this.getStartState(lineNumber); if (!lineStartState) { return null; } @@ -352,7 +118,7 @@ export class TextModelTokenization extends Disposable { const result = safeTokenize( this._languageIdCodec, languageId, - this._tokenizationStateStore.tokenizationSupport, + this.tokenizationSupport, newLineContent, true, lineStartState @@ -363,20 +129,12 @@ export class TextModelTokenization extends Disposable { } public isCheapToTokenize(lineNumber: number): boolean { - if (!this._tokenizationStateStore) { - return true; - } - - const firstInvalidLineNumber = this._tokenizationStateStore.invalidLineStartIndex + 1; - if (lineNumber > firstInvalidLineNumber) { - return false; - } - + const firstInvalidLineNumber = this.store.getFirstInvalidEndStateLineNumberOrMax(); if (lineNumber < firstInvalidLineNumber) { return true; } - - if (this._textModel.getLineLength(lineNumber) < Constants.CHEAP_TOKENIZATION_LENGTH_LIMIT) { + if (lineNumber === firstInvalidLineNumber + && this._textModel.getLineLength(lineNumber) < Constants.CHEAP_TOKENIZATION_LENGTH_LIMIT) { return true; } @@ -386,20 +144,16 @@ export class TextModelTokenization extends Disposable { /** * The result is not cached. */ - private _heuristicallyTokenizeViewport(builder: ContiguousMultilineTokensBuilder, startLineNumber: number, endLineNumber: number): void { - if (!this._tokenizationStateStore) { + public tokenizeHeuristically(builder: ContiguousMultilineTokensBuilder, startLineNumber: number, endLineNumber: number): { heuristicTokens: boolean } { + if (endLineNumber <= this.store.getFirstInvalidEndStateLineNumberOrMax()) { // nothing to do - return; - } - if (endLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) { - // nothing to do - return; + return { heuristicTokens: false }; } - if (startLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) { + if (startLineNumber <= this.store.getFirstInvalidEndStateLineNumberOrMax()) { // tokenization has reached the viewport start... - this._tokenizationStateStore.updateTokensUntilLine(this._textModel, this._languageIdCodec, builder, endLineNumber); - return; + this.updateTokensUntilLine(builder, endLineNumber); + return { heuristicTokens: false }; } let state = this.guessStartState(startLineNumber); @@ -407,13 +161,12 @@ export class TextModelTokenization extends Disposable { for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) { const text = this._textModel.getLineContent(lineNumber); - const r = safeTokenize(this._languageIdCodec, languageId, this._tokenizationStateStore.tokenizationSupport, text, true, state); + const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, text, true, state); builder.add(lineNumber, r.tokens); state = r.endState; } - // We overrode the tokens. Because old states might get reused (thus stopping invalidation), - // we have to explicitly request the tokens for this range again. - this.backgroundTokenizer.value?.requestTokens(startLineNumber, endLineNumber + 1); + + return { heuristicTokens: true }; } private guessStartState(lineNumber: number): IState { @@ -429,7 +182,7 @@ export class TextModelTokenization extends Disposable { if (newNonWhitespaceIndex < nonWhitespaceColumn) { likelyRelevantLines.push(this._textModel.getLineContent(i)); nonWhitespaceColumn = newNonWhitespaceIndex; - initialState = this._tokenizationStateStore!.getBeginState(i - 1); + initialState = this.getStartState(i); if (initialState) { break; } @@ -437,38 +190,197 @@ export class TextModelTokenization extends Disposable { } if (!initialState) { - initialState = this._tokenizationStateStore!.initialState; + initialState = this.tokenizationSupport.getInitialState(); } likelyRelevantLines.reverse(); const languageId = this._textModel.getLanguageId(); let state = initialState; for (const line of likelyRelevantLines) { - const r = safeTokenize(this._languageIdCodec, languageId, this._tokenizationStateStore!.tokenizationSupport, line, false, state); + const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, line, false, state); state = r.endState; } return state; } } -function initializeTokenization(textModel: TextModel, tokenizationPart: TokenizationTextModelPart): [ITokenizationSupport, IState] | [null, null] { - if (textModel.isTooLargeForTokenization()) { - return [null, null]; +export class TrackingTokenizationStateStore { + private readonly tokenizationStateStore = new TokenizationStateStore(); + private readonly _invalidEndStatesLineNumbers = new RangePriorityQueueImpl(); + + constructor(private lineCount: number) { + this._invalidEndStatesLineNumbers.addRange(new OffsetRange(1, lineCount + 1)); } - const tokenizationSupport = TokenizationRegistry.get(tokenizationPart.getLanguageId()); - if (!tokenizationSupport) { - return [null, null]; + + public getEndState(lineNumber: number): TState | null { + return this.tokenizationStateStore.getEndState(lineNumber); } - let initialState: IState; - try { - initialState = tokenizationSupport.getInitialState(); - } catch (e) { - onUnexpectedError(e); - return [null, null]; + + public setEndState(lineNumber: number, state: TState): boolean { + while (true) { + const min = this._invalidEndStatesLineNumbers.min; + if (min !== null && min <= lineNumber) { + this._invalidEndStatesLineNumbers.removeMin(); + } else { + break; + } + } + + const r = this.tokenizationStateStore.setEndState(lineNumber, state); + if (r && lineNumber < this.lineCount) { + // because the state changed, we cannot trust the next state anymore and have to invalidate it. + this._invalidEndStatesLineNumbers.addRange(new OffsetRange(lineNumber + 1, lineNumber + 2)); + } + + return r; + } + + public acceptChange(range: LineRange, newLineCount: number): void { + this.lineCount += newLineCount - range.length; + this.tokenizationStateStore.acceptChange(range, newLineCount); + this._invalidEndStatesLineNumbers.addRangeAndResize(new OffsetRange(range.startLineNumber, range.endLineNumberExclusive), newLineCount); + } + + public acceptChanges(changes: IModelContentChange[]) { + for (const c of changes) { + const [eolCount] = countEOL(c.text); + this.acceptChange(new LineRange(c.range.startLineNumber, c.range.endLineNumber + 1), eolCount + 1); + } + } + + public invalidateEndStateRange(range: LineRange): void { + this._invalidEndStatesLineNumbers.addRange(new OffsetRange(range.startLineNumber, range.endLineNumberExclusive)); + } + + public getFirstInvalidEndStateLineNumber(): number | null { + return this._invalidEndStatesLineNumbers.min; + } + + public getFirstInvalidEndStateLineNumberOrMax(): number { + return this._invalidEndStatesLineNumbers.min || Number.MAX_SAFE_INTEGER; + } + + public isTokenizationComplete(): boolean { + return this._invalidEndStatesLineNumbers.min === null; } - return [tokenizationSupport, initialState]; } +export class TokenizationStateStore { + private readonly _lineEndStates = new FixedArray(null); + + public getEndState(lineNumber: number): TState | null { + return this._lineEndStates.get(lineNumber); + } + + public setEndState(lineNumber: number, state: TState): boolean { + const oldState = this._lineEndStates.get(lineNumber); + if (oldState && oldState.equals(state)) { + return false; + } + + this._lineEndStates.set(lineNumber, state); + return true; + } + + public acceptChange(range: LineRange, newLineCount: number): void { + let length = range.length; + if (newLineCount > 0 && length > 0) { + // Keep the last state, even though it is unrelated. + // But if the new state happens to agree with this last state, then we know we can stop tokenizing. + length--; + newLineCount--; + } + + this._lineEndStates.replace(range.startLineNumber, length, newLineCount); + } + + public acceptChanges(changes: IModelContentChange[]) { + for (const c of changes) { + const [eolCount] = countEOL(c.text); + this.acceptChange(new LineRange(c.range.startLineNumber, c.range.endLineNumber + 1), eolCount + 1); + } + } +} + +interface RangePriorityQueue { + get min(): number | null; + removeMin(): number | null; + + addRange(range: OffsetRange): void; + + addRangeAndResize(range: OffsetRange, newLength: number): void; +} + +export class RangePriorityQueueImpl implements RangePriorityQueue { + private readonly _ranges: OffsetRange[] = []; + + public getRanges(): OffsetRange[] { + return this._ranges; + } + + public get min(): number | null { + if (this._ranges.length === 0) { + return null; + } + return this._ranges[0].start; + } + + public removeMin(): number | null { + if (this._ranges.length === 0) { + return null; + } + const range = this._ranges[0]; + if (range.start + 1 === range.endExclusive) { + this._ranges.shift(); + } else { + this._ranges[0] = new OffsetRange(range.start + 1, range.endExclusive); + } + return range.start; + } + + public addRange(range: OffsetRange): void { + OffsetRange.addRange(range, this._ranges); + } + + public addRangeAndResize(range: OffsetRange, newLength: number): void { + let idxFirstMightBeIntersecting = 0; + while (!(idxFirstMightBeIntersecting >= this._ranges.length || range.start <= this._ranges[idxFirstMightBeIntersecting].endExclusive)) { + idxFirstMightBeIntersecting++; + } + let idxFirstIsAfter = idxFirstMightBeIntersecting; + while (!(idxFirstIsAfter >= this._ranges.length || range.endExclusive < this._ranges[idxFirstIsAfter].start)) { + idxFirstIsAfter++; + } + const delta = newLength - range.length; + + for (let i = idxFirstIsAfter; i < this._ranges.length; i++) { + this._ranges[i] = this._ranges[i].delta(delta); + } + + if (idxFirstMightBeIntersecting === idxFirstIsAfter) { + const newRange = new OffsetRange(range.start, range.start + newLength); + if (!newRange.isEmpty) { + this._ranges.splice(idxFirstMightBeIntersecting, 0, newRange); + } + } else { + const start = Math.min(range.start, this._ranges[idxFirstMightBeIntersecting].start); + const endEx = Math.max(range.endExclusive, this._ranges[idxFirstIsAfter - 1].endExclusive); + + const newRange = new OffsetRange(start, endEx + delta); + if (!newRange.isEmpty) { + this._ranges.splice(idxFirstMightBeIntersecting, idxFirstIsAfter - idxFirstMightBeIntersecting, newRange); + } else { + this._ranges.splice(idxFirstMightBeIntersecting, idxFirstIsAfter - idxFirstMightBeIntersecting); + } + } + } + + toString() { + return this._ranges.map(r => r.toString()).join(' + '); + } +} + + function safeTokenize(languageIdCodec: ILanguageIdCodec, languageId: string, tokenizationSupport: ITokenizationSupport | null, text: string, hasEOL: boolean, state: IState): EncodedTokenizationResult { let r: EncodedTokenizationResult | null = null; @@ -488,14 +400,12 @@ function safeTokenize(languageIdCodec: ILanguageIdCodec, languageId: string, tok return r; } -class DefaultBackgroundTokenizer implements IBackgroundTokenizer { +export class DefaultBackgroundTokenizer implements IBackgroundTokenizer { private _isDisposed = false; constructor( - private readonly _textModel: ITextModel, - private readonly _stateStore: TokenizationStateStore, + private readonly _tokenizerWithStateStore: TokenizerWithStateStoreAndTextModel, private readonly _backgroundTokenStore: IBackgroundTokenizationStore, - private readonly _languageIdCodec: ILanguageIdCodec, ) { } @@ -509,7 +419,7 @@ class DefaultBackgroundTokenizer implements IBackgroundTokenizer { private _isScheduled = false; private _beginBackgroundTokenization(): void { - if (this._isScheduled || !this._textModel.isAttachedToEditor() || !this._hasLinesToTokenize()) { + if (this._isScheduled || !this._tokenizerWithStateStore._textModel.isAttachedToEditor() || !this._hasLinesToTokenize()) { return; } @@ -530,7 +440,7 @@ class DefaultBackgroundTokenizer implements IBackgroundTokenizer { const endTime = Date.now() + deadline.timeRemaining(); const execute = () => { - if (this._isDisposed || !this._textModel.isAttachedToEditor() || !this._hasLinesToTokenize()) { + if (this._isDisposed || !this._tokenizerWithStateStore._textModel.isAttachedToEditor() || !this._hasLinesToTokenize()) { // disposed in the meantime or detached or finished return; } @@ -553,7 +463,7 @@ class DefaultBackgroundTokenizer implements IBackgroundTokenizer { * Tokenize for at least 1ms. */ private _backgroundTokenizeForAtLeast1ms(): void { - const lineCount = this._textModel.getLineCount(); + const lineCount = this._tokenizerWithStateStore._textModel.getLineCount(); const builder = new ContiguousMultilineTokensBuilder(); const sw = StopWatch.create(false); @@ -577,18 +487,18 @@ class DefaultBackgroundTokenizer implements IBackgroundTokenizer { } private _hasLinesToTokenize(): boolean { - if (!this._stateStore) { + if (!this._tokenizerWithStateStore) { return false; } - return this._stateStore.invalidLineStartIndex < this._textModel.getLineCount(); + return !this._tokenizerWithStateStore.store.isTokenizationComplete(); } private _tokenizeOneInvalidLine(builder: ContiguousMultilineTokensBuilder): number { - if (!this._stateStore || !this._hasLinesToTokenize()) { - return this._textModel.getLineCount() + 1; + if (!this._tokenizerWithStateStore || !this._hasLinesToTokenize()) { + return this._tokenizerWithStateStore._textModel.getLineCount() + 1; } - const lineNumber = this._stateStore.invalidLineStartIndex + 1; - this._stateStore.updateTokensUntilLine(this._textModel, this._languageIdCodec, builder, lineNumber); + const lineNumber = this._tokenizerWithStateStore.store.getFirstInvalidEndStateLineNumber()!; + this._tokenizerWithStateStore.updateTokensUntilLine(builder, lineNumber); return lineNumber; } @@ -596,14 +506,12 @@ class DefaultBackgroundTokenizer implements IBackgroundTokenizer { if (this._isDisposed) { return; } - if (this._stateStore.isTokenizationComplete(this._textModel)) { + if (this._tokenizerWithStateStore.store.isTokenizationComplete()) { this._backgroundTokenStore.backgroundTokenizationFinished(); } } - requestTokens(startLineNumber: number, endLineNumberExclusive: number): void { - for (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) { - this._stateStore.markMustBeTokenized(lineNumber - 1); - } + public requestTokens(startLineNumber: number, endLineNumberExclusive: number): void { + this._tokenizerWithStateStore.store.invalidateEndStateRange(new LineRange(startLineNumber, endLineNumberExclusive)); } } diff --git a/src/vs/editor/common/model/tokenizationTextModelPart.ts b/src/vs/editor/common/model/tokenizationTextModelPart.ts index 603c0214087..e077e75afe1 100644 --- a/src/vs/editor/common/model/tokenizationTextModelPart.ts +++ b/src/vs/editor/common/model/tokenizationTextModelPart.ts @@ -3,27 +3,38 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; +import { equals } from 'vs/base/common/arrays'; +import { RunOnceScheduler } from 'vs/base/common/async'; import { CharCode } from 'vs/base/common/charCode'; +import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; +import { Emitter, Event } from 'vs/base/common/event'; +import { Disposable, DisposableMap, MutableDisposable } from 'vs/base/common/lifecycle'; +import { countEOL } from 'vs/editor/common/core/eolCounter'; +import { LineRange } from 'vs/editor/common/core/lineRange'; import { IPosition, Position } from 'vs/editor/common/core/position'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { getWordAtText, IWordAtPosition } from 'vs/editor/common/core/wordHelper'; +import { Range } from 'vs/editor/common/core/range'; +import { IWordAtPosition, getWordAtText } from 'vs/editor/common/core/wordHelper'; import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; import { ILanguageService } from 'vs/editor/common/languages/language'; import { ILanguageConfigurationService, ResolvedLanguageConfiguration } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { TextModel } from 'vs/editor/common/model/textModel'; +import { IAttachedView } from 'vs/editor/common/model'; +import { BracketPairsTextModelPart } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl'; +import { AttachedViews, IAttachedViewState, TextModel } from 'vs/editor/common/model/textModel'; import { TextModelPart } from 'vs/editor/common/model/textModelPart'; -import { TextModelTokenization } from 'vs/editor/common/model/textModelTokens'; +import { DefaultBackgroundTokenizer, TokenizerWithStateStoreAndTextModel, TrackingTokenizationStateStore } from 'vs/editor/common/model/textModelTokens'; import { IModelContentChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; +import { BackgroundTokenizationState, ITokenizationTextModelPart } from 'vs/editor/common/tokenizationTextModelPart'; import { ContiguousMultilineTokens } from 'vs/editor/common/tokens/contiguousMultilineTokens'; +import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; import { ContiguousTokensStore } from 'vs/editor/common/tokens/contiguousTokensStore'; import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; import { SparseTokensStore } from 'vs/editor/common/tokens/sparseTokensStore'; -import { BracketPairsTextModelPart } from 'vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl'; -import { BackgroundTokenizationState, ITokenizationTextModelPart } from 'vs/editor/common/tokenizationTextModelPart'; export class TokenizationTextModelPart extends TextModelPart implements ITokenizationTextModelPart { + private readonly _semanticTokens: SparseTokensStore = new SparseTokensStore(this._languageService.languageIdCodec); + private readonly _onDidChangeLanguage: Emitter = this._register(new Emitter()); public readonly onDidChangeLanguage: Event = this._onDidChangeLanguage.event; @@ -33,181 +44,130 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz private readonly _onDidChangeTokens: Emitter = this._register(new Emitter()); public readonly onDidChangeTokens: Event = this._onDidChangeTokens.event; - private readonly _tokens: ContiguousTokensStore; - private readonly _semanticTokens: SparseTokensStore; - private readonly _tokenization: TextModelTokenization; + private readonly grammarTokens = this._register(new GrammarTokens(this._languageService.languageIdCodec, this._textModel, () => this._languageId, this._attachedViews)); constructor( private readonly _languageService: ILanguageService, private readonly _languageConfigurationService: ILanguageConfigurationService, private readonly _textModel: TextModel, - private readonly bracketPairsTextModelPart: BracketPairsTextModelPart, + private readonly _bracketPairsTextModelPart: BracketPairsTextModelPart, private _languageId: string, + private readonly _attachedViews: AttachedViews, ) { super(); - this._tokens = new ContiguousTokensStore( - this._languageService.languageIdCodec - ); - this._semanticTokens = new SparseTokensStore( - this._languageService.languageIdCodec - ); - this._tokenization = this._register(new TextModelTokenization( - _textModel, - this, - this._languageService.languageIdCodec - )); - - this._register(this._languageConfigurationService.onDidChange( - e => { - if (e.affects(this._languageId)) { - this._onDidChangeLanguageConfiguration.fire({}); - } + this._register(this._languageConfigurationService.onDidChange(e => { + if (e.affects(this._languageId)) { + this._onDidChangeLanguageConfiguration.fire({}); } - )); + })); + + this._register(this.grammarTokens.onDidChangeTokens(e => { + this._emitModelTokensChangedEvent(e); + })); + + this._register(this.grammarTokens.onDidChangeBackgroundTokenizationState(e => { + this._bracketPairsTextModelPart.handleDidChangeBackgroundTokenizationState(); + })); } _hasListeners(): boolean { - return ( - this._onDidChangeLanguage.hasListeners() + return (this._onDidChangeLanguage.hasListeners() || this._onDidChangeLanguageConfiguration.hasListeners() - || this._onDidChangeTokens.hasListeners() - ); + || this._onDidChangeTokens.hasListeners()); } - public acceptEdit( - range: IRange, - text: string, - eolCount: number, - firstLineLength: number, - lastLineLength: number - ): void { - this._tokens.acceptEdit(range, eolCount, firstLineLength); - this._semanticTokens.acceptEdit( - range, - eolCount, - firstLineLength, - lastLineLength, - text.length > 0 ? text.charCodeAt(0) : CharCode.Null - ); + public handleDidChangeContent(e: IModelContentChangedEvent): void { + if (e.isFlush) { + this._semanticTokens.flush(); + } else if (!e.isEolChange) { // We don't have to do anything on an EOL change + for (const c of e.changes) { + const [eolCount, firstLineLength, lastLineLength] = countEOL(c.text); + + this._semanticTokens.acceptEdit( + c.range, + eolCount, + firstLineLength, + lastLineLength, + c.text.length > 0 ? c.text.charCodeAt(0) : CharCode.Null + ); + } + } + + this.grammarTokens.handleDidChangeContent(e); } public handleDidChangeAttached(): void { - this._tokenization.handleDidChangeAttached(); + this.grammarTokens.handleDidChangeAttached(); } - public flush(): void { - this._tokens.flush(); - this._semanticTokens.flush(); + /** + * Includes grammar and semantic tokens. + */ + public getLineTokens(lineNumber: number): LineTokens { + this.validateLineNumber(lineNumber); + const syntacticTokens = this.grammarTokens.getLineTokens(lineNumber); + return this._semanticTokens.addSparseTokens(lineNumber, syntacticTokens); } - // TODO@hediet TODO@alexdima what is the difference between this and acceptEdit? - public handleDidChangeContent(change: IModelContentChangedEvent): void { - this._tokenization.handleDidChangeContent(change); + private _emitModelTokensChangedEvent(e: IModelTokensChangedEvent): void { + if (!this._textModel._isDisposing()) { + this._bracketPairsTextModelPart.handleDidChangeTokens(e); + this._onDidChangeTokens.fire(e); + } } - private _backgroundTokenizationState = BackgroundTokenizationState.InProgress; - public get backgroundTokenizationState(): BackgroundTokenizationState { - return this._backgroundTokenizationState; - } + // #region Grammar Tokens - public setLineTokens( - lineNumber: number, - tokens: Uint32Array | ArrayBuffer | null - ): void { + private validateLineNumber(lineNumber: number): void { if (lineNumber < 1 || lineNumber > this._textModel.getLineCount()) { - throw new Error('Illegal value for lineNumber'); + throw new BugIndicatingError('Illegal value for lineNumber'); } - - this._tokens.setTokens( - this._languageId, - lineNumber - 1, - this._textModel.getLineLength(lineNumber), - tokens, - false - ); - } - - public handleBackgroundTokenizationFinished(): void { - if (this._backgroundTokenizationState === BackgroundTokenizationState.Completed) { - // We already did a full tokenization and don't go back to progressing. - return; - } - const newState = BackgroundTokenizationState.Completed; - this._backgroundTokenizationState = newState; - this.bracketPairsTextModelPart.handleDidChangeBackgroundTokenizationState(); } public get hasTokens(): boolean { - return this._tokens.hasTokens; + return this.grammarTokens.hasTokens; } - public setTokens(tokens: ContiguousMultilineTokens[]): void { - if (tokens.length === 0) { - return; - } - - const ranges: { fromLineNumber: number; toLineNumber: number }[] = []; - - for (let i = 0, len = tokens.length; i < len; i++) { - const element = tokens[i]; - let minChangedLineNumber = 0; - let maxChangedLineNumber = 0; - let hasChange = false; - for ( - let lineNumber = element.startLineNumber; - lineNumber <= element.endLineNumber; - lineNumber++ - ) { - if (hasChange) { - this._tokens.setTokens( - this._languageId, - lineNumber - 1, - this._textModel.getLineLength(lineNumber), - element.getLineTokens(lineNumber), - false - ); - maxChangedLineNumber = lineNumber; - } else { - const lineHasChange = this._tokens.setTokens( - this._languageId, - lineNumber - 1, - this._textModel.getLineLength(lineNumber), - element.getLineTokens(lineNumber), - true - ); - if (lineHasChange) { - hasChange = true; - minChangedLineNumber = lineNumber; - maxChangedLineNumber = lineNumber; - } - } - } - if (hasChange) { - ranges.push({ - fromLineNumber: minChangedLineNumber, - toLineNumber: maxChangedLineNumber, - }); - } - } - - if (ranges.length > 0) { - this._emitModelTokensChangedEvent({ - tokenizationSupportChanged: false, - semanticTokensApplied: false, - ranges: ranges, - }); - } + public resetTokenization() { + this.grammarTokens.resetTokenization(); } - public setSemanticTokens( - tokens: SparseMultilineTokens[] | null, - isComplete: boolean - ): void { + public get backgroundTokenizationState() { + return this.grammarTokens.backgroundTokenizationState; + } + + public forceTokenization(lineNumber: number): void { + this.validateLineNumber(lineNumber); + this.grammarTokens.forceTokenization(lineNumber); + } + + public isCheapToTokenize(lineNumber: number): boolean { + this.validateLineNumber(lineNumber); + return this.grammarTokens.isCheapToTokenize(lineNumber); + } + + public tokenizeIfCheap(lineNumber: number): void { + this.validateLineNumber(lineNumber); + this.grammarTokens.tokenizeIfCheap(lineNumber); + } + + public getTokenTypeIfInsertingCharacter(lineNumber: number, column: number, character: string): StandardTokenType { + return this.grammarTokens.getTokenTypeIfInsertingCharacter(lineNumber, column, character); + } + + public tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null { + return this.grammarTokens.tokenizeLineWithEdit(position, length, newText); + } + + // #endregion + + // #region Semantic Tokens + + public setSemanticTokens(tokens: SparseMultilineTokens[] | null, isComplete: boolean): void { this._semanticTokens.set(tokens, isComplete); this._emitModelTokensChangedEvent({ - tokenizationSupportChanged: false, semanticTokensApplied: tokens !== null, ranges: [{ fromLineNumber: 1, toLineNumber: this._textModel.getLineCount() }], }); @@ -221,10 +181,7 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz return !this._semanticTokens.isEmpty(); } - public setPartialSemanticTokens( - range: Range, - tokens: SparseMultilineTokens[] - ): void { + public setPartialSemanticTokens(range: Range, tokens: SparseMultilineTokens[]): void { if (this.hasCompleteSemanticTokens()) { return; } @@ -233,7 +190,6 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz ); this._emitModelTokensChangedEvent({ - tokenizationSupportChanged: false, semanticTokensApplied: true, ranges: [ { @@ -244,138 +200,23 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz }); } - public tokenizeViewport( - startLineNumber: number, - endLineNumber: number - ): void { - startLineNumber = Math.max(1, startLineNumber); - endLineNumber = Math.min(this._textModel.getLineCount(), endLineNumber); - this._tokenization.tokenizeViewport(startLineNumber, endLineNumber); - } + // #endregion - public clearTokens(): void { - this._tokens.flush(); - this._emitModelTokensChangedEvent({ - tokenizationSupportChanged: true, - semanticTokensApplied: false, - ranges: [ - { - fromLineNumber: 1, - toLineNumber: this._textModel.getLineCount(), - }, - ], - }); - } - - public clearSemanticTokens(): void { - this._semanticTokens.flush(); - - this._emitModelTokensChangedEvent({ - tokenizationSupportChanged: false, - semanticTokensApplied: false, - ranges: [{ fromLineNumber: 1, toLineNumber: this._textModel.getLineCount() }], - }); - } - - private _emitModelTokensChangedEvent(e: IModelTokensChangedEvent): void { - if (!this._textModel._isDisposing()) { - this.bracketPairsTextModelPart.handleDidChangeTokens(e); - this._onDidChangeTokens.fire(e); - } - } - - public resetTokenization(): void { - this._tokenization.reset(); - } - - public forceTokenization(lineNumber: number): void { - if (lineNumber < 1 || lineNumber > this._textModel.getLineCount()) { - throw new Error('Illegal value for lineNumber'); - } - - this._tokenization.forceTokenization(lineNumber); - } - - public isCheapToTokenize(lineNumber: number): boolean { - return this._tokenization.isCheapToTokenize(lineNumber); - } - - public tokenizeIfCheap(lineNumber: number): void { - if (this.isCheapToTokenize(lineNumber)) { - this.forceTokenization(lineNumber); - } - } - - public getLineTokens(lineNumber: number): LineTokens { - if (lineNumber < 1 || lineNumber > this._textModel.getLineCount()) { - throw new Error('Illegal value for lineNumber'); - } - - return this._getLineTokens(lineNumber); - } - - private _getLineTokens(lineNumber: number): LineTokens { - const lineText = this._textModel.getLineContent(lineNumber); - const syntacticTokens = this._tokens.getTokens( - this._languageId, - lineNumber - 1, - lineText - ); - return this._semanticTokens.addSparseTokens(lineNumber, syntacticTokens); - } - - public getTokenTypeIfInsertingCharacter( - lineNumber: number, - column: number, - character: string - ): StandardTokenType { - const position = this._textModel.validatePosition(new Position(lineNumber, column)); - return this._tokenization.getTokenTypeIfInsertingCharacter( - position, - character - ); - } - - public tokenizeLineWithEdit( - position: IPosition, - length: number, - newText: string - ): LineTokens | null { - const validatedPosition = this._textModel.validatePosition(position); - return this._tokenization.tokenizeLineWithEdit( - validatedPosition, - length, - newText - ); - } - - private getLanguageConfiguration( - languageId: string - ): ResolvedLanguageConfiguration { - return this._languageConfigurationService.getLanguageConfiguration( - languageId - ); - } - - // Having tokens allows implementing additional helper methods + // #region Utility Methods public getWordAtPosition(_position: IPosition): IWordAtPosition | null { this.assertNotDisposed(); + const position = this._textModel.validatePosition(_position); const lineContent = this._textModel.getLineContent(position.lineNumber); - const lineTokens = this._getLineTokens(position.lineNumber); + const lineTokens = this.getLineTokens(position.lineNumber); const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1); // (1). First try checking right biased word - const [rbStartOffset, rbEndOffset] = TokenizationTextModelPart._findLanguageBoundaries( - lineTokens, - tokenIndex - ); + const [rbStartOffset, rbEndOffset] = TokenizationTextModelPart._findLanguageBoundaries(lineTokens, tokenIndex); const rightBiasedWord = getWordAtText( position.column, - this.getLanguageConfiguration( - lineTokens.getLanguageId(tokenIndex) - ).getWordDefinition(), + this.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex)).getWordDefinition(), lineContent.substring(rbStartOffset, rbEndOffset), rbStartOffset ); @@ -397,9 +238,7 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz ); const leftBiasedWord = getWordAtText( position.column, - this.getLanguageConfiguration( - lineTokens.getLanguageId(tokenIndex - 1) - ).getWordDefinition(), + this.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex - 1)).getWordDefinition(), lineContent.substring(lbStartOffset, lbEndOffset), lbStartOffset ); @@ -416,19 +255,16 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz return null; } - private static _findLanguageBoundaries( - lineTokens: LineTokens, - tokenIndex: number - ): [number, number] { + private getLanguageConfiguration(languageId: string): ResolvedLanguageConfiguration { + return this._languageConfigurationService.getLanguageConfiguration(languageId); + } + + private static _findLanguageBoundaries(lineTokens: LineTokens, tokenIndex: number): [number, number] { const languageId = lineTokens.getLanguageId(tokenIndex); // go left until a different language is hit let startOffset = 0; - for ( - let i = tokenIndex; - i >= 0 && lineTokens.getLanguageId(i) === languageId; - i-- - ) { + for (let i = tokenIndex; i >= 0 && lineTokens.getLanguageId(i) === languageId; i--) { startOffset = lineTokens.getStartOffset(i); } @@ -448,22 +284,19 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz public getWordUntilPosition(position: IPosition): IWordAtPosition { const wordAtPosition = this.getWordAtPosition(position); if (!wordAtPosition) { - return { - word: '', - startColumn: position.column, - endColumn: position.column, - }; + return { word: '', startColumn: position.column, endColumn: position.column, }; } return { - word: wordAtPosition.word.substr( - 0, - position.column - wordAtPosition.startColumn - ), + word: wordAtPosition.word.substr(0, position.column - wordAtPosition.startColumn), startColumn: wordAtPosition.startColumn, endColumn: position.column, }; } + // #endregion + + // #region Language Id handling + public getLanguageId(): string { return this._languageId; } @@ -488,9 +321,341 @@ export class TokenizationTextModelPart extends TextModelPart implements ITokeniz this._languageId = languageId; - this.bracketPairsTextModelPart.handleDidChangeLanguage(e); - this._tokenization.handleDidChangeLanguage(e); + this._bracketPairsTextModelPart.handleDidChangeLanguage(e); + this.grammarTokens.resetTokenization(); this._onDidChangeLanguage.fire(e); this._onDidChangeLanguageConfiguration.fire({}); } + + // #endregion +} + +class GrammarTokens extends Disposable { + private _tokenizer: TokenizerWithStateStoreAndTextModel | null = null; + private _defaultBackgroundTokenizer: DefaultBackgroundTokenizer | null = null; + private readonly _backgroundTokenizer = this._register(new MutableDisposable()); + + private readonly _tokens = new ContiguousTokensStore(this._languageIdCodec); + private _debugBackgroundTokens: ContiguousTokensStore | undefined; + private _debugBackgroundStates: TrackingTokenizationStateStore | undefined; + + private readonly _debugBackgroundTokenizer = this._register(new MutableDisposable()); + + private _backgroundTokenizationState = BackgroundTokenizationState.InProgress; + public get backgroundTokenizationState(): BackgroundTokenizationState { + return this._backgroundTokenizationState; + } + + private readonly _onDidChangeBackgroundTokenizationState = this._register(new Emitter()); + /** @internal, should not be exposed by the text model! */ + public readonly onDidChangeBackgroundTokenizationState: Event = this._onDidChangeBackgroundTokenizationState.event; + + private readonly _onDidChangeTokens = this._register(new Emitter()); + /** @internal, should not be exposed by the text model! */ + public readonly onDidChangeTokens: Event = this._onDidChangeTokens.event; + + private readonly _attachedViewStates = this._register(new DisposableMap()); + + constructor( + private readonly _languageIdCodec: ILanguageIdCodec, + private readonly _textModel: TextModel, + private getLanguageId: () => string, + attachedViews: AttachedViews, + ) { + super(); + + this._register(TokenizationRegistry.onDidChange((e) => { + const languageId = this.getLanguageId(); + if (e.changedLanguages.indexOf(languageId) === -1) { + return; + } + this.resetTokenization(); + })); + + this.resetTokenization(); + + this._register(attachedViews.onDidChangeVisibleRanges(({ view, state }) => { + if (state) { + let existing = this._attachedViewStates.get(view); + if (!existing) { + existing = new AttachedViewHandler(() => this.refreshRanges(existing!.lineRanges)); + this._attachedViewStates.set(view, existing); + } + existing.handleStateChange(state); + } else { + this._attachedViewStates.deleteAndDispose(view); + } + })); + } + + public resetTokenization(fireTokenChangeEvent: boolean = true): void { + this._tokens.flush(); + this._debugBackgroundTokens?.flush(); + if (this._debugBackgroundStates) { + this._debugBackgroundStates = new TrackingTokenizationStateStore(this._textModel.getLineCount()); + } + if (fireTokenChangeEvent) { + this._onDidChangeTokens.fire({ + semanticTokensApplied: false, + ranges: [ + { + fromLineNumber: 1, + toLineNumber: this._textModel.getLineCount(), + }, + ], + }); + } + + const initializeTokenization = (): [ITokenizationSupport, IState] | [null, null] => { + if (this._textModel.isTooLargeForTokenization()) { + return [null, null]; + } + const tokenizationSupport = TokenizationRegistry.get(this.getLanguageId()); + if (!tokenizationSupport) { + return [null, null]; + } + let initialState: IState; + try { + initialState = tokenizationSupport.getInitialState(); + } catch (e) { + onUnexpectedError(e); + return [null, null]; + } + return [tokenizationSupport, initialState]; + }; + + const [tokenizationSupport, initialState] = initializeTokenization(); + if (tokenizationSupport && initialState) { + this._tokenizer = new TokenizerWithStateStoreAndTextModel(this._textModel.getLineCount(), tokenizationSupport, this._textModel, this._languageIdCodec); + } else { + this._tokenizer = null; + } + + this._backgroundTokenizer.clear(); + + this._defaultBackgroundTokenizer = null; + if (this._tokenizer) { + const b: IBackgroundTokenizationStore = { + setTokens: (tokens) => { + this.setTokens(tokens); + }, + backgroundTokenizationFinished: () => { + if (this._backgroundTokenizationState === BackgroundTokenizationState.Completed) { + // We already did a full tokenization and don't go back to progressing. + return; + } + const newState = BackgroundTokenizationState.Completed; + this._backgroundTokenizationState = newState; + this._onDidChangeBackgroundTokenizationState.fire(); + }, + setEndState: (lineNumber, state) => { + if (!state) { + throw new BugIndicatingError(); + } + const firstInvalidEndStateLineNumber = this._tokenizer?.store.getFirstInvalidEndStateLineNumber() ?? undefined; + if (firstInvalidEndStateLineNumber !== undefined && lineNumber >= firstInvalidEndStateLineNumber) { + // Don't accept states for definitely valid states + this._tokenizer?.store.setEndState(lineNumber, state); + } + }, + }; + + if (tokenizationSupport && tokenizationSupport.createBackgroundTokenizer && !tokenizationSupport.backgroundTokenizerShouldOnlyVerifyTokens) { + this._backgroundTokenizer.value = tokenizationSupport.createBackgroundTokenizer(this._textModel, b); + } + if (!this._backgroundTokenizer.value) { + this._backgroundTokenizer.value = this._defaultBackgroundTokenizer = + new DefaultBackgroundTokenizer(this._tokenizer, b); + this._defaultBackgroundTokenizer.handleChanges(); + } + + if (tokenizationSupport?.backgroundTokenizerShouldOnlyVerifyTokens && tokenizationSupport.createBackgroundTokenizer) { + this._debugBackgroundTokens = new ContiguousTokensStore(this._languageIdCodec); + this._debugBackgroundStates = new TrackingTokenizationStateStore(this._textModel.getLineCount()); + this._debugBackgroundTokenizer.clear(); + this._debugBackgroundTokenizer.value = tokenizationSupport.createBackgroundTokenizer(this._textModel, { + setTokens: (tokens) => { + this._debugBackgroundTokens?.setMultilineTokens(tokens, this._textModel); + }, + backgroundTokenizationFinished() { + // NO OP + }, + setEndState: (lineNumber, state) => { + this._debugBackgroundStates?.setEndState(lineNumber, state); + }, + }); + } else { + this._debugBackgroundTokens = undefined; + this._debugBackgroundStates = undefined; + this._debugBackgroundTokenizer.value = undefined; + } + } + + this.refreshAllVisibleLineTokens(); + } + + public handleDidChangeAttached() { + this._defaultBackgroundTokenizer?.handleChanges(); + } + + public handleDidChangeContent(e: IModelContentChangedEvent): void { + if (e.isFlush) { + // Don't fire the event, as the view might not have got the text change event yet + this.resetTokenization(false); + } else if (!e.isEolChange) { // We don't have to do anything on an EOL change + for (const c of e.changes) { + const [eolCount, firstLineLength] = countEOL(c.text); + + this._tokens.acceptEdit(c.range, eolCount, firstLineLength); + this._debugBackgroundTokens?.acceptEdit(c.range, eolCount, firstLineLength); + } + this._debugBackgroundStates?.acceptChanges(e.changes); + + if (this._tokenizer) { + this._tokenizer.store.acceptChanges(e.changes); + } + this._defaultBackgroundTokenizer?.handleChanges(); + } + } + + private setTokens(tokens: ContiguousMultilineTokens[]): { changes: { fromLineNumber: number; toLineNumber: number }[] } { + const { changes } = this._tokens.setMultilineTokens(tokens, this._textModel); + + if (changes.length > 0) { + this._onDidChangeTokens.fire({ semanticTokensApplied: false, ranges: changes, }); + } + + return { changes: changes }; + } + + private refreshAllVisibleLineTokens(): void { + const ranges = LineRange.joinMany([...this._attachedViewStates].map(([_, s]) => s.lineRanges)); + this.refreshRanges(ranges); + } + + private refreshRanges(ranges: readonly LineRange[]): void { + for (const range of ranges) { + this.refreshRange(range.startLineNumber, range.endLineNumberExclusive - 1); + } + } + + private refreshRange(startLineNumber: number, endLineNumber: number): void { + if (!this._tokenizer) { + return; + } + + startLineNumber = Math.max(1, Math.min(this._textModel.getLineCount(), startLineNumber)); + endLineNumber = Math.min(this._textModel.getLineCount(), endLineNumber); + + const builder = new ContiguousMultilineTokensBuilder(); + const { heuristicTokens } = this._tokenizer.tokenizeHeuristically(builder, startLineNumber, endLineNumber); + const changedTokens = this.setTokens(builder.finalize()); + + if (heuristicTokens) { + // We overrode tokens with heuristically computed ones. + // Because old states might get reused (thus stopping invalidation), + // we have to explicitly request the tokens for the changed ranges again. + for (const c of changedTokens.changes) { + this._backgroundTokenizer.value?.requestTokens(c.fromLineNumber, c.toLineNumber + 1); + } + } + + this._defaultBackgroundTokenizer?.checkFinished(); + } + + public forceTokenization(lineNumber: number): void { + const builder = new ContiguousMultilineTokensBuilder(); + this._tokenizer?.updateTokensUntilLine(builder, lineNumber); + this.setTokens(builder.finalize()); + this._defaultBackgroundTokenizer?.checkFinished(); + } + + public isCheapToTokenize(lineNumber: number): boolean { + if (!this._tokenizer) { + return true; + } + return this._tokenizer.isCheapToTokenize(lineNumber); + } + + public tokenizeIfCheap(lineNumber: number): void { + if (this.isCheapToTokenize(lineNumber)) { + this.forceTokenization(lineNumber); + } + } + + public getLineTokens(lineNumber: number): LineTokens { + const lineText = this._textModel.getLineContent(lineNumber); + const result = this._tokens.getTokens( + this._textModel.getLanguageId(), + lineNumber - 1, + lineText + ); + if (this._debugBackgroundTokens && this._debugBackgroundStates && this._tokenizer) { + if (this._debugBackgroundStates.getFirstInvalidEndStateLineNumberOrMax() > lineNumber && this._tokenizer.store.getFirstInvalidEndStateLineNumberOrMax() > lineNumber) { + const backgroundResult = this._debugBackgroundTokens.getTokens( + this._textModel.getLanguageId(), + lineNumber - 1, + lineText + ); + if (!result.equals(backgroundResult) && this._debugBackgroundTokenizer.value?.reportMismatchingTokens) { + this._debugBackgroundTokenizer.value.reportMismatchingTokens(lineNumber); + } + } + } + return result; + } + + public getTokenTypeIfInsertingCharacter(lineNumber: number, column: number, character: string): StandardTokenType { + if (!this._tokenizer) { + return StandardTokenType.Other; + } + + const position = this._textModel.validatePosition(new Position(lineNumber, column)); + this.forceTokenization(position.lineNumber); + return this._tokenizer.getTokenTypeIfInsertingCharacter(position, character); + } + + public tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null { + if (!this._tokenizer) { + return null; + } + + const validatedPosition = this._textModel.validatePosition(position); + this.forceTokenization(validatedPosition.lineNumber); + return this._tokenizer.tokenizeLineWithEdit(validatedPosition, length, newText); + } + + public get hasTokens(): boolean { + return this._tokens.hasTokens; + } +} + +class AttachedViewHandler extends Disposable { + private readonly runner = this._register(new RunOnceScheduler(() => this.update(), 50)); + + private _computedLineRanges: readonly LineRange[] = []; + private _lineRanges: readonly LineRange[] = []; + public get lineRanges(): readonly LineRange[] { return this._lineRanges; } + + constructor(private readonly _refreshTokens: () => void) { + super(); + } + + private update(): void { + if (equals(this._computedLineRanges, this._lineRanges)) { + return; + } + this._computedLineRanges = this._lineRanges; + this._refreshTokens(); + } + + public handleStateChange(state: IAttachedViewState): void { + this._lineRanges = state.visibleLineRanges; + if (state.stabilized) { + this.runner.cancel(); + this.update(); + } else { + this.runner.schedule(); + } + } } diff --git a/src/vs/editor/common/services/editorSimpleWorker.ts b/src/vs/editor/common/services/editorSimpleWorker.ts index 2d8062f2117..2f51814946b 100644 --- a/src/vs/editor/common/services/editorSimpleWorker.ts +++ b/src/vs/editor/common/services/editorSimpleWorker.ts @@ -12,19 +12,21 @@ import { IRange, Range } from 'vs/editor/common/core/range'; import { EndOfLineSequence, ITextModel } from 'vs/editor/common/model'; import { IMirrorTextModel, IModelChangedEvent, MirrorTextModel as BaseMirrorModel } from 'vs/editor/common/model/mirrorTextModel'; import { ensureValidWordDefinition, getWordAtText, IWordAtPosition } from 'vs/editor/common/core/wordHelper'; -import { IInplaceReplaceSupportResult, ILink, TextEdit } from 'vs/editor/common/languages'; +import { IColorInformation, IInplaceReplaceSupportResult, ILink, TextEdit } from 'vs/editor/common/languages'; import { ILinkComputerTarget, computeLinks } from 'vs/editor/common/languages/linkComputer'; import { BasicInplaceReplace } from 'vs/editor/common/languages/supports/inplaceReplaceSupport'; -import { DiffAlgorithmName, IDiffComputationResult, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; +import { DiffAlgorithmName, IDiffComputationResult, ILineChange, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker'; import { createMonacoBaseAPI } from 'vs/editor/common/services/editorBaseApi'; import { IEditorWorkerHost } from 'vs/editor/common/services/editorWorkerHost'; import { StopWatch } from 'vs/base/common/stopwatch'; import { UnicodeTextModelHighlighter, UnicodeHighlighterOptions } from 'vs/editor/common/services/unicodeTextModelHighlighter'; import { DiffComputer, IChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; -import { ILinesDiffComputer } from 'vs/editor/common/diff/linesDiffComputer'; +import { ILinesDiffComputer, ILinesDiffComputerOptions, LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; import { linesDiffComputers } from 'vs/editor/common/diff/linesDiffComputers'; import { createProxyObject, getAllMethodNames } from 'vs/base/common/objects'; import { IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider'; +import { BugIndicatingError } from 'vs/base/common/errors'; +import { IDocumentColorComputerTarget, computeDefaultDocumentColors } from 'vs/editor/common/languages/defaultDocumentColorsComputer'; export interface IMirrorModel extends IMirrorTextModel { readonly uri: URI; @@ -56,7 +58,7 @@ export interface IRawModelData { /** * @internal */ -export interface ICommonModel extends ILinkComputerTarget, IMirrorModel { +export interface ICommonModel extends ILinkComputerTarget, IDocumentColorComputerTarget, IMirrorModel { uri: URI; version: number; eol: string; @@ -72,6 +74,7 @@ export interface ICommonModel extends ILinkComputerTarget, IMirrorModel { getWordAtPosition(position: IPosition, wordDefinition: RegExp): Range | null; offsetAt(position: IPosition): number; positionAt(offset: number): IPosition; + findMatches(regex: RegExp): RegExpMatchArray[]; } /** @@ -106,6 +109,22 @@ class MirrorModel extends BaseMirrorModel implements ICommonModel { return this.getText(); } + public findMatches(regex: RegExp): RegExpMatchArray[] { + const matches = []; + for (let i = 0; i < this._lines.length; i++) { + const line = this._lines[i]; + const offsetToAdd = this.offsetAt(new Position(i + 1, 1)); + const iteratorOverMatches = line.matchAll(regex); + for (const match of iteratorOverMatches) { + if (match.index || match.index === 0) { + match.index = match.index + offsetToAdd; + } + matches.push(match); + } + } + return matches; + } + public getLinesContent(): string[] { return this._lines.slice(0); } @@ -394,7 +413,7 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable { } private static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, options: IDocumentDiffProviderOptions, algorithm: DiffAlgorithmName): IDiffComputationResult { - const diffAlgorithm: ILinesDiffComputer = algorithm === 'experimental' ? linesDiffComputers.experimental : linesDiffComputers.smart; + const diffAlgorithm: ILinesDiffComputer = algorithm === 'advanced' ? linesDiffComputers.getAdvanced() : linesDiffComputers.getLegacy(); const originalLines = originalTextModel.getLinesContent(); const modifiedLines = modifiedTextModel.getLinesContent(); @@ -403,10 +422,8 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable { const identical = (result.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel)); - return { - identical, - quitEarly: result.quitEarly, - changes: result.changes.map(m => ([m.originalRange.startLineNumber, m.originalRange.endLineNumberExclusive, m.modifiedRange.startLineNumber, m.modifiedRange.endLineNumberExclusive, m.innerChanges?.map(m => [ + function getLineChanges(changes: readonly LineRangeMapping[]): ILineChange[] { + return changes.map(m => ([m.originalRange.startLineNumber, m.originalRange.endLineNumberExclusive, m.modifiedRange.startLineNumber, m.modifiedRange.endLineNumberExclusive, m.innerChanges?.map(m => [ m.originalRange.startLineNumber, m.originalRange.startColumn, m.originalRange.endLineNumber, @@ -415,7 +432,20 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable { m.modifiedRange.startColumn, m.modifiedRange.endLineNumber, m.modifiedRange.endColumn, - ])])) + ])])); + } + + return { + identical, + quitEarly: result.hitTimeout, + changes: getLineChanges(result.changes), + moves: result.moves.map(m => ([ + m.lineRangeMapping.originalRange.startLineNumber, + m.lineRangeMapping.originalRange.endLineNumberExclusive, + m.lineRangeMapping.modifiedRange.startLineNumber, + m.lineRangeMapping.modifiedRange.endLineNumberExclusive, + getLineChanges(m.changes) + ])), }; } @@ -461,7 +491,7 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable { private static readonly _diffLimit = 100000; - public async computeMoreMinimalEdits(modelUrl: string, edits: TextEdit[]): Promise { + public async computeMoreMinimalEdits(modelUrl: string, edits: TextEdit[], pretty: boolean): Promise { const model = this._getModel(modelUrl); if (!model) { return edits; @@ -506,7 +536,7 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable { } // compute diff between original and edit.text - const changes = stringDiff(original, text, false); + const changes = stringDiff(original, text, pretty); const editOffset = model.offsetAt(Range.lift(range).getStartPosition()); for (const change of changes) { @@ -530,6 +560,104 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable { return result; } + public async computeHumanReadableDiff(modelUrl: string, edits: TextEdit[], options: ILinesDiffComputerOptions): Promise { + const model = this._getModel(modelUrl); + if (!model) { + return edits; + } + + const result: TextEdit[] = []; + let lastEol: EndOfLineSequence | undefined = undefined; + + edits = edits.slice(0).sort((a, b) => { + if (a.range && b.range) { + return Range.compareRangesUsingStarts(a.range, b.range); + } + // eol only changes should go to the end + const aRng = a.range ? 0 : 1; + const bRng = b.range ? 0 : 1; + return aRng - bRng; + }); + + for (let { range, text, eol } of edits) { + + if (typeof eol === 'number') { + lastEol = eol; + } + + if (Range.isEmpty(range) && !text) { + // empty change + continue; + } + + const original = model.getValueInRange(range); + text = text.replace(/\r\n|\n|\r/g, model.eol); + + if (original === text) { + // noop + continue; + } + + // make sure diff won't take too long + if (Math.max(text.length, original.length) > EditorSimpleWorker._diffLimit) { + result.push({ range, text }); + continue; + } + + // compute diff between original and edit.text + + const originalLines = original.split(/\r\n|\n|\r/); + const modifiedLines = text.split(/\r\n|\n|\r/); + + const diff = linesDiffComputers.getAdvanced().computeDiff(originalLines, modifiedLines, options); + + const start = Range.lift(range).getStartPosition(); + + function addPositions(pos1: Position, pos2: Position): Position { + return new Position(pos1.lineNumber + pos2.lineNumber - 1, pos2.lineNumber === 1 ? pos1.column + pos2.column - 1 : pos2.column); + } + + function getText(lines: string[], range: Range): string[] { + const result: string[] = []; + for (let i = range.startLineNumber; i <= range.endLineNumber; i++) { + const line = lines[i - 1]; + if (i === range.startLineNumber && i === range.endLineNumber) { + result.push(line.substring(range.startColumn - 1, range.endColumn - 1)); + } else if (i === range.startLineNumber) { + result.push(line.substring(range.startColumn - 1)); + } else if (i === range.endLineNumber) { + result.push(line.substring(0, range.endColumn - 1)); + } else { + result.push(line); + } + } + return result; + } + + for (const c of diff.changes) { + if (c.innerChanges) { + for (const x of c.innerChanges) { + result.push({ + range: Range.fromPositions( + addPositions(start, x.originalRange.getStartPosition()), + addPositions(start, x.originalRange.getEndPosition()) + ), + text: getText(modifiedLines, x.modifiedRange).join(model.eol) + }); + } + } else { + throw new BugIndicatingError('The experimental diff algorithm always produces inner changes'); + } + } + } + + if (typeof lastEol === 'number') { + result.push({ eol: lastEol, text: '', range: { startLineNumber: 0, startColumn: 0, endLineNumber: 0, endColumn: 0 } }); + } + + return result; + } + // ---- END minimal edits --------------------------------------------------------------- public async computeLinks(modelUrl: string): Promise { @@ -541,13 +669,23 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable { return computeLinks(model); } + // --- BEGIN default document colors ----------------------------------------------------------- + + public async computeDefaultDocumentColors(modelUrl: string): Promise { + const model = this._getModel(modelUrl); + if (!model) { + return null; + } + return computeDefaultDocumentColors(model); + } + // ---- BEGIN suggest -------------------------------------------------------------------------- private static readonly _suggestionsLimit = 10000; public async textualSuggest(modelUrls: string[], leadingWord: string | undefined, wordDef: string, wordDefFlags: string): Promise<{ words: string[]; duration: number } | null> { - const sw = new StopWatch(true); + const sw = new StopWatch(); const wordDefRegExp = new RegExp(wordDef, wordDefFlags); const seen = new Set(); diff --git a/src/vs/editor/common/services/editorWorker.ts b/src/vs/editor/common/services/editorWorker.ts index 8f5129b9751..9038e313a9c 100644 --- a/src/vs/editor/common/services/editorWorker.ts +++ b/src/vs/editor/common/services/editorWorker.ts @@ -14,7 +14,7 @@ import type { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleW export const IEditorWorkerService = createDecorator('editorWorkerService'); -export type DiffAlgorithmName = 'smart' | 'experimental'; +export type DiffAlgorithmName = 'legacy' | 'advanced'; export interface IEditorWorkerService { readonly _serviceBrand: undefined; @@ -28,7 +28,8 @@ export interface IEditorWorkerService { canComputeDirtyDiff(original: URI, modified: URI): boolean; computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise; - computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise; + computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined, pretty?: boolean): Promise; + computeHumanReadableDiff(resource: URI, edits: TextEdit[] | null | undefined): Promise; canComputeWordRanges(resource: URI): boolean; computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null>; @@ -41,6 +42,7 @@ export interface IDiffComputationResult { quitEarly: boolean; changes: ILineChange[]; identical: boolean; + moves: ITextMove[]; } export type ILineChange = [ @@ -63,6 +65,14 @@ export type ICharChange = [ modifiedEndColumn: number, ]; +export type ITextMove = [ + originalStartLine: number, + originalEndLine: number, + modifiedStartLine: number, + modifiedEndLine: number, + changes: ILineChange[], +]; + export interface IUnicodeHighlightsResult { ranges: IRange[]; hasMore: boolean; diff --git a/src/vs/editor/common/services/languageFeatureDebounce.ts b/src/vs/editor/common/services/languageFeatureDebounce.ts index 417a2d9dc08..e0d2cb832f3 100644 --- a/src/vs/editor/common/services/languageFeatureDebounce.ts +++ b/src/vs/editor/common/services/languageFeatureDebounce.ts @@ -8,6 +8,7 @@ import { LRUCache } from 'vs/base/common/map'; import { clamp, MovingAverage, SlidingWindowAverage } from 'vs/base/common/numbers'; import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; import { ITextModel } from 'vs/editor/common/model'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { ILogService } from 'vs/platform/log/common/log'; @@ -42,6 +43,21 @@ namespace IdentityHash { } } +class NullDebounceInformation implements IFeatureDebounceInformation { + + constructor(private readonly _default: number) { } + + get(_model: ITextModel): number { + return this._default; + } + update(_model: ITextModel, _value: number): number { + return this._default; + } + default(): number { + return this._default; + } +} + class FeatureDebounceInformation implements IFeatureDebounceInformation { private readonly _cache = new LRUCache(50, 0.7); @@ -100,10 +116,15 @@ export class LanguageFeatureDebounceService implements ILanguageFeatureDebounceS declare _serviceBrand: undefined; - private readonly _data = new Map(); + private readonly _data = new Map(); + private readonly _isDev: boolean; - constructor(@ILogService private readonly _logService: ILogService) { + constructor( + @ILogService private readonly _logService: ILogService, + @IEnvironmentService envService: IEnvironmentService, + ) { + this._isDev = envService.isExtensionDevelopment || !envService.isBuilt; } for(feature: LanguageFeatureRegistry, name: string, config?: { min?: number; max?: number; key?: string }): IFeatureDebounceInformation { @@ -113,14 +134,19 @@ export class LanguageFeatureDebounceService implements ILanguageFeatureDebounceS const key = `${IdentityHash.of(feature)},${min}${extra ? ',' + extra : ''}`; let info = this._data.get(key); if (!info) { - info = new FeatureDebounceInformation( - this._logService, - name, - feature, - (this._overallAverage() | 0) || (min * 1.5), // default is overall default or derived from min-value - min, - max - ); + if (!this._isDev) { + this._logService.debug(`[DEBOUNCE: ${name}] is disabled in developed mode`); + info = new NullDebounceInformation(min * 1.5); + } else { + info = new FeatureDebounceInformation( + this._logService, + name, + feature, + (this._overallAverage() | 0) || (min * 1.5), // default is overall default or derived from min-value + min, + max + ); + } this._data.set(key, info); } return info; diff --git a/src/vs/editor/common/services/resolverService.ts b/src/vs/editor/common/services/resolverService.ts index dcd5373ca5c..6d9212c82bc 100644 --- a/src/vs/editor/common/services/resolverService.ts +++ b/src/vs/editor/common/services/resolverService.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { IMarkdownString } from 'vs/base/common/htmlContent'; import { IDisposable, IReference } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; import { ITextModel, ITextSnapshot } from 'vs/editor/common/model'; @@ -55,7 +56,7 @@ export interface ITextEditorModel extends IEditorModel { /** * Signals if this model is readonly or not. */ - isReadonly(): boolean; + isReadonly(): boolean | IMarkdownString; /** * The language id of the text model if known. diff --git a/src/vs/editor/common/services/textResourceConfiguration.ts b/src/vs/editor/common/services/textResourceConfiguration.ts index 680c4129e1c..0921cba713d 100644 --- a/src/vs/editor/common/services/textResourceConfiguration.ts +++ b/src/vs/editor/common/services/textResourceConfiguration.ts @@ -6,7 +6,7 @@ import { Event } from 'vs/base/common/event'; import { URI } from 'vs/base/common/uri'; import { IPosition } from 'vs/editor/common/core/position'; -import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; +import { ConfigurationTarget, IConfigurationValue } from 'vs/platform/configuration/common/configuration'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; export const ITextResourceConfigurationService = createDecorator('textResourceConfigurationService'); @@ -44,12 +44,22 @@ export interface ITextResourceConfigurationService { * * @param resource - Resource for which the configuration has to be fetched. * @param position - Position in the resource for which configuration has to be fetched. - * @param section - Section of the configuraion. + * @param section - Section of the configuration. * */ getValue(resource: URI | undefined, section?: string): T; getValue(resource: URI | undefined, position?: IPosition, section?: string): T; + /** + * Inspects the values of the section for the given resource by applying language overrides. + * + * @param resource - Resource for which the configuration has to be fetched. + * @param position - Position in the resource for which configuration has to be fetched. + * @param section - Section of the configuration. + * + */ + inspect(resource: URI | undefined, position: IPosition | null, section: string): IConfigurationValue>; + /** * Update the configuration value for the given resource at the effective location. * diff --git a/src/vs/editor/common/services/textResourceConfigurationService.ts b/src/vs/editor/common/services/textResourceConfigurationService.ts index 4069117941b..89acdd09e8b 100644 --- a/src/vs/editor/common/services/textResourceConfigurationService.ts +++ b/src/vs/editor/common/services/textResourceConfigurationService.ts @@ -106,6 +106,11 @@ export class TextResourceConfigurationService extends Disposable implements ITex return this.configurationService.getValue(section, { resource, overrideIdentifier: language }); } + inspect(resource: URI | undefined, position: IPosition | null, section: string): IConfigurationValue> { + const language = resource ? this.getLanguage(resource, position) : undefined; + return this.configurationService.inspect(section, { resource, overrideIdentifier: language }); + } + private getLanguage(resource: URI, position: IPosition | null): string | null { const model = this.modelService.getModel(resource); if (model) { diff --git a/src/vs/editor/common/services/treeViewsDnd.ts b/src/vs/editor/common/services/treeViewsDnd.ts new file mode 100644 index 00000000000..ab59a6cea43 --- /dev/null +++ b/src/vs/editor/common/services/treeViewsDnd.ts @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export interface ITreeViewsDnDService { + readonly _serviceBrand: undefined; + + removeDragOperationTransfer(uuid: string | undefined): Promise | undefined; + addDragOperationTransfer(uuid: string, transferPromise: Promise): void; +} + +export class TreeViewsDnDService implements ITreeViewsDnDService { + _serviceBrand: undefined; + private _dragOperations: Map> = new Map(); + + removeDragOperationTransfer(uuid: string | undefined): Promise | undefined { + if ((uuid && this._dragOperations.has(uuid))) { + const operation = this._dragOperations.get(uuid); + this._dragOperations.delete(uuid); + return operation; + } + return undefined; + } + + addDragOperationTransfer(uuid: string, transferPromise: Promise): void { + this._dragOperations.set(uuid, transferPromise); + } +} + + +export class DraggedTreeItemsIdentifier { + + constructor(readonly identifier: string) { } +} diff --git a/src/vs/editor/common/services/treeViewsDndService.ts b/src/vs/editor/common/services/treeViewsDndService.ts new file mode 100644 index 00000000000..6130072bfb0 --- /dev/null +++ b/src/vs/editor/common/services/treeViewsDndService.ts @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { VSDataTransfer } from 'vs/base/common/dataTransfer'; +import { ITreeViewsDnDService as ITreeViewsDnDServiceCommon, TreeViewsDnDService } from 'vs/editor/common/services/treeViewsDnd'; + +export interface ITreeViewsDnDService extends ITreeViewsDnDServiceCommon { } +export const ITreeViewsDnDService = createDecorator('treeViewsDndService'); +registerSingleton(ITreeViewsDnDService, TreeViewsDnDService, InstantiationType.Delayed); diff --git a/src/vs/editor/common/standalone/standaloneEnums.ts b/src/vs/editor/common/standalone/standaloneEnums.ts index d15fc2e84d2..d48dc8f7aa1 100644 --- a/src/vs/editor/common/standalone/standaloneEnums.ts +++ b/src/vs/editor/common/standalone/standaloneEnums.ts @@ -179,140 +179,145 @@ export enum EditorOption { accessibilityPageSize = 3, ariaLabel = 4, autoClosingBrackets = 5, - autoClosingDelete = 6, - autoClosingOvertype = 7, - autoClosingQuotes = 8, - autoIndent = 9, - automaticLayout = 10, - autoSurround = 11, - bracketPairColorization = 12, - guides = 13, - codeLens = 14, - codeLensFontFamily = 15, - codeLensFontSize = 16, - colorDecorators = 17, - colorDecoratorsLimit = 18, - columnSelection = 19, - comments = 20, - contextmenu = 21, - copyWithSyntaxHighlighting = 22, - cursorBlinking = 23, - cursorSmoothCaretAnimation = 24, - cursorStyle = 25, - cursorSurroundingLines = 26, - cursorSurroundingLinesStyle = 27, - cursorWidth = 28, - disableLayerHinting = 29, - disableMonospaceOptimizations = 30, - domReadOnly = 31, - dragAndDrop = 32, - dropIntoEditor = 33, - emptySelectionClipboard = 34, - experimentalWhitespaceRendering = 35, - extraEditorClassName = 36, - fastScrollSensitivity = 37, - find = 38, - fixedOverflowWidgets = 39, - folding = 40, - foldingStrategy = 41, - foldingHighlight = 42, - foldingImportsByDefault = 43, - foldingMaximumRegions = 44, - unfoldOnClickAfterEndOfLine = 45, - fontFamily = 46, - fontInfo = 47, - fontLigatures = 48, - fontSize = 49, - fontWeight = 50, - fontVariations = 51, - formatOnPaste = 52, - formatOnType = 53, - glyphMargin = 54, - gotoLocation = 55, - hideCursorInOverviewRuler = 56, - hover = 57, - inDiffEditor = 58, - inlineSuggest = 59, - letterSpacing = 60, - lightbulb = 61, - lineDecorationsWidth = 62, - lineHeight = 63, - lineNumbers = 64, - lineNumbersMinChars = 65, - linkedEditing = 66, - links = 67, - matchBrackets = 68, - minimap = 69, - mouseStyle = 70, - mouseWheelScrollSensitivity = 71, - mouseWheelZoom = 72, - multiCursorMergeOverlapping = 73, - multiCursorModifier = 74, - multiCursorPaste = 75, - multiCursorLimit = 76, - occurrencesHighlight = 77, - overviewRulerBorder = 78, - overviewRulerLanes = 79, - padding = 80, - parameterHints = 81, - peekWidgetDefaultFocus = 82, - definitionLinkOpensInPeek = 83, - quickSuggestions = 84, - quickSuggestionsDelay = 85, - readOnly = 86, - renameOnType = 87, - renderControlCharacters = 88, - renderFinalNewline = 89, - renderLineHighlight = 90, - renderLineHighlightOnlyWhenFocus = 91, - renderValidationDecorations = 92, - renderWhitespace = 93, - revealHorizontalRightPadding = 94, - roundedSelection = 95, - rulers = 96, - scrollbar = 97, - scrollBeyondLastColumn = 98, - scrollBeyondLastLine = 99, - scrollPredominantAxis = 100, - selectionClipboard = 101, - selectionHighlight = 102, - selectOnLineNumbers = 103, - showFoldingControls = 104, - showUnused = 105, - snippetSuggestions = 106, - smartSelect = 107, - smoothScrolling = 108, - stickyScroll = 109, - stickyTabStops = 110, - stopRenderingLineAfter = 111, - suggest = 112, - suggestFontSize = 113, - suggestLineHeight = 114, - suggestOnTriggerCharacters = 115, - suggestSelection = 116, - tabCompletion = 117, - tabIndex = 118, - unicodeHighlighting = 119, - unusualLineTerminators = 120, - useShadowDOM = 121, - useTabStops = 122, - wordBreak = 123, - wordSeparators = 124, - wordWrap = 125, - wordWrapBreakAfterCharacters = 126, - wordWrapBreakBeforeCharacters = 127, - wordWrapColumn = 128, - wordWrapOverride1 = 129, - wordWrapOverride2 = 130, - wrappingIndent = 131, - wrappingStrategy = 132, - showDeprecated = 133, - inlayHints = 134, - editorClassName = 135, - pixelRatio = 136, - tabFocusMode = 137, - layoutInfo = 138, - wrappingInfo = 139 + screenReaderAnnounceInlineSuggestion = 6, + autoClosingDelete = 7, + autoClosingOvertype = 8, + autoClosingQuotes = 9, + autoIndent = 10, + automaticLayout = 11, + autoSurround = 12, + bracketPairColorization = 13, + guides = 14, + codeLens = 15, + codeLensFontFamily = 16, + codeLensFontSize = 17, + colorDecorators = 18, + colorDecoratorsLimit = 19, + columnSelection = 20, + comments = 21, + contextmenu = 22, + copyWithSyntaxHighlighting = 23, + cursorBlinking = 24, + cursorSmoothCaretAnimation = 25, + cursorStyle = 26, + cursorSurroundingLines = 27, + cursorSurroundingLinesStyle = 28, + cursorWidth = 29, + disableLayerHinting = 30, + disableMonospaceOptimizations = 31, + domReadOnly = 32, + dragAndDrop = 33, + dropIntoEditor = 34, + emptySelectionClipboard = 35, + experimentalWhitespaceRendering = 36, + extraEditorClassName = 37, + fastScrollSensitivity = 38, + find = 39, + fixedOverflowWidgets = 40, + folding = 41, + foldingStrategy = 42, + foldingHighlight = 43, + foldingImportsByDefault = 44, + foldingMaximumRegions = 45, + unfoldOnClickAfterEndOfLine = 46, + fontFamily = 47, + fontInfo = 48, + fontLigatures = 49, + fontSize = 50, + fontWeight = 51, + fontVariations = 52, + formatOnPaste = 53, + formatOnType = 54, + glyphMargin = 55, + gotoLocation = 56, + hideCursorInOverviewRuler = 57, + hover = 58, + inDiffEditor = 59, + inlineSuggest = 60, + letterSpacing = 61, + lightbulb = 62, + lineDecorationsWidth = 63, + lineHeight = 64, + lineNumbers = 65, + lineNumbersMinChars = 66, + linkedEditing = 67, + links = 68, + matchBrackets = 69, + minimap = 70, + mouseStyle = 71, + mouseWheelScrollSensitivity = 72, + mouseWheelZoom = 73, + multiCursorMergeOverlapping = 74, + multiCursorModifier = 75, + multiCursorPaste = 76, + multiCursorLimit = 77, + occurrencesHighlight = 78, + overviewRulerBorder = 79, + overviewRulerLanes = 80, + padding = 81, + pasteAs = 82, + parameterHints = 83, + peekWidgetDefaultFocus = 84, + definitionLinkOpensInPeek = 85, + quickSuggestions = 86, + quickSuggestionsDelay = 87, + readOnly = 88, + readOnlyMessage = 89, + renameOnType = 90, + renderControlCharacters = 91, + renderFinalNewline = 92, + renderLineHighlight = 93, + renderLineHighlightOnlyWhenFocus = 94, + renderValidationDecorations = 95, + renderWhitespace = 96, + revealHorizontalRightPadding = 97, + roundedSelection = 98, + rulers = 99, + scrollbar = 100, + scrollBeyondLastColumn = 101, + scrollBeyondLastLine = 102, + scrollPredominantAxis = 103, + selectionClipboard = 104, + selectionHighlight = 105, + selectOnLineNumbers = 106, + showFoldingControls = 107, + showUnused = 108, + snippetSuggestions = 109, + smartSelect = 110, + smoothScrolling = 111, + stickyScroll = 112, + stickyTabStops = 113, + stopRenderingLineAfter = 114, + suggest = 115, + suggestFontSize = 116, + suggestLineHeight = 117, + suggestOnTriggerCharacters = 118, + suggestSelection = 119, + tabCompletion = 120, + tabIndex = 121, + unicodeHighlighting = 122, + unusualLineTerminators = 123, + useShadowDOM = 124, + useTabStops = 125, + wordBreak = 126, + wordSeparators = 127, + wordWrap = 128, + wordWrapBreakAfterCharacters = 129, + wordWrapBreakBeforeCharacters = 130, + wordWrapColumn = 131, + wordWrapOverride1 = 132, + wordWrapOverride2 = 133, + wrappingIndent = 134, + wrappingStrategy = 135, + showDeprecated = 136, + inlayHints = 137, + editorClassName = 138, + pixelRatio = 139, + tabFocusMode = 140, + layoutInfo = 141, + wrappingInfo = 142, + defaultColorDecorators = 143, + colorDecoratorsActivatedOn = 144 } /** @@ -347,6 +352,14 @@ export enum EndOfLineSequence { CRLF = 1 } +/** + * Vertical Lane in the glyph margin of the editor. + */ +export enum GlyphMarginLane { + Left = 1, + Right = 2 +} + /** * Describes what to do with the indentation when pressing Enter. */ @@ -486,116 +499,121 @@ export enum KeyCode { F17 = 75, F18 = 76, F19 = 77, - NumLock = 78, - ScrollLock = 79, + F20 = 78, + F21 = 79, + F22 = 80, + F23 = 81, + F24 = 82, + NumLock = 83, + ScrollLock = 84, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ';:' key */ - Semicolon = 80, + Semicolon = 85, /** * For any country/region, the '+' key * For the US standard keyboard, the '=+' key */ - Equal = 81, + Equal = 86, /** * For any country/region, the ',' key * For the US standard keyboard, the ',<' key */ - Comma = 82, + Comma = 87, /** * For any country/region, the '-' key * For the US standard keyboard, the '-_' key */ - Minus = 83, + Minus = 88, /** * For any country/region, the '.' key * For the US standard keyboard, the '.>' key */ - Period = 84, + Period = 89, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '/?' key */ - Slash = 85, + Slash = 90, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '`~' key */ - Backquote = 86, + Backquote = 91, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '[{' key */ - BracketLeft = 87, + BracketLeft = 92, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '\|' key */ - Backslash = 88, + Backslash = 93, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ']}' key */ - BracketRight = 89, + BracketRight = 94, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ''"' key */ - Quote = 90, + Quote = 95, /** * Used for miscellaneous characters; it can vary by keyboard. */ - OEM_8 = 91, + OEM_8 = 96, /** * Either the angle bracket key or the backslash key on the RT 102-key keyboard. */ - IntlBackslash = 92, - Numpad0 = 93, - Numpad1 = 94, - Numpad2 = 95, - Numpad3 = 96, - Numpad4 = 97, - Numpad5 = 98, - Numpad6 = 99, - Numpad7 = 100, - Numpad8 = 101, - Numpad9 = 102, - NumpadMultiply = 103, - NumpadAdd = 104, - NUMPAD_SEPARATOR = 105, - NumpadSubtract = 106, - NumpadDecimal = 107, - NumpadDivide = 108, + IntlBackslash = 97, + Numpad0 = 98, + Numpad1 = 99, + Numpad2 = 100, + Numpad3 = 101, + Numpad4 = 102, + Numpad5 = 103, + Numpad6 = 104, + Numpad7 = 105, + Numpad8 = 106, + Numpad9 = 107, + NumpadMultiply = 108, + NumpadAdd = 109, + NUMPAD_SEPARATOR = 110, + NumpadSubtract = 111, + NumpadDecimal = 112, + NumpadDivide = 113, /** * Cover all key codes when IME is processing input. */ - KEY_IN_COMPOSITION = 109, - ABNT_C1 = 110, - ABNT_C2 = 111, - AudioVolumeMute = 112, - AudioVolumeUp = 113, - AudioVolumeDown = 114, - BrowserSearch = 115, - BrowserHome = 116, - BrowserBack = 117, - BrowserForward = 118, - MediaTrackNext = 119, - MediaTrackPrevious = 120, - MediaStop = 121, - MediaPlayPause = 122, - LaunchMediaPlayer = 123, - LaunchMail = 124, - LaunchApp2 = 125, + KEY_IN_COMPOSITION = 114, + ABNT_C1 = 115, + ABNT_C2 = 116, + AudioVolumeMute = 117, + AudioVolumeUp = 118, + AudioVolumeDown = 119, + BrowserSearch = 120, + BrowserHome = 121, + BrowserBack = 122, + BrowserForward = 123, + MediaTrackNext = 124, + MediaTrackPrevious = 125, + MediaStop = 126, + MediaPlayPause = 127, + LaunchMediaPlayer = 128, + LaunchMail = 129, + LaunchApp2 = 130, /** * VK_CLEAR, 0x0C, CLEAR key */ - Clear = 126, + Clear = 131, /** * Placed last to cover the length of the enum. * Please do not depend on this value! */ - MAX_VALUE = 127 + MAX_VALUE = 132 } export enum MarkerSeverity { diff --git a/src/vs/editor/common/standaloneStrings.ts b/src/vs/editor/common/standaloneStrings.ts index b24c8b7e6a3..5bc2ddd91de 100644 --- a/src/vs/editor/common/standaloneStrings.ts +++ b/src/vs/editor/common/standaloneStrings.ts @@ -6,28 +6,20 @@ import * as nls from 'vs/nls'; export namespace AccessibilityHelpNLS { - export const noSelection = nls.localize("noSelection", "No selection"); - export const singleSelectionRange = nls.localize("singleSelectionRange", "Line {0}, Column {1} ({2} selected)"); - export const singleSelection = nls.localize("singleSelection", "Line {0}, Column {1}"); - export const multiSelectionRange = nls.localize("multiSelectionRange", "{0} selections ({1} characters selected)"); - export const multiSelection = nls.localize("multiSelection", "{0} selections"); - export const emergencyConfOn = nls.localize("emergencyConfOn", "Now changing the setting `accessibilitySupport` to 'on'."); - export const openingDocs = nls.localize("openingDocs", "Now opening the Editor Accessibility documentation page."); - export const readonlyDiffEditor = nls.localize("readonlyDiffEditor", " in a read-only pane of a diff editor."); - export const editableDiffEditor = nls.localize("editableDiffEditor", " in a pane of a diff editor."); - export const readonlyEditor = nls.localize("readonlyEditor", " in a read-only code editor"); - export const editableEditor = nls.localize("editableEditor", " in a code editor"); + export const accessibilityHelpTitle = nls.localize('accessibilityHelpTitle', "Accessibility Help"); + export const openingDocs = nls.localize("openingDocs", "Now opening the Accessibility documentation page."); + export const readonlyDiffEditor = nls.localize("readonlyDiffEditor", "You are in a read-only pane of a diff editor."); + export const editableDiffEditor = nls.localize("editableDiffEditor", "You are in a pane of a diff editor."); + export const readonlyEditor = nls.localize("readonlyEditor", "You are in a read-only code editor"); + export const editableEditor = nls.localize("editableEditor", "You are in a code editor"); export const changeConfigToOnMac = nls.localize("changeConfigToOnMac", "To configure the editor to be optimized for usage with a Screen Reader press Command+E now."); export const changeConfigToOnWinLinux = nls.localize("changeConfigToOnWinLinux", "To configure the editor to be optimized for usage with a Screen Reader press Control+E now."); export const auto_on = nls.localize("auto_on", "The editor is configured to be optimized for usage with a Screen Reader."); - export const auto_off = nls.localize("auto_off", "The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time."); + export const auto_off = nls.localize("auto_off", "The editor is configured to never be optimized for usage with a Screen Reader"); export const tabFocusModeOnMsg = nls.localize("tabFocusModeOnMsg", "Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}."); export const tabFocusModeOnMsgNoKb = nls.localize("tabFocusModeOnMsgNoKb", "Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding."); export const tabFocusModeOffMsg = nls.localize("tabFocusModeOffMsg", "Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}."); export const tabFocusModeOffMsgNoKb = nls.localize("tabFocusModeOffMsgNoKb", "Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding."); - export const openDocMac = nls.localize("openDocMac", "Press Command+H now to open a browser window with more information related to editor accessibility."); - export const openDocWinLinux = nls.localize("openDocWinLinux", "Press Control+H now to open a browser window with more information related to editor accessibility."); - export const outroMsg = nls.localize("outroMsg", "You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape."); export const showAccessibilityHelpAction = nls.localize("showAccessibilityHelpAction", "Show Accessibility Help"); } diff --git a/src/vs/editor/common/textModelEvents.ts b/src/vs/editor/common/textModelEvents.ts index a2f38b12900..8c25e06776d 100644 --- a/src/vs/editor/common/textModelEvents.ts +++ b/src/vs/editor/common/textModelEvents.ts @@ -77,6 +77,11 @@ export interface IModelContentChangedEvent { * The model has been reset to a new value. */ readonly isFlush: boolean; + + /** + * Flag that indicates that this event describes an eol change. + */ + readonly isEolChange: boolean; } /** @@ -85,6 +90,7 @@ export interface IModelContentChangedEvent { export interface IModelDecorationsChangedEvent { readonly affectsMinimap: boolean; readonly affectsOverviewRuler: boolean; + readonly affectsGlyphMargin: boolean; } /** @@ -92,7 +98,6 @@ export interface IModelDecorationsChangedEvent { * @internal */ export interface IModelTokensChangedEvent { - readonly tokenizationSupportChanged: boolean; readonly semanticTokensApplied: boolean; readonly ranges: { /** @@ -374,13 +379,15 @@ export class InternalModelContentChangeEvent { const isUndoing = (a.isUndoing || b.isUndoing); const isRedoing = (a.isRedoing || b.isRedoing); const isFlush = (a.isFlush || b.isFlush); + const isEolChange = a.isEolChange && b.isEolChange; // both must be true to not confuse listeners who skip such edits return { changes: changes, eol: eol, + isEolChange: isEolChange, versionId: versionId, isUndoing: isUndoing, isRedoing: isRedoing, - isFlush: isFlush + isFlush: isFlush, }; } } diff --git a/src/vs/editor/common/tokenizationRegistry.ts b/src/vs/editor/common/tokenizationRegistry.ts index 4f1876bbb9a..2d5ab7781a5 100644 --- a/src/vs/editor/common/tokenizationRegistry.ts +++ b/src/vs/editor/common/tokenizationRegistry.ts @@ -6,12 +6,12 @@ import { Color } from 'vs/base/common/color'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ITokenizationRegistry, ITokenizationSupport, ITokenizationSupportChangedEvent, ITokenizationSupportFactory } from 'vs/editor/common/languages'; +import { ITokenizationRegistry, ITokenizationSupport, ITokenizationSupportChangedEvent, ILazyTokenizationSupport } from 'vs/editor/common/languages'; import { ColorId } from 'vs/editor/common/encodedTokenAttributes'; export class TokenizationRegistry implements ITokenizationRegistry { - private readonly _map = new Map(); + private readonly _tokenizationSupports = new Map(); private readonly _factories = new Map(); private readonly _onDidChange = new Emitter(); @@ -23,26 +23,30 @@ export class TokenizationRegistry implements ITokenizationRegistry { this._colorMap = null; } - public fire(languages: string[]): void { + public handleChange(languageIds: string[]): void { this._onDidChange.fire({ - changedLanguages: languages, + changedLanguages: languageIds, changedColorMap: false }); } - public register(language: string, support: ITokenizationSupport) { - this._map.set(language, support); - this.fire([language]); + public register(languageId: string, support: ITokenizationSupport): IDisposable { + this._tokenizationSupports.set(languageId, support); + this.handleChange([languageId]); return toDisposable(() => { - if (this._map.get(language) !== support) { + if (this._tokenizationSupports.get(languageId) !== support) { return; } - this._map.delete(language); - this.fire([language]); + this._tokenizationSupports.delete(languageId); + this.handleChange([languageId]); }); } - public registerFactory(languageId: string, factory: ITokenizationSupportFactory): IDisposable { + public get(languageId: string): ITokenizationSupport | null { + return this._tokenizationSupports.get(languageId) || null; + } + + public registerFactory(languageId: string, factory: ILazyTokenizationSupport): IDisposable { this._factories.get(languageId)?.dispose(); const myData = new TokenizationSupportFactoryData(this, languageId, factory); this._factories.set(languageId, myData); @@ -74,9 +78,7 @@ export class TokenizationRegistry implements ITokenizationRegistry { return this.get(languageId); } - public get(language: string): ITokenizationSupport | null { - return (this._map.get(language) || null); - } + public isResolved(languageId: string): boolean { const tokenizationSupport = this.get(languageId); @@ -95,7 +97,7 @@ export class TokenizationRegistry implements ITokenizationRegistry { public setColorMap(colorMap: Color[]): void { this._colorMap = colorMap; this._onDidChange.fire({ - changedLanguages: Array.from(this._map.keys()), + changedLanguages: Array.from(this._tokenizationSupports.keys()), changedColorMap: true }); } @@ -125,7 +127,7 @@ class TokenizationSupportFactoryData extends Disposable { constructor( private readonly _registry: TokenizationRegistry, private readonly _languageId: string, - private readonly _factory: ITokenizationSupportFactory, + private readonly _factory: ILazyTokenizationSupport, ) { super(); } @@ -143,7 +145,7 @@ class TokenizationSupportFactoryData extends Disposable { } private async _create(): Promise { - const value = await Promise.resolve(this._factory.createTokenizationSupport()); + const value = await this._factory.tokenizationSupport; this._isResolved = true; if (value && !this._isDisposed) { this._register(this._registry.register(this._languageId, value)); diff --git a/src/vs/editor/common/tokenizationTextModelPart.ts b/src/vs/editor/common/tokenizationTextModelPart.ts index 3aa78f944a7..8884b008d98 100644 --- a/src/vs/editor/common/tokenizationTextModelPart.ts +++ b/src/vs/editor/common/tokenizationTextModelPart.ts @@ -6,7 +6,6 @@ import { IPosition } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; -import { ContiguousMultilineTokens } from 'vs/editor/common/tokens/contiguousMultilineTokens'; import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTokens'; @@ -14,11 +13,6 @@ import { SparseMultilineTokens } from 'vs/editor/common/tokens/sparseMultilineTo * Provides tokenization related functionality of the text model. */ export interface ITokenizationTextModelPart { - /** - * @internal - */ - setTokens(tokens: ContiguousMultilineTokens[]): void; - readonly hasTokens: boolean; /** @@ -88,11 +82,6 @@ export interface ITokenizationTextModelPart { */ tokenizeLineWithEdit(position: IPosition, length: number, newText: string): LineTokens | null; - /** - * @internal - */ - tokenizeViewport(startLineNumber: number, endLineNumber: number): void; - getLanguageId(): string; getLanguageIdAtPosition(lineNumber: number, column: number): string; diff --git a/src/vs/editor/common/tokens/contiguousMultilineTokens.ts b/src/vs/editor/common/tokens/contiguousMultilineTokens.ts index a8860866aef..f4d267fba0a 100644 --- a/src/vs/editor/common/tokens/contiguousMultilineTokens.ts +++ b/src/vs/editor/common/tokens/contiguousMultilineTokens.ts @@ -9,12 +9,12 @@ import { Position } from 'vs/editor/common/core/position'; import { IRange } from 'vs/editor/common/core/range'; import { countEOL } from 'vs/editor/common/core/eolCounter'; import { ContiguousTokensEditing } from 'vs/editor/common/tokens/contiguousTokensEditing'; +import { LineRange } from 'vs/editor/common/core/lineRange'; /** * Represents contiguous tokens over a contiguous range of lines. */ export class ContiguousMultilineTokens { - public static deserialize(buff: Uint8Array, offset: number, result: ContiguousMultilineTokens[]): number { const view32 = new Uint32Array(buff.buffer); const startLineNumber = readUInt32BE(buff, offset); offset += 4; @@ -64,6 +64,10 @@ export class ContiguousMultilineTokens { this._tokens = tokens; } + getLineRange(): LineRange { + return new LineRange(this._startLineNumber, this._startLineNumber + this._tokens.length); + } + /** * @see {@link _tokens} */ diff --git a/src/vs/editor/common/tokens/contiguousTokensStore.ts b/src/vs/editor/common/tokens/contiguousTokensStore.ts index 72d4afc3ccb..02b47bfd4f0 100644 --- a/src/vs/editor/common/tokens/contiguousTokensStore.ts +++ b/src/vs/editor/common/tokens/contiguousTokensStore.ts @@ -10,6 +10,8 @@ import { ContiguousTokensEditing, EMPTY_LINE_TOKENS, toUint32Array } from 'vs/ed import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; import { ILanguageIdCodec } from 'vs/editor/common/languages'; import { LanguageId, FontStyle, ColorId, StandardTokenType, MetadataConsts, TokenMetadata } from 'vs/editor/common/encodedTokenAttributes'; +import { ITextModel } from 'vs/editor/common/model'; +import { ContiguousMultilineTokens } from 'vs/editor/common/tokens/contiguousMultilineTokens'; /** * Represents contiguous tokens in a text model. @@ -207,6 +209,39 @@ export class ContiguousTokensStore { } //#endregion + + public setMultilineTokens(tokens: ContiguousMultilineTokens[], textModel: ITextModel): { changes: { fromLineNumber: number; toLineNumber: number }[] } { + if (tokens.length === 0) { + return { changes: [] }; + } + + const ranges: { fromLineNumber: number; toLineNumber: number }[] = []; + + for (let i = 0, len = tokens.length; i < len; i++) { + const element = tokens[i]; + let minChangedLineNumber = 0; + let maxChangedLineNumber = 0; + let hasChange = false; + for (let lineNumber = element.startLineNumber; lineNumber <= element.endLineNumber; lineNumber++) { + if (hasChange) { + this.setTokens(textModel.getLanguageId(), lineNumber - 1, textModel.getLineLength(lineNumber), element.getLineTokens(lineNumber), false); + maxChangedLineNumber = lineNumber; + } else { + const lineHasChange = this.setTokens(textModel.getLanguageId(), lineNumber - 1, textModel.getLineLength(lineNumber), element.getLineTokens(lineNumber), true); + if (lineHasChange) { + hasChange = true; + minChangedLineNumber = lineNumber; + maxChangedLineNumber = lineNumber; + } + } + } + if (hasChange) { + ranges.push({ fromLineNumber: minChangedLineNumber, toLineNumber: maxChangedLineNumber, }); + } + } + + return { changes: ranges }; + } } function getDefaultMetadata(topLevelLanguageId: LanguageId): number { diff --git a/src/vs/editor/common/tokens/sparseMultilineTokens.ts b/src/vs/editor/common/tokens/sparseMultilineTokens.ts index 2747890b5c3..e46f9aeca36 100644 --- a/src/vs/editor/common/tokens/sparseMultilineTokens.ts +++ b/src/vs/editor/common/tokens/sparseMultilineTokens.ts @@ -431,18 +431,10 @@ class SparseMultilineTokensStorage { // 3a, 3b, 3c if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) { // 3c. The token starts inside the deletion range, and ends after the deletion range - // => the token moves left and shrinks - if (tokenDeltaLine === startDeltaLine) { - // the deletion started on the same line as the token - // => the token moves left and shrinks - tokenStartCharacter = startCharacter; - tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter); - } else { - // the deletion started on a line above the token - // => the token moves to the beginning of the line - tokenStartCharacter = 0; - tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter); - } + // => the token moves to continue right after the deletion + tokenDeltaLine = startDeltaLine; + tokenStartCharacter = startCharacter; + tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter); } else { // 3a. The token is inside the deletion range // 3b. The token starts inside the deletion range, and ends at the same position as the deletion range diff --git a/src/vs/editor/common/viewEvents.ts b/src/vs/editor/common/viewEvents.ts index 2182d17b7f8..0e6cb0fa166 100644 --- a/src/vs/editor/common/viewEvents.ts +++ b/src/vs/editor/common/viewEvents.ts @@ -75,14 +75,17 @@ export class ViewDecorationsChangedEvent { readonly affectsMinimap: boolean; readonly affectsOverviewRuler: boolean; + readonly affectsGlyphMargin: boolean; constructor(source: IModelDecorationsChangedEvent | null) { if (source) { this.affectsMinimap = source.affectsMinimap; this.affectsOverviewRuler = source.affectsOverviewRuler; + this.affectsGlyphMargin = source.affectsGlyphMargin; } else { this.affectsMinimap = true; this.affectsOverviewRuler = true; + this.affectsGlyphMargin = true; } } } diff --git a/src/vs/editor/common/viewLayout/viewLayout.ts b/src/vs/editor/common/viewLayout/viewLayout.ts index 0acbe29204f..3514fd4cb82 100644 --- a/src/vs/editor/common/viewLayout/viewLayout.ts +++ b/src/vs/editor/common/viewLayout/viewLayout.ts @@ -146,6 +146,10 @@ class EditorScrollable extends Disposable { public setScrollPositionSmooth(update: INewScrollPosition): void { this._scrollable.setScrollPositionSmooth(update); } + + public hasPendingScrollAnimation(): boolean { + return this._scrollable.hasPendingScrollAnimation(); + } } export class ViewLayout extends Disposable implements IViewLayout { @@ -448,6 +452,10 @@ export class ViewLayout extends Disposable implements IViewLayout { } } + public hasPendingScrollAnimation(): boolean { + return this._scrollable.hasPendingScrollAnimation(); + } + public deltaScrollNow(deltaScrollLeft: number, deltaScrollTop: number): void { const currentScrollPosition = this._scrollable.getCurrentScrollPosition(); this._scrollable.setScrollPositionNow({ diff --git a/src/vs/editor/common/viewModel.ts b/src/vs/editor/common/viewModel.ts index 54a72e81f5e..ff08d5fa24b 100644 --- a/src/vs/editor/common/viewModel.ts +++ b/src/vs/editor/common/viewModel.ts @@ -35,12 +35,13 @@ export interface IViewModel extends ICursorSimpleModel { * Gives a hint that a lot of requests are about to come in for these line numbers. */ setViewport(startLineNumber: number, endLineNumber: number, centeredLineNumber: number): void; - tokenizeViewport(): void; + visibleLinesStabilized(): void; setHasFocus(hasFocus: boolean): void; onCompositionStart(): void; onCompositionEnd(): void; - getDecorationsInViewport(visibleRange: Range, onlyMinimapDecorations?: boolean): ViewModelDecoration[]; + getMinimapDecorationsInRange(range: Range): ViewModelDecoration[]; + getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[]; getViewportViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData; getViewLineRenderingData(lineNumber: number): ViewLineRenderingData; getViewLineData(lineNumber: number): ViewLineData; @@ -209,7 +210,11 @@ export interface ICoordinatesConverter { validateViewRange(viewRange: Range, expectedModelRange: Range): Range; // Model -> View conversion and related methods - convertModelPositionToViewPosition(modelPosition: Position, affinity?: PositionAffinity): Position; + /** + * @param allowZeroLineNumber Should it return 0 when there are hidden lines at the top and the position is in the hidden area? + * @param belowHiddenRanges When the model position is in a hidden area, should it return the first view position after or before? + */ + convertModelPositionToViewPosition(modelPosition: Position, affinity?: PositionAffinity, allowZeroLineNumber?: boolean, belowHiddenRanges?: boolean): Position; /** * @param affinity Only has an effect if the range is empty. */ diff --git a/src/vs/editor/common/viewModel/viewModelDecorations.ts b/src/vs/editor/common/viewModel/viewModelDecorations.ts index 5bce2245abb..4725c903073 100644 --- a/src/vs/editor/common/viewModel/viewModelDecorations.ts +++ b/src/vs/editor/common/viewModel/viewModelDecorations.ts @@ -36,7 +36,6 @@ export class ViewModelDecorations implements IDisposable { private _cachedModelDecorationsResolver: IDecorationsViewportData | null; private _cachedModelDecorationsResolverViewRange: Range | null; - private _cachedOnlyMinimapDecorations: boolean | null = null; constructor(editorId: number, model: ITextModel, configuration: IEditorConfiguration, linesCollection: IViewModelLines, coordinatesConverter: ICoordinatesConverter) { this.editorId = editorId; @@ -83,7 +82,7 @@ export class ViewModelDecorations implements IDisposable { const options = modelDecoration.options; let viewRange: Range; if (options.isWholeLine) { - const start = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.startLineNumber, 1), PositionAffinity.Left); + const start = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.startLineNumber, 1), PositionAffinity.Left, false, true); const end = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.endLineNumber, this.model.getLineMaxColumn(modelRange.endLineNumber)), PositionAffinity.Right); viewRange = new Range(start.lineNumber, start.column, end.lineNumber, end.column); } else { @@ -97,25 +96,27 @@ export class ViewModelDecorations implements IDisposable { return r; } - public getDecorationsViewportData(viewRange: Range, onlyMinimapDecorations: boolean = false): IDecorationsViewportData { + public getMinimapDecorationsInRange(range: Range): ViewModelDecoration[] { + return this._getDecorationsInRange(range, true, false).decorations; + } + + public getDecorationsViewportData(viewRange: Range): IDecorationsViewportData { let cacheIsValid = (this._cachedModelDecorationsResolver !== null); cacheIsValid = cacheIsValid && (viewRange.equalsRange(this._cachedModelDecorationsResolverViewRange)); - cacheIsValid = cacheIsValid && (this._cachedOnlyMinimapDecorations === onlyMinimapDecorations); if (!cacheIsValid) { - this._cachedModelDecorationsResolver = this._getDecorationsInRange(viewRange, onlyMinimapDecorations); + this._cachedModelDecorationsResolver = this._getDecorationsInRange(viewRange, false, false); this._cachedModelDecorationsResolverViewRange = viewRange; - this._cachedOnlyMinimapDecorations = onlyMinimapDecorations; } return this._cachedModelDecorationsResolver!; } - public getInlineDecorationsOnLine(lineNumber: number, onlyMinimapDecorations: boolean = false): InlineDecoration[] { + public getInlineDecorationsOnLine(lineNumber: number, onlyMinimapDecorations: boolean = false, onlyMarginDecorations: boolean = false): InlineDecoration[] { const range = new Range(lineNumber, this._linesCollection.getViewLineMinColumn(lineNumber), lineNumber, this._linesCollection.getViewLineMaxColumn(lineNumber)); - return this._getDecorationsInRange(range, onlyMinimapDecorations).inlineDecorations[0]; + return this._getDecorationsInRange(range, onlyMinimapDecorations, onlyMarginDecorations).inlineDecorations[0]; } - private _getDecorationsInRange(viewRange: Range, onlyMinimapDecorations: boolean): IDecorationsViewportData { - const modelDecorations = this._linesCollection.getDecorationsInRange(viewRange, this.editorId, filterValidationDecorations(this.configuration.options), onlyMinimapDecorations); + private _getDecorationsInRange(viewRange: Range, onlyMinimapDecorations: boolean, onlyMarginDecorations: boolean): IDecorationsViewportData { + const modelDecorations = this._linesCollection.getDecorationsInRange(viewRange, this.editorId, filterValidationDecorations(this.configuration.options), onlyMinimapDecorations, onlyMarginDecorations); const startLineNumber = viewRange.startLineNumber; const endLineNumber = viewRange.endLineNumber; diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 9033f5e84db..eb18dced3c1 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -19,7 +19,7 @@ import { Range } from 'vs/editor/common/core/range'; import { ISelection, Selection } from 'vs/editor/common/core/selection'; import { ICommand, ICursorState, IViewState, ScrollType } from 'vs/editor/common/editorCommon'; import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; -import { EndOfLinePreference, ICursorStateComputer, IIdentifiedSingleEditOperation, ITextModel, PositionAffinity, TrackedRangeStickiness } from 'vs/editor/common/model'; +import { EndOfLinePreference, IAttachedView, ICursorStateComputer, IIdentifiedSingleEditOperation, ITextModel, PositionAffinity, TrackedRangeStickiness } from 'vs/editor/common/model'; import { IActiveIndentGuideInfo, BracketGuideOptions, IndentGuide } from 'vs/editor/common/textModelGuides'; import { ModelDecorationMinimapOptions, ModelDecorationOptions, ModelDecorationOverviewRulerOptions } from 'vs/editor/common/model/textModel'; import * as textModelEvents from 'vs/editor/common/textModelEvents'; @@ -50,7 +50,6 @@ export class ViewModel extends Disposable implements IViewModel { private readonly _eventDispatcher: ViewModelEventDispatcher; public readonly onEvent: Event; public cursorConfig: CursorConfiguration; - private readonly _tokenizeViewportSoon: RunOnceScheduler; private readonly _updateConfigurationViewLineCount: RunOnceScheduler; private _hasFocus: boolean; private readonly _viewportStart: ViewportStart; @@ -69,6 +68,7 @@ export class ViewModel extends Disposable implements IViewModel { scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable, private readonly languageConfigurationService: ILanguageConfigurationService, private readonly _themeService: IThemeService, + private readonly _attachedView: IAttachedView, ) { super(); @@ -78,7 +78,6 @@ export class ViewModel extends Disposable implements IViewModel { this._eventDispatcher = new ViewModelEventDispatcher(); this.onEvent = this._eventDispatcher.onEvent; this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService); - this._tokenizeViewportSoon = this._register(new RunOnceScheduler(() => this.tokenizeViewport(), 50)); this._updateConfigurationViewLineCount = this._register(new RunOnceScheduler(() => this._updateConfigurationViewLineCountNow(), 0)); this._hasFocus = false; this._viewportStart = ViewportStart.create(this.model); @@ -117,7 +116,7 @@ export class ViewModel extends Disposable implements IViewModel { this._register(this.viewLayout.onDidScroll((e) => { if (e.scrollTopChanged) { - this._tokenizeViewportSoon.schedule(); + this._handleVisibleLinesChanged(); } if (e.scrollTopChanged) { this._viewportStart.invalidate(); @@ -184,7 +183,7 @@ export class ViewModel extends Disposable implements IViewModel { this._configuration.setViewLineCount(this._lines.getViewLineCount()); } - public tokenizeViewport(): void { + private getModelVisibleRanges(): Range[] { const linesViewportData = this.viewLayout.getLinesViewportData(); const viewVisibleRange = new Range( linesViewportData.startLineNumber, @@ -193,10 +192,17 @@ export class ViewModel extends Disposable implements IViewModel { this.getLineMaxColumn(linesViewportData.endLineNumber) ); const modelVisibleRanges = this._toModelVisibleRanges(viewVisibleRange); + return modelVisibleRanges; + } - for (const modelVisibleRange of modelVisibleRanges) { - this.model.tokenization.tokenizeViewport(modelVisibleRange.startLineNumber, modelVisibleRange.endLineNumber); - } + public visibleLinesStabilized(): void { + const modelVisibleRanges = this.getModelVisibleRanges(); + this._attachedView.setVisibleLines(modelVisibleRanges, true); + } + + private _handleVisibleLinesChanged(): void { + const modelVisibleRanges = this.getModelVisibleRanges(); + this._attachedView.setVisibleLines(modelVisibleRanges, false); } public setHasFocus(hasFocus: boolean): void { @@ -397,7 +403,7 @@ export class ViewModel extends Disposable implements IViewModel { this._eventDispatcher.endEmitViewEvents(); } - this._tokenizeViewportSoon.schedule(); + this._handleVisibleLinesChanged(); })); this._register(this.model.onDidChangeTokens((e) => { @@ -412,10 +418,6 @@ export class ViewModel extends Disposable implements IViewModel { }; } this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewTokensChangedEvent(viewRanges)); - - if (e.tokenizationSupportChanged) { - this._tokenizeViewportSoon.schedule(); - } this._eventDispatcher.emitOutgoingEvent(new ModelTokensChangedEvent(e)); })); @@ -686,8 +688,12 @@ export class ViewModel extends Disposable implements IViewModel { return result + 2; } - public getDecorationsInViewport(visibleRange: Range, onlyMinimapDecorations: boolean = false): ViewModelDecoration[] { - return this._decorations.getDecorationsViewportData(visibleRange, onlyMinimapDecorations).decorations; + public getMinimapDecorationsInRange(range: Range): ViewModelDecoration[] { + return this._decorations.getMinimapDecorationsInRange(range); + } + + public getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[] { + return this._decorations.getDecorationsViewportData(visibleRange).decorations; } public getInjectedTextAt(viewPosition: Position): InjectedText | null { diff --git a/src/vs/editor/common/viewModel/viewModelLines.ts b/src/vs/editor/common/viewModel/viewModelLines.ts index 96746d3bb9f..c9fb7f3f662 100644 --- a/src/vs/editor/common/viewModel/viewModelLines.ts +++ b/src/vs/editor/common/viewModel/viewModelLines.ts @@ -45,7 +45,7 @@ export interface IViewModelLines extends IDisposable { getViewLineData(viewLineNumber: number): ViewLineData; getViewLinesData(viewStartLineNumber: number, viewEndLineNumber: number, needed: boolean[]): Array; - getDecorationsInRange(range: Range, ownerId: number, filterOutValidation: boolean, onlyMinimapDecorations: boolean): IModelDecoration[]; + getDecorationsInRange(range: Range, ownerId: number, filterOutValidation: boolean, onlyMinimapDecorations: boolean, onlyMarginDecorations: boolean): IModelDecoration[]; getInjectedTextAt(viewPosition: Position): InjectedText | null; @@ -830,27 +830,39 @@ export class ViewModelLinesFromProjectedModel implements IViewModelLines { return new Range(start.lineNumber, start.column, end.lineNumber, end.column); } - public convertModelPositionToViewPosition(_modelLineNumber: number, _modelColumn: number, affinity: PositionAffinity = PositionAffinity.None): Position { + public convertModelPositionToViewPosition(_modelLineNumber: number, _modelColumn: number, affinity: PositionAffinity = PositionAffinity.None, allowZeroLineNumber: boolean = false, belowHiddenRanges: boolean = false): Position { const validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn)); const inputLineNumber = validPosition.lineNumber; const inputColumn = validPosition.column; let lineIndex = inputLineNumber - 1, lineIndexChanged = false; - while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) { - lineIndex--; - lineIndexChanged = true; + if (belowHiddenRanges) { + while (lineIndex < this.modelLineProjections.length && !this.modelLineProjections[lineIndex].isVisible()) { + lineIndex++; + lineIndexChanged = true; + } + } else { + while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) { + lineIndex--; + lineIndexChanged = true; + } } if (lineIndex === 0 && !this.modelLineProjections[lineIndex].isVisible()) { // Could not reach a real line // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1); - return new Position(1, 1); + // TODO@alexdima@hediet this isn't soo pretty + return new Position(allowZeroLineNumber ? 0 : 1, 1); } const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex); let r: Position; if (lineIndexChanged) { - r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1), affinity); + if (belowHiddenRanges) { + r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, 1, affinity); + } else { + r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1), affinity); + } } else { r = this.modelLineProjections[inputLineNumber - 1].getViewPositionOfModelPosition(deltaLineNumber, inputColumn, affinity); } @@ -893,14 +905,14 @@ export class ViewModelLinesFromProjectedModel implements IViewModelLines { return this.modelLineProjections[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1)); } - public getDecorationsInRange(range: Range, ownerId: number, filterOutValidation: boolean, onlyMinimapDecorations: boolean): IModelDecoration[] { + public getDecorationsInRange(range: Range, ownerId: number, filterOutValidation: boolean, onlyMinimapDecorations: boolean, onlyMarginDecorations: boolean): IModelDecoration[] { const modelStart = this.convertViewPositionToModelPosition(range.startLineNumber, range.startColumn); const modelEnd = this.convertViewPositionToModelPosition(range.endLineNumber, range.endColumn); if (modelEnd.lineNumber - modelStart.lineNumber <= range.endLineNumber - range.startLineNumber) { // most likely there are no hidden lines => fast path // fetch decorations from column 1 to cover the case of wrapped lines that have whole line decorations at column 1 - return this.model.getDecorationsInRange(new Range(modelStart.lineNumber, 1, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation, onlyMinimapDecorations); + return this.model.getDecorationsInRange(new Range(modelStart.lineNumber, 1, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations); } let result: IModelDecoration[] = []; @@ -1070,8 +1082,8 @@ class CoordinatesConverter implements ICoordinatesConverter { // Model -> View conversion and related methods - public convertModelPositionToViewPosition(modelPosition: Position, affinity?: PositionAffinity): Position { - return this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column, affinity); + public convertModelPositionToViewPosition(modelPosition: Position, affinity?: PositionAffinity, allowZero?: boolean, belowHiddenRanges?: boolean): Position { + return this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column, affinity, allowZero, belowHiddenRanges); } public convertModelRangeToViewRange(modelRange: Range, affinity?: PositionAffinity): Range { @@ -1226,8 +1238,8 @@ export class ViewModelLinesFromModelAsIs implements IViewModelLines { return result; } - public getDecorationsInRange(range: Range, ownerId: number, filterOutValidation: boolean, onlyMinimapDecorations: boolean): IModelDecoration[] { - return this.model.getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations); + public getDecorationsInRange(range: Range, ownerId: number, filterOutValidation: boolean, onlyMinimapDecorations: boolean, onlyMarginDecorations: boolean): IModelDecoration[] { + return this.model.getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations); } normalizePosition(position: Position, affinity: PositionAffinity): Position { diff --git a/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts b/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts index 09b0cb279b4..a3b15fd4ae6 100644 --- a/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts +++ b/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts @@ -78,6 +78,25 @@ class SelectToBracketAction extends EditorAction { BracketMatchingController.get(editor)?.selectToBracket(selectBrackets); } } +class RemoveBracketsAction extends EditorAction { + constructor() { + super({ + id: 'editor.action.removeBrackets', + label: nls.localize('smartSelect.removeBrackets', "Remove Brackets"), + alias: 'Remove Brackets', + precondition: undefined, + kbOpts: { + kbExpr: EditorContextKeys.editorTextFocus, + primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Backspace, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + BracketMatchingController.get(editor)?.removeBrackets(this.id); + } +} type Brackets = [Range, Range]; @@ -251,6 +270,32 @@ export class BracketMatchingController extends Disposable implements IEditorCont this._editor.revealRange(newSelections[0]); } } + public removeBrackets(editSource?: string): void { + if (!this._editor.hasModel()) { + return; + } + + const model = this._editor.getModel(); + this._editor.getSelections().forEach((selection) => { + const position = selection.getPosition(); + + let brackets = model.bracketPairs.matchBracket(position); + if (!brackets) { + brackets = model.bracketPairs.findEnclosingBrackets(position); + } + if (brackets) { + this._editor.pushUndoStop(); + this._editor.executeEdits( + editSource, + [ + { range: brackets[0], text: '' }, + { range: brackets[1], text: '' } + ] + ); + this._editor.pushUndoStop(); + } + }); + } private static readonly _DECORATION_OPTIONS_WITH_OVERVIEW_RULER = ModelDecorationOptions.register({ description: 'bracket-match-overview', @@ -359,6 +404,7 @@ export class BracketMatchingController extends Disposable implements IEditorCont registerEditorContribution(BracketMatchingController.ID, BracketMatchingController, EditorContributionInstantiation.AfterFirstRender); registerEditorAction(SelectToBracketAction); registerEditorAction(JumpToBracketAction); +registerEditorAction(RemoveBracketsAction); // Go to menu MenuRegistry.appendMenuItem(MenuId.MenubarGoMenu, { diff --git a/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts b/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts index c2e738046d3..c16f4d7e9af 100644 --- a/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts +++ b/src/vs/editor/contrib/bracketMatching/test/browser/bracketMatching.test.ts @@ -209,4 +209,27 @@ suite('bracket matching', () => { new Selection(1, 19, 1, 16) ]); }); + + test('Removes brackets', () => { + const editor = createCodeEditorWithBrackets('var x = (3 + (5-7)); y();'); + const bracketMatchingController = disposables.add(editor.registerAndInstantiateContribution(BracketMatchingController.ID, BracketMatchingController)); + function removeBrackets() { + bracketMatchingController.removeBrackets(); + } + + // position before the bracket + editor.setPosition(new Position(1, 9)); + removeBrackets(); + assert.deepStrictEqual(editor.getModel().getValue(), 'var x = 3 + (5-7); y();'); + editor.getModel().setValue('var x = (3 + (5-7)); y();'); + + // position between brackets + editor.setPosition(new Position(1, 16)); + removeBrackets(); + assert.deepStrictEqual(editor.getModel().getValue(), 'var x = (3 + 5-7); y();'); + removeBrackets(); + assert.deepStrictEqual(editor.getModel().getValue(), 'var x = 3 + 5-7; y();'); + removeBrackets(); + assert.deepStrictEqual(editor.getModel().getValue(), 'var x = 3 + 5-7; y();'); + }); }); diff --git a/src/vs/editor/contrib/clipboard/browser/clipboard.ts b/src/vs/editor/contrib/clipboard/browser/clipboard.ts index 488fc8a6056..420abfa16a4 100644 --- a/src/vs/editor/contrib/clipboard/browser/clipboard.ts +++ b/src/vs/editor/contrib/clipboard/browser/clipboard.ts @@ -16,6 +16,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; import * as nls from 'vs/nls'; import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; @@ -107,7 +108,9 @@ export const CopyAction = supportsCopy ? registerCommand(new MultiCommand({ MenuRegistry.appendMenuItem(MenuId.MenubarEditMenu, { submenu: MenuId.MenubarCopy, title: { value: nls.localize('copy as', "Copy As"), original: 'Copy As', }, group: '2_ccp', order: 3 }); MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextCopy, title: { value: nls.localize('copy as', "Copy As"), original: 'Copy As', }, group: CLIPBOARD_CONTEXT_MENU_GROUP, order: 3 }); -MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1 }); +MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1, when: ContextKeyExpr.and(ContextKeyExpr.notEquals('resourceScheme', 'output'), EditorContextKeys.editorTextFocus) }); +MenuRegistry.appendMenuItem(MenuId.EditorTitleContext, { submenu: MenuId.EditorTitleContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1 }); +MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { submenu: MenuId.ExplorerContextShare, title: { value: nls.localize('share', "Share"), original: 'Share', }, group: '11_share', order: -1 }); export const PasteAction = supportsPaste ? registerCommand(new MultiCommand({ id: 'editor.action.clipboardPasteAction', diff --git a/src/vs/editor/contrib/codeAction/browser/codeAction.ts b/src/vs/editor/contrib/codeAction/browser/codeAction.ts index da54b65ee99..9ce2ced9889 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeAction.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeAction.ts @@ -27,6 +27,8 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource, filtersAction, mayIncludeActionsOfKind } from '../common/types'; export const codeActionCommandId = 'editor.action.codeAction'; +export const quickFixCommandId = 'editor.action.quickFix'; +export const autoFixCommandId = 'editor.action.autoFix'; export const refactorCommandId = 'editor.action.refactor'; export const refactorPreviewCommandId = 'editor.action.refactor.preview'; export const sourceActionCommandId = 'editor.action.sourceAction'; @@ -231,7 +233,7 @@ export async function applyCodeAction( accessor: ServicesAccessor, item: CodeActionItem, codeActionReason: ApplyCodeActionReason, - options?: { preview?: boolean; editor?: ICodeEditor }, + options?: { readonly preview?: boolean; readonly editor?: ICodeEditor }, token: CancellationToken = CancellationToken.None, ): Promise { const bulkEditService = accessor.get(IBulkEditService); diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts b/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts index 3a03f4bdeab..caf47d6dcf6 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts @@ -3,30 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAnchor } from 'vs/base/browser/ui/contextview/contextview'; import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Lazy } from 'vs/base/common/lazy'; -import { Disposable } from 'vs/base/common/lifecycle'; import { escapeRegExpCharacters } from 'vs/base/common/strings'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorAction, EditorCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { IPosition } from 'vs/editor/common/core/position'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { CodeActionTriggerType } from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { applyCodeAction, ApplyCodeActionReason, codeActionCommandId, fixAllCommandId, organizeImportsCommandId, refactorCommandId, refactorPreviewCommandId, sourceActionCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { CodeActionUi } from 'vs/editor/contrib/codeAction/browser/codeActionUi'; -import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; +import { autoFixCommandId, codeActionCommandId, fixAllCommandId, organizeImportsCommandId, quickFixCommandId, refactorCommandId, sourceActionCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; import * as nls from 'vs/nls'; -import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { IEditorProgressService } from 'vs/platform/progress/common/progress'; -import { CodeActionModel, CodeActionsState, SUPPORTED_CODE_ACTIONS } from './codeActionModel'; -import { CodeActionAutoApply, CodeActionCommandArgs, CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types'; +import { CodeActionAutoApply, CodeActionCommandArgs, CodeActionFilter, CodeActionKind, CodeActionTriggerSource } from '../common/types'; +import { CodeActionController } from './codeActionController'; +import { SUPPORTED_CODE_ACTIONS } from './codeActionModel'; function contextKeyForSupportedActions(kind: CodeActionKind) { return ContextKeyExpr.regex( @@ -34,26 +23,6 @@ function contextKeyForSupportedActions(kind: CodeActionKind) { new RegExp('(\\s|^)' + escapeRegExpCharacters(kind.value) + '\\b')); } -function refactorTrigger(editor: ICodeEditor, userArgs: any, preview: boolean, codeActionFrom: CodeActionTriggerSource) { - const args = CodeActionCommandArgs.fromUser(userArgs, { - kind: CodeActionKind.Refactor, - apply: CodeActionAutoApply.Never - }); - return triggerCodeActionsForEditorSelection(editor, - typeof userArgs?.kind === 'string' - ? args.preferred - ? nls.localize('editor.action.refactor.noneMessage.preferred.kind', "No preferred refactorings for '{0}' available", userArgs.kind) - : nls.localize('editor.action.refactor.noneMessage.kind', "No refactorings for '{0}' available", userArgs.kind) - : args.preferred - ? nls.localize('editor.action.refactor.noneMessage.preferred', "No preferred refactorings available") - : nls.localize('editor.action.refactor.noneMessage', "No refactorings available"), - { - include: CodeActionKind.Refactor.contains(args.kind) ? args.kind : CodeActionKind.None, - onlyIncludePreferredActions: args.preferred - }, - args.apply, preview, codeActionFrom); -} - const argsSchema: IJSONSchema = { type: 'object', defaultSnippets: [{ body: { kind: '' } }], @@ -81,108 +50,29 @@ const argsSchema: IJSONSchema = { } }; -export class CodeActionController extends Disposable implements IEditorContribution { - - public static readonly ID = 'editor.contrib.codeActionController'; - - public static get(editor: ICodeEditor): CodeActionController | null { - return editor.getContribution(CodeActionController.ID); - } - - private readonly _editor: ICodeEditor; - private readonly _model: CodeActionModel; - private readonly _ui: Lazy; - - constructor( - editor: ICodeEditor, - @IMarkerService markerService: IMarkerService, - @IContextKeyService contextKeyService: IContextKeyService, - @IEditorProgressService progressService: IEditorProgressService, - @IInstantiationService private readonly _instantiationService: IInstantiationService, - @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService - ) { - super(); - - this._editor = editor; - - this._model = this._register(new CodeActionModel(this._editor, languageFeaturesService.codeActionProvider, markerService, contextKeyService, progressService)); - - this._register(this._model.onDidChangeState(newState => this.update(newState))); - - this._ui = new Lazy(() => - this._register(_instantiationService.createInstance(CodeActionUi, editor, QuickFixAction.Id, AutoFixAction.Id, { - applyCodeAction: async (action, retrigger, preview) => { - try { - await this._applyCodeAction(action, preview); - } finally { - if (retrigger) { - this._trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.QuickFix, filter: {} }); - } - } - } - })) - ); - } - - private update(newState: CodeActionsState.State): void { - this._ui.value.update(newState); - } - - public showCodeActions(_trigger: CodeActionTrigger, actions: CodeActionSet, at: IAnchor | IPosition) { - return this._ui.value.showCodeActionList(actions, at, { includeDisabledActions: false, fromLightbulb: false }); - } - - public manualTriggerAtCurrentPosition( - notAvailableMessage: string, - triggerAction: CodeActionTriggerSource, - filter?: CodeActionFilter, - autoApply?: CodeActionAutoApply, - preview?: boolean, - ): void { - if (!this._editor.hasModel()) { - return; - } - - MessageController.get(this._editor)?.closeMessage(); - const triggerPosition = this._editor.getPosition(); - this._trigger({ type: CodeActionTriggerType.Invoke, triggerAction, filter, autoApply, context: { notAvailableMessage, position: triggerPosition }, preview }); - } - - private _trigger(trigger: CodeActionTrigger) { - return this._model.trigger(trigger); - } - - private _applyCodeAction(action: CodeActionItem, preview: boolean): Promise { - return this._instantiationService.invokeFunction(applyCodeAction, action, ApplyCodeActionReason.FromCodeActions, { preview, editor: this._editor }); - } -} - function triggerCodeActionsForEditorSelection( editor: ICodeEditor, notAvailableMessage: string, filter: CodeActionFilter | undefined, autoApply: CodeActionAutoApply | undefined, - preview: boolean = false, triggerAction: CodeActionTriggerSource = CodeActionTriggerSource.Default ): void { if (editor.hasModel()) { const controller = CodeActionController.get(editor); - controller?.manualTriggerAtCurrentPosition(notAvailableMessage, triggerAction, filter, autoApply, preview); + controller?.manualTriggerAtCurrentPosition(notAvailableMessage, triggerAction, filter, autoApply); } } export class QuickFixAction extends EditorAction { - static readonly Id = 'editor.action.quickFix'; - constructor() { super({ - id: QuickFixAction.Id, + id: quickFixCommandId, label: nls.localize('quickfix.trigger.label', "Quick Fix..."), alias: 'Quick Fix...', precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider), kbOpts: { - kbExpr: EditorContextKeys.editorTextFocus, + kbExpr: EditorContextKeys.textInputFocus, primary: KeyMod.CtrlCmd | KeyCode.Period, weight: KeybindingWeight.EditorContrib } @@ -190,7 +80,7 @@ export class QuickFixAction extends EditorAction { } public run(_accessor: ServicesAccessor, editor: ICodeEditor): void { - return triggerCodeActionsForEditorSelection(editor, nls.localize('editor.action.quickFix.noneMessage', "No code actions available"), undefined, undefined, false, CodeActionTriggerSource.QuickFix); + return triggerCodeActionsForEditorSelection(editor, nls.localize('editor.action.quickFix.noneMessage', "No code actions available"), undefined, undefined, CodeActionTriggerSource.QuickFix); } } @@ -239,7 +129,7 @@ export class RefactorAction extends EditorAction { alias: 'Refactor...', precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider), kbOpts: { - kbExpr: EditorContextKeys.editorTextFocus, + kbExpr: EditorContextKeys.textInputFocus, primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyR, mac: { primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KeyR @@ -261,27 +151,23 @@ export class RefactorAction extends EditorAction { } public run(_accessor: ServicesAccessor, editor: ICodeEditor, userArgs: any): void { - return refactorTrigger(editor, userArgs, false, CodeActionTriggerSource.Refactor); - } -} - -export class RefactorPreview extends EditorAction { - - constructor() { - super({ - id: refactorPreviewCommandId, - label: nls.localize('refactor.preview.label', "Refactor with Preview..."), - alias: 'Refactor Preview...', - precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider), - description: { - description: 'Refactor Preview...', - args: [{ name: 'args', schema: argsSchema }] - } + const args = CodeActionCommandArgs.fromUser(userArgs, { + kind: CodeActionKind.Refactor, + apply: CodeActionAutoApply.Never }); - } - - public run(_accessor: ServicesAccessor, editor: ICodeEditor, userArgs: any): void { - return refactorTrigger(editor, userArgs, true, CodeActionTriggerSource.RefactorPreview); + return triggerCodeActionsForEditorSelection(editor, + typeof userArgs?.kind === 'string' + ? args.preferred + ? nls.localize('editor.action.refactor.noneMessage.preferred.kind', "No preferred refactorings for '{0}' available", userArgs.kind) + : nls.localize('editor.action.refactor.noneMessage.kind', "No refactorings for '{0}' available", userArgs.kind) + : args.preferred + ? nls.localize('editor.action.refactor.noneMessage.preferred', "No preferred refactorings available") + : nls.localize('editor.action.refactor.noneMessage', "No refactorings available"), + { + include: CodeActionKind.Refactor.contains(args.kind) ? args.kind : CodeActionKind.None, + onlyIncludePreferredActions: args.preferred + }, + args.apply, CodeActionTriggerSource.Refactor); } } @@ -325,7 +211,7 @@ export class SourceAction extends EditorAction { includeSourceActions: true, onlyIncludePreferredActions: args.preferred, }, - args.apply, undefined, CodeActionTriggerSource.SourceAction); + args.apply, CodeActionTriggerSource.SourceAction); } } @@ -340,7 +226,7 @@ export class OrganizeImportsAction extends EditorAction { EditorContextKeys.writable, contextKeyForSupportedActions(CodeActionKind.SourceOrganizeImports)), kbOpts: { - kbExpr: EditorContextKeys.editorTextFocus, + kbExpr: EditorContextKeys.textInputFocus, primary: KeyMod.Shift | KeyMod.Alt | KeyCode.KeyO, weight: KeybindingWeight.EditorContrib }, @@ -351,7 +237,7 @@ export class OrganizeImportsAction extends EditorAction { return triggerCodeActionsForEditorSelection(editor, nls.localize('editor.action.organize.noneMessage', "No organize imports action available"), { include: CodeActionKind.SourceOrganizeImports, includeSourceActions: true }, - CodeActionAutoApply.IfSingle, undefined, CodeActionTriggerSource.OrganizeImports); + CodeActionAutoApply.IfSingle, CodeActionTriggerSource.OrganizeImports); } } @@ -372,24 +258,22 @@ export class FixAllAction extends EditorAction { return triggerCodeActionsForEditorSelection(editor, nls.localize('fixAll.noneMessage', "No fix all action available"), { include: CodeActionKind.SourceFixAll, includeSourceActions: true }, - CodeActionAutoApply.IfSingle, undefined, CodeActionTriggerSource.FixAll); + CodeActionAutoApply.IfSingle, CodeActionTriggerSource.FixAll); } } export class AutoFixAction extends EditorAction { - static readonly Id = 'editor.action.autoFix'; - constructor() { super({ - id: AutoFixAction.Id, + id: autoFixCommandId, label: nls.localize('autoFix.label', "Auto Fix..."), alias: 'Auto Fix...', precondition: ContextKeyExpr.and( EditorContextKeys.writable, contextKeyForSupportedActions(CodeActionKind.QuickFix)), kbOpts: { - kbExpr: EditorContextKeys.editorTextFocus, + kbExpr: EditorContextKeys.textInputFocus, primary: KeyMod.Alt | KeyMod.Shift | KeyCode.Period, mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Period @@ -406,6 +290,6 @@ export class AutoFixAction extends EditorAction { include: CodeActionKind.QuickFix, onlyIncludePreferredActions: true }, - CodeActionAutoApply.IfSingle, undefined, CodeActionTriggerSource.AutoFix); + CodeActionAutoApply.IfSingle, CodeActionTriggerSource.AutoFix); } } diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts b/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts index 8629326b68e..e24fecf8d2f 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts @@ -5,15 +5,17 @@ import { EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { editorConfigurationBaseNode } from 'vs/editor/common/config/editorConfigurationSchema'; -import { AutoFixAction, CodeActionCommand, CodeActionController, FixAllAction, OrganizeImportsAction, QuickFixAction, RefactorAction, RefactorPreview, SourceAction } from 'vs/editor/contrib/codeAction/browser/codeActionCommands'; +import { AutoFixAction, CodeActionCommand, FixAllAction, OrganizeImportsAction, QuickFixAction, RefactorAction, SourceAction } from 'vs/editor/contrib/codeAction/browser/codeActionCommands'; +import { CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionController'; +import { LightBulbWidget } from 'vs/editor/contrib/codeAction/browser/lightBulbWidget'; import * as nls from 'vs/nls'; import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { Registry } from 'vs/platform/registry/common/platform'; registerEditorContribution(CodeActionController.ID, CodeActionController, EditorContributionInstantiation.Eventually); +registerEditorContribution(LightBulbWidget.ID, LightBulbWidget, EditorContributionInstantiation.Lazy); registerEditorAction(QuickFixAction); registerEditorAction(RefactorAction); -registerEditorAction(RefactorPreview); registerEditorAction(SourceAction); registerEditorAction(OrganizeImportsAction); registerEditorAction(AutoFixAction); diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionUi.ts b/src/vs/editor/contrib/codeAction/browser/codeActionController.ts similarity index 65% rename from src/vs/editor/contrib/codeAction/browser/codeActionUi.ts rename to src/vs/editor/contrib/codeAction/browser/codeActionController.ts index 14bba132c54..384902ff004 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionUi.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionController.ts @@ -3,6 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +/* eslint-disable local/code-no-native-private */ + import { getDomNodePagePosition } from 'vs/base/browser/dom'; import { IAnchor } from 'vs/base/browser/ui/contextview/contextview'; import { IAction } from 'vs/base/common/actions'; @@ -11,53 +13,75 @@ import { Lazy } from 'vs/base/common/lazy'; import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { IPosition, Position } from 'vs/editor/common/core/position'; -import { ScrollType } from 'vs/editor/common/editorCommon'; +import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; import { CodeActionTriggerType } from 'vs/editor/common/languages'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { ApplyCodeActionReason, applyCodeAction } from 'vs/editor/contrib/codeAction/browser/codeAction'; import { CodeActionKeybindingResolver } from 'vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver'; import { toMenuItems } from 'vs/editor/contrib/codeAction/browser/codeActionMenu'; +import { LightBulbWidget } from 'vs/editor/contrib/codeAction/browser/lightBulbWidget'; import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; import { localize } from 'vs/nls'; -import { IActionWidgetService, IRenderDelegate } from 'vs/platform/actionWidget/browser/actionWidget'; +import { IActionListDelegate } from 'vs/platform/actionWidget/browser/actionList'; +import { IActionWidgetService } from 'vs/platform/actionWidget/browser/actionWidget'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { CodeActionAutoApply, CodeActionItem, CodeActionSet, CodeActionTrigger } from '../common/types'; -import { CodeActionsState } from './codeActionModel'; -import { LightBulbWidget } from './lightBulbWidget'; +import { IMarkerService } from 'vs/platform/markers/common/markers'; +import { IEditorProgressService } from 'vs/platform/progress/common/progress'; +import { CodeActionAutoApply, CodeActionFilter, CodeActionItem, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types'; +import { CodeActionModel, CodeActionsState } from './codeActionModel'; -export interface IActionShowOptions { + +interface IActionShowOptions { readonly includeDisabledActions?: boolean; readonly fromLightbulb?: boolean; } -export class CodeActionUi extends Disposable { +export class CodeActionController extends Disposable implements IEditorContribution { - private readonly _lightBulbWidget: Lazy; + public static readonly ID = 'editor.contrib.codeActionController'; + + public static get(editor: ICodeEditor): CodeActionController | null { + return editor.getContribution(CodeActionController.ID); + } + + private readonly _editor: ICodeEditor; + private readonly _model: CodeActionModel; + + private readonly _lightBulbWidget: Lazy; private readonly _activeCodeActions = this._register(new MutableDisposable()); + private _showDisabled = false; private readonly _resolver: CodeActionKeybindingResolver; #disposed = false; - private _showDisabled = false; - constructor( - private readonly _editor: ICodeEditor, - quickFixActionId: string, - preferredFixActionId: string, - private readonly delegate: { - applyCodeAction: (action: CodeActionItem, regtriggerAfterApply: boolean, preview: boolean) => Promise; - }, + editor: ICodeEditor, + @IMarkerService markerService: IMarkerService, + @IContextKeyService contextKeyService: IContextKeyService, @IInstantiationService instantiationService: IInstantiationService, + @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, + @IEditorProgressService progressService: IEditorProgressService, + @ICommandService private readonly _commandService: ICommandService, @IConfigurationService private readonly _configurationService: IConfigurationService, @IActionWidgetService private readonly _actionWidgetService: IActionWidgetService, - @ICommandService private readonly _commandService: ICommandService, + @IInstantiationService private readonly _instantiationService: IInstantiationService, ) { super(); + this._editor = editor; + + this._model = this._register(new CodeActionModel(this._editor, languageFeaturesService.codeActionProvider, markerService, contextKeyService, progressService)); + this._register(this._model.onDidChangeState(newState => this.update(newState))); + this._lightBulbWidget = new Lazy(() => { - const widget = this._register(instantiationService.createInstance(LightBulbWidget, this._editor, quickFixActionId, preferredFixActionId)); - this._register(widget.onClick(e => this.showCodeActionList(e.actions, e, { includeDisabledActions: false, fromLightbulb: true }))); + const widget = this._editor.getContribution(LightBulbWidget.ID); + if (widget) { + this._register(widget.onClick(e => this.showCodeActionList(e.actions, e, { includeDisabledActions: false, fromLightbulb: true }))); + } return widget; }); @@ -71,7 +95,48 @@ export class CodeActionUi extends Disposable { super.dispose(); } - public async update(newState: CodeActionsState.State): Promise { + public showCodeActions(_trigger: CodeActionTrigger, actions: CodeActionSet, at: IAnchor | IPosition) { + return this.showCodeActionList(actions, at, { includeDisabledActions: false, fromLightbulb: false }); + } + + public hideCodeActions(): void { + this._actionWidgetService.hide(); + } + + public manualTriggerAtCurrentPosition( + notAvailableMessage: string, + triggerAction: CodeActionTriggerSource, + filter?: CodeActionFilter, + autoApply?: CodeActionAutoApply, + ): void { + if (!this._editor.hasModel()) { + return; + } + + MessageController.get(this._editor)?.closeMessage(); + const triggerPosition = this._editor.getPosition(); + this._trigger({ type: CodeActionTriggerType.Invoke, triggerAction, filter, autoApply, context: { notAvailableMessage, position: triggerPosition } }); + } + + private _trigger(trigger: CodeActionTrigger) { + return this._model.trigger(trigger); + } + + private async _applyCodeAction(action: CodeActionItem, retrigger: boolean, preview: boolean): Promise { + try { + await this._instantiationService.invokeFunction(applyCodeAction, action, ApplyCodeActionReason.FromCodeActions, { preview, editor: this._editor }); + } finally { + if (retrigger) { + this._trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.QuickFix, filter: {} }); + } + } + } + + public hideLightBulbWidget(): void { + this._lightBulbWidget.rawValue?.hide(); + } + + private async update(newState: CodeActionsState.State): Promise { if (newState.type !== CodeActionsState.Type.Triggered) { this._lightBulbWidget.rawValue?.hide(); return; @@ -89,7 +154,7 @@ export class CodeActionUi extends Disposable { return; } - this._lightBulbWidget.value.update(actions, newState.trigger, newState.position); + this._lightBulbWidget.value?.update(actions, newState.trigger, newState.position); if (newState.trigger.type === CodeActionTriggerType.Invoke) { if (newState.trigger.filter?.include) { // Triggered for specific scope @@ -98,8 +163,8 @@ export class CodeActionUi extends Disposable { const validActionToApply = this.tryGetValidActionToApply(newState.trigger, actions); if (validActionToApply) { try { - this._lightBulbWidget.value.hide(); - await this.delegate.applyCodeAction(validActionToApply, false, false); + this._lightBulbWidget.value?.hide(); + await this._applyCodeAction(validActionToApply, false, false); } finally { actions.dispose(); } @@ -181,9 +246,9 @@ export class CodeActionUi extends Disposable { const anchor = Position.isIPosition(at) ? this.toCoords(at) : at; - const delegate: IRenderDelegate = { + const delegate: IActionListDelegate = { onSelect: async (action: CodeActionItem, preview?: boolean) => { - this.delegate.applyCodeAction(action, /* retrigger */ true, !!preview ? preview : false); + this._applyCodeAction(action, /* retrigger */ true, !!preview); this._actionWidgetService.hide(); }, onHide: () => { @@ -234,7 +299,7 @@ export class CodeActionUi extends Disposable { tooltip: command.tooltip ?? '', class: undefined, enabled: true, - run: () => this._commandService.executeCommand(command.id, ...(command.commandArguments ?? [])), + run: () => this._commandService.executeCommand(command.id, ...(command.arguments ?? [])), })); if (options.includeDisabledActions && actions.validActions.length > 0 && actions.allActions.length !== actions.validActions.length) { diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts b/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts index 214d23cb989..0f645908a5f 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts @@ -11,7 +11,7 @@ import { CodeAction } from 'vs/editor/common/languages'; import { CodeActionItem, CodeActionKind } from 'vs/editor/contrib/codeAction/common/types'; import 'vs/editor/contrib/symbolIcons/browser/symbolIcons'; // The codicon symbol colors are defined here and must be loaded to get colors import { localize } from 'vs/nls'; -import { ActionListItemKind, IListMenuItem } from 'vs/platform/actionWidget/browser/actionList'; +import { ActionListItemKind, IActionListItem } from 'vs/platform/actionWidget/browser/actionList'; interface ActionGroup { readonly kind: CodeActionKind; @@ -36,9 +36,9 @@ export function toMenuItems( inputCodeActions: readonly CodeActionItem[], showHeaders: boolean, keybindingResolver: (action: CodeAction) => ResolvedKeybinding | undefined -): IListMenuItem[] { +): IActionListItem[] { if (!showHeaders) { - return inputCodeActions.map((action): IListMenuItem => { + return inputCodeActions.map((action): IActionListItem => { return { kind: ActionListItemKind.Action, item: action, @@ -62,7 +62,7 @@ export function toMenuItems( } } - const allMenuItems: IListMenuItem[] = []; + const allMenuItems: IActionListItem[] = []; for (const menuEntry of menuEntries) { if (menuEntry.actions.length) { allMenuItems.push({ kind: ActionListItemKind.Header, group: menuEntry.group }); diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts b/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts index 85f4a83cd3f..e36f94c275f 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionModel.ts @@ -3,6 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +/* eslint-disable local/code-no-native-private */ + import { CancelablePromise, createCancelablePromise, TimeoutTimer } from 'vs/base/common/async'; import { isCancellationError } from 'vs/base/common/errors'; import { Emitter } from 'vs/base/common/event'; @@ -12,22 +14,20 @@ import { URI } from 'vs/base/common/uri'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; import { Selection } from 'vs/editor/common/core/selection'; import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; import { CodeActionProvider, CodeActionTriggerType } from 'vs/editor/common/languages'; import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IMarkerService } from 'vs/platform/markers/common/markers'; import { IEditorProgressService, Progress } from 'vs/platform/progress/common/progress'; -import { getCodeActions } from './codeAction'; import { CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types'; +import { getCodeActions } from './codeAction'; export const SUPPORTED_CODE_ACTIONS = new RawContextKey('supportedCodeAction', ''); -type TriggeredCodeAction = undefined | { +type TriggeredCodeAction = { readonly selection: Selection; readonly trigger: CodeActionTrigger; - readonly position: Position; }; class CodeActionOracle extends Disposable { @@ -37,33 +37,27 @@ class CodeActionOracle extends Disposable { constructor( private readonly _editor: ICodeEditor, private readonly _markerService: IMarkerService, - private readonly _signalChange: (triggered: TriggeredCodeAction) => void, + private readonly _signalChange: (triggered: TriggeredCodeAction | undefined) => void, private readonly _delay: number = 250, ) { super(); this._register(this._markerService.onMarkerChanged(e => this._onMarkerChanges(e))); - this._register(this._editor.onDidChangeCursorPosition(() => this._onCursorChange())); + this._register(this._editor.onDidChangeCursorPosition(() => this._tryAutoTrigger())); } - public trigger(trigger: CodeActionTrigger): TriggeredCodeAction { + public trigger(trigger: CodeActionTrigger): void { const selection = this._getRangeOfSelectionUnlessWhitespaceEnclosed(trigger); - return this._createEventAndSignalChange(trigger, selection); + this._signalChange(selection ? { trigger, selection } : undefined); } private _onMarkerChanges(resources: readonly URI[]): void { const model = this._editor.getModel(); - if (!model) { - return; - } - - if (resources.some(resource => isEqual(resource, model.uri))) { - this._autoTriggerTimer.cancelAndSet(() => { - this.trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.Default }); - }, this._delay); + if (model && resources.some(resource => isEqual(resource, model.uri))) { + this._tryAutoTrigger(); } } - private _onCursorChange(): void { + private _tryAutoTrigger() { this._autoTriggerTimer.cancelAndSet(() => { this.trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.Default }); }, this._delay); @@ -73,6 +67,7 @@ class CodeActionOracle extends Disposable { if (!this._editor.hasModel()) { return undefined; } + const model = this._editor.getModel(); const selection = this._editor.getSelection(); if (selection.isEmpty() && trigger.type === CodeActionTriggerType.Auto) { @@ -100,31 +95,11 @@ class CodeActionOracle extends Disposable { } return selection; } - - private _createEventAndSignalChange(trigger: CodeActionTrigger, selection: Selection | undefined): TriggeredCodeAction { - const model = this._editor.getModel(); - if (!selection || !model) { - // cancel - this._signalChange(undefined); - return undefined; - } - - const e: TriggeredCodeAction = { - trigger, - selection, - position: selection.getStartPosition(), - }; - this._signalChange(e); - return e; - } } export namespace CodeActionsState { - export const enum Type { - Empty, - Triggered, - } + export const enum Type { Empty, Triggered } export const Empty = { type: Type.Empty } as const; @@ -135,7 +110,6 @@ export namespace CodeActionsState { constructor( public readonly trigger: CodeActionTrigger, - public readonly rangeOrSelection: Range | Selection, public readonly position: Position, private readonly _cancellablePromise: CancelablePromise, ) { @@ -155,18 +129,19 @@ export namespace CodeActionsState { export type State = typeof Empty | Triggered; } -const emptyCodeActionSet: CodeActionSet = { +const emptyCodeActionSet = Object.freeze({ allActions: [], validActions: [], dispose: () => { }, documentation: [], hasAutoFix: false -}; +}); export class CodeActionModel extends Disposable { private readonly _codeActionOracle = this._register(new MutableDisposable()); private _state: CodeActionsState.State = CodeActionsState.Empty; + private readonly _supportedCodeActions: IContextKey; private readonly _onDidChangeState = this._register(new Emitter()); @@ -215,13 +190,7 @@ export class CodeActionModel extends Disposable { && this._registry.has(model) && !this._editor.getOption(EditorOption.readOnly) ) { - const supportedActions: string[] = []; - for (const provider of this._registry.all(model)) { - if (Array.isArray(provider.providedCodeActionKinds)) { - supportedActions.push(...provider.providedCodeActionKinds); - } - } - + const supportedActions: string[] = this._registry.all(model).flatMap(provider => provider.providedCodeActionKinds ?? []); this._supportedCodeActions.set(supportedActions.join(' ')); this._codeActionOracle.value = new CodeActionOracle(this._editor, this._markerService, trigger => { @@ -235,8 +204,7 @@ export class CodeActionModel extends Disposable { this._progressService?.showWhile(actions, 250); } - this.setState(new CodeActionsState.Triggered(trigger.trigger, trigger.selection, trigger.position, actions)); - + this.setState(new CodeActionsState.Triggered(trigger.trigger, trigger.selection.getStartPosition(), actions)); }, undefined); this._codeActionOracle.value.trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.Default }); } else { diff --git a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts index ff0d6d7864e..948e4d7d6bb 100644 --- a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts +++ b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts @@ -6,15 +6,16 @@ import * as dom from 'vs/base/browser/dom'; import { Gesture } from 'vs/base/browser/touch'; import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; +import { ThemeIcon } from 'vs/base/common/themables'; import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./lightBulbWidget'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IPosition } from 'vs/editor/common/core/position'; import { computeIndentLevel } from 'vs/editor/common/model/utils'; +import { autoFixCommandId, quickFixCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; import type { CodeActionSet, CodeActionTrigger } from 'vs/editor/contrib/codeAction/common/types'; import * as nls from 'vs/nls'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; @@ -42,14 +43,15 @@ namespace LightBulbState { export type State = typeof Hidden | Showing; } - export class LightBulbWidget extends Disposable implements IContentWidget { + public static readonly ID = 'editor.contrib.lightbulbWidget'; + private static readonly _posPref = [ContentWidgetPositionPreference.EXACT]; private readonly _domNode: HTMLElement; - private readonly _onClick = this._register(new Emitter<{ x: number; y: number; actions: CodeActionSet; trigger: CodeActionTrigger }>()); + private readonly _onClick = this._register(new Emitter<{ readonly x: number; readonly y: number; readonly actions: CodeActionSet; readonly trigger: CodeActionTrigger }>()); public readonly onClick = this._onClick.event; private _state: LightBulbState.State = LightBulbState.Hidden; @@ -59,8 +61,6 @@ export class LightBulbWidget extends Disposable implements IContentWidget { constructor( private readonly _editor: ICodeEditor, - quickFixActionId: string, - preferredFixActionId: string, @IKeybindingService keybindingService: IKeybindingService ) { super(); @@ -122,8 +122,8 @@ export class LightBulbWidget extends Disposable implements IContentWidget { })); this._register(Event.runAndSubscribe(keybindingService.onDidUpdateKeybindings, () => { - this._preferredKbLabel = withNullAsUndefined(keybindingService.lookupKeybinding(preferredFixActionId)?.getLabel()); - this._quickFixKbLabel = withNullAsUndefined(keybindingService.lookupKeybinding(quickFixActionId)?.getLabel()); + this._preferredKbLabel = withNullAsUndefined(keybindingService.lookupKeybinding(autoFixCommandId)?.getLabel()); + this._quickFixKbLabel = withNullAsUndefined(keybindingService.lookupKeybinding(quickFixCommandId)?.getLabel()); this._updateLightBulbTitleAndIcon(); })); diff --git a/src/vs/editor/contrib/codeAction/common/types.ts b/src/vs/editor/contrib/codeAction/common/types.ts index 07f55364a3b..e1e8d835765 100644 --- a/src/vs/editor/contrib/codeAction/common/types.ts +++ b/src/vs/editor/contrib/codeAction/common/types.ts @@ -7,7 +7,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { onUnexpectedExternalError } from 'vs/base/common/errors'; import { Position } from 'vs/editor/common/core/position'; import * as languages from 'vs/editor/common/languages'; -import { ActionSet, IActionItem } from 'vs/platform/actionWidget/common/actionWidget'; +import { ActionSet } from 'vs/platform/actionWidget/common/actionWidget'; export class CodeActionKind { private static readonly sep = '.'; @@ -146,7 +146,6 @@ export interface CodeActionTrigger { readonly notAvailableMessage: string; readonly position: Position; }; - readonly preview?: boolean; } export class CodeActionCommandArgs { @@ -188,7 +187,7 @@ export class CodeActionCommandArgs { ) { } } -export class CodeActionItem implements IActionItem { +export class CodeActionItem { constructor( public readonly action: languages.CodeAction, @@ -215,10 +214,5 @@ export interface CodeActionSet extends ActionSet { readonly validActions: readonly CodeActionItem[]; readonly allActions: readonly CodeActionItem[]; - readonly documentation: readonly { - id: string; - title: string; - tooltip?: string; - commandArguments?: any[]; - }[]; + readonly documentation: readonly languages.Command[]; } diff --git a/src/vs/editor/contrib/codelens/browser/codelensController.ts b/src/vs/editor/contrib/codelens/browser/codelensController.ts index 6eab699bd4f..4fd3619fb51 100644 --- a/src/vs/editor/contrib/codelens/browser/codelensController.ts +++ b/src/vs/editor/contrib/codelens/browser/codelensController.ts @@ -223,6 +223,11 @@ export class CodeLensContribution implements IEditorContribution { // Ask for all references again scheduler.schedule(); + + // Cancel pending and active resolve requests + this._resolveCodeLensesScheduler.cancel(); + this._resolveCodeLensesPromise?.cancel(); + this._resolveCodeLensesPromise = undefined; })); this._localToDispose.add(this._editor.onDidFocusEditorWidget(() => { scheduler.schedule(); diff --git a/src/vs/editor/contrib/colorPicker/browser/color.ts b/src/vs/editor/contrib/colorPicker/browser/color.ts index 2b1efbefecf..9cf73f794fa 100644 --- a/src/vs/editor/contrib/colorPicker/browser/color.ts +++ b/src/vs/editor/contrib/colorPicker/browser/color.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from 'vs/base/common/cancellation'; -import { illegalArgument } from 'vs/base/common/errors'; +import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors'; import { URI } from 'vs/base/common/uri'; import { IRange, Range } from 'vs/editor/common/core/range'; import { ITextModel } from 'vs/editor/common/model'; @@ -13,83 +13,122 @@ import { IModelService } from 'vs/editor/common/services/model'; import { CommandsRegistry } from 'vs/platform/commands/common/commands'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; +import { DefaultDocumentColorProvider } from 'vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; - -export interface IColorData { - colorInfo: IColorInformation; - provider: DocumentColorProvider; -} - -export function getColors(registry: LanguageFeatureRegistry, model: ITextModel, token: CancellationToken): Promise { - const colors: IColorData[] = []; - const providers = registry.ordered(model).reverse(); - const promises = providers.map(provider => Promise.resolve(provider.provideDocumentColors(model, token)).then(result => { - if (Array.isArray(result)) { - for (const colorInfo of result) { - colors.push({ colorInfo, provider }); - } - } - })); - - return Promise.all(promises).then(() => colors); +export async function getColors(colorProviderRegistry: LanguageFeatureRegistry, model: ITextModel, token: CancellationToken, isDefaultColorDecoratorsEnabled: boolean = true): Promise { + return _findColorData(new ColorDataCollector(), colorProviderRegistry, model, token, isDefaultColorDecoratorsEnabled); } export function getColorPresentations(model: ITextModel, colorInfo: IColorInformation, provider: DocumentColorProvider, token: CancellationToken): Promise { return Promise.resolve(provider.provideColorPresentations(model, colorInfo, token)); } -CommandsRegistry.registerCommand('_executeDocumentColorProvider', function (accessor, ...args) { +export interface IColorData { + colorInfo: IColorInformation; + provider: DocumentColorProvider; +} - const [resource] = args; - if (!(resource instanceof URI)) { - throw illegalArgument(); +interface IExtColorData { range: IRange; color: [number, number, number, number] } + +interface DataCollector { + compute(provider: DocumentColorProvider, model: ITextModel, token: CancellationToken, result: T[]): Promise; +} + +class ColorDataCollector implements DataCollector { + constructor() { } + async compute(provider: DocumentColorProvider, model: ITextModel, token: CancellationToken, colors: IColorData[]): Promise { + const documentColors = await provider.provideDocumentColors(model, token); + if (Array.isArray(documentColors)) { + for (const colorInfo of documentColors) { + colors.push({ colorInfo, provider }); + } + } + return Array.isArray(documentColors); } +} + +class ExtColorDataCollector implements DataCollector { + constructor() { } + async compute(provider: DocumentColorProvider, model: ITextModel, token: CancellationToken, colors: IExtColorData[]): Promise { + const documentColors = await provider.provideDocumentColors(model, token); + if (Array.isArray(documentColors)) { + for (const colorInfo of documentColors) { + colors.push({ range: colorInfo.range, color: [colorInfo.color.red, colorInfo.color.green, colorInfo.color.blue, colorInfo.color.alpha] }); + } + } + return Array.isArray(documentColors); + } + +} + +class ColorPresentationsCollector implements DataCollector { + constructor(private colorInfo: IColorInformation) { } + async compute(provider: DocumentColorProvider, model: ITextModel, _token: CancellationToken, colors: IColorPresentation[]): Promise { + const documentColors = await provider.provideColorPresentations(model, this.colorInfo, CancellationToken.None); + if (Array.isArray(documentColors)) { + colors.push(...documentColors); + } + return Array.isArray(documentColors); + } +} + +async function _findColorData(collector: DataCollector, colorProviderRegistry: LanguageFeatureRegistry, model: ITextModel, token: CancellationToken, isDefaultColorDecoratorsEnabled: boolean): Promise { + let validDocumentColorProviderFound = false; + let defaultProvider: DefaultDocumentColorProvider | undefined; + const colorData: T[] = []; + const documentColorProviders = colorProviderRegistry.ordered(model); + for (let i = documentColorProviders.length - 1; i >= 0; i--) { + const provider = documentColorProviders[i]; + if (provider instanceof DefaultDocumentColorProvider) { + defaultProvider = provider; + } else { + try { + if (await collector.compute(provider, model, token, colorData)) { + validDocumentColorProviderFound = true; + } + } catch (e) { + onUnexpectedExternalError(e); + } + } + } + if (validDocumentColorProviderFound) { + return colorData; + } + if (defaultProvider && isDefaultColorDecoratorsEnabled) { + await collector.compute(defaultProvider, model, token, colorData); + return colorData; + } + return []; +} + +function _setupColorCommand(accessor: ServicesAccessor, resource: URI): { model: ITextModel; colorProviderRegistry: LanguageFeatureRegistry; isDefaultColorDecoratorsEnabled: boolean } { const { colorProvider: colorProviderRegistry } = accessor.get(ILanguageFeaturesService); const model = accessor.get(IModelService).getModel(resource); if (!model) { throw illegalArgument(); } + const isDefaultColorDecoratorsEnabled = accessor.get(IConfigurationService).getValue('editor.defaultColorDecorators', { resource }); + return { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled }; +} - const rawCIs: { range: IRange; color: [number, number, number, number] }[] = []; - const providers = colorProviderRegistry.ordered(model).reverse(); - const promises = providers.map(provider => Promise.resolve(provider.provideDocumentColors(model, CancellationToken.None)).then(result => { - if (Array.isArray(result)) { - for (const ci of result) { - rawCIs.push({ range: ci.range, color: [ci.color.red, ci.color.green, ci.color.blue, ci.color.alpha] }); - } - } - })); - - return Promise.all(promises).then(() => rawCIs); +CommandsRegistry.registerCommand('_executeDocumentColorProvider', function (accessor, ...args) { + const [resource] = args; + if (!(resource instanceof URI)) { + throw illegalArgument(); + } + const { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled } = _setupColorCommand(accessor, resource); + return _findColorData(new ExtColorDataCollector(), colorProviderRegistry, model, CancellationToken.None, isDefaultColorDecoratorsEnabled); }); - CommandsRegistry.registerCommand('_executeColorPresentationProvider', function (accessor, ...args) { - const [color, context] = args; const { uri, range } = context; if (!(uri instanceof URI) || !Array.isArray(color) || color.length !== 4 || !Range.isIRange(range)) { throw illegalArgument(); } + const { model, colorProviderRegistry, isDefaultColorDecoratorsEnabled } = _setupColorCommand(accessor, uri); const [red, green, blue, alpha] = color; - - const { colorProvider: colorProviderRegistry } = accessor.get(ILanguageFeaturesService); - const model = accessor.get(IModelService).getModel(uri); - if (!model) { - throw illegalArgument(); - } - - const colorInfo = { - range, - color: { red, green, blue, alpha } - }; - - const presentations: IColorPresentation[] = []; - const providers = colorProviderRegistry.ordered(model).reverse(); - const promises = providers.map(provider => Promise.resolve(provider.provideColorPresentations(model, colorInfo, CancellationToken.None)).then(result => { - if (Array.isArray(result)) { - presentations.push(...result); - } - })); - return Promise.all(promises).then(() => presentations); + return _findColorData(new ColorPresentationsCollector({ range: range, color: { red, green, blue, alpha } }), colorProviderRegistry, model, CancellationToken.None, isDefaultColorDecoratorsEnabled); }); diff --git a/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts b/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts index 4b4e0fdb380..7ff5f54f248 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts @@ -6,6 +6,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ColorDecorationInjectedTextMarker } from 'vs/editor/contrib/colorPicker/browser/colorDetector'; @@ -31,6 +32,12 @@ export class ColorContribution extends Disposable implements IEditorContribution } private onMouseDown(mouseEvent: IEditorMouseEvent) { + + const colorDecoratorsActivatedOn = this._editor.getOption(EditorOption.colorDecoratorsActivatedOn); + if (colorDecoratorsActivatedOn !== 'click' && colorDecoratorsActivatedOn !== 'clickAndHover') { + return; + } + const target = mouseEvent.target; if (target.type !== MouseTargetType.CONTENT_TEXT) { @@ -55,7 +62,7 @@ export class ColorContribution extends Disposable implements IEditorContribution } if (!hoverController.isColorPickerVisible()) { const range = new Range(target.range.startLineNumber, target.range.startColumn + 1, target.range.endLineNumber, target.range.endColumn + 1); - hoverController.showContentHover(range, HoverStartMode.Immediate, HoverStartSource.Mouse, false); + hoverController.showContentHover(range, HoverStartMode.Immediate, HoverStartSource.Mouse, false, true); } } } diff --git a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts index 2d190f6600f..23ff1742e84 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts @@ -43,7 +43,8 @@ export class ColorDetector extends Disposable implements IEditorContribution { private readonly _colorDecoratorIds = this._editor.createDecorationsCollection(); - private _isEnabled: boolean; + private _isColorDecoratorsEnabled: boolean; + private _isDefaultColorDecoratorsEnabled: boolean; private readonly _ruleFactory = new DynamicCssRules(this._editor); @@ -58,19 +59,22 @@ export class ColorDetector extends Disposable implements IEditorContribution { super(); this._debounceInformation = languageFeatureDebounceService.for(_languageFeaturesService.colorProvider, 'Document Colors', { min: ColorDetector.RECOMPUTE_TIME }); this._register(_editor.onDidChangeModel(() => { - this._isEnabled = this.isEnabled(); - this.onModelChanged(); + this._isColorDecoratorsEnabled = this.isEnabled(); + this.updateColors(); })); - this._register(_editor.onDidChangeModelLanguage(() => this.onModelChanged())); - this._register(_languageFeaturesService.colorProvider.onDidChange(() => this.onModelChanged())); + this._register(_editor.onDidChangeModelLanguage(() => this.updateColors())); + this._register(_languageFeaturesService.colorProvider.onDidChange(() => this.updateColors())); this._register(_editor.onDidChangeConfiguration((e) => { - const prevIsEnabled = this._isEnabled; - this._isEnabled = this.isEnabled(); - const updated = prevIsEnabled !== this._isEnabled || e.hasChanged(EditorOption.colorDecoratorsLimit); - if (updated) { - if (this._isEnabled) { - this.onModelChanged(); - } else { + const prevIsEnabled = this._isColorDecoratorsEnabled; + this._isColorDecoratorsEnabled = this.isEnabled(); + this._isDefaultColorDecoratorsEnabled = this._editor.getOption(EditorOption.defaultColorDecorators); + const updatedColorDecoratorsSetting = prevIsEnabled !== this._isColorDecoratorsEnabled || e.hasChanged(EditorOption.colorDecoratorsLimit); + const updatedDefaultColorDecoratorsSetting = e.hasChanged(EditorOption.defaultColorDecorators); + if (updatedColorDecoratorsSetting || updatedDefaultColorDecoratorsSetting) { + if (this._isColorDecoratorsEnabled) { + this.updateColors(); + } + else { this.removeAllDecorations(); } } @@ -78,8 +82,9 @@ export class ColorDetector extends Disposable implements IEditorContribution { this._timeoutTimer = null; this._computePromise = null; - this._isEnabled = this.isEnabled(); - this.onModelChanged(); + this._isColorDecoratorsEnabled = this.isEnabled(); + this._isDefaultColorDecoratorsEnabled = this._editor.getOption(EditorOption.defaultColorDecorators); + this.updateColors(); } isEnabled(): boolean { @@ -114,10 +119,10 @@ export class ColorDetector extends Disposable implements IEditorContribution { super.dispose(); } - private onModelChanged(): void { + private updateColors(): void { this.stop(); - if (!this._isEnabled) { + if (!this._isColorDecoratorsEnabled) { return; } const model = this._editor.getModel(); @@ -138,22 +143,25 @@ export class ColorDetector extends Disposable implements IEditorContribution { this.beginCompute(); } - private beginCompute(): void { + private async beginCompute(): Promise { this._computePromise = createCancelablePromise(async token => { const model = this._editor.getModel(); if (!model) { - return Promise.resolve([]); + return []; } const sw = new StopWatch(false); - const colors = await getColors(this._languageFeaturesService.colorProvider, model, token); + const colors = await getColors(this._languageFeaturesService.colorProvider, model, token, this._isDefaultColorDecoratorsEnabled); this._debounceInformation.update(model, sw.elapsed()); return colors; }); - this._computePromise.then((colorInfos) => { - this.updateDecorations(colorInfos); - this.updateColorDecorators(colorInfos); + try { + const colors = await this._computePromise; + this.updateDecorations(colors); + this.updateColorDecorators(colors); this._computePromise = null; - }, onUnexpectedError); + } catch (e) { + onUnexpectedError(e); + } } private stop(): void { diff --git a/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts b/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts index cbc1b7ccdb8..e321fae6dfd 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts @@ -12,13 +12,14 @@ import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; import { IModelDecoration, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; import { DocumentColorProvider, IColorInformation } from 'vs/editor/common/languages'; -import { getColorPresentations } from 'vs/editor/contrib/colorPicker/browser/color'; +import { getColorPresentations, getColors } from 'vs/editor/contrib/colorPicker/browser/color'; import { ColorDetector } from 'vs/editor/contrib/colorPicker/browser/colorDetector'; import { ColorPickerModel } from 'vs/editor/contrib/colorPicker/browser/colorPickerModel'; import { ColorPickerWidget } from 'vs/editor/contrib/colorPicker/browser/colorPickerWidget'; import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart } from 'vs/editor/contrib/hover/browser/hoverTypes'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; +import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; export class ColorHover implements IHoverPart { @@ -53,7 +54,7 @@ export class ColorHoverParticipant implements IEditorHoverParticipant { + private async _computeAsync(_anchor: HoverAnchor, lineDecorations: IModelDecoration[], _token: CancellationToken): Promise { if (!this._editor.hasModel()) { return []; } @@ -76,7 +77,7 @@ export class ColorHoverParticipant implements IEditorHoverParticipant { - const originalText = editorModel.getValueInRange(colorInfo.range); - const { red, green, blue, alpha } = colorInfo.color; - const rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha); - const color = new Color(rgba); - - const colorPresentations = await getColorPresentations(editorModel, colorInfo, provider, CancellationToken.None); - const model = new ColorPickerModel(color, [], 0); - model.colorPresentations = colorPresentations || []; - model.guessColorPresentation(color, originalText); - - return new ColorHover(this, Range.lift(colorInfo.range), model, provider); - } - public renderHoverParts(context: IEditorHoverRenderContext, hoverParts: ColorHover[]): IDisposable { - if (hoverParts.length === 0 || !this._editor.hasModel()) { - return Disposable.None; - } - - const disposables = new DisposableStore(); - const colorHover = hoverParts[0]; - const editorModel = this._editor.getModel(); - const model = colorHover.model; - const widget = disposables.add(new ColorPickerWidget(context.fragment, model, this._editor.getOption(EditorOption.pixelRatio), this._themeService)); - context.setColorPicker(widget); - - let range = new Range(colorHover.range.startLineNumber, colorHover.range.startColumn, colorHover.range.endLineNumber, colorHover.range.endColumn); - - const updateEditorModel = () => { - let textEdits: ISingleEditOperation[]; - let newRange: Range; - if (model.presentation.textEdit) { - textEdits = [model.presentation.textEdit]; - newRange = new Range( - model.presentation.textEdit.range.startLineNumber, - model.presentation.textEdit.range.startColumn, - model.presentation.textEdit.range.endLineNumber, - model.presentation.textEdit.range.endColumn - ); - const trackedRange = this._editor.getModel()!._setTrackedRange(null, newRange, TrackedRangeStickiness.GrowsOnlyWhenTypingAfter); - this._editor.pushUndoStop(); - this._editor.executeEdits('colorpicker', textEdits); - newRange = this._editor.getModel()!._getTrackedRange(trackedRange) || newRange; - } else { - textEdits = [{ range, text: model.presentation.label, forceMoveMarkers: false }]; - newRange = range.setEndPosition(range.endLineNumber, range.startColumn + model.presentation.label.length); - this._editor.pushUndoStop(); - this._editor.executeEdits('colorpicker', textEdits); - } - - if (model.presentation.additionalTextEdits) { - textEdits = [...model.presentation.additionalTextEdits]; - this._editor.executeEdits('colorpicker', textEdits); - context.hide(); - } - this._editor.pushUndoStop(); - range = newRange; - }; - - const updateColorPresentations = (color: Color) => { - return getColorPresentations(editorModel, { - range: range, - color: { - red: color.rgba.r / 255, - green: color.rgba.g / 255, - blue: color.rgba.b / 255, - alpha: color.rgba.a - } - }, colorHover.provider, CancellationToken.None).then((colorPresentations) => { - model.colorPresentations = colorPresentations || []; - }); - }; - - disposables.add(model.onColorFlushed((color: Color) => { - updateColorPresentations(color).then(updateEditorModel); - })); - disposables.add(model.onDidChangeColor(updateColorPresentations)); - - return disposables; + return renderHoverParts(this, this._editor, this._themeService, hoverParts, context); } } + +export class StandaloneColorPickerHover { + constructor( + public readonly owner: StandaloneColorPickerParticipant, + public readonly range: Range, + public readonly model: ColorPickerModel, + public readonly provider: DocumentColorProvider + ) { } +} + +export class StandaloneColorPickerParticipant { + + public readonly hoverOrdinal: number = 2; + private _color: Color | null = null; + + constructor( + private readonly _editor: ICodeEditor, + @IThemeService private readonly _themeService: IThemeService, + ) { } + + public async createColorHover(defaultColorInfo: IColorInformation, defaultColorProvider: DocumentColorProvider, colorProviderRegistry: LanguageFeatureRegistry): Promise<{ colorHover: StandaloneColorPickerHover; foundInEditor: boolean } | null> { + if (!this._editor.hasModel()) { + return null; + } + const colorDetector = ColorDetector.get(this._editor); + if (!colorDetector) { + return null; + } + const colors = await getColors(colorProviderRegistry, this._editor.getModel(), CancellationToken.None); + let foundColorInfo: IColorInformation | null = null; + let foundColorProvider: DocumentColorProvider | null = null; + for (const colorData of colors) { + const colorInfo = colorData.colorInfo; + if (Range.containsRange(colorInfo.range, defaultColorInfo.range)) { + foundColorInfo = colorInfo; + foundColorProvider = colorData.provider; + } + } + const colorInfo = foundColorInfo ?? defaultColorInfo; + const colorProvider = foundColorProvider ?? defaultColorProvider; + const foundInEditor = !!foundColorInfo; + return { colorHover: await _createColorHover(this, this._editor.getModel(), colorInfo, colorProvider), foundInEditor: foundInEditor }; + } + + public async updateEditorModel(colorHoverData: StandaloneColorPickerHover): Promise { + if (!this._editor.hasModel()) { + return; + } + const colorPickerModel = colorHoverData.model; + let range = new Range(colorHoverData.range.startLineNumber, colorHoverData.range.startColumn, colorHoverData.range.endLineNumber, colorHoverData.range.endColumn); + if (this._color) { + await _updateColorPresentations(this._editor.getModel(), colorPickerModel, this._color, range, colorHoverData); + range = _updateEditorModel(this._editor, range, colorPickerModel); + } + } + + public renderHoverParts(context: IEditorHoverRenderContext, hoverParts: ColorHover[] | StandaloneColorPickerHover[]): IDisposable { + return renderHoverParts(this, this._editor, this._themeService, hoverParts, context); + } + + public set color(color: Color | null) { + this._color = color; + } + + public get color(): Color | null { + return this._color; + } +} + +async function _createColorHover(participant: T, editorModel: ITextModel, colorInfo: IColorInformation, provider: DocumentColorProvider): Promise; +async function _createColorHover(participant: ColorHoverParticipant | StandaloneColorPickerParticipant, editorModel: ITextModel, colorInfo: IColorInformation, provider: DocumentColorProvider): Promise { + const originalText = editorModel.getValueInRange(colorInfo.range); + const { red, green, blue, alpha } = colorInfo.color; + const rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha); + const color = new Color(rgba); + + const colorPresentations = await getColorPresentations(editorModel, colorInfo, provider, CancellationToken.None); + const model = new ColorPickerModel(color, [], 0); + model.colorPresentations = colorPresentations || []; + model.guessColorPresentation(color, originalText); + + if (participant instanceof ColorHoverParticipant) { + return new ColorHover(participant, Range.lift(colorInfo.range), model, provider); + } else { + return new StandaloneColorPickerHover(participant, Range.lift(colorInfo.range), model, provider); + } +} + +function renderHoverParts(participant: ColorHoverParticipant | StandaloneColorPickerParticipant, editor: ICodeEditor, themeService: IThemeService, hoverParts: ColorHover[] | StandaloneColorPickerHover[], context: IEditorHoverRenderContext) { + if (hoverParts.length === 0 || !editor.hasModel()) { + return Disposable.None; + } + + const disposables = new DisposableStore(); + const colorHover = hoverParts[0]; + const editorModel = editor.getModel(); + const model = colorHover.model; + const widget = disposables.add(new ColorPickerWidget(context.fragment, model, editor.getOption(EditorOption.pixelRatio), themeService, participant instanceof StandaloneColorPickerParticipant)); + context.setColorPicker(widget); + + let editorUpdatedByColorPicker = false; + let range = new Range(colorHover.range.startLineNumber, colorHover.range.startColumn, colorHover.range.endLineNumber, colorHover.range.endColumn); + if (participant instanceof StandaloneColorPickerParticipant) { + const color = hoverParts[0].model.color; + participant.color = color; + _updateColorPresentations(editorModel, model, color, range, colorHover); + disposables.add(model.onColorFlushed((color: Color) => { + participant.color = color; + })); + } else { + disposables.add(model.onColorFlushed(async (color: Color) => { + await _updateColorPresentations(editorModel, model, color, range, colorHover); + editorUpdatedByColorPicker = true; + range = _updateEditorModel(editor, range, model, context); + })); + } + disposables.add(model.onDidChangeColor((color: Color) => { + _updateColorPresentations(editorModel, model, color, range, colorHover); + })); + disposables.add(editor.onDidChangeModelContent((e) => { + if (editorUpdatedByColorPicker) { + editorUpdatedByColorPicker = false; + } else { + context.hide(); + editor.focus(); + } + })); + return disposables; +} + +function _updateEditorModel(editor: ICodeEditor, range: Range, model: ColorPickerModel, context?: IEditorHoverRenderContext) { + let textEdits: ISingleEditOperation[]; + let newRange: Range; + if (model.presentation.textEdit) { + textEdits = [model.presentation.textEdit]; + newRange = new Range( + model.presentation.textEdit.range.startLineNumber, + model.presentation.textEdit.range.startColumn, + model.presentation.textEdit.range.endLineNumber, + model.presentation.textEdit.range.endColumn + ); + const trackedRange = editor.getModel()!._setTrackedRange(null, newRange, TrackedRangeStickiness.GrowsOnlyWhenTypingAfter); + editor.pushUndoStop(); + editor.executeEdits('colorpicker', textEdits); + newRange = editor.getModel()!._getTrackedRange(trackedRange) || newRange; + } else { + textEdits = [{ range, text: model.presentation.label, forceMoveMarkers: false }]; + newRange = range.setEndPosition(range.endLineNumber, range.startColumn + model.presentation.label.length); + editor.pushUndoStop(); + editor.executeEdits('colorpicker', textEdits); + } + + if (model.presentation.additionalTextEdits) { + textEdits = [...model.presentation.additionalTextEdits]; + editor.executeEdits('colorpicker', textEdits); + if (context) { + context.hide(); + } + } + editor.pushUndoStop(); + return newRange; +} + +async function _updateColorPresentations(editorModel: ITextModel, colorPickerModel: ColorPickerModel, color: Color, range: Range, colorHover: ColorHover | StandaloneColorPickerHover) { + const colorPresentations = await getColorPresentations(editorModel, { + range: range, + color: { + red: color.rgba.r / 255, + green: color.rgba.g / 255, + blue: color.rgba.b / 255, + alpha: color.rgba.a + } + }, colorHover.provider, CancellationToken.None); + colorPickerModel.colorPresentations = colorPresentations || []; +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPicker.css b/src/vs/editor/contrib/colorPicker/browser/colorPicker.css index 503cd7b93d1..62f891080fe 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorPicker.css +++ b/src/vs/editor/contrib/colorPicker/browser/colorPicker.css @@ -40,7 +40,7 @@ } .colorpicker-header .picked-color { - width: 216px; + width: 240px; display: flex; align-items: center; justify-content: center; @@ -67,6 +67,35 @@ cursor: pointer; } +.standalone-colorpicker { + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); + border: 1px solid var(--vscode-editorHoverWidget-border); +} + +.colorpicker-header.standalone-colorpicker { + border-bottom: none; +} + +.colorpicker-header .close-button { + cursor: pointer; + background-color: var(--vscode-editorHoverWidget-background); + border-left: 1px solid var(--vscode-editorHoverWidget-border); +} + +.colorpicker-header .close-button-inner-div { + width: 100%; + height: 100%; + text-align: center; +} + +.colorpicker-header .close-button-inner-div:hover { + background-color: var(--vscode-toolbar-hoverBackground); +} + +.colorpicker-header .close-icon { + padding: 3px; +} /* Body */ @@ -104,6 +133,11 @@ height: 150px; } +.colorpicker-body .standalone-strip { + width: 25px; + height: 122px; +} + .colorpicker-body .hue-strip { position: relative; margin-left: 8px; @@ -139,3 +173,33 @@ height: 150px; pointer-events: none; } + +.colorpicker-body .standalone-strip .standalone-overlay { + height: 122px; + pointer-events: none; +} + +.standalone-colorpicker-body { + display: block; + border: 1px solid transparent; + border-bottom: 1px solid var(--vscode-editorHoverWidget-border); + overflow: hidden; +} + +.colorpicker-body .insert-button { + position: absolute; + height: 20px; + width: 58px; + padding: 0px; + right: 8px; + bottom: 8px; + background: var(--vscode-button-background); + color: var(--vscode-button-foreground); + border-radius: 2px; + border: none; + cursor: pointer; +} + +.colorpicker-body .insert-button:hover{ + background: var(--vscode-button-hoverBackground); +} diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts index 7bce3df9e1d..24b6e6408b3 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts @@ -7,95 +7,152 @@ import { PixelRatio } from 'vs/base/browser/browser'; import * as dom from 'vs/base/browser/dom'; import { GlobalPointerMoveMonitor } from 'vs/base/browser/globalPointerMoveMonitor'; import { Widget } from 'vs/base/browser/ui/widget'; +import { Codicon } from 'vs/base/common/codicons'; import { Color, HSVA, RGBA } from 'vs/base/common/color'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; +import { ThemeIcon } from 'vs/base/common/themables'; import 'vs/css!./colorPicker'; import { ColorPickerModel } from 'vs/editor/contrib/colorPicker/browser/colorPickerModel'; import { IEditorHoverColorPickerWidget } from 'vs/editor/contrib/hover/browser/hoverTypes'; import { localize } from 'vs/nls'; import { editorHoverBackground } from 'vs/platform/theme/common/colorRegistry'; +import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; import { IThemeService } from 'vs/platform/theme/common/themeService'; const $ = dom.$; export class ColorPickerHeader extends Disposable { - private readonly domNode: HTMLElement; - private readonly pickedColorNode: HTMLElement; + private readonly _domNode: HTMLElement; + private readonly _pickedColorNode: HTMLElement; + private readonly _originalColorNode: HTMLElement; + private readonly _closeButton: CloseButton | null = null; private backgroundColor: Color; - constructor(container: HTMLElement, private readonly model: ColorPickerModel, themeService: IThemeService) { + constructor(container: HTMLElement, private readonly model: ColorPickerModel, themeService: IThemeService, private showingStandaloneColorPicker: boolean = false) { super(); - this.domNode = $('.colorpicker-header'); - dom.append(container, this.domNode); + this._domNode = $('.colorpicker-header'); + dom.append(container, this._domNode); - this.pickedColorNode = dom.append(this.domNode, $('.picked-color')); + this._pickedColorNode = dom.append(this._domNode, $('.picked-color')); const tooltip = localize('clickToToggleColorOptions', "Click to toggle color options (rgb/hsl/hex)"); - this.pickedColorNode.setAttribute('title', tooltip); + this._pickedColorNode.setAttribute('title', tooltip); - const colorBox = dom.append(this.domNode, $('.original-color')); - colorBox.style.backgroundColor = Color.Format.CSS.format(this.model.originalColor) || ''; + this._originalColorNode = dom.append(this._domNode, $('.original-color')); + this._originalColorNode.style.backgroundColor = Color.Format.CSS.format(this.model.originalColor) || ''; this.backgroundColor = themeService.getColorTheme().getColor(editorHoverBackground) || Color.white; this._register(themeService.onDidColorThemeChange(theme => { this.backgroundColor = theme.getColor(editorHoverBackground) || Color.white; })); - this._register(dom.addDisposableListener(this.pickedColorNode, dom.EventType.CLICK, () => this.model.selectNextColorPresentation())); - this._register(dom.addDisposableListener(colorBox, dom.EventType.CLICK, () => { + this._register(dom.addDisposableListener(this._pickedColorNode, dom.EventType.CLICK, () => this.model.selectNextColorPresentation())); + this._register(dom.addDisposableListener(this._originalColorNode, dom.EventType.CLICK, () => { this.model.color = this.model.originalColor; this.model.flushColor(); })); this._register(model.onDidChangeColor(this.onDidChangeColor, this)); this._register(model.onDidChangePresentation(this.onDidChangePresentation, this)); - this.pickedColorNode.style.backgroundColor = Color.Format.CSS.format(model.color) || ''; - this.pickedColorNode.classList.toggle('light', model.color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : model.color.isLighter()); + this._pickedColorNode.style.backgroundColor = Color.Format.CSS.format(model.color) || ''; + this._pickedColorNode.classList.toggle('light', model.color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : model.color.isLighter()); this.onDidChangeColor(this.model.color); + + // When the color picker widget is a standalone color picker widget, then add a close button + if (this.showingStandaloneColorPicker) { + this._domNode.classList.add('standalone-colorpicker'); + this._closeButton = this._register(new CloseButton(this._domNode)); + } + } + + public get domNode(): HTMLElement { + return this._domNode; + } + + public get closeButton(): CloseButton | null { + return this._closeButton; + } + + public get pickedColorNode(): HTMLElement { + return this._pickedColorNode; + } + + public get originalColorNode(): HTMLElement { + return this._originalColorNode; } private onDidChangeColor(color: Color): void { - this.pickedColorNode.style.backgroundColor = Color.Format.CSS.format(color) || ''; - this.pickedColorNode.classList.toggle('light', color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : color.isLighter()); + this._pickedColorNode.style.backgroundColor = Color.Format.CSS.format(color) || ''; + this._pickedColorNode.classList.toggle('light', color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : color.isLighter()); this.onDidChangePresentation(); } private onDidChangePresentation(): void { - this.pickedColorNode.textContent = this.model.presentation ? this.model.presentation.label : ''; - this.pickedColorNode.prepend($('.codicon.codicon-color-mode')); + this._pickedColorNode.textContent = this.model.presentation ? this.model.presentation.label : ''; + this._pickedColorNode.prepend($('.codicon.codicon-color-mode')); + } +} + +class CloseButton extends Disposable { + + private _button: HTMLElement; + private readonly _onClicked = this._register(new Emitter()); + public readonly onClicked = this._onClicked.event; + + constructor(container: HTMLElement) { + super(); + this._button = document.createElement('div'); + this._button.classList.add('close-button'); + dom.append(container, this._button); + + const innerDiv = document.createElement('div'); + innerDiv.classList.add('close-button-inner-div'); + dom.append(this._button, innerDiv); + + const closeButton = dom.append(innerDiv, $('.button' + ThemeIcon.asCSSSelector(registerIcon('color-picker-close', Codicon.close, localize('closeIcon', 'Icon to close the color picker'))))); + closeButton.classList.add('close-icon'); + this._button.onclick = () => { + this._onClicked.fire(); + }; } } export class ColorPickerBody extends Disposable { - private readonly domNode: HTMLElement; - private readonly saturationBox: SaturationBox; - private readonly hueStrip: Strip; - private readonly opacityStrip: Strip; + private readonly _domNode: HTMLElement; + private readonly _saturationBox: SaturationBox; + private readonly _hueStrip: Strip; + private readonly _opacityStrip: Strip; + private readonly _insertButton: InsertButton | null = null; - constructor(container: HTMLElement, private readonly model: ColorPickerModel, private pixelRatio: number) { + constructor(container: HTMLElement, private readonly model: ColorPickerModel, private pixelRatio: number, isStandaloneColorPicker: boolean = false) { super(); - this.domNode = $('.colorpicker-body'); - dom.append(container, this.domNode); + this._domNode = $('.colorpicker-body'); + dom.append(container, this._domNode); - this.saturationBox = new SaturationBox(this.domNode, this.model, this.pixelRatio); - this._register(this.saturationBox); - this._register(this.saturationBox.onDidChange(this.onDidSaturationValueChange, this)); - this._register(this.saturationBox.onColorFlushed(this.flushColor, this)); + this._saturationBox = new SaturationBox(this._domNode, this.model, this.pixelRatio); + this._register(this._saturationBox); + this._register(this._saturationBox.onDidChange(this.onDidSaturationValueChange, this)); + this._register(this._saturationBox.onColorFlushed(this.flushColor, this)); - this.opacityStrip = new OpacityStrip(this.domNode, this.model); - this._register(this.opacityStrip); - this._register(this.opacityStrip.onDidChange(this.onDidOpacityChange, this)); - this._register(this.opacityStrip.onColorFlushed(this.flushColor, this)); + this._opacityStrip = new OpacityStrip(this._domNode, this.model, isStandaloneColorPicker); + this._register(this._opacityStrip); + this._register(this._opacityStrip.onDidChange(this.onDidOpacityChange, this)); + this._register(this._opacityStrip.onColorFlushed(this.flushColor, this)); - this.hueStrip = new HueStrip(this.domNode, this.model); - this._register(this.hueStrip); - this._register(this.hueStrip.onDidChange(this.onDidHueChange, this)); - this._register(this.hueStrip.onColorFlushed(this.flushColor, this)); + this._hueStrip = new HueStrip(this._domNode, this.model, isStandaloneColorPicker); + this._register(this._hueStrip); + this._register(this._hueStrip.onDidChange(this.onDidHueChange, this)); + this._register(this._hueStrip.onColorFlushed(this.flushColor, this)); + + if (isStandaloneColorPicker) { + this._insertButton = this._register(new InsertButton(this._domNode)); + this._domNode.classList.add('standalone-colorpicker'); + } } private flushColor(): void { @@ -119,18 +176,38 @@ export class ColorPickerBody extends Disposable { this.model.color = new Color(new HSVA(h === 360 ? 0 : h, hsva.s, hsva.v, hsva.a)); } + get domNode() { + return this._domNode; + } + + get saturationBox() { + return this._saturationBox; + } + + get opacityStrip() { + return this._opacityStrip; + } + + get hueStrip() { + return this._hueStrip; + } + + get enterButton() { + return this._insertButton; + } + layout(): void { - this.saturationBox.layout(); - this.opacityStrip.layout(); - this.hueStrip.layout(); + this._saturationBox.layout(); + this._opacityStrip.layout(); + this._hueStrip.layout(); } } class SaturationBox extends Disposable { - private readonly domNode: HTMLElement; + private readonly _domNode: HTMLElement; private readonly selection: HTMLElement; - private readonly canvas: HTMLCanvasElement; + private readonly _canvas: HTMLCanvasElement; private width!: number; private height!: number; @@ -144,31 +221,39 @@ class SaturationBox extends Disposable { constructor(container: HTMLElement, private readonly model: ColorPickerModel, private pixelRatio: number) { super(); - this.domNode = $('.saturation-wrap'); - dom.append(container, this.domNode); + this._domNode = $('.saturation-wrap'); + dom.append(container, this._domNode); // Create canvas, draw selected color - this.canvas = document.createElement('canvas'); - this.canvas.className = 'saturation-box'; - dom.append(this.domNode, this.canvas); + this._canvas = document.createElement('canvas'); + this._canvas.className = 'saturation-box'; + dom.append(this._domNode, this._canvas); // Add selection circle this.selection = $('.saturation-selection'); - dom.append(this.domNode, this.selection); + dom.append(this._domNode, this.selection); this.layout(); - this._register(dom.addDisposableListener(this.domNode, dom.EventType.POINTER_DOWN, e => this.onPointerDown(e))); + this._register(dom.addDisposableListener(this._domNode, dom.EventType.POINTER_DOWN, e => this.onPointerDown(e))); this._register(this.model.onDidChangeColor(this.onDidChangeColor, this)); this.monitor = null; } + public get domNode() { + return this._domNode; + } + + public get canvas() { + return this._canvas; + } + private onPointerDown(e: PointerEvent): void { if (!e.target || !(e.target instanceof Element)) { return; } this.monitor = this._register(new GlobalPointerMoveMonitor()); - const origin = dom.getDomNodePagePosition(this.domNode); + const origin = dom.getDomNodePagePosition(this._domNode); if (e.target !== this.selection) { this.onDidChangePosition(e.offsetX, e.offsetY); @@ -195,10 +280,10 @@ class SaturationBox extends Disposable { } layout(): void { - this.width = this.domNode.offsetWidth; - this.height = this.domNode.offsetHeight; - this.canvas.width = this.width * this.pixelRatio; - this.canvas.height = this.height * this.pixelRatio; + this.width = this._domNode.offsetWidth; + this.height = this._domNode.offsetHeight; + this._canvas.width = this.width * this.pixelRatio; + this._canvas.height = this.height * this.pixelRatio; this.paint(); const hsva = this.model.color.hsva; @@ -208,18 +293,18 @@ class SaturationBox extends Disposable { private paint(): void { const hsva = this.model.color.hsva; const saturatedColor = new Color(new HSVA(hsva.h, 1, 1, 1)); - const ctx = this.canvas.getContext('2d')!; + const ctx = this._canvas.getContext('2d')!; - const whiteGradient = ctx.createLinearGradient(0, 0, this.canvas.width, 0); + const whiteGradient = ctx.createLinearGradient(0, 0, this._canvas.width, 0); whiteGradient.addColorStop(0, 'rgba(255, 255, 255, 1)'); whiteGradient.addColorStop(0.5, 'rgba(255, 255, 255, 0.5)'); whiteGradient.addColorStop(1, 'rgba(255, 255, 255, 0)'); - const blackGradient = ctx.createLinearGradient(0, 0, 0, this.canvas.height); + const blackGradient = ctx.createLinearGradient(0, 0, 0, this._canvas.height); blackGradient.addColorStop(0, 'rgba(0, 0, 0, 0)'); blackGradient.addColorStop(1, 'rgba(0, 0, 0, 1)'); - ctx.rect(0, 0, this.canvas.width, this.canvas.height); + ctx.rect(0, 0, this._canvas.width, this._canvas.height); ctx.fillStyle = Color.Format.CSS.format(saturatedColor)!; ctx.fill(); ctx.fillStyle = whiteGradient; @@ -254,10 +339,15 @@ abstract class Strip extends Disposable { private readonly _onColorFlushed = new Emitter(); readonly onColorFlushed: Event = this._onColorFlushed.event; - constructor(container: HTMLElement, protected model: ColorPickerModel) { + constructor(container: HTMLElement, protected model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { super(); - this.domNode = dom.append(container, $('.strip')); - this.overlay = dom.append(this.domNode, $('.overlay')); + if (showingStandaloneColorPicker) { + this.domNode = dom.append(container, $('.standalone-strip')); + this.overlay = dom.append(this.domNode, $('.standalone-overlay')); + } else { + this.domNode = dom.append(container, $('.strip')); + this.overlay = dom.append(this.domNode, $('.overlay')); + } this.slider = dom.append(this.domNode, $('.slider')); this.slider.style.top = `0px`; @@ -310,8 +400,8 @@ abstract class Strip extends Disposable { class OpacityStrip extends Strip { - constructor(container: HTMLElement, model: ColorPickerModel) { - super(container, model); + constructor(container: HTMLElement, model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { + super(container, model, showingStandaloneColorPicker); this.domNode.classList.add('opacity-strip'); this._register(model.onDidChangeColor(this.onDidChangeColor, this)); @@ -333,8 +423,8 @@ class OpacityStrip extends Strip { class HueStrip extends Strip { - constructor(container: HTMLElement, model: ColorPickerModel) { - super(container, model); + constructor(container: HTMLElement, model: ColorPickerModel, showingStandaloneColorPicker: boolean = false) { + super(container, model, showingStandaloneColorPicker); this.domNode.classList.add('hue-strip'); } @@ -343,13 +433,35 @@ class HueStrip extends Strip { } } +export class InsertButton extends Disposable { + + private _button: HTMLElement; + private readonly _onClicked = this._register(new Emitter()); + public readonly onClicked = this._onClicked.event; + + constructor(container: HTMLElement) { + super(); + this._button = dom.append(container, document.createElement('button')); + this._button.classList.add('insert-button'); + this._button.textContent = 'Insert'; + this._button.onclick = e => { + this._onClicked.fire(); + }; + } + + public get button(): HTMLElement { + return this._button; + } +} + export class ColorPickerWidget extends Widget implements IEditorHoverColorPickerWidget { private static readonly ID = 'editor.contrib.colorPickerWidget'; body: ColorPickerBody; + header: ColorPickerHeader; - constructor(container: Node, readonly model: ColorPickerModel, private pixelRatio: number, themeService: IThemeService) { + constructor(container: Node, readonly model: ColorPickerModel, private pixelRatio: number, themeService: IThemeService, standaloneColorPicker: boolean = false) { super(); this._register(PixelRatio.onDidChange(() => this.layout())); @@ -357,11 +469,8 @@ export class ColorPickerWidget extends Widget implements IEditorHoverColorPicker const element = $('.colorpicker-widget'); container.appendChild(element); - const header = new ColorPickerHeader(element, this.model, themeService); - this.body = new ColorPickerBody(element, this.model, this.pixelRatio); - - this._register(header); - this._register(this.body); + this.header = this._register(new ColorPickerHeader(element, this.model, themeService, standaloneColorPicker)); + this.body = this._register(new ColorPickerBody(element, this.model, this.pixelRatio, standaloneColorPicker)); } getId(): string { diff --git a/src/vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider.ts b/src/vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider.ts new file mode 100644 index 00000000000..8bb5e3ad56a --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider.ts @@ -0,0 +1,61 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CancellationToken } from 'vs/base/common/cancellation'; +import { Color, RGBA } from 'vs/base/common/color'; +import { ITextModel } from 'vs/editor/common/model'; +import { DocumentColorProvider, IColor, IColorInformation, IColorPresentation } from 'vs/editor/common/languages'; +import { EditorWorkerClient } from 'vs/editor/browser/services/editorWorkerService'; +import { IModelService } from 'vs/editor/common/services/model'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; + +export class DefaultDocumentColorProvider implements DocumentColorProvider { + + private _editorWorkerClient: EditorWorkerClient; + + constructor( + modelService: IModelService, + languageConfigurationService: ILanguageConfigurationService, + ) { + this._editorWorkerClient = new EditorWorkerClient(modelService, false, 'editorWorkerService', languageConfigurationService); + } + + async provideDocumentColors(model: ITextModel, _token: CancellationToken): Promise { + return this._editorWorkerClient.computeDefaultDocumentColors(model.uri); + } + + provideColorPresentations(_model: ITextModel, colorInfo: IColorInformation, _token: CancellationToken): IColorPresentation[] { + const range = colorInfo.range; + const colorFromInfo: IColor = colorInfo.color; + const alpha = colorFromInfo.alpha; + const color = new Color(new RGBA(Math.round(255 * colorFromInfo.red), Math.round(255 * colorFromInfo.green), Math.round(255 * colorFromInfo.blue), alpha)); + + const rgb = alpha ? Color.Format.CSS.formatRGB(color) : Color.Format.CSS.formatRGBA(color); + const hsl = alpha ? Color.Format.CSS.formatHSL(color) : Color.Format.CSS.formatHSLA(color); + const hex = alpha ? Color.Format.CSS.formatHex(color) : Color.Format.CSS.formatHexA(color); + + const colorPresentations: IColorPresentation[] = []; + colorPresentations.push({ label: rgb, textEdit: { range: range, text: rgb } }); + colorPresentations.push({ label: hsl, textEdit: { range: range, text: hsl } }); + colorPresentations.push({ label: hex, textEdit: { range: range, text: hex } }); + return colorPresentations; + } +} + +class DefaultDocumentColorProviderFeature extends Disposable { + constructor( + @IModelService _modelService: IModelService, + @ILanguageConfigurationService _languageConfigurationService: ILanguageConfigurationService, + @ILanguageFeaturesService _languageFeaturesService: ILanguageFeaturesService, + ) { + super(); + this._register(_languageFeaturesService.colorProvider.register('*', new DefaultDocumentColorProvider(_modelService, _languageConfigurationService))); + } +} + +registerEditorFeature(DefaultDocumentColorProviderFeature); diff --git a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions.ts b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions.ts new file mode 100644 index 00000000000..5ccb725eb8b --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions.ts @@ -0,0 +1,84 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorAction, EditorAction2, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions'; +import { KeyCode } from 'vs/base/common/keyCodes'; +import { localize } from 'vs/nls'; +import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { StandaloneColorPickerController } from 'vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget'; +import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; +import { MenuId, registerAction2 } from 'vs/platform/actions/common/actions'; +import 'vs/css!./colorPicker'; + +export class ShowOrFocusStandaloneColorPicker extends EditorAction2 { + constructor() { + super({ + id: 'editor.action.showOrFocusStandaloneColorPicker', + title: { + value: localize('showOrFocusStandaloneColorPicker', "Show or Focus Standalone Color Picker"), + mnemonicTitle: localize({ key: 'mishowOrFocusStandaloneColorPicker', comment: ['&& denotes a mnemonic'] }, "&&Show or Focus Standalone Color Picker"), + original: 'Show or Focus Standalone Color Picker', + }, + precondition: undefined, + menu: [ + { id: MenuId.CommandPalette }, + ] + }); + } + runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor) { + StandaloneColorPickerController.get(editor)?.showOrFocus(); + } +} + +class HideStandaloneColorPicker extends EditorAction { + constructor() { + super({ + id: 'editor.action.hideColorPicker', + label: localize({ + key: 'hideColorPicker', + comment: [ + 'Action that hides the color picker' + ] + }, "Hide the Color Picker"), + alias: 'Hide the Color Picker', + precondition: EditorContextKeys.standaloneColorPickerVisible.isEqualTo(true), + kbOpts: { + primary: KeyCode.Escape, + weight: KeybindingWeight.EditorContrib + } + }); + } + public run(_accessor: ServicesAccessor, editor: ICodeEditor): void { + StandaloneColorPickerController.get(editor)?.hide(); + } +} + +class InsertColorWithStandaloneColorPicker extends EditorAction { + constructor() { + super({ + id: 'editor.action.insertColorWithStandaloneColorPicker', + label: localize({ + key: 'insertColorWithStandaloneColorPicker', + comment: [ + 'Action that inserts color with standalone color picker' + ] + }, "Insert Color with Standalone Color Picker"), + alias: 'Insert Color with Standalone Color Picker', + precondition: EditorContextKeys.standaloneColorPickerFocused.isEqualTo(true), + kbOpts: { + primary: KeyCode.Enter, + weight: KeybindingWeight.EditorContrib + } + }); + } + public run(_accessor: ServicesAccessor, editor: ICodeEditor): void { + StandaloneColorPickerController.get(editor)?.insertColor(); + } +} + +registerEditorAction(HideStandaloneColorPicker); +registerEditorAction(InsertColorWithStandaloneColorPicker); +registerAction2(ShowOrFocusStandaloneColorPicker); diff --git a/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget.ts b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget.ts new file mode 100644 index 00000000000..6d874e71d4b --- /dev/null +++ b/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget.ts @@ -0,0 +1,275 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Disposable } from 'vs/base/common/lifecycle'; +import { IEditorHoverRenderContext } from 'vs/editor/contrib/hover/browser/hoverTypes'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; +import { PositionAffinity } from 'vs/editor/common/model'; +import { Position } from 'vs/editor/common/core/position'; +import { StandaloneColorPickerHover, StandaloneColorPickerParticipant } from 'vs/editor/contrib/colorPicker/browser/colorHoverParticipant'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { EditorHoverStatusBar } from 'vs/editor/contrib/hover/browser/contentHover'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { ColorPickerWidget, InsertButton } from 'vs/editor/contrib/colorPicker/browser/colorPickerWidget'; +import { Emitter } from 'vs/base/common/event'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { IColorInformation } from 'vs/editor/common/languages'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { IEditorContribution } from 'vs/editor/common/editorCommon'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; +import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IRange } from 'vs/editor/common/core/range'; +import { IModelService } from 'vs/editor/common/services/model'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { DefaultDocumentColorProvider } from 'vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider'; +import * as dom from 'vs/base/browser/dom'; +import 'vs/css!./colorPicker'; + +export class StandaloneColorPickerController extends Disposable implements IEditorContribution { + + public static ID = 'editor.contrib.standaloneColorPickerController'; + private _standaloneColorPickerWidget: StandaloneColorPickerWidget | null = null; + private _standaloneColorPickerVisible: IContextKey; + private _standaloneColorPickerFocused: IContextKey; + + constructor( + private readonly _editor: ICodeEditor, + @IContextKeyService _contextKeyService: IContextKeyService, + @IModelService private readonly _modelService: IModelService, + @IKeybindingService private readonly _keybindingService: IKeybindingService, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + @ILanguageFeaturesService private readonly _languageFeatureService: ILanguageFeaturesService, + @ILanguageConfigurationService private readonly _languageConfigurationService: ILanguageConfigurationService + ) { + super(); + this._standaloneColorPickerVisible = EditorContextKeys.standaloneColorPickerVisible.bindTo(_contextKeyService); + this._standaloneColorPickerFocused = EditorContextKeys.standaloneColorPickerFocused.bindTo(_contextKeyService); + } + + public showOrFocus() { + if (!this._editor.hasModel()) { + return; + } + if (!this._standaloneColorPickerVisible.get()) { + this._standaloneColorPickerWidget = new StandaloneColorPickerWidget(this._editor, this._standaloneColorPickerVisible, this._standaloneColorPickerFocused, this._instantiationService, this._modelService, this._keybindingService, this._languageFeatureService, this._languageConfigurationService); + } else if (!this._standaloneColorPickerFocused.get()) { + this._standaloneColorPickerWidget?.focus(); + } + } + + public hide() { + this._standaloneColorPickerFocused.set(false); + this._standaloneColorPickerVisible.set(false); + this._standaloneColorPickerWidget?.hide(); + this._editor.focus(); + } + + public insertColor() { + this._standaloneColorPickerWidget?.updateEditor(); + this.hide(); + } + + public static get(editor: ICodeEditor) { + return editor.getContribution(StandaloneColorPickerController.ID); + } +} + +registerEditorContribution(StandaloneColorPickerController.ID, StandaloneColorPickerController, EditorContributionInstantiation.AfterFirstRender); + +const PADDING = 8; +const CLOSE_BUTTON_WIDTH = 22; + +export class StandaloneColorPickerWidget extends Disposable implements IContentWidget { + + static readonly ID = 'editor.contrib.standaloneColorPickerWidget'; + readonly allowEditorOverflow = true; + + private body: HTMLElement = document.createElement('div'); + + private readonly _position: Position | undefined = undefined; + private readonly _standaloneColorPickerParticipant: StandaloneColorPickerParticipant; + + private _colorHover: StandaloneColorPickerHover | null = null; + private _selectionSetInEditor: boolean = false; + + private readonly _onResult = this._register(new Emitter()); + public readonly onResult = this._onResult.event; + + constructor( + private readonly _editor: ICodeEditor, + private readonly _standaloneColorPickerVisible: IContextKey, + private readonly _standaloneColorPickerFocused: IContextKey, + @IInstantiationService _instantiationService: IInstantiationService, + @IModelService private readonly _modelService: IModelService, + @IKeybindingService private readonly _keybindingService: IKeybindingService, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @ILanguageConfigurationService private readonly _languageConfigurationService: ILanguageConfigurationService + ) { + super(); + this._standaloneColorPickerVisible.set(true); + this._standaloneColorPickerParticipant = _instantiationService.createInstance(StandaloneColorPickerParticipant, this._editor); + this._position = this._editor._getViewModel()?.getPrimaryCursorState().modelState.position; + const editorSelection = this._editor.getSelection(); + const selection = editorSelection ? + { + startLineNumber: editorSelection.startLineNumber, + startColumn: editorSelection.startColumn, + endLineNumber: editorSelection.endLineNumber, + endColumn: editorSelection.endColumn + } : { startLineNumber: 0, endLineNumber: 0, endColumn: 0, startColumn: 0 }; + const focusTracker = this._register(dom.trackFocus(this.body)); + this._register(focusTracker.onDidBlur(_ => { + this.hide(); + })); + this._register(focusTracker.onDidFocus(_ => { + this.focus(); + })); + // When the cursor position changes, hide the color picker + this._register(this._editor.onDidChangeCursorPosition(() => { + // Do not hide the color picker when the cursor changes position due to the keybindings + if (!this._selectionSetInEditor) { + this.hide(); + } else { + this._selectionSetInEditor = false; + } + })); + this._register(this._editor.onMouseMove((e) => { + const classList = e.target.element?.classList; + if (classList && classList.contains('colorpicker-color-decoration')) { + this.hide(); + } + })); + this._register(this.onResult((result) => { + this._render(result.value, result.foundInEditor); + })); + this._start(selection); + this._editor.addContentWidget(this); + } + + public updateEditor() { + if (this._colorHover) { + this._standaloneColorPickerParticipant.updateEditorModel(this._colorHover); + } + } + + public getId(): string { + return StandaloneColorPickerWidget.ID; + } + + public getDomNode(): HTMLElement { + return this.body; + } + + public getPosition(): IContentWidgetPosition | null { + if (!this._position) { + return null; + } + const positionPreference = this._editor.getOption(EditorOption.hover).above; + return { + position: this._position, + secondaryPosition: this._position, + preference: positionPreference ? [ContentWidgetPositionPreference.ABOVE, ContentWidgetPositionPreference.BELOW] : [ContentWidgetPositionPreference.BELOW, ContentWidgetPositionPreference.ABOVE], + positionAffinity: PositionAffinity.None + }; + } + + public hide(): void { + this.dispose(); + this._standaloneColorPickerVisible.set(false); + this._standaloneColorPickerFocused.set(false); + this._editor.removeContentWidget(this); + this._editor.focus(); + } + + public focus(): void { + this._standaloneColorPickerFocused.set(true); + this.body.focus(); + } + + private async _start(selection: IRange) { + const computeAsyncResult = await this._computeAsync(selection); + if (!computeAsyncResult) { + return; + } + this._onResult.fire(new StandaloneColorPickerResult(computeAsyncResult.result, computeAsyncResult.foundInEditor)); + } + + private async _computeAsync(range: IRange): Promise<{ result: StandaloneColorPickerHover; foundInEditor: boolean } | null> { + if (!this._editor.hasModel()) { + return null; + } + const colorInfo: IColorInformation = { + range: range, + color: { red: 0, green: 0, blue: 0, alpha: 1 } + }; + const colorHoverResult: { colorHover: StandaloneColorPickerHover; foundInEditor: boolean } | null = await this._standaloneColorPickerParticipant.createColorHover(colorInfo, new DefaultDocumentColorProvider(this._modelService, this._languageConfigurationService), this._languageFeaturesService.colorProvider); + if (!colorHoverResult) { + return null; + } + return { result: colorHoverResult.colorHover, foundInEditor: colorHoverResult.foundInEditor }; + } + + private _render(colorHover: StandaloneColorPickerHover, foundInEditor: boolean) { + const fragment = document.createDocumentFragment(); + const statusBar = this._register(new EditorHoverStatusBar(this._keybindingService)); + let colorPickerWidget: ColorPickerWidget | undefined; + + const context: IEditorHoverRenderContext = { + fragment, + statusBar, + setColorPicker: (widget: ColorPickerWidget) => colorPickerWidget = widget, + onContentsChanged: () => { }, + hide: () => this.hide() + }; + + this._colorHover = colorHover; + this._register(this._standaloneColorPickerParticipant.renderHoverParts(context, [colorHover])); + if (colorPickerWidget === undefined) { + return; + } + this.body.classList.add('standalone-colorpicker-body'); + this.body.style.maxHeight = Math.max(this._editor.getLayoutInfo().height / 4, 250) + 'px'; + this.body.style.maxWidth = Math.max(this._editor.getLayoutInfo().width * 0.66, 500) + 'px'; + this.body.tabIndex = 0; + this.body.appendChild(fragment); + colorPickerWidget.layout(); + + const colorPickerBody = colorPickerWidget.body; + const saturationBoxWidth = colorPickerBody.saturationBox.domNode.clientWidth; + const widthOfOriginalColorBox = colorPickerBody.domNode.clientWidth - saturationBoxWidth - CLOSE_BUTTON_WIDTH - PADDING; + const enterButton: InsertButton | null = colorPickerWidget.body.enterButton; + enterButton?.onClicked(() => { + this.updateEditor(); + this.hide(); + }); + const colorPickerHeader = colorPickerWidget.header; + const pickedColorNode = colorPickerHeader.pickedColorNode; + pickedColorNode.style.width = saturationBoxWidth + PADDING + 'px'; + const originalColorNode = colorPickerHeader.originalColorNode; + originalColorNode.style.width = widthOfOriginalColorBox + 'px'; + const closeButton = colorPickerWidget.header.closeButton; + closeButton?.onClicked(() => { + this.hide(); + }); + // When found in the editor, highlight the selection in the editor + if (foundInEditor) { + if (enterButton) { + enterButton.button.textContent = 'Replace'; + } + this._selectionSetInEditor = true; + this._editor.setSelection(colorHover.range); + } + this._editor.layoutContentWidget(this); + } +} + +class StandaloneColorPickerResult { + // The color picker result consists of: an array of color results and a boolean indicating if the color was found in the editor + constructor( + public readonly value: StandaloneColorPickerHover, + public readonly foundInEditor: boolean + ) { } +} diff --git a/src/vs/editor/contrib/copyPaste/browser/copyPasteContribution.ts b/src/vs/editor/contrib/copyPaste/browser/copyPasteContribution.ts deleted file mode 100644 index f3501f4b074..00000000000 --- a/src/vs/editor/contrib/copyPaste/browser/copyPasteContribution.ts +++ /dev/null @@ -1,25 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { editorConfigurationBaseNode } from 'vs/editor/common/config/editorConfigurationSchema'; -import { CopyPasteController } from 'vs/editor/contrib/copyPaste/browser/copyPasteController'; -import * as nls from 'vs/nls'; -import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { Registry } from 'vs/platform/registry/common/platform'; - -registerEditorContribution(CopyPasteController.ID, CopyPasteController, EditorContributionInstantiation.Eager); // eager because it listens to events on the container dom node of the editor - -Registry.as(Extensions.Configuration).registerConfiguration({ - ...editorConfigurationBaseNode, - properties: { - 'editor.experimental.pasteActions.enabled': { - type: 'boolean', - scope: ConfigurationScope.LANGUAGE_OVERRIDABLE, - description: nls.localize('pasteActions', "Enable/disable running edits from extensions on paste."), - default: false, - }, - } -}); diff --git a/src/vs/editor/contrib/copyPaste/browser/copyPasteController.ts b/src/vs/editor/contrib/copyPaste/browser/copyPasteController.ts deleted file mode 100644 index f6fe1d00ed5..00000000000 --- a/src/vs/editor/contrib/copyPaste/browser/copyPasteController.ts +++ /dev/null @@ -1,283 +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 { DataTransfers } from 'vs/base/browser/dnd'; -import { addDisposableListener } from 'vs/base/browser/dom'; -import { CancelablePromise, createCancelablePromise, raceCancellation } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { createStringDataTransferItem, UriList, VSDataTransfer } from 'vs/base/common/dataTransfer'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Mimes } from 'vs/base/common/mime'; -import { Schemas } from 'vs/base/common/network'; -import { generateUuid } from 'vs/base/common/uuid'; -import { toVSDataTransfer } from 'vs/editor/browser/dnd'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { IBulkEditService, ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { Handler, IEditorContribution, PastePayload } from 'vs/editor/common/editorCommon'; -import { DocumentPasteEdit, DocumentPasteEditProvider, WorkspaceEdit } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { localize } from 'vs/nls'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; - -const vscodeClipboardMime = 'application/vnd.code.copyMetadata'; - -interface CopyMetadata { - readonly id?: string; - readonly wasFromEmptySelection: boolean; -} - -export class CopyPasteController extends Disposable implements IEditorContribution { - - public static readonly ID = 'editor.contrib.copyPasteActionController'; - - public static get(editor: ICodeEditor): CopyPasteController { - return editor.getContribution(CopyPasteController.ID)!; - } - - private readonly _editor: ICodeEditor; - - private _currentClipboardItem?: { - readonly handle: string; - readonly dataTransferPromise: CancelablePromise; - }; - - constructor( - editor: ICodeEditor, - @IBulkEditService private readonly _bulkEditService: IBulkEditService, - @IClipboardService private readonly _clipboardService: IClipboardService, - @IConfigurationService private readonly _configurationService: IConfigurationService, - @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, - @IProgressService private readonly _progressService: IProgressService, - ) { - super(); - - this._editor = editor; - - const container = editor.getContainerDomNode(); - this._register(addDisposableListener(container, 'copy', e => this.handleCopy(e))); - this._register(addDisposableListener(container, 'cut', e => this.handleCopy(e))); - this._register(addDisposableListener(container, 'paste', e => this.handlePaste(e), true)); - } - - private arePasteActionsEnabled(model: ITextModel): boolean { - if (this._configurationService.getValue('editor.experimental.pasteActions.enabled', { resource: model.uri })) { - return true; - } - - // TODO: This check is only here to support enabling `ipynb.pasteImagesAsAttachments.enabled` by default - return model.uri.scheme === Schemas.vscodeNotebookCell; - } - - private handleCopy(e: ClipboardEvent) { - if (!e.clipboardData || !this._editor.hasTextFocus()) { - return; - } - - const model = this._editor.getModel(); - const selections = this._editor.getSelections(); - if (!model || !selections?.length) { - return; - } - - if (!this.arePasteActionsEnabled(model)) { - return; - } - - const ranges: IRange[] = [...selections]; - const primarySelection = selections[0]; - const wasFromEmptySelection = primarySelection.isEmpty(); - if (wasFromEmptySelection) { - if (!this._editor.getOption(EditorOption.emptySelectionClipboard)) { - return; - } - ranges[0] = new Range(primarySelection.startLineNumber, 0, primarySelection.startLineNumber, model.getLineLength(primarySelection.startLineNumber)); - } - - const providers = this._languageFeaturesService.documentPasteEditProvider.ordered(model).filter(x => !!x.prepareDocumentPaste); - if (!providers.length) { - this.setCopyMetadata(e.clipboardData, { wasFromEmptySelection }); - return; - } - - const dataTransfer = toVSDataTransfer(e.clipboardData); - - // Save off a handle pointing to data that VS Code maintains. - const handle = generateUuid(); - this.setCopyMetadata(e.clipboardData, { - id: handle, - wasFromEmptySelection, - }); - - const promise = createCancelablePromise(async token => { - const results = await Promise.all(providers.map(provider => { - return provider.prepareDocumentPaste!(model, ranges, dataTransfer, token); - })); - - for (const result of results) { - result?.forEach((value, key) => { - dataTransfer.replace(key, value); - }); - } - - return dataTransfer; - }); - - this._currentClipboardItem?.dataTransferPromise.cancel(); - this._currentClipboardItem = { handle: handle, dataTransferPromise: promise }; - } - - private setCopyMetadata(dataTransfer: DataTransfer, metadata: CopyMetadata) { - dataTransfer.setData(vscodeClipboardMime, JSON.stringify(metadata)); - } - - private async handlePaste(e: ClipboardEvent) { - if (!e.clipboardData || !this._editor.hasTextFocus()) { - return; - } - - const selections = this._editor.getSelections(); - if (!selections?.length || !this._editor.hasModel()) { - return; - } - - const model = this._editor.getModel(); - if (!this.arePasteActionsEnabled(model)) { - return; - } - - let metadata: CopyMetadata | undefined; - const rawMetadata = e.clipboardData?.getData(vscodeClipboardMime); - if (rawMetadata && typeof rawMetadata === 'string') { - metadata = JSON.parse(rawMetadata); - } - - const providers = this._languageFeaturesService.documentPasteEditProvider.ordered(model); - if (!providers.length) { - return; - } - - e.preventDefault(); - e.stopImmediatePropagation(); - - const tokenSource = new EditorStateCancellationTokenSource(this._editor, CodeEditorStateFlag.Value | CodeEditorStateFlag.Selection); - try { - const dataTransfer = toVSDataTransfer(e.clipboardData); - - if (metadata?.id && this._currentClipboardItem?.handle === metadata.id) { - const toMergeDataTransfer = await this._currentClipboardItem.dataTransferPromise; - if (tokenSource.token.isCancellationRequested) { - return; - } - - toMergeDataTransfer.forEach((value, key) => { - dataTransfer.replace(key, value); - }); - } - - if (!dataTransfer.has(Mimes.uriList)) { - const resources = await this._clipboardService.readResources(); - if (tokenSource.token.isCancellationRequested) { - return; - } - - if (resources.length) { - dataTransfer.append(Mimes.uriList, createStringDataTransferItem(UriList.create(resources))); - } - } - - dataTransfer.delete(vscodeClipboardMime); - - const providerEdit = await this._progressService.withProgress({ - location: ProgressLocation.Notification, - delay: 750, - title: localize('pasteProgressTitle', "Running paste handlers..."), - cancellable: true, - }, () => { - return this.getProviderPasteEdit(providers, dataTransfer, model, selections, tokenSource.token); - }, () => { - return tokenSource.cancel(); - }); - - if (tokenSource.token.isCancellationRequested) { - return; - } - - if (providerEdit) { - const snippet = typeof providerEdit.insertText === 'string' ? SnippetParser.escape(providerEdit.insertText) : providerEdit.insertText.snippet; - const combinedWorkspaceEdit: WorkspaceEdit = { - edits: [ - new ResourceTextEdit(model.uri, { - range: Selection.liftSelection(this._editor.getSelection()), - text: snippet, - insertAsSnippet: true, - }), - ...(providerEdit.additionalEdit?.edits ?? []) - ] - }; - await this._bulkEditService.apply(combinedWorkspaceEdit, { editor: this._editor }); - return; - } - - await this.applyDefaultPasteHandler(dataTransfer, metadata, tokenSource.token); - } finally { - tokenSource.dispose(); - } - } - - private getProviderPasteEdit(providers: DocumentPasteEditProvider[], dataTransfer: VSDataTransfer, model: ITextModel, selections: Selection[], token: CancellationToken): Promise { - return raceCancellation((async () => { - for (const provider of providers) { - if (token.isCancellationRequested) { - return; - } - - if (!isSupportedProvider(provider, dataTransfer)) { - continue; - } - - const edit = await provider.provideDocumentPasteEdits(model, selections, dataTransfer, token); - if (edit) { - return edit; - } - } - return undefined; - })(), token); - } - - private async applyDefaultPasteHandler(dataTransfer: VSDataTransfer, metadata: CopyMetadata | undefined, token: CancellationToken) { - const textDataTransfer = dataTransfer.get(Mimes.text) ?? dataTransfer.get('text'); - if (!textDataTransfer) { - return; - } - - const text = await textDataTransfer.asString(); - if (token.isCancellationRequested) { - return; - } - - this._editor.trigger('keyboard', Handler.Paste, { - text: text, - pasteOnNewLine: metadata?.wasFromEmptySelection, - multicursorText: null - }); - } -} - -function isSupportedProvider(provider: DocumentPasteEditProvider, dataTransfer: VSDataTransfer): boolean { - return provider.pasteMimeTypes.some(type => { - if (type.toLowerCase() === DataTransfers.FILES.toLowerCase()) { - return [...dataTransfer.values()].some(item => item.asFile()); - } - return dataTransfer.has(type); - }); -} diff --git a/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts b/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts index 04220e19b6e..2249c107004 100644 --- a/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts +++ b/src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts @@ -16,6 +16,8 @@ import { createModelServices, createTextModel } from 'vs/editor/test/common/test import { NullLogService } from 'vs/platform/log/common/log'; import { IMarker, MarkerSeverity } from 'vs/platform/markers/common/markers'; import { OutlineElement, OutlineGroup, OutlineModel, OutlineModelService } from '../../browser/outlineModel'; +import { mock } from 'vs/base/test/common/mock'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; suite('OutlineModel', function () { @@ -30,7 +32,11 @@ suite('OutlineModel', function () { const insta = createModelServices(disposables); const modelService = insta.get(IModelService); - const service = new OutlineModelService(languageFeaturesService, new LanguageFeatureDebounceService(new NullLogService()), modelService); + const envService = new class extends mock() { + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }; + const service = new OutlineModelService(languageFeaturesService, new LanguageFeatureDebounceService(new NullLogService(), envService), modelService); const model = createTextModel('foo', undefined, undefined, URI.file('/fome/path.foo')); let count = 0; @@ -61,7 +67,11 @@ suite('OutlineModel', function () { const insta = createModelServices(disposables); const modelService = insta.get(IModelService); - const service = new OutlineModelService(languageFeaturesService, new LanguageFeatureDebounceService(new NullLogService()), modelService); + const envService = new class extends mock() { + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }; + const service = new OutlineModelService(languageFeaturesService, new LanguageFeatureDebounceService(new NullLogService(), envService), modelService); const model = createTextModel('foo', undefined, undefined, URI.file('/fome/path.foo')); let isCancelled = false; diff --git a/src/vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution.ts b/src/vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution.ts deleted file mode 100644 index 0b188d354bf..00000000000 --- a/src/vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution.ts +++ /dev/null @@ -1,183 +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 { raceCancellation } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { UriList, VSDataTransfer } from 'vs/base/common/dataTransfer'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { Mimes } from 'vs/base/common/mime'; -import { relativePath } from 'vs/base/common/resources'; -import { URI } from 'vs/base/common/uri'; -import { addExternalEditorsDropData, toVSDataTransfer } from 'vs/editor/browser/dnd'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { IBulkEditService, ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService'; -import { IPosition } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { DocumentOnDropEdit, DocumentOnDropEditProvider, WorkspaceEdit } from 'vs/editor/common/languages'; -import { ITextModel } from 'vs/editor/common/model'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; -import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; -import { localize } from 'vs/nls'; -import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; - - -export class DropIntoEditorController extends Disposable implements IEditorContribution { - - public static readonly ID = 'editor.contrib.dropIntoEditorController'; - - constructor( - editor: ICodeEditor, - @IBulkEditService private readonly _bulkEditService: IBulkEditService, - @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, - @IProgressService private readonly _progressService: IProgressService, - @IWorkspaceContextService workspaceContextService: IWorkspaceContextService, - ) { - super(); - - this._register(editor.onDropIntoEditor(e => this.onDropIntoEditor(editor, e.position, e.event))); - - this._languageFeaturesService.documentOnDropEditProvider.register('*', new DefaultOnDropProvider(workspaceContextService)); - } - - private async onDropIntoEditor(editor: ICodeEditor, position: IPosition, dragEvent: DragEvent) { - if (!dragEvent.dataTransfer || !editor.hasModel()) { - return; - } - - const model = editor.getModel(); - const initialModelVersion = model.getVersionId(); - - const ourDataTransfer = await this.extractDataTransferData(dragEvent); - if (ourDataTransfer.size === 0) { - return; - } - - if (editor.getModel().getVersionId() !== initialModelVersion) { - return; - } - - const tokenSource = new EditorStateCancellationTokenSource(editor, CodeEditorStateFlag.Value); - try { - const providers = this._languageFeaturesService.documentOnDropEditProvider.ordered(model); - - const providerEdit = await this._progressService.withProgress({ - location: ProgressLocation.Notification, - delay: 750, - title: localize('dropProgressTitle', "Running drop handlers..."), - cancellable: true, - }, () => { - return raceCancellation((async () => { - for (const provider of providers) { - const edit = await provider.provideDocumentOnDropEdits(model, position, ourDataTransfer, tokenSource.token); - if (tokenSource.token.isCancellationRequested) { - return undefined; - } - if (edit) { - return edit; - } - } - return undefined; - })(), tokenSource.token); - }, () => { - tokenSource.cancel(); - }); - - if (tokenSource.token.isCancellationRequested || editor.getModel().getVersionId() !== initialModelVersion) { - return; - } - - if (providerEdit) { - const snippet = typeof providerEdit.insertText === 'string' ? SnippetParser.escape(providerEdit.insertText) : providerEdit.insertText.snippet; - const combinedWorkspaceEdit: WorkspaceEdit = { - edits: [ - new ResourceTextEdit(model.uri, { - range: new Range(position.lineNumber, position.column, position.lineNumber, position.column), - text: snippet, - insertAsSnippet: true, - }), - ...(providerEdit.additionalEdit?.edits ?? []) - ] - }; - editor.focus(); - await this._bulkEditService.apply(combinedWorkspaceEdit, { editor }); - return; - } - } finally { - tokenSource.dispose(); - } - } - - public async extractDataTransferData(dragEvent: DragEvent): Promise { - if (!dragEvent.dataTransfer) { - return new VSDataTransfer(); - } - - const textEditorDataTransfer = toVSDataTransfer(dragEvent.dataTransfer); - addExternalEditorsDropData(textEditorDataTransfer, dragEvent); - return textEditorDataTransfer; - } -} - -class DefaultOnDropProvider implements DocumentOnDropEditProvider { - - constructor( - @IWorkspaceContextService private readonly _workspaceContextService: IWorkspaceContextService, - ) { } - - async provideDocumentOnDropEdits(_model: ITextModel, _position: IPosition, dataTransfer: VSDataTransfer, _token: CancellationToken): Promise { - const urlListEntry = dataTransfer.get(Mimes.uriList); - if (urlListEntry) { - const urlList = await urlListEntry.asString(); - const snippet = this.getUriListInsertText(urlList); - if (snippet) { - return { insertText: snippet }; - } - } - - const textEntry = dataTransfer.get('text') ?? dataTransfer.get(Mimes.text); - if (textEntry) { - const text = await textEntry.asString(); - return { insertText: text }; - } - - return undefined; - } - - private getUriListInsertText(strUriList: string): string | undefined { - const uris: URI[] = []; - for (const resource of UriList.parse(strUriList)) { - try { - uris.push(URI.parse(resource)); - } catch { - // noop - } - } - - if (!uris.length) { - return; - } - - return uris - .map(uri => { - const root = this._workspaceContextService.getWorkspaceFolder(uri); - if (root) { - const rel = relativePath(root.uri, uri); - if (rel) { - return rel; - } - } - return uri.fsPath; - }) - .join(' '); - } -} - - -registerEditorContribution(DropIntoEditorController.ID, DropIntoEditorController, EditorContributionInstantiation.BeforeFirstInteraction); - diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts new file mode 100644 index 00000000000..990847669d2 --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts @@ -0,0 +1,65 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; +import { CopyPasteController, changePasteTypeCommandId, pasteWidgetVisibleCtx } from 'vs/editor/contrib/dropOrPasteInto/browser/copyPasteController'; +import { DefaultPasteProvidersFeature } from 'vs/editor/contrib/dropOrPasteInto/browser/defaultProviders'; +import * as nls from 'vs/nls'; +import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; + +registerEditorContribution(CopyPasteController.ID, CopyPasteController, EditorContributionInstantiation.Eager); // eager because it listens to events on the container dom node of the editor + +registerEditorFeature(DefaultPasteProvidersFeature); + +registerEditorCommand(new class extends EditorCommand { + constructor() { + super({ + id: changePasteTypeCommandId, + precondition: pasteWidgetVisibleCtx, + kbOpts: { + weight: KeybindingWeight.EditorContrib, + primary: KeyMod.CtrlCmd | KeyCode.Period, + } + }); + } + + public override runEditorCommand(_accessor: ServicesAccessor | null, editor: ICodeEditor, _args: any) { + return CopyPasteController.get(editor)?.changePasteType(); + } +}); + +registerEditorAction(class extends EditorAction { + constructor() { + super({ + id: 'editor.action.pasteAs', + label: nls.localize('pasteAs', "Paste As..."), + alias: 'Paste As...', + precondition: undefined, + description: { + description: 'Paste as', + args: [{ + name: 'args', + schema: { + type: 'object', + properties: { + 'id': { + type: 'string', + description: nls.localize('pasteAs.id', "The id of the paste edit to try applying. If not provided, the editor will show a picker."), + } + }, + } + }] + } + }); + } + + public override run(_accessor: ServicesAccessor, editor: ICodeEditor, args: any) { + const id = typeof args?.id === 'string' ? args.id : undefined; + return CopyPasteController.get(editor)?.pasteAs(id); + } +}); diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts new file mode 100644 index 00000000000..d4205b9fd04 --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts @@ -0,0 +1,452 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { addDisposableListener } from 'vs/base/browser/dom'; +import { coalesce } from 'vs/base/common/arrays'; +import { CancelablePromise, createCancelablePromise, raceCancellation } from 'vs/base/common/async'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { UriList, VSDataTransfer, createStringDataTransferItem, matchesMimeType } from 'vs/base/common/dataTransfer'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { Mimes } from 'vs/base/common/mime'; +import * as platform from 'vs/base/common/platform'; +import { generateUuid } from 'vs/base/common/uuid'; +import { toExternalVSDataTransfer, toVSDataTransfer } from 'vs/editor/browser/dnd'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { IRange, Range } from 'vs/editor/common/core/range'; +import { Selection } from 'vs/editor/common/core/selection'; +import { Handler, IEditorContribution, PastePayload } from 'vs/editor/common/editorCommon'; +import { DocumentPasteEdit, DocumentPasteEditProvider } from 'vs/editor/common/languages'; +import { ITextModel } from 'vs/editor/common/model'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { createCombinedWorkspaceEdit } from 'vs/editor/contrib/dropOrPasteInto/browser/edit'; +import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; +import { InlineProgressManager } from 'vs/editor/contrib/inlineProgress/browser/inlineProgress'; +import { localize } from 'vs/nls'; +import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; +import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; +import { PostEditWidgetManager } from './postEditWidget'; + +export const changePasteTypeCommandId = 'editor.changePasteType'; + +export const pasteWidgetVisibleCtx = new RawContextKey('pasteWidgetVisible', false, localize('pasteWidgetVisible', "Whether the paste widget is showing")); + +const vscodeClipboardMime = 'application/vnd.code.copyMetadata'; + +interface CopyMetadata { + readonly id?: string; + readonly providerCopyMimeTypes?: readonly string[]; + + readonly defaultPastePayload: Omit; +} + +export class CopyPasteController extends Disposable implements IEditorContribution { + + public static readonly ID = 'editor.contrib.copyPasteActionController'; + + public static get(editor: ICodeEditor): CopyPasteController { + return editor.getContribution(CopyPasteController.ID)!; + } + + private readonly _editor: ICodeEditor; + + private _currentCopyOperation?: { + readonly handle: string; + readonly dataTransferPromise: CancelablePromise; + }; + + private _currentPasteOperation?: CancelablePromise; + private _pasteAsActionContext?: { readonly preferredId: string | undefined }; + + private readonly _pasteProgressManager: InlineProgressManager; + private readonly _postPasteWidgetManager: PostEditWidgetManager; + + constructor( + editor: ICodeEditor, + @IInstantiationService instantiationService: IInstantiationService, + @IBulkEditService private readonly _bulkEditService: IBulkEditService, + @IClipboardService private readonly _clipboardService: IClipboardService, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @IQuickInputService private readonly _quickInputService: IQuickInputService, + @IProgressService private readonly _progressService: IProgressService, + ) { + super(); + + this._editor = editor; + + const container = editor.getContainerDomNode(); + this._register(addDisposableListener(container, 'copy', e => this.handleCopy(e))); + this._register(addDisposableListener(container, 'cut', e => this.handleCopy(e))); + this._register(addDisposableListener(container, 'paste', e => this.handlePaste(e), true)); + + this._pasteProgressManager = this._register(new InlineProgressManager('pasteIntoEditor', editor, instantiationService)); + + this._postPasteWidgetManager = this._register(instantiationService.createInstance(PostEditWidgetManager, 'pasteIntoEditor', editor, pasteWidgetVisibleCtx, { id: changePasteTypeCommandId, label: localize('postPasteWidgetTitle', "Show paste options...") })); + } + + public changePasteType() { + this._postPasteWidgetManager.tryShowSelector(); + } + + public pasteAs(preferredId?: string) { + this._editor.focus(); + try { + this._pasteAsActionContext = { preferredId }; + document.execCommand('paste'); + } finally { + this._pasteAsActionContext = undefined; + } + } + + public clearWidgets() { + this._postPasteWidgetManager.clear(); + } + + private isPasteAsEnabled(): boolean { + return this._editor.getOption(EditorOption.pasteAs).enabled + && !this._editor.getOption(EditorOption.readOnly); + } + + private handleCopy(e: ClipboardEvent) { + if (!this._editor.hasTextFocus()) { + return; + } + + if (platform.isWeb) { + // Explicitly clear the web resources clipboard. + // This is needed because on web, the browser clipboard is faked out using an in-memory store. + // This means the resources clipboard is not properly updated when copying from the editor. + this._clipboardService.writeResources([]); + } + + if (!e.clipboardData || !this.isPasteAsEnabled()) { + return; + } + + const model = this._editor.getModel(); + const selections = this._editor.getSelections(); + if (!model || !selections?.length) { + return; + } + + const enableEmptySelectionClipboard = this._editor.getOption(EditorOption.emptySelectionClipboard); + + let ranges: readonly IRange[] = selections; + const wasFromEmptySelection = selections.length === 1 && selections[0].isEmpty(); + if (wasFromEmptySelection) { + if (!enableEmptySelectionClipboard) { + return; + } + + ranges = [new Range(ranges[0].startLineNumber, 1, ranges[0].startLineNumber, 1 + model.getLineLength(ranges[0].startLineNumber))]; + } + + const toCopy = this._editor._getViewModel()?.getPlainTextToCopy(selections, enableEmptySelectionClipboard, platform.isWindows); + const multicursorText = Array.isArray(toCopy) ? toCopy : null; + + const defaultPastePayload = { + multicursorText, + pasteOnNewLine: wasFromEmptySelection, + mode: null + }; + + const providers = this._languageFeaturesService.documentPasteEditProvider + .ordered(model) + .filter(x => !!x.prepareDocumentPaste); + if (!providers.length) { + this.setCopyMetadata(e.clipboardData, { defaultPastePayload }); + return; + } + + const dataTransfer = toVSDataTransfer(e.clipboardData); + const providerCopyMimeTypes = providers.flatMap(x => x.copyMimeTypes ?? []); + + // Save off a handle pointing to data that VS Code maintains. + const handle = generateUuid(); + this.setCopyMetadata(e.clipboardData, { + id: handle, + providerCopyMimeTypes, + defaultPastePayload + }); + + const promise = createCancelablePromise(async token => { + const results = coalesce(await Promise.all(providers.map(async provider => { + try { + return await provider.prepareDocumentPaste!(model, ranges, dataTransfer, token); + } catch (err) { + console.error(err); + return undefined; + } + }))); + + // Values from higher priority providers should overwrite values from lower priority ones. + // Reverse the array to so that the calls to `replace` below will do this + results.reverse(); + + for (const result of results) { + for (const [mime, value] of result) { + dataTransfer.replace(mime, value); + } + } + + return dataTransfer; + }); + + this._currentCopyOperation?.dataTransferPromise.cancel(); + this._currentCopyOperation = { handle: handle, dataTransferPromise: promise }; + } + + private async handlePaste(e: ClipboardEvent) { + if (!e.clipboardData || !this._editor.hasTextFocus()) { + return; + } + + this._currentPasteOperation?.cancel(); + this._currentPasteOperation = undefined; + + const model = this._editor.getModel(); + const selections = this._editor.getSelections(); + if (!selections?.length || !model) { + return; + } + + if (!this.isPasteAsEnabled()) { + return; + } + + const metadata = this.fetchCopyMetadata(e.clipboardData); + const dataTransfer = toExternalVSDataTransfer(e.clipboardData); + dataTransfer.delete(vscodeClipboardMime); + + const allPotentialMimeTypes = [ + ...e.clipboardData.types, + ...metadata?.providerCopyMimeTypes ?? [], + // TODO: always adds `uri-list` because this get set if there are resources in the system clipboard. + // However we can only check the system clipboard async. For this early check, just add it in. + // We filter providers again once we have the final dataTransfer we will use. + Mimes.uriList, + ]; + + const allProviders = this._languageFeaturesService.documentPasteEditProvider + .ordered(model) + .filter(provider => provider.pasteMimeTypes?.some(type => matchesMimeType(type, allPotentialMimeTypes))); + if (!allProviders.length) { + return; + } + + // Prevent the editor's default paste handler from running. + // Note that after this point, we are fully responsible for handling paste. + // If we can't provider a paste for any reason, we need to explicitly delegate pasting back to the editor. + e.preventDefault(); + e.stopImmediatePropagation(); + + if (this._pasteAsActionContext) { + this.showPasteAsPick(this._pasteAsActionContext.preferredId, allProviders, selections, dataTransfer, metadata); + } else { + this.doPasteInline(allProviders, selections, dataTransfer, metadata); + } + } + + private doPasteInline(allProviders: readonly DocumentPasteEditProvider[], selections: readonly Selection[], dataTransfer: VSDataTransfer, metadata: CopyMetadata | undefined): void { + const p = createCancelablePromise(async (token) => { + const editor = this._editor; + if (!editor.hasModel()) { + return; + } + const model = editor.getModel(); + + const tokenSource = new EditorStateCancellationTokenSource(editor, CodeEditorStateFlag.Value | CodeEditorStateFlag.Selection, undefined, token); + try { + await this.mergeInDataFromCopy(dataTransfer, metadata, tokenSource.token); + if (tokenSource.token.isCancellationRequested) { + return; + } + + // Filter out any providers the don't match the full data transfer we will send them. + const supportedProviders = allProviders.filter(provider => isSupportedPasteProvider(provider, dataTransfer)); + if (!supportedProviders.length + || (supportedProviders.length === 1 && supportedProviders[0].id === 'text') // Only our default text provider is active + ) { + await this.applyDefaultPasteHandler(dataTransfer, metadata, tokenSource.token); + return; + } + + const providerEdits = await this.getPasteEdits(supportedProviders, dataTransfer, model, selections, tokenSource.token); + if (tokenSource.token.isCancellationRequested) { + return; + } + + // If the only edit returned is a text edit, use the default paste handler + if (providerEdits.length === 1 && providerEdits[0].id === 'text') { + await this.applyDefaultPasteHandler(dataTransfer, metadata, tokenSource.token); + return; + } + + if (providerEdits.length) { + const canShowWidget = editor.getOption(EditorOption.pasteAs).showPasteSelector === 'afterPaste'; + return this._postPasteWidgetManager.applyEditAndShowIfNeeded(selections, { activeEditIndex: 0, allEdits: providerEdits }, canShowWidget, tokenSource.token); + } + + await this.applyDefaultPasteHandler(dataTransfer, metadata, tokenSource.token); + } finally { + tokenSource.dispose(); + if (this._currentPasteOperation === p) { + this._currentPasteOperation = undefined; + } + } + }); + + this._pasteProgressManager.showWhile(selections[0].getEndPosition(), localize('pasteIntoEditorProgress', "Running paste handlers. Click to cancel"), p); + this._currentPasteOperation = p; + } + + private showPasteAsPick(preferredId: string | undefined, allProviders: readonly DocumentPasteEditProvider[], selections: readonly Selection[], dataTransfer: VSDataTransfer, metadata: CopyMetadata | undefined): void { + const p = createCancelablePromise(async (token) => { + const editor = this._editor; + if (!editor.hasModel()) { + return; + } + const model = editor.getModel(); + + const tokenSource = new EditorStateCancellationTokenSource(editor, CodeEditorStateFlag.Value | CodeEditorStateFlag.Selection, undefined, token); + try { + await this.mergeInDataFromCopy(dataTransfer, metadata, tokenSource.token); + if (tokenSource.token.isCancellationRequested) { + return; + } + + // Filter out any providers the don't match the full data transfer we will send them. + const supportedProviders = allProviders.filter(provider => isSupportedPasteProvider(provider, dataTransfer)); + + const providerEdits = await this.getPasteEdits(supportedProviders, dataTransfer, model, selections, tokenSource.token); + if (tokenSource.token.isCancellationRequested) { + return; + } + + if (!providerEdits.length) { + return; + } + + let pickedEdit: DocumentPasteEdit | undefined; + if (typeof preferredId === 'string') { + // We are looking for a specific edit + pickedEdit = providerEdits.find(edit => edit.id === preferredId); + } else { + const selected = await this._quickInputService.pick( + providerEdits.map((edit): IQuickPickItem & { edit: DocumentPasteEdit } => ({ + label: edit.label, + description: edit.id, + detail: edit.detail, + edit, + })), { + placeHolder: localize('pasteAsPickerPlaceholder', "Select Paste Action"), + }); + pickedEdit = selected?.edit; + } + + if (!pickedEdit) { + return; + } + + const combinedWorkspaceEdit = createCombinedWorkspaceEdit(model.uri, selections, pickedEdit); + await this._bulkEditService.apply(combinedWorkspaceEdit, { editor: this._editor }); + } finally { + tokenSource.dispose(); + if (this._currentPasteOperation === p) { + this._currentPasteOperation = undefined; + } + } + }); + + this._progressService.withProgress({ + location: ProgressLocation.Window, + title: localize('pasteAsProgress', "Running paste handlers"), + }, () => p); + } + + + private setCopyMetadata(dataTransfer: DataTransfer, metadata: CopyMetadata) { + dataTransfer.setData(vscodeClipboardMime, JSON.stringify(metadata)); + } + + private fetchCopyMetadata(dataTransfer: DataTransfer): CopyMetadata | undefined { + const rawMetadata = dataTransfer.getData(vscodeClipboardMime); + if (rawMetadata) { + try { + return JSON.parse(rawMetadata); + } catch { + return undefined; + } + } + return undefined; + } + + private async mergeInDataFromCopy(dataTransfer: VSDataTransfer, metadata: CopyMetadata | undefined, token: CancellationToken): Promise { + if (metadata?.id && this._currentCopyOperation?.handle === metadata.id) { + const toMergeDataTransfer = await this._currentCopyOperation.dataTransferPromise; + if (token.isCancellationRequested) { + return; + } + + for (const [key, value] of toMergeDataTransfer) { + dataTransfer.replace(key, value); + } + } + + if (!dataTransfer.has(Mimes.uriList)) { + const resources = await this._clipboardService.readResources(); + if (token.isCancellationRequested) { + return; + } + + if (resources.length) { + dataTransfer.append(Mimes.uriList, createStringDataTransferItem(UriList.create(resources))); + } + } + } + + private async getPasteEdits(providers: readonly DocumentPasteEditProvider[], dataTransfer: VSDataTransfer, model: ITextModel, selections: readonly Selection[], token: CancellationToken): Promise { + const result = await raceCancellation( + Promise.all(providers.map(provider => { + try { + return provider.provideDocumentPasteEdits?.(model, selections, dataTransfer, token); + } catch (err) { + console.error(err); + return undefined; + } + })).then(coalesce), + token); + result?.sort((a, b) => b.priority - a.priority); + return result ?? []; + } + + private async applyDefaultPasteHandler(dataTransfer: VSDataTransfer, metadata: CopyMetadata | undefined, token: CancellationToken) { + const textDataTransfer = dataTransfer.get(Mimes.text) ?? dataTransfer.get('text'); + if (!textDataTransfer) { + return; + } + + const text = await textDataTransfer.asString(); + if (token.isCancellationRequested) { + return; + } + + const payload: PastePayload = { + text, + pasteOnNewLine: metadata?.defaultPastePayload.pasteOnNewLine ?? false, + multicursorText: metadata?.defaultPastePayload.multicursorText ?? null, + mode: null, + }; + this._editor.trigger('keyboard', Handler.Paste, payload); + } +} + +function isSupportedPasteProvider(provider: DocumentPasteEditProvider, dataTransfer: VSDataTransfer): boolean { + return Boolean(provider.pasteMimeTypes?.some(type => dataTransfer.matches(type))); +} diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.ts new file mode 100644 index 00000000000..f0f6ac8348d --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.ts @@ -0,0 +1,200 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { coalesce } from 'vs/base/common/arrays'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { IReadonlyVSDataTransfer, UriList } from 'vs/base/common/dataTransfer'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { Mimes } from 'vs/base/common/mime'; +import { Schemas } from 'vs/base/common/network'; +import { relativePath } from 'vs/base/common/resources'; +import { URI } from 'vs/base/common/uri'; +import { IPosition } from 'vs/editor/common/core/position'; +import { IRange } from 'vs/editor/common/core/range'; +import { DocumentOnDropEdit, DocumentOnDropEditProvider, DocumentPasteEdit, DocumentPasteEditProvider } from 'vs/editor/common/languages'; +import { ITextModel } from 'vs/editor/common/model'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { localize } from 'vs/nls'; +import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; + +const builtInLabel = localize('builtIn', 'Built-in'); + +abstract class SimplePasteAndDropProvider implements DocumentOnDropEditProvider, DocumentPasteEditProvider { + + abstract readonly id: string; + abstract readonly dropMimeTypes: readonly string[] | undefined; + abstract readonly pasteMimeTypes: readonly string[]; + + async provideDocumentPasteEdits(_model: ITextModel, _ranges: readonly IRange[], dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken): Promise { + const edit = await this.getEdit(dataTransfer, token); + return edit ? { id: this.id, insertText: edit.insertText, label: edit.label, detail: edit.detail, priority: edit.priority } : undefined; + } + + async provideDocumentOnDropEdits(_model: ITextModel, _position: IPosition, dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken): Promise { + const edit = await this.getEdit(dataTransfer, token); + return edit ? { id: this.id, insertText: edit.insertText, label: edit.label, priority: edit.priority } : undefined; + } + + protected abstract getEdit(dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken): Promise; +} + +class DefaultTextProvider extends SimplePasteAndDropProvider { + + readonly id = 'text'; + readonly dropMimeTypes = [Mimes.text]; + readonly pasteMimeTypes = [Mimes.text]; + + protected async getEdit(dataTransfer: IReadonlyVSDataTransfer, _token: CancellationToken) { + const textEntry = dataTransfer.get(Mimes.text); + if (!textEntry) { + return; + } + + // Suppress if there's also a uriList entry. + // Typically the uri-list contains the same text as the text entry so showing both is confusing. + if (dataTransfer.has(Mimes.uriList)) { + return; + } + + const insertText = await textEntry.asString(); + return { + id: this.id, + priority: 0, + label: localize('text.label', "Insert Plain Text"), + detail: builtInLabel, + insertText + }; + } +} + +class PathProvider extends SimplePasteAndDropProvider { + + readonly id = 'uri'; + readonly dropMimeTypes = [Mimes.uriList]; + readonly pasteMimeTypes = [Mimes.uriList]; + + protected async getEdit(dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken) { + const entries = await extractUriList(dataTransfer); + if (!entries.length || token.isCancellationRequested) { + return; + } + + let uriCount = 0; + const insertText = entries + .map(({ uri, originalText }) => { + if (uri.scheme === Schemas.file) { + return uri.fsPath; + } else { + uriCount++; + return originalText; + } + }) + .join(' '); + + let label: string; + if (uriCount > 0) { + // Dropping at least one generic uri (such as https) so use most generic label + label = entries.length > 1 + ? localize('defaultDropProvider.uriList.uris', "Insert Uris") + : localize('defaultDropProvider.uriList.uri', "Insert Uri"); + } else { + // All the paths are file paths + label = entries.length > 1 + ? localize('defaultDropProvider.uriList.paths', "Insert Paths") + : localize('defaultDropProvider.uriList.path', "Insert Path"); + } + + return { + id: this.id, + priority: 0, + insertText, + label, + detail: builtInLabel, + }; + } +} + +class RelativePathProvider extends SimplePasteAndDropProvider { + + readonly id = 'relativePath'; + readonly dropMimeTypes = [Mimes.uriList]; + readonly pasteMimeTypes = [Mimes.uriList]; + + constructor( + @IWorkspaceContextService private readonly _workspaceContextService: IWorkspaceContextService + ) { + super(); + } + + protected async getEdit(dataTransfer: IReadonlyVSDataTransfer, token: CancellationToken) { + const entries = await extractUriList(dataTransfer); + if (!entries.length || token.isCancellationRequested) { + return; + } + + const relativeUris = coalesce(entries.map(({ uri }) => { + const root = this._workspaceContextService.getWorkspaceFolder(uri); + return root ? relativePath(root.uri, uri) : undefined; + })); + + if (!relativeUris.length) { + return; + } + + return { + id: this.id, + priority: 0, + insertText: relativeUris.join(' '), + label: entries.length > 1 + ? localize('defaultDropProvider.uriList.relativePaths', "Insert Relative Paths") + : localize('defaultDropProvider.uriList.relativePath', "Insert Relative Path"), + detail: builtInLabel, + }; + } +} + +async function extractUriList(dataTransfer: IReadonlyVSDataTransfer): Promise<{ readonly uri: URI; readonly originalText: string }[]> { + const urlListEntry = dataTransfer.get(Mimes.uriList); + if (!urlListEntry) { + return []; + } + + const strUriList = await urlListEntry.asString(); + const entries: { readonly uri: URI; readonly originalText: string }[] = []; + for (const entry of UriList.parse(strUriList)) { + try { + entries.push({ uri: URI.parse(entry), originalText: entry }); + } catch { + // noop + } + } + return entries; +} + +export class DefaultDropProvidersFeature extends Disposable { + constructor( + @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, + @IWorkspaceContextService workspaceContextService: IWorkspaceContextService, + ) { + super(); + + this._register(languageFeaturesService.documentOnDropEditProvider.register('*', new DefaultTextProvider())); + this._register(languageFeaturesService.documentOnDropEditProvider.register('*', new PathProvider())); + this._register(languageFeaturesService.documentOnDropEditProvider.register('*', new RelativePathProvider(workspaceContextService))); + } +} + +export class DefaultPasteProvidersFeature extends Disposable { + constructor( + @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, + @IWorkspaceContextService workspaceContextService: IWorkspaceContextService, + ) { + super(); + + this._register(languageFeaturesService.documentPasteEditProvider.register('*', new DefaultTextProvider())); + this._register(languageFeaturesService.documentPasteEditProvider.register('*', new PathProvider())); + this._register(languageFeaturesService.documentPasteEditProvider.register('*', new RelativePathProvider(workspaceContextService))); + } +} diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts new file mode 100644 index 00000000000..a57d194fc7f --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorCommand, EditorContributionInstantiation, ServicesAccessor, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { registerEditorFeature } from 'vs/editor/common/editorFeatures'; +import { DefaultDropProvidersFeature } from 'vs/editor/contrib/dropOrPasteInto/browser/defaultProviders'; +import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { DropIntoEditorController, changeDropTypeCommandId, dropWidgetVisibleCtx } from './dropIntoEditorController'; + + +registerEditorContribution(DropIntoEditorController.ID, DropIntoEditorController, EditorContributionInstantiation.BeforeFirstInteraction); + +registerEditorCommand(new class extends EditorCommand { + constructor() { + super({ + id: changeDropTypeCommandId, + precondition: dropWidgetVisibleCtx, + kbOpts: { + weight: KeybindingWeight.EditorContrib, + primary: KeyMod.CtrlCmd | KeyCode.Period, + } + }); + } + + public override runEditorCommand(_accessor: ServicesAccessor | null, editor: ICodeEditor, _args: any) { + DropIntoEditorController.get(editor)?.changeDropType(); + } +}); + +registerEditorFeature(DefaultDropProvidersFeature); diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.ts new file mode 100644 index 00000000000..d9ce8328372 --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.ts @@ -0,0 +1,158 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { coalesce } from 'vs/base/common/arrays'; +import { CancelablePromise, createCancelablePromise, raceCancellation } from 'vs/base/common/async'; +import { VSDataTransfer } from 'vs/base/common/dataTransfer'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { toExternalVSDataTransfer } from 'vs/editor/browser/dnd'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { IPosition } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { IEditorContribution } from 'vs/editor/common/editorCommon'; +import { DocumentOnDropEditProvider } from 'vs/editor/common/languages'; +import { ITextModel } from 'vs/editor/common/model'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { DraggedTreeItemsIdentifier } from 'vs/editor/common/services/treeViewsDnd'; +import { ITreeViewsDnDService } from 'vs/editor/common/services/treeViewsDndService'; +import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; +import { InlineProgressManager } from 'vs/editor/contrib/inlineProgress/browser/inlineProgress'; +import { localize } from 'vs/nls'; +import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { LocalSelectionTransfer } from 'vs/platform/dnd/browser/dnd'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { PostEditWidgetManager } from './postEditWidget'; + +export const changeDropTypeCommandId = 'editor.changeDropType'; + +export const dropWidgetVisibleCtx = new RawContextKey('dropWidgetVisible', false, localize('dropWidgetVisible', "Whether the drop widget is showing")); + +export class DropIntoEditorController extends Disposable implements IEditorContribution { + + public static readonly ID = 'editor.contrib.dropIntoEditorController'; + + public static get(editor: ICodeEditor): DropIntoEditorController | null { + return editor.getContribution(DropIntoEditorController.ID); + } + + private _currentOperation?: CancelablePromise; + + private readonly _dropProgressManager: InlineProgressManager; + private readonly _postDropWidgetManager: PostEditWidgetManager; + + private readonly treeItemsTransfer = LocalSelectionTransfer.getInstance(); + + constructor( + editor: ICodeEditor, + @IInstantiationService instantiationService: IInstantiationService, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @ITreeViewsDnDService private readonly _treeViewsDragAndDropService: ITreeViewsDnDService + ) { + super(); + + this._dropProgressManager = this._register(instantiationService.createInstance(InlineProgressManager, 'dropIntoEditor', editor)); + this._postDropWidgetManager = this._register(instantiationService.createInstance(PostEditWidgetManager, 'dropIntoEditor', editor, dropWidgetVisibleCtx, { id: changeDropTypeCommandId, label: localize('postDropWidgetTitle', "Show drop options...") })); + + this._register(editor.onDropIntoEditor(e => this.onDropIntoEditor(editor, e.position, e.event))); + } + + public clearWidgets() { + this._postDropWidgetManager.clear(); + } + + public changeDropType() { + this._postDropWidgetManager.tryShowSelector(); + } + + private async onDropIntoEditor(editor: ICodeEditor, position: IPosition, dragEvent: DragEvent) { + if (!dragEvent.dataTransfer || !editor.hasModel()) { + return; + } + + this._currentOperation?.cancel(); + + editor.focus(); + editor.setPosition(position); + + const p = createCancelablePromise(async (token) => { + const tokenSource = new EditorStateCancellationTokenSource(editor, CodeEditorStateFlag.Value, undefined, token); + + try { + const ourDataTransfer = await this.extractDataTransferData(dragEvent); + if (ourDataTransfer.size === 0 || tokenSource.token.isCancellationRequested) { + return; + } + + const model = editor.getModel(); + if (!model) { + return; + } + + const providers = this._languageFeaturesService.documentOnDropEditProvider + .ordered(model) + .filter(provider => { + if (!provider.dropMimeTypes) { + // Keep all providers that don't specify mime types + return true; + } + return provider.dropMimeTypes.some(mime => ourDataTransfer.matches(mime)); + }); + + const edits = await this.getDropEdits(providers, model, position, ourDataTransfer, tokenSource); + if (tokenSource.token.isCancellationRequested) { + return; + } + + if (edits.length) { + const canShowWidget = editor.getOption(EditorOption.dropIntoEditor).showDropSelector === 'afterDrop'; + // Pass in the parent token here as it tracks cancelling the entire drop operation + await this._postDropWidgetManager.applyEditAndShowIfNeeded([Range.fromPositions(position)], { activeEditIndex: 0, allEdits: edits }, canShowWidget, token); + } + } finally { + tokenSource.dispose(); + if (this._currentOperation === p) { + this._currentOperation = undefined; + } + } + }); + + this._dropProgressManager.showWhile(position, localize('dropIntoEditorProgress', "Running drop handlers. Click to cancel"), p); + this._currentOperation = p; + } + + private async getDropEdits(providers: DocumentOnDropEditProvider[], model: ITextModel, position: IPosition, dataTransfer: VSDataTransfer, tokenSource: EditorStateCancellationTokenSource) { + const results = await raceCancellation(Promise.all(providers.map(provider => { + return provider.provideDocumentOnDropEdits(model, position, dataTransfer, tokenSource.token); + })), tokenSource.token); + const edits = coalesce(results ?? []); + edits.sort((a, b) => b.priority - a.priority); + return edits; + } + + private async extractDataTransferData(dragEvent: DragEvent): Promise { + if (!dragEvent.dataTransfer) { + return new VSDataTransfer(); + } + + const dataTransfer = toExternalVSDataTransfer(dragEvent.dataTransfer); + + if (this.treeItemsTransfer.hasData(DraggedTreeItemsIdentifier.prototype)) { + const data = this.treeItemsTransfer.getData(DraggedTreeItemsIdentifier.prototype); + if (Array.isArray(data)) { + for (const id of data) { + const treeDataTransfer = await this._treeViewsDragAndDropService.removeDragOperationTransfer(id.identifier); + if (treeDataTransfer) { + for (const [type, value] of treeDataTransfer) { + dataTransfer.replace(type, value); + } + } + } + } + } + + return dataTransfer; + } +} diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts new file mode 100644 index 00000000000..f57ad7c1912 --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts @@ -0,0 +1,29 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { URI } from 'vs/base/common/uri'; +import { ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService'; +import { WorkspaceEdit } from 'vs/editor/common/languages'; +import { Range } from 'vs/editor/common/core/range'; + +export interface DropOrPasteEdit { + readonly label: string; + readonly insertText: string | { readonly snippet: string }; + readonly additionalEdit?: WorkspaceEdit; +} + +export function createCombinedWorkspaceEdit(uri: URI, ranges: readonly Range[], edit: DropOrPasteEdit): WorkspaceEdit { + return { + edits: [ + ...ranges.map(range => + new ResourceTextEdit(uri, + typeof edit.insertText === 'string' + ? { range, text: edit.insertText, insertAsSnippet: false } + : { range, text: edit.insertText.snippet, insertAsSnippet: true } + )), + ...(edit.additionalEdit?.edits ?? []) + ] + }; +} diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.css b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.css new file mode 100644 index 00000000000..a0aee618ab6 --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.css @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +.post-edit-widget { + box-shadow: 0 0 8px 2px var(--vscode-widget-shadow); + border: 1px solid var(--vscode-widget-border, transparent); + border-radius: 4px; + background-color: var(--vscode-editorWidget-background); + overflow: hidden; +} + +.post-edit-widget .monaco-button { + padding: 2px; + border: none; + border-radius: 0; +} + +.post-edit-widget .monaco-button:hover { + background-color: var(--vscode-button-secondaryHoverBackground) !important; +} + +.post-edit-widget .monaco-button .codicon { + margin: 0; +} diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts new file mode 100644 index 00000000000..af54bdbf846 --- /dev/null +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts @@ -0,0 +1,233 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as dom from 'vs/base/browser/dom'; +import { Button } from 'vs/base/browser/ui/button/button'; +import { toAction } from 'vs/base/common/actions'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { Event } from 'vs/base/common/event'; +import { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import 'vs/css!./postEditWidget'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; +import { IBulkEditResult, IBulkEditService, ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService'; +import { Range } from 'vs/editor/common/core/range'; +import { WorkspaceEdit } from 'vs/editor/common/languages'; +import { TrackedRangeStickiness } from 'vs/editor/common/model'; +import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; + + +interface EditSet { + readonly activeEditIndex: number; + readonly allEdits: ReadonlyArray<{ + readonly label: string; + readonly insertText: string | { readonly snippet: string }; + readonly additionalEdit?: WorkspaceEdit; + }>; +} + +interface ShowCommand { + readonly id: string; + readonly label: string; +} + +class PostEditWidget extends Disposable implements IContentWidget { + private static readonly baseId = 'editor.widget.postEditWidget'; + + readonly allowEditorOverflow = true; + readonly suppressMouseDown = true; + + private domNode!: HTMLElement; + private button!: Button; + + private readonly visibleContext: IContextKey; + + constructor( + private readonly typeId: string, + private readonly editor: ICodeEditor, + visibleContext: RawContextKey, + private readonly showCommand: ShowCommand, + private readonly range: Range, + private readonly edits: EditSet, + private readonly onSelectNewEdit: (editIndex: number) => void, + @IContextMenuService private readonly _contextMenuService: IContextMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IKeybindingService private readonly _keybindingService: IKeybindingService, + ) { + super(); + + this.create(); + + this.visibleContext = visibleContext.bindTo(contextKeyService); + this.visibleContext.set(true); + this._register(toDisposable(() => this.visibleContext.reset())); + + this.editor.addContentWidget(this); + this.editor.layoutContentWidget(this); + + this._register(toDisposable((() => this.editor.removeContentWidget(this)))); + + this._register(this.editor.onDidChangeCursorPosition(e => { + if (!range.containsPosition(e.position)) { + this.dispose(); + } + })); + + this._register(Event.runAndSubscribe(_keybindingService.onDidUpdateKeybindings, () => { + this._updateButtonTitle(); + })); + } + + private _updateButtonTitle() { + const binding = this._keybindingService.lookupKeybinding(this.showCommand.id)?.getLabel(); + this.button.element.title = this.showCommand.label + (binding ? ` (${binding})` : ''); + } + + private create(): void { + this.domNode = dom.$('.post-edit-widget'); + + this.button = this._register(new Button(this.domNode, { + supportIcons: true, + })); + this.button.label = '$(insert)'; + + this._register(dom.addDisposableListener(this.domNode, dom.EventType.CLICK, () => this.showSelector())); + } + + getId(): string { + return PostEditWidget.baseId + '.' + this.typeId; + } + + getDomNode(): HTMLElement { + return this.domNode; + } + + getPosition(): IContentWidgetPosition | null { + return { + position: this.range.getEndPosition(), + preference: [ContentWidgetPositionPreference.BELOW] + }; + } + + showSelector() { + this._contextMenuService.showContextMenu({ + getAnchor: () => { + const pos = dom.getDomNodePagePosition(this.button.element); + return { x: pos.left + pos.width, y: pos.top + pos.height }; + }, + getActions: () => { + return this.edits.allEdits.map((edit, i) => toAction({ + id: '', + label: edit.label, + checked: i === this.edits.activeEditIndex, + run: () => { + if (i !== this.edits.activeEditIndex) { + return this.onSelectNewEdit(i); + } + }, + })); + } + }); + } +} + +export class PostEditWidgetManager extends Disposable { + + private readonly _currentWidget = this._register(new MutableDisposable()); + + constructor( + private readonly _id: string, + private readonly _editor: ICodeEditor, + private readonly _visibleContext: RawContextKey, + private readonly _showCommand: ShowCommand, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + @IBulkEditService private readonly _bulkEditService: IBulkEditService, + ) { + super(); + + this._register(Event.any( + _editor.onDidChangeModel, + _editor.onDidChangeModelContent, + )(() => this.clear())); + } + + public async applyEditAndShowIfNeeded(ranges: readonly Range[], edits: EditSet, canShowWidget: boolean, token: CancellationToken) { + const model = this._editor.getModel(); + if (!model || !ranges.length) { + return; + } + + const edit = edits.allEdits[edits.activeEditIndex]; + if (!edit) { + return; + } + + let insertTextEdit: ResourceTextEdit[] = []; + if (typeof edit.insertText === 'string' ? edit.insertText === '' : edit.insertText.snippet === '') { + insertTextEdit = []; + } else { + insertTextEdit = ranges.map(range => new ResourceTextEdit(model.uri, + typeof edit.insertText === 'string' + ? { range, text: edit.insertText, insertAsSnippet: false } + : { range, text: edit.insertText.snippet, insertAsSnippet: true } + )); + } + + const allEdits = [ + ...insertTextEdit, + ...(edit.additionalEdit?.edits ?? []) + ]; + + const combinedWorkspaceEdit: WorkspaceEdit = { + edits: allEdits + }; + + // Use a decoration to track edits around the trigger range + const primaryRange = ranges[0]; + const editTrackingDecoration = model.deltaDecorations([], [{ + range: primaryRange, + options: { description: 'paste-line-suffix', stickiness: TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges } + }]); + + let editResult: IBulkEditResult; + let editRange: Range | null; + try { + editResult = await this._bulkEditService.apply(combinedWorkspaceEdit, { editor: this._editor, token }); + editRange = model.getDecorationRange(editTrackingDecoration[0]); + } finally { + model.deltaDecorations(editTrackingDecoration, []); + } + + if (canShowWidget && editResult.isApplied && edits.allEdits.length > 1) { + this.show(editRange ?? primaryRange, edits, async (newEditIndex) => { + const model = this._editor.getModel(); + if (!model) { + return; + } + + await model.undo(); + this.applyEditAndShowIfNeeded(ranges, { activeEditIndex: newEditIndex, allEdits: edits.allEdits }, canShowWidget, token); + }); + } + } + + public show(range: Range, edits: EditSet, onDidSelectEdit: (newIndex: number) => void) { + this.clear(); + + if (this._editor.hasModel()) { + this._currentWidget.value = this._instantiationService.createInstance(PostEditWidget, this._id, this._editor, this._visibleContext, this._showCommand, range, edits, onDidSelectEdit); + } + } + + public clear() { + this._currentWidget.clear(); + } + + public tryShowSelector() { + this._currentWidget.value?.showSelector(); + } +} diff --git a/src/vs/editor/contrib/find/browser/findController.ts b/src/vs/editor/contrib/find/browser/findController.ts index 61eec7b6aa9..168d7e5c230 100644 --- a/src/vs/editor/contrib/find/browser/findController.ts +++ b/src/vs/editor/contrib/find/browser/findController.ts @@ -26,7 +26,7 @@ import { ContextKeyExpr, IContextKey, IContextKeyService } from 'vs/platform/con import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { INotificationService } from 'vs/platform/notification/common/notification'; +import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { IThemeService, themeColorFromId } from 'vs/platform/theme/common/themeService'; @@ -184,16 +184,16 @@ export class CommonFindController extends Disposable implements IEditorContribut private saveQueryState(e: FindReplaceStateChangedEvent) { if (e.isRegex) { - this._storageService.store('editor.isRegex', this._state.actualIsRegex, StorageScope.WORKSPACE, StorageTarget.USER); + this._storageService.store('editor.isRegex', this._state.actualIsRegex, StorageScope.WORKSPACE, StorageTarget.MACHINE); } if (e.wholeWord) { - this._storageService.store('editor.wholeWord', this._state.actualWholeWord, StorageScope.WORKSPACE, StorageTarget.USER); + this._storageService.store('editor.wholeWord', this._state.actualWholeWord, StorageScope.WORKSPACE, StorageTarget.MACHINE); } if (e.matchCase) { - this._storageService.store('editor.matchCase', this._state.actualMatchCase, StorageScope.WORKSPACE, StorageTarget.USER); + this._storageService.store('editor.matchCase', this._state.actualMatchCase, StorageScope.WORKSPACE, StorageTarget.MACHINE); } if (e.preserveCase) { - this._storageService.store('editor.preserveCase', this._state.actualPreserveCase, StorageScope.WORKSPACE, StorageTarget.USER); + this._storageService.store('editor.preserveCase', this._state.actualPreserveCase, StorageScope.WORKSPACE, StorageTarget.MACHINE); } } @@ -759,22 +759,46 @@ export class MoveToMatchFindAction extends EditorAction { public run(accessor: ServicesAccessor, editor: ICodeEditor, args: any): void | Promise { const controller = CommonFindController.get(editor); - if (!controller) { return; } + const matchesCount = controller.getState().matchesCount; + if (matchesCount < 1) { + const notificationService = accessor.get(INotificationService); + notificationService.notify({ + severity: Severity.Warning, + message: nls.localize('findMatchAction.noResults', "No matches. Try searching for something else.") + }); + return; + } + const quickInputService = accessor.get(IQuickInputService); const inputBox = quickInputService.createInputBox(); - inputBox.placeholder = nls.localize('findMatchAction.inputPlaceHolder', "Type a number to go to a specific match (between 1 and {0})", controller.getState().matchesCount); + inputBox.placeholder = nls.localize('findMatchAction.inputPlaceHolder', "Type a number to go to a specific match (between 1 and {0})", matchesCount); + + const toFindMatchIndex = (value: string): number | undefined => { + const index = parseInt(value); + if (isNaN(index)) { + return undefined; + } + + const matchCount = controller.getState().matchesCount; + if (index > 0 && index <= matchCount) { + return index - 1; // zero based + } else if (index < 0 && index >= -matchCount) { + return matchCount + index; + } + + return undefined; + }; const updatePickerAndEditor = (value: string) => { - const index = parseInt(value); - - if (!isNaN(index) && index > 0 && index <= controller.getState().matchesCount) { + const index = toFindMatchIndex(value); + if (typeof index === 'number') { // valid inputBox.validationMessage = undefined; - controller.goToMatch(index - 1); + controller.goToMatch(index); const currentMatch = controller.getState().currentMatch; if (currentMatch) { this.addDecorations(editor, currentMatch); @@ -789,9 +813,9 @@ export class MoveToMatchFindAction extends EditorAction { }); inputBox.onDidAccept(() => { - const index = parseInt(inputBox.value); - if (!isNaN(index) && index > 0 && index <= controller.getState().matchesCount) { - controller.goToMatch(index - 1); + const index = toFindMatchIndex(inputBox.value); + if (typeof index === 'number') { + controller.goToMatch(index); inputBox.hide(); } else { inputBox.validationMessage = nls.localize('findMatchAction.inputValidationMessage', "Please type a number between 1 and {0}", controller.getState().matchesCount); diff --git a/src/vs/editor/contrib/find/browser/findWidget.css b/src/vs/editor/contrib/find/browser/findWidget.css index 767b0659fdb..9c20f8682a0 100644 --- a/src/vs/editor/contrib/find/browser/findWidget.css +++ b/src/vs/editor/contrib/find/browser/findWidget.css @@ -55,7 +55,7 @@ .monaco-editor .find-widget > .find-part, .monaco-editor .find-widget > .replace-part { - margin: 3px 0 0 17px; + margin: 3px 25px 0 17px; font-size: 12px; display: flex; } @@ -228,3 +228,10 @@ top: 1px; left: 2px; } + +/* Close button position. */ +.monaco-editor .find-widget > .button.codicon-widget-close { + position: absolute; + top: 5px; + right: 4px; +} diff --git a/src/vs/editor/contrib/find/browser/findWidget.ts b/src/vs/editor/contrib/find/browser/findWidget.ts index 0f7c5d9aeae..a7dd879a53e 100644 --- a/src/vs/editor/contrib/find/browser/findWidget.ts +++ b/src/vs/editor/contrib/find/browser/findWidget.ts @@ -59,6 +59,7 @@ export interface IFindController { getGlobalBufferTerm(): Promise; } +const NLS_FIND_DIALOG_LABEL = nls.localize('label.findDialog', "Find / Replace"); const NLS_FIND_INPUT_LABEL = nls.localize('label.find', "Find"); const NLS_FIND_INPUT_PLACEHOLDER = nls.localize('placeholder.find', "Find"); const NLS_PREVIOUS_MATCH_BTN_LABEL = nls.localize('label.previousMatchButton', "Previous Match"); @@ -731,8 +732,8 @@ export class FindWidget extends Widget implements IOverlayWidget, IVerticalSashL this._domNode.style.maxWidth = `${editorWidth - 28 - minimapWidth - 15}px`; } + this._findInput.layout({ collapsedFindWidget, narrowFindWidget, reducedFindWidget }); if (this._resized) { - this._findInput.inputBox.layout(); const findInputWidth = this._findInput.inputBox.element.clientWidth; if (findInputWidth > 0) { this._replaceInput.width = findInputWidth; @@ -1093,8 +1094,6 @@ export class FindWidget extends Widget implements IOverlayWidget, IVerticalSashL } })); - actionsContainer.appendChild(this._closeBtn.domNode); - // Replace input this._replaceInput = this._register(new ContextScopedReplaceInput(null, undefined, { label: NLS_REPLACE_INPUT_LABEL, @@ -1193,11 +1192,15 @@ export class FindWidget extends Widget implements IOverlayWidget, IVerticalSashL this._domNode = document.createElement('div'); this._domNode.className = 'editor-widget find-widget'; this._domNode.setAttribute('aria-hidden', 'true'); + this._domNode.ariaLabel = NLS_FIND_DIALOG_LABEL; + this._domNode.role = 'dialog'; + // We need to set this explicitly, otherwise on IE11, the width inheritence of flex doesn't work. this._domNode.style.width = `${FIND_WIDGET_INITIAL_WIDTH}px`; this._domNode.appendChild(this._toggleReplaceBtn.domNode); this._domNode.appendChild(findPart); + this._domNode.appendChild(this._closeBtn.domNode); this._domNode.appendChild(replacePart); this._resizeSash = new Sash(this._domNode, this, { orientation: Orientation.VERTICAL, size: 2 }); diff --git a/src/vs/editor/contrib/find/test/browser/findController.test.ts b/src/vs/editor/contrib/find/test/browser/findController.test.ts index 56604069e15..2cfca11f547 100644 --- a/src/vs/editor/contrib/find/test/browser/findController.test.ts +++ b/src/vs/editor/contrib/find/test/browser/findController.test.ts @@ -75,7 +75,9 @@ suite('FindController', async () => { get: (key: string) => queryState[key], getBoolean: (key: string) => !!queryState[key], getNumber: (key: string) => undefined!, + getObject: (key: string) => undefined!, store: (key: string, value: any) => { queryState[key] = value; return Promise.resolve(); }, + storeAll: () => { throw new Error(); }, remove: () => undefined, isNew: () => false, flush: () => { return Promise.resolve(); }, @@ -507,7 +509,9 @@ suite('FindController query options persistence', async () => { get: (key: string) => queryState[key], getBoolean: (key: string) => !!queryState[key], getNumber: (key: string) => undefined!, + getObject: (key: string) => undefined!, store: (key: string, value: any) => { queryState[key] = value; return Promise.resolve(); }, + storeAll: () => { throw new Error(); }, remove: () => undefined, isNew: () => false, flush: () => { return Promise.resolve(); }, diff --git a/src/vs/editor/contrib/folding/browser/folding.css b/src/vs/editor/contrib/folding/browser/folding.css index 049465c97b7..f973d5f7a30 100644 --- a/src/vs/editor/contrib/folding/browser/folding.css +++ b/src/vs/editor/contrib/folding/browser/folding.css @@ -16,6 +16,13 @@ margin-left: 2px; } +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed, +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-expanded, +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-expanded, +.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-collapsed { + transition: initial; +} + .monaco-editor .margin-view-overlays:hover .codicon, .monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed, .monaco-editor .margin-view-overlays .codicon.codicon-folding-manual-collapsed, diff --git a/src/vs/editor/contrib/folding/browser/folding.ts b/src/vs/editor/contrib/folding/browser/folding.ts index baa610c8d31..8fe86b49ed8 100644 --- a/src/vs/editor/contrib/folding/browser/folding.ts +++ b/src/vs/editor/contrib/folding/browser/folding.ts @@ -311,7 +311,7 @@ export class FoldingController extends Disposable implements IEditorContribution if (!foldingModel) { // null if editor has been disposed, or folding turned off return null; } - const sw = new StopWatch(true); + const sw = new StopWatch(); const provider = this.getRangeProvider(foldingModel.textModel); const foldingRegionPromise = this.foldingRegionPromise = createCancelablePromise(token => provider.compute(token)); return foldingRegionPromise.then(foldingRanges => { @@ -413,7 +413,7 @@ export class FoldingController extends Disposable implements IEditorContribution // const gutterOffsetX = data.offsetX - data.glyphMarginWidth - data.lineNumbersWidth - data.glyphMarginLeft; // TODO@joao TODO@alex TODO@martin this is such that we don't collide with dirty diff - if (gutterOffsetX < 5) { // the whitespace between the border and the real folding icon border is 5px + if (gutterOffsetX < 4) { // the whitespace between the border and the real folding icon border is 4px return; } @@ -1269,4 +1269,3 @@ CommandsRegistry.registerCommand('_executeFoldingRangeProvider', async function rangeProvider.dispose(); } }); - diff --git a/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts b/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts index e3e83443ec1..de53762d48f 100644 --- a/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts +++ b/src/vs/editor/contrib/folding/browser/indentRangeProvider.ts @@ -35,7 +35,7 @@ export class IndentRangeProvider implements RangeProvider { } // public only for testing -class RangesCollector { +export class RangesCollector { private readonly _startIndexes: number[]; private readonly _endIndexes: number[]; private readonly _indentOccurrences: number[]; diff --git a/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts b/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts index d8215e7aa41..2a063882078 100644 --- a/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts +++ b/src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts @@ -6,12 +6,12 @@ import * as assert from 'assert'; import { FoldingMarkers } from 'vs/editor/common/languages/languageConfiguration'; import { MAX_FOLDING_REGIONS, FoldRange, FoldingRegions, FoldSource } from 'vs/editor/contrib/folding/browser/foldingRanges'; -import { computeRanges } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; +import { RangesCollector, computeRanges } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; import { createTextModel } from 'vs/editor/test/common/testTextModel'; const markers: FoldingMarkers = { - start: /^\s*#region\b/, - end: /^\s*#endregion\b/ + start: /^#region$/, + end: /^#endregion$/ }; suite('FoldingRanges', () => { @@ -35,20 +35,17 @@ suite('FoldingRanges', () => { test('test max folding regions', () => { const lines: string[] = []; const nRegions = MAX_FOLDING_REGIONS; + const collector = new RangesCollector({ limit: MAX_FOLDING_REGIONS, update: () => { } }); for (let i = 0; i < nRegions; i++) { + const startLineNumber = lines.length; lines.push('#region'); - } - for (let i = 0; i < nRegions; i++) { + const endLineNumber = lines.length; lines.push('#endregion'); + collector.insertFirst(startLineNumber, endLineNumber, 0); } const model = createTextModel(lines.join('\n')); - const actual = computeRanges(model, false, markers, { limit: MAX_FOLDING_REGIONS, update: () => { } }); + const actual = collector.toIndentRanges(model); assert.strictEqual(actual.length, nRegions, 'len'); - for (let i = 0; i < nRegions; i++) { - assert.strictEqual(actual.getStartLineNumber(i), i + 1, 'start' + i); - assert.strictEqual(actual.getEndLineNumber(i), nRegions * 2 - i, 'end' + i); - assert.strictEqual(actual.getParentIndex(i), i - 1, 'parent' + i); - } model.dispose(); }); diff --git a/src/vs/editor/contrib/format/browser/format.ts b/src/vs/editor/contrib/format/browser/format.ts index 237ef74d8cc..42d8cf3d87f 100644 --- a/src/vs/editor/contrib/format/browser/format.ts +++ b/src/vs/editor/contrib/format/browser/format.ts @@ -217,31 +217,44 @@ export async function formatDocumentRangesWithProvider( const allEdits: TextEdit[] = []; const rawEditsList: TextEdit[][] = []; try { - for (const range of ranges) { - if (cts.token.isCancellationRequested) { - return true; - } - rawEditsList.push(await computeEdits(range)); - } + if (typeof provider.provideDocumentRangesFormattingEdits === 'function') { + logService.trace(`[format][provideDocumentRangeFormattingEdits] (request)`, provider.extensionId?.value, ranges); + const result = (await provider.provideDocumentRangesFormattingEdits( + model, + ranges, + model.getFormattingOptions(), + cts.token + )) || []; + logService.trace(`[format][provideDocumentRangeFormattingEdits] (response)`, provider.extensionId?.value, result); + rawEditsList.push(result); + } else { - for (let i = 0; i < ranges.length; ++i) { - for (let j = i + 1; j < ranges.length; ++j) { + for (const range of ranges) { if (cts.token.isCancellationRequested) { return true; } - if (hasIntersectingEdit(rawEditsList[i], rawEditsList[j])) { - // Merge ranges i and j into a single range, recompute the associated edits - const mergedRange = Range.plusRange(ranges[i], ranges[j]); - const edits = await computeEdits(mergedRange); - ranges.splice(j, 1); - ranges.splice(i, 1); - ranges.push(mergedRange); - rawEditsList.splice(j, 1); - rawEditsList.splice(i, 1); - rawEditsList.push(edits); - // Restart scanning - i = 0; - j = 0; + rawEditsList.push(await computeEdits(range)); + } + + for (let i = 0; i < ranges.length; ++i) { + for (let j = i + 1; j < ranges.length; ++j) { + if (cts.token.isCancellationRequested) { + return true; + } + if (hasIntersectingEdit(rawEditsList[i], rawEditsList[j])) { + // Merge ranges i and j into a single range, recompute the associated edits + const mergedRange = Range.plusRange(ranges[i], ranges[j]); + const edits = await computeEdits(mergedRange); + ranges.splice(j, 1); + ranges.splice(i, 1); + ranges.push(mergedRange); + rawEditsList.splice(j, 1); + rawEditsList.splice(i, 1); + rawEditsList.push(edits); + // Restart scanning + i = 0; + j = 0; + } } } } diff --git a/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts b/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts index d164b19a607..90b30ee96b2 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts @@ -3,12 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { isStandalone } from 'vs/base/browser/browser'; import { alert } from 'vs/base/browser/ui/aria/aria'; import { createCancelablePromise, raceCancellation } from 'vs/base/common/async'; import { CancellationToken } from 'vs/base/common/cancellation'; import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { isWeb } from 'vs/base/common/platform'; import { assertType } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { CodeEditorStateFlag, EditorStateCancellationTokenSource } from 'vs/editor/contrib/editorState/browser/editorState'; @@ -41,6 +39,7 @@ import { getDeclarationsAtPosition, getDefinitionsAtPosition, getImplementations import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { Iterable } from 'vs/base/common/iterator'; +import { IsWebContext } from 'vs/platform/contextkey/common/contextkeys'; MenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextPeek, @@ -92,7 +91,7 @@ export abstract class SymbolNavigationAction extends EditorAction2 { } } } - return result; + return result; } readonly configuration: SymbolNavigationActionConfig; @@ -272,10 +271,6 @@ export class DefinitionAction extends SymbolNavigationAction { } } -const goToDefinitionKb = isWeb && !isStandalone() - ? KeyMod.CtrlCmd | KeyCode.F12 - : KeyCode.F12; - registerAction2(class GoToDefinitionAction extends DefinitionAction { static readonly id = 'editor.action.revealDefinition'; @@ -295,11 +290,15 @@ registerAction2(class GoToDefinitionAction extends DefinitionAction { precondition: ContextKeyExpr.and( EditorContextKeys.hasDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()), - keybinding: { + keybinding: [{ when: EditorContextKeys.editorTextFocus, - primary: goToDefinitionKb, + primary: KeyCode.F12, weight: KeybindingWeight.EditorContrib - }, + }, { + when: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, IsWebContext), + primary: KeyMod.CtrlCmd | KeyCode.F12, + weight: KeybindingWeight.EditorContrib + }], menu: [{ id: MenuId.EditorContext, group: 'navigation', @@ -333,11 +332,15 @@ registerAction2(class OpenDefinitionToSideAction extends DefinitionAction { precondition: ContextKeyExpr.and( EditorContextKeys.hasDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()), - keybinding: { + keybinding: [{ when: EditorContextKeys.editorTextFocus, - primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, goToDefinitionKb), + primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyCode.F12), weight: KeybindingWeight.EditorContrib - } + }, { + when: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, IsWebContext), + primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.F12), + weight: KeybindingWeight.EditorContrib + }] }); CommandsRegistry.registerCommandAlias('editor.action.openDeclarationToTheSide', OpenDefinitionToSideAction.id); } diff --git a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts index ee7ef53aa64..ca4597bc57e 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.ts @@ -313,7 +313,7 @@ export class ReferenceWidget extends peekView.PeekViewWidget { enabled: false } }; - this._preview = this._instantiationService.createInstance(EmbeddedCodeEditorWidget, this._previewContainer, options, this.editor); + this._preview = this._instantiationService.createInstance(EmbeddedCodeEditorWidget, this._previewContainer, options, {}, this.editor); dom.hide(this._previewContainer); this._previewNotAvailableMessage = new TextModel(nls.localize('missingPreviewMessage', "no preview available"), PLAINTEXT_LANGUAGE_ID, TextModel.DEFAULT_CREATION_OPTIONS, null, this._undoRedoService, this._languageService, this._languageConfigurationService); diff --git a/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts b/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts index 78016d6734e..9b52c88aeb8 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.ts @@ -51,13 +51,13 @@ export class OneReference { if (!preview) { return localize( - 'aria.oneReference', "symbol in {0} on line {1} at column {2}", + 'aria.oneReference', "in {0} on line {1} at column {2}", basename(this.uri), this.range.startLineNumber, this.range.startColumn ); } else { return localize( - { key: 'aria.oneReference.preview', comment: ['Placeholders are: 0: filename, 1:line number, 2: column number, 3: preview snippet of source code'] }, "symbol in {0} on line {1} at column {2}, {3}", - basename(this.uri), this.range.startLineNumber, this.range.startColumn, preview.value + { key: 'aria.oneReference.preview', comment: ['Placeholders are: 0: filename, 1:line number, 2: column number, 3: preview snippet of source code'] }, "{0} in {1} on line {2} at column {3}", + preview.value, basename(this.uri), this.range.startLineNumber, this.range.startColumn ); } } diff --git a/src/vs/editor/contrib/hover/browser/contentHover.ts b/src/vs/editor/contrib/hover/browser/contentHover.ts index d561f70b771..f03cf308b61 100644 --- a/src/vs/editor/contrib/hover/browser/contentHover.ts +++ b/src/vs/editor/contrib/hover/browser/contentHover.ts @@ -9,7 +9,7 @@ import { coalesce } from 'vs/base/common/arrays'; import { CancellationToken } from 'vs/base/common/cancellation'; import { KeyCode } from 'vs/base/common/keyCodes'; import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; -import { ContentWidgetPositionPreference, IActiveCodeEditor, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; +import { ContentWidgetPositionPreference, IActiveCodeEditor, ICodeEditor, IContentWidgetPosition, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; @@ -18,19 +18,28 @@ import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; import { TokenizationRegistry } from 'vs/editor/common/languages'; import { HoverOperation, HoverStartMode, HoverStartSource, IHoverComputer } from 'vs/editor/contrib/hover/browser/hoverOperation'; import { HoverAnchor, HoverAnchorType, HoverParticipantRegistry, HoverRangeAnchor, IEditorHoverColorPickerWidget, IEditorHoverAction, IEditorHoverParticipant, IEditorHoverRenderContext, IEditorHoverStatusBar, IHoverPart } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { Context as SuggestContext } from 'vs/editor/contrib/suggest/browser/suggest'; import { AsyncIterableObject } from 'vs/base/common/async'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; - +import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { ResizableContentWidget } from 'vs/editor/contrib/hover/browser/resizableContentWidget'; const $ = dom.$; export class ContentHoverController extends Disposable { private readonly _participants: IEditorHoverParticipant[]; + private readonly _widget = this._register(this._instantiationService.createInstance(ContentHoverWidget, this._editor)); + + getWidgetContent(): string | undefined { + const node = this._widget.getDomNode(); + if (!node.textContent) { + return undefined; + } + return node.textContent; + } + private readonly _computer: ContentHoverComputer; private readonly _hoverOperation: HoverOperation; @@ -68,16 +77,22 @@ export class ContentHoverController extends Disposable { })); this._register(TokenizationRegistry.onDidChange(() => { if (this._widget.position && this._currentResult) { - this._widget.clear(); this._setCurrentResult(this._currentResult); // render again } })); } + get widget() { + return this._widget; + } + /** * Returns true if the hover shows now or will show. */ public maybeShowAt(mouseEvent: IEditorMouseEvent): boolean { + if (this._widget.isResizing) { + return true; + } const anchorCandidates: HoverAnchor[] = []; for (const participant of this._participants) { @@ -208,8 +223,12 @@ export class ContentHoverController extends Disposable { return this._widget.isVisibleFromKeyboard; } - public containsNode(node: Node): boolean { - return this._widget.getDomNode().contains(node); + public isVisible(): boolean { + return this._widget.isVisible; + } + + public containsNode(node: Node | null | undefined): boolean { + return (node ? this._widget.getDomNode().contains(node) : false); } private _addLoadingMessage(result: IHoverPart[]): IHoverPart[] { @@ -340,6 +359,46 @@ export class ContentHoverController extends Disposable { highlightRange }; } + + public focus(): void { + this._widget.focus(); + } + + public scrollUp(): void { + this._widget.scrollUp(); + } + + public scrollDown(): void { + this._widget.scrollDown(); + } + + public scrollLeft(): void { + this._widget.scrollLeft(); + } + + public scrollRight(): void { + this._widget.scrollRight(); + } + + public pageUp(): void { + this._widget.pageUp(); + } + + public pageDown(): void { + this._widget.pageDown(); + } + + public goToTop(): void { + this._widget.goToTop(); + } + + public goToBottom(): void { + this._widget.goToBottom(); + } + + public escape(): void { + this._widget.escape(); + } } class HoverResult { @@ -393,23 +452,20 @@ class ContentHoverVisibleData { ) { } } -export class ContentHoverWidget extends Disposable implements IContentWidget { +const HORIZONTAL_SCROLLING_BY = 30; +const SCROLLBAR_WIDTH = 10; +const CONTAINER_HEIGHT_PADDING = 6; - static readonly ID = 'editor.contrib.contentHoverWidget'; +export class ContentHoverWidget extends ResizableContentWidget { - public readonly allowEditorOverflow = true; + public static ID = 'editor.contrib.resizableContentHoverWidget'; + + private _visibleData: ContentHoverVisibleData | undefined; + private _positionPreference: ContentWidgetPositionPreference | undefined; - private readonly _hoverVisibleKey = EditorContextKeys.hoverVisible.bindTo(this._contextKeyService); private readonly _hover: HoverWidget = this._register(new HoverWidget()); - - private _visibleData: ContentHoverVisibleData | null = null; - - /** - * Returns `null` if the hover is not visible. - */ - public get position(): Position | null { - return this._visibleData?.showAtPosition ?? null; - } + private readonly _hoverVisibleKey: IContextKey; + private readonly _hoverFocusedKey: IContextKey; public get isColorPickerVisible(): boolean { return Boolean(this._visibleData?.colorPicker); @@ -419,11 +475,20 @@ export class ContentHoverWidget extends Disposable implements IContentWidget { return (this._visibleData?.source === HoverStartSource.Keyboard); } + public get isVisible(): boolean { + return this._hoverVisibleKey.get() ?? false; + } + constructor( - private readonly _editor: ICodeEditor, - @IContextKeyService private readonly _contextKeyService: IContextKeyService, + editor: ICodeEditor, + @IContextKeyService contextKeyService: IContextKeyService ) { - super(); + super(editor); + this._hoverVisibleKey = EditorContextKeys.hoverVisible.bindTo(contextKeyService); + this._hoverFocusedKey = EditorContextKeys.hoverFocused.bindTo(contextKeyService); + + dom.append(this._resizableNode.domNode, this._hover.containerDomNode); + this._resizableNode.domNode.style.zIndex = '50'; this._register(this._editor.onDidLayoutChange(() => this._layout())); this._register(this._editor.onDidChangeConfiguration((e: ConfigurationChangedEvent) => { @@ -431,51 +496,131 @@ export class ContentHoverWidget extends Disposable implements IContentWidget { this._updateFont(); } })); - - this._setVisibleData(null); + const focusTracker = this._register(dom.trackFocus(this._resizableNode.domNode)); + this._register(focusTracker.onDidFocus(() => { + this._hoverFocusedKey.set(true); + })); + this._register(focusTracker.onDidBlur(() => { + this._hoverFocusedKey.set(false); + })); + this._setHoverData(undefined); this._layout(); this._editor.addContentWidget(this); } public override dispose(): void { - this._editor.removeContentWidget(this); - if (this._visibleData) { - this._visibleData.disposables.dispose(); - } super.dispose(); + this._visibleData?.disposables.dispose(); + this._editor.removeContentWidget(this); } public getId(): string { return ContentHoverWidget.ID; } - public getDomNode(): HTMLElement { - return this._hover.containerDomNode; + private static _applyDimensions(container: HTMLElement, width: number | string, height: number | string): void { + const transformedWidth = typeof width === 'number' ? `${width}px` : width; + const transformedHeight = typeof height === 'number' ? `${height}px` : height; + container.style.width = transformedWidth; + container.style.height = transformedHeight; } - public getPosition(): IContentWidgetPosition | null { - if (!this._visibleData) { - return null; - } - let preferAbove = this._visibleData.preferAbove; - if (!preferAbove && this._contextKeyService.getContextKeyValue(SuggestContext.Visible.key)) { - // Prefer rendering above if the suggest widget is visible - preferAbove = true; - } + private _setContentsDomNodeDimensions(width: number | string, height: number | string): void { + const contentsDomNode = this._hover.contentsDomNode; + return ContentHoverWidget._applyDimensions(contentsDomNode, width, height); + } - // :before content can align left of the text content - const affinity = this._visibleData.isBeforeContent ? PositionAffinity.LeftOfInjectedText : undefined; + private _setContainerDomNodeDimensions(width: number | string, height: number | string): void { + const containerDomNode = this._hover.containerDomNode; + return ContentHoverWidget._applyDimensions(containerDomNode, width, height); + } - return { - position: this._visibleData.showAtPosition, - secondaryPosition: this._visibleData.showAtSecondaryPosition, - preference: ( - preferAbove - ? [ContentWidgetPositionPreference.ABOVE, ContentWidgetPositionPreference.BELOW] - : [ContentWidgetPositionPreference.BELOW, ContentWidgetPositionPreference.ABOVE] - ), - positionAffinity: affinity - }; + private _setHoverWidgetDimensions(width: number | string, height: number | string): void { + this._setContentsDomNodeDimensions(width, height); + this._setContainerDomNodeDimensions(width, height); + this._layoutContentWidget(); + } + + private _setContentsDomNodeMaxDimensions(width: number | string, height: number | string): void { + const transformedWidth = typeof width === 'number' ? `${width}px` : width; + const transformedHeight = typeof height === 'number' ? `${height}px` : height; + const contentsDomNode = this._hover.contentsDomNode; + contentsDomNode.style.maxWidth = transformedWidth; + contentsDomNode.style.maxHeight = transformedHeight; + } + + private _hasHorizontalScrollbar(): boolean { + const scrollDimensions = this._hover.scrollbar.getScrollDimensions(); + const hasHorizontalScrollbar = scrollDimensions.scrollWidth > scrollDimensions.width; + return hasHorizontalScrollbar; + } + + private _adjustContentsBottomPadding(): void { + const contentsDomNode = this._hover.contentsDomNode; + const extraBottomPadding = `${this._hover.scrollbar.options.horizontalScrollbarSize}px`; + if (contentsDomNode.style.paddingBottom !== extraBottomPadding) { + contentsDomNode.style.paddingBottom = extraBottomPadding; + } + } + + private _setAdjustedHoverWidgetDimensions(size: dom.Dimension): void { + this._setContentsDomNodeMaxDimensions('none', 'none'); + const width = size.width; + const height = size.height; + this._setHoverWidgetDimensions(width, height); + // measure if widget has horizontal scrollbar after setting the dimensions + if (this._hasHorizontalScrollbar()) { + this._adjustContentsBottomPadding(); + this._setContentsDomNodeDimensions(width, height - SCROLLBAR_WIDTH); + } + } + + private _setResizableNodeMaxDimensions(): void { + const maxRenderingWidth = this._findMaximumRenderingWidth() ?? Infinity; + const maxRenderingHeight = this._findMaximumRenderingHeight() ?? Infinity; + this._resizableNode.maxSize = new dom.Dimension(maxRenderingWidth, maxRenderingHeight); + } + + protected override _resize(size: dom.Dimension): void { + this._setAdjustedHoverWidgetDimensions(size); + this._resizableNode.layout(size.height, size.width); + this._setResizableNodeMaxDimensions(); + this._hover.scrollbar.scanDomNode(); + this._editor.layoutContentWidget(this); + this._visibleData?.colorPicker?.layout(); + } + + private _findAvailableSpaceVertically(): number | undefined { + const position = this._visibleData?.showAtPosition; + if (!position) { + return; + } + return this._positionPreference === ContentWidgetPositionPreference.ABOVE ? this._availableVerticalSpaceAbove(position) : this._availableVerticalSpaceBelow(position); + } + + private _findMaximumRenderingHeight(): number | undefined { + const availableSpace = this._findAvailableSpaceVertically(); + if (!availableSpace) { + return; + } + // Padding needed in order to stop the resizing down to a smaller height + let maximumHeight = CONTAINER_HEIGHT_PADDING; + Array.from(this._hover.contentsDomNode.children).forEach((hoverPart) => { + maximumHeight += hoverPart.clientHeight; + }); + if (this._hasHorizontalScrollbar()) { + maximumHeight += SCROLLBAR_WIDTH; + } + return Math.min(availableSpace, maximumHeight); + } + + private _findMaximumRenderingWidth(): number | undefined { + if (!this._editor || !this._editor.hasModel()) { + return; + } + const bodyBoxWidth = dom.getClientArea(document.body).width; + const horizontalPadding = 14; + return bodyBoxWidth - horizontalPadding; } public isMouseGettingCloser(posx: number, posy: number): boolean { @@ -501,23 +646,20 @@ export class ContentHoverWidget extends Disposable implements IContentWidget { return true; } - private _setVisibleData(visibleData: ContentHoverVisibleData | null): void { - if (this._visibleData) { - this._visibleData.disposables.dispose(); - } - this._visibleData = visibleData; - this._hoverVisibleKey.set(!!this._visibleData); - this._hover.containerDomNode.classList.toggle('hidden', !this._visibleData); + private _setHoverData(hoverData: ContentHoverVisibleData | undefined): void { + this._visibleData?.disposables.dispose(); + this._visibleData = hoverData; + this._hoverVisibleKey.set(!!hoverData); + this._hover.containerDomNode.classList.toggle('hidden', !hoverData); } private _layout(): void { const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); const { fontSize, lineHeight } = this._editor.getOption(EditorOption.fontInfo); - - this._hover.contentsDomNode.style.fontSize = `${fontSize}px`; - this._hover.contentsDomNode.style.lineHeight = `${lineHeight / fontSize}`; - this._hover.contentsDomNode.style.maxHeight = `${height}px`; - this._hover.contentsDomNode.style.maxWidth = `${Math.max(this._editor.getLayoutInfo().width * 0.66, 500)}px`; + const contentsDomNode = this._hover.contentsDomNode; + contentsDomNode.style.fontSize = `${fontSize}px`; + contentsDomNode.style.lineHeight = `${lineHeight / fontSize}`; + this._setContentsDomNodeMaxDimensions(Math.max(this._editor.getLayoutInfo().width * 0.66, 500), height); } private _updateFont(): void { @@ -525,64 +667,168 @@ export class ContentHoverWidget extends Disposable implements IContentWidget { codeClasses.forEach(node => this._editor.applyFontInfo(node)); } - public showAt(node: DocumentFragment, visibleData: ContentHoverVisibleData): void { - this._setVisibleData(visibleData); + private _updateContent(node: DocumentFragment): void { + const contentsDomNode = this._hover.contentsDomNode; + contentsDomNode.style.paddingBottom = ''; + contentsDomNode.textContent = ''; + contentsDomNode.appendChild(node); + } - this._hover.contentsDomNode.textContent = ''; - this._hover.contentsDomNode.appendChild(node); - this._hover.contentsDomNode.style.paddingBottom = ''; + private _layoutContentWidget(): void { + this._editor.layoutContentWidget(this); + this._hover.onContentsChanged(); + } + + private _updateContentsDomNodeMaxDimensions() { + const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500); + const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); + this._setContentsDomNodeMaxDimensions(width, height); + } + + private _render(node: DocumentFragment, hoverData: ContentHoverVisibleData) { + this._setHoverData(hoverData); this._updateFont(); - + this._updateContent(node); + this._updateContentsDomNodeMaxDimensions(); this.onContentsChanged(); - // Simply force a synchronous render on the editor // such that the widget does not really render with left = '0px' this._editor.render(); + } + + override getPosition(): IContentWidgetPosition | null { + if (!this._visibleData) { + return null; + } + return { + position: this._visibleData.showAtPosition, + secondaryPosition: this._visibleData.showAtSecondaryPosition, + positionAffinity: this._visibleData.isBeforeContent ? PositionAffinity.LeftOfInjectedText : undefined, + preference: [this._positionPreference ?? ContentWidgetPositionPreference.ABOVE] + }; + } + + public showAt(node: DocumentFragment, hoverData: ContentHoverVisibleData): void { + if (!this._editor || !this._editor.hasModel()) { + return; + } + this._render(node, hoverData); + const widgetHeight = dom.getTotalHeight(this._hover.containerDomNode); + const widgetPosition = hoverData.showAtPosition; + this._positionPreference = this._findPositionPreference(widgetHeight, widgetPosition) ?? ContentWidgetPositionPreference.ABOVE; // See https://github.com/microsoft/vscode/issues/140339 // TODO: Doing a second layout of the hover after force rendering the editor this.onContentsChanged(); - - if (visibleData.stoleFocus) { + if (hoverData.stoleFocus) { this._hover.containerDomNode.focus(); } - visibleData.colorPicker?.layout(); + hoverData.colorPicker?.layout(); } public hide(): void { - if (this._visibleData) { - const stoleFocus = this._visibleData.stoleFocus; - this._setVisibleData(null); - this._editor.layoutContentWidget(this); - if (stoleFocus) { - this._editor.focus(); - } + if (!this._visibleData) { + return; } + const stoleFocus = this._visibleData.stoleFocus; + this._setHoverData(undefined); + this._resizableNode.maxSize = new dom.Dimension(Infinity, Infinity); + this._resizableNode.clearSashHoverState(); + this._hoverFocusedKey.set(false); + this._editor.layoutContentWidget(this); + if (stoleFocus) { + this._editor.focus(); + } + } + + private _removeConstraintsRenderNormally(): void { + // Added because otherwise the initial size of the hover content is smaller than should be + const layoutInfo = this._editor.getLayoutInfo(); + this._resizableNode.layout(layoutInfo.height, layoutInfo.width); + this._setHoverWidgetDimensions('auto', 'auto'); + } + + private _adjustHoverHeightForScrollbar(height: number) { + const containerDomNode = this._hover.containerDomNode; + const contentsDomNode = this._hover.contentsDomNode; + const maxRenderingHeight = this._findMaximumRenderingHeight() ?? Infinity; + this._setContainerDomNodeDimensions(dom.getTotalWidth(containerDomNode), Math.min(maxRenderingHeight, height)); + this._setContentsDomNodeDimensions(dom.getTotalWidth(contentsDomNode), Math.min(maxRenderingHeight, height - SCROLLBAR_WIDTH)); } public onContentsChanged(): void { - this._editor.layoutContentWidget(this); - this._hover.onContentsChanged(); + this._removeConstraintsRenderNormally(); + const containerDomNode = this._hover.containerDomNode; - const scrollDimensions = this._hover.scrollbar.getScrollDimensions(); - const hasHorizontalScrollbar = (scrollDimensions.scrollWidth > scrollDimensions.width); - if (hasHorizontalScrollbar) { - // There is just a horizontal scrollbar - const extraBottomPadding = `${this._hover.scrollbar.options.horizontalScrollbarSize}px`; - if (this._hover.contentsDomNode.style.paddingBottom !== extraBottomPadding) { - this._hover.contentsDomNode.style.paddingBottom = extraBottomPadding; - this._editor.layoutContentWidget(this); - this._hover.onContentsChanged(); - } + let height = dom.getTotalHeight(containerDomNode); + let width = dom.getTotalWidth(containerDomNode); + this._resizableNode.layout(height, width); + + this._setHoverWidgetDimensions(width, height); + + height = dom.getTotalHeight(containerDomNode); + width = dom.getTotalWidth(containerDomNode); + this._resizableNode.layout(height, width); + + if (this._hasHorizontalScrollbar()) { + this._adjustContentsBottomPadding(); + this._adjustHoverHeightForScrollbar(height); } + this._layoutContentWidget(); } - public clear(): void { - this._hover.contentsDomNode.textContent = ''; + public focus(): void { + this._hover.containerDomNode.focus(); + } + + public scrollUp(): void { + const scrollTop = this._hover.scrollbar.getScrollPosition().scrollTop; + const fontInfo = this._editor.getOption(EditorOption.fontInfo); + this._hover.scrollbar.setScrollPosition({ scrollTop: scrollTop - fontInfo.lineHeight }); + } + + public scrollDown(): void { + const scrollTop = this._hover.scrollbar.getScrollPosition().scrollTop; + const fontInfo = this._editor.getOption(EditorOption.fontInfo); + this._hover.scrollbar.setScrollPosition({ scrollTop: scrollTop + fontInfo.lineHeight }); + } + + public scrollLeft(): void { + const scrollLeft = this._hover.scrollbar.getScrollPosition().scrollLeft; + this._hover.scrollbar.setScrollPosition({ scrollLeft: scrollLeft - HORIZONTAL_SCROLLING_BY }); + } + + public scrollRight(): void { + const scrollLeft = this._hover.scrollbar.getScrollPosition().scrollLeft; + this._hover.scrollbar.setScrollPosition({ scrollLeft: scrollLeft + HORIZONTAL_SCROLLING_BY }); + } + + public pageUp(): void { + const scrollTop = this._hover.scrollbar.getScrollPosition().scrollTop; + const scrollHeight = this._hover.scrollbar.getScrollDimensions().height; + this._hover.scrollbar.setScrollPosition({ scrollTop: scrollTop - scrollHeight }); + } + + public pageDown(): void { + const scrollTop = this._hover.scrollbar.getScrollPosition().scrollTop; + const scrollHeight = this._hover.scrollbar.getScrollDimensions().height; + this._hover.scrollbar.setScrollPosition({ scrollTop: scrollTop + scrollHeight }); + } + + public goToTop(): void { + this._hover.scrollbar.setScrollPosition({ scrollTop: 0 }); + } + + public goToBottom(): void { + this._hover.scrollbar.setScrollPosition({ scrollTop: this._hover.scrollbar.getScrollDimensions().scrollHeight }); + } + + public escape(): void { + this._editor.focus(); } } -class EditorHoverStatusBar extends Disposable implements IEditorHoverStatusBar { +export class EditorHoverStatusBar extends Disposable implements IEditorHoverStatusBar { public readonly hoverElement: HTMLElement; private readonly actionsElement: HTMLElement; diff --git a/src/vs/editor/contrib/hover/browser/hover.css b/src/vs/editor/contrib/hover/browser/hover.css index 6a82748a59f..34695750fd4 100644 --- a/src/vs/editor/contrib/hover/browser/hover.css +++ b/src/vs/editor/contrib/hover/browser/hover.css @@ -11,6 +11,7 @@ color: var(--vscode-editorHoverWidget-foreground); background-color: var(--vscode-editorHoverWidget-background); border: 1px solid var(--vscode-editorHoverWidget-border); + border-radius: 3px; } .monaco-editor .monaco-hover a { diff --git a/src/vs/editor/contrib/hover/browser/hover.ts b/src/vs/editor/contrib/hover/browser/hover.ts index f2fe99c3d93..881435fe4c9 100644 --- a/src/vs/editor/contrib/hover/browser/hover.ts +++ b/src/vs/editor/contrib/hover/browser/hover.ts @@ -17,9 +17,7 @@ import { GotoDefinitionAtPositionEditorContribution } from 'vs/editor/contrib/go import { HoverStartMode, HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation'; import { ContentHoverWidget, ContentHoverController } from 'vs/editor/contrib/hover/browser/contentHover'; import { MarginHoverWidget } from 'vs/editor/contrib/hover/browser/marginHover'; -import * as nls from 'vs/nls'; import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IOpenerService } from 'vs/platform/opener/common/opener'; @@ -28,8 +26,16 @@ import { registerThemingParticipant } from 'vs/platform/theme/common/themeServic import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; import { MarkdownHoverParticipant } from 'vs/editor/contrib/hover/browser/markdownHoverParticipant'; import { MarkerHoverParticipant } from 'vs/editor/contrib/hover/browser/markerHoverParticipant'; +import { InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; +import * as nls from 'vs/nls'; import 'vs/css!./hover'; -import { InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget'; + +// sticky hover widget which doesn't disappear on focus out and such +const _sticky = false + // || Boolean("true") // done "weirdly" so that a lint warning prevents you from pushing this + ; export class ModesHoverController implements IEditorContribution { @@ -39,12 +45,16 @@ export class ModesHoverController implements IEditorContribution { private readonly _didChangeConfigurationHandler: IDisposable; private _contentWidget: ContentHoverController | null; + + getWidgetContent(): string | undefined { return this._contentWidget?.getWidgetContent(); } + private _glyphWidget: MarginHoverWidget | null; private _isMouseDown: boolean; private _hoverClicked: boolean; private _isHoverEnabled!: boolean; private _isHoverSticky!: boolean; + private _hoverActivatedByColorDecoratorClick: boolean = false; static get(editor: ICodeEditor): ModesHoverController | null { return editor.getContribution(ModesHoverController.ID); @@ -54,7 +64,7 @@ export class ModesHoverController implements IEditorContribution { @IInstantiationService private readonly _instantiationService: IInstantiationService, @IOpenerService private readonly _openerService: IOpenerService, @ILanguageService private readonly _languageService: ILanguageService, - @IContextKeyService _contextKeyService: IContextKeyService + @IKeybindingService private readonly _keybindingService: IKeybindingService ) { this._isMouseDown = false; this._hoverClicked = false; @@ -121,8 +131,9 @@ export class ModesHoverController implements IEditorContribution { if (target.type !== MouseTargetType.OVERLAY_WIDGET) { this._hoverClicked = false; } - - this._hideWidgets(); + if (!this._contentWidget?.widget.isResizing) { + this._hideWidgets(); + } } private _onEditorMouseUp(mouseEvent: IEditorMouseEvent): void { @@ -131,11 +142,14 @@ export class ModesHoverController implements IEditorContribution { private _onEditorMouseLeave(mouseEvent: IPartialEditorMouseEvent): void { const targetEm = (mouseEvent.event.browserEvent.relatedTarget) as HTMLElement; - if (this._contentWidget?.containsNode(targetEm)) { + if (this._contentWidget?.widget.isResizing || this._contentWidget?.containsNode(targetEm)) { + // When the content widget is resizing // when the mouse is inside hover widget return; } - this._hideWidgets(); + if (!_sticky) { + this._hideWidgets(); + } } private _onEditorMouseMove(mouseEvent: IEditorMouseEvent): void { @@ -150,7 +164,7 @@ export class ModesHoverController implements IEditorContribution { return; } - if (this._isHoverSticky && !mouseEvent.event.browserEvent.view?.getSelection()?.isCollapsed) { + if (this._isHoverSticky && this._contentWidget?.containsNode(mouseEvent.event.browserEvent.view?.document.activeElement) && !mouseEvent.event.browserEvent.view?.getSelection()?.isCollapsed) { // selected text within content hover widget return; } @@ -174,7 +188,15 @@ export class ModesHoverController implements IEditorContribution { return; } - if (!this._isHoverEnabled) { + const mouseOnDecorator = target.element?.classList.contains('colorpicker-color-decoration'); + const decoratorActivatedOn = this._editor.getOption(EditorOption.colorDecoratorsActivatedOn); + + if ((mouseOnDecorator && ( + (decoratorActivatedOn === 'click' && !this._hoverActivatedByColorDecoratorClick) || + (decoratorActivatedOn === 'hover' && !this._isHoverEnabled && !_sticky) || + (decoratorActivatedOn === 'clickAndHover' && !this._isHoverEnabled && !this._hoverActivatedByColorDecoratorClick))) + || !mouseOnDecorator && !this._isHoverEnabled && !this._hoverActivatedByColorDecoratorClick + ) { this._hideWidgets(); return; } @@ -194,22 +216,35 @@ export class ModesHoverController implements IEditorContribution { this._glyphWidget.startShowingAt(target.position.lineNumber); return; } - - this._hideWidgets(); + if (!this._contentWidget?.widget.isResizing && !_sticky) { + this._hideWidgets(); + } } private _onKeyDown(e: IKeyboardEvent): void { - if (e.keyCode !== KeyCode.Ctrl && e.keyCode !== KeyCode.Alt && e.keyCode !== KeyCode.Meta && e.keyCode !== KeyCode.Shift) { + if (!this._editor.hasModel()) { + return; + } + + const resolvedKeyboardEvent = this._keybindingService.softDispatch(e, this._editor.getDomNode()); + // If the beginning of a multi-chord keybinding is pressed, or the command aims to focus the hover, set the variable to true, otherwise false + const mightTriggerFocus = (resolvedKeyboardEvent.kind === ResultKind.MoreChordsNeeded || (resolvedKeyboardEvent.kind === ResultKind.KbFound && resolvedKeyboardEvent.commandId === 'editor.action.showHover' && this._contentWidget?.isVisible())); + + if (e.keyCode !== KeyCode.Ctrl && e.keyCode !== KeyCode.Alt && e.keyCode !== KeyCode.Meta && e.keyCode !== KeyCode.Shift + && !mightTriggerFocus) { // Do not hide hover when a modifier key is pressed this._hideWidgets(); } } private _hideWidgets(): void { + if (_sticky) { + return; + } if ((this._isMouseDown && this._hoverClicked && this._contentWidget?.isColorPickerVisible()) || InlineSuggestionHintsContentWidget.dropDownVisible) { return; } - + this._hoverActivatedByColorDecoratorClick = false; this._hoverClicked = false; this._glyphWidget?.hide(); this._contentWidget?.hide(); @@ -226,10 +261,55 @@ export class ModesHoverController implements IEditorContribution { return this._contentWidget?.isColorPickerVisible() || false; } - public showContentHover(range: Range, mode: HoverStartMode, source: HoverStartSource, focus: boolean): void { + public showContentHover(range: Range, mode: HoverStartMode, source: HoverStartSource, focus: boolean, activatedByColorDecoratorClick: boolean = false): void { + this._hoverActivatedByColorDecoratorClick = activatedByColorDecoratorClick; this._getOrCreateContentWidget().startShowingAtRange(range, mode, source, focus); } + public focus(): void { + this._contentWidget?.focus(); + } + + public scrollUp(): void { + this._contentWidget?.scrollUp(); + } + + public scrollDown(): void { + this._contentWidget?.scrollDown(); + } + + public scrollLeft(): void { + this._contentWidget?.scrollLeft(); + } + + public scrollRight(): void { + this._contentWidget?.scrollRight(); + } + + public pageUp(): void { + this._contentWidget?.pageUp(); + } + + public pageDown(): void { + this._contentWidget?.pageDown(); + } + + public goToTop(): void { + this._contentWidget?.goToTop(); + } + + public goToBottom(): void { + this._contentWidget?.goToBottom(); + } + + public escape(): void { + this._contentWidget?.escape(); + } + + public isHoverVisible(): boolean | undefined { + return this._contentWidget?.isVisible(); + } + public dispose(): void { this._unhookEvents(); this._toUnhook.dispose(); @@ -239,19 +319,37 @@ export class ModesHoverController implements IEditorContribution { } } -class ShowHoverAction extends EditorAction { +class ShowOrFocusHoverAction extends EditorAction { constructor() { super({ id: 'editor.action.showHover', label: nls.localize({ - key: 'showHover', + key: 'showOrFocusHover', comment: [ - 'Label for action that will trigger the showing of a hover in the editor.', - 'This allows for users to show the hover without using the mouse.' + 'Label for action that will trigger the showing/focusing of a hover in the editor.', + 'If the hover is not visible, it will show the hover.', + 'This allows for users to show the hover without using the mouse.', + 'If the hover is already visible, it will take focus.' ] - }, "Show Hover"), - alias: 'Show Hover', + }, "Show or Focus Hover"), + description: { + description: `Show or Focus Hover`, + args: [{ + name: 'args', + schema: { + type: 'object', + properties: { + 'focus': { + description: 'Controls if when triggered with the keyboard, the hover should take focus immediately.', + type: 'boolean', + default: false + } + }, + } + }] + }, + alias: 'Show or Focus Hover', precondition: undefined, kbOpts: { kbExpr: EditorContextKeys.editorTextFocus, @@ -261,7 +359,7 @@ class ShowHoverAction extends EditorAction { }); } - public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + public run(accessor: ServicesAccessor, editor: ICodeEditor, args: any): void { if (!editor.hasModel()) { return; } @@ -271,8 +369,13 @@ class ShowHoverAction extends EditorAction { } const position = editor.getPosition(); const range = new Range(position.lineNumber, position.column, position.lineNumber, position.column); - const focus = editor.getOption(EditorOption.accessibilitySupport) === AccessibilitySupport.Enabled; - controller.showContentHover(range, HoverStartMode.Immediate, HoverStartSource.Keyboard, focus); + const focus = editor.getOption(EditorOption.accessibilitySupport) === AccessibilitySupport.Enabled || !!args?.focus; + + if (controller.isHoverVisible()) { + controller.focus(); + } else { + controller.showContentHover(range, HoverStartMode.Immediate, HoverStartSource.Keyboard, focus); + } } } @@ -316,9 +419,294 @@ class ShowDefinitionPreviewHoverAction extends EditorAction { } } +class ScrollUpHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.scrollUpHover', + label: nls.localize({ + key: 'scrollUpHover', + comment: [ + 'Action that allows to scroll up in the hover widget with the up arrow when the hover widget is focused.' + ] + }, "Scroll Up Hover"), + alias: 'Scroll Up Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.UpArrow, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.scrollUp(); + } +} + +class ScrollDownHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.scrollDownHover', + label: nls.localize({ + key: 'scrollDownHover', + comment: [ + 'Action that allows to scroll down in the hover widget with the up arrow when the hover widget is focused.' + ] + }, "Scroll Down Hover"), + alias: 'Scroll Down Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.DownArrow, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.scrollDown(); + } +} + +class ScrollLeftHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.scrollLeftHover', + label: nls.localize({ + key: 'scrollLeftHover', + comment: [ + 'Action that allows to scroll left in the hover widget with the left arrow when the hover widget is focused.' + ] + }, "Scroll Left Hover"), + alias: 'Scroll Left Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.LeftArrow, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.scrollLeft(); + } +} + +class ScrollRightHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.scrollRightHover', + label: nls.localize({ + key: 'scrollRightHover', + comment: [ + 'Action that allows to scroll right in the hover widget with the right arrow when the hover widget is focused.' + ] + }, "Scroll Right Hover"), + alias: 'Scroll Right Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.RightArrow, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.scrollRight(); + } +} + +class PageUpHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.pageUpHover', + label: nls.localize({ + key: 'pageUpHover', + comment: [ + 'Action that allows to page up in the hover widget with the page up command when the hover widget is focused.' + ] + }, "Page Up Hover"), + alias: 'Page Up Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.PageUp, + secondary: [KeyMod.Alt | KeyCode.UpArrow], + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.pageUp(); + } +} + + +class PageDownHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.pageDownHover', + label: nls.localize({ + key: 'pageDownHover', + comment: [ + 'Action that allows to page down in the hover widget with the page down command when the hover widget is focused.' + ] + }, "Page Down Hover"), + alias: 'Page Down Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.PageDown, + secondary: [KeyMod.Alt | KeyCode.DownArrow], + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.pageDown(); + } +} + +class GoToTopHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.goToTopHover', + label: nls.localize({ + key: 'goToTopHover', + comment: [ + 'Action that allows to go to the top of the hover widget with the home command when the hover widget is focused.' + ] + }, "Go To Top Hover"), + alias: 'Go To Bottom Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.Home, + secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow], + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.goToTop(); + } +} + + +class GoToBottomHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.goToBottomHover', + label: nls.localize({ + key: 'goToBottomHover', + comment: [ + 'Action that allows to go to the bottom in the hover widget with the end command when the hover widget is focused.' + ] + }, "Go To Bottom Hover"), + alias: 'Go To Bottom Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.End, + secondary: [KeyMod.CtrlCmd | KeyCode.DownArrow], + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.goToBottom(); + } +} + +class EscapeFocusHoverAction extends EditorAction { + + constructor() { + super({ + id: 'editor.action.escapeFocusHover', + label: nls.localize({ + key: 'escapeFocusHover', + comment: [ + 'Action that allows to escape from the hover widget with the escape command when the hover widget is focused.' + ] + }, "Escape Focus Hover"), + alias: 'Escape Focus Hover', + precondition: EditorContextKeys.hoverFocused, + kbOpts: { + kbExpr: EditorContextKeys.hoverFocused, + primary: KeyCode.Escape, + weight: KeybindingWeight.EditorContrib + } + }); + } + + public run(accessor: ServicesAccessor, editor: ICodeEditor): void { + const controller = ModesHoverController.get(editor); + if (!controller) { + return; + } + controller.escape(); + } +} + registerEditorContribution(ModesHoverController.ID, ModesHoverController, EditorContributionInstantiation.BeforeFirstInteraction); -registerEditorAction(ShowHoverAction); +registerEditorAction(ShowOrFocusHoverAction); registerEditorAction(ShowDefinitionPreviewHoverAction); +registerEditorAction(ScrollUpHoverAction); +registerEditorAction(ScrollDownHoverAction); +registerEditorAction(ScrollLeftHoverAction); +registerEditorAction(ScrollRightHoverAction); +registerEditorAction(PageUpHoverAction); +registerEditorAction(PageDownHoverAction); +registerEditorAction(GoToTopHoverAction); +registerEditorAction(GoToBottomHoverAction); +registerEditorAction(EscapeFocusHoverAction); HoverParticipantRegistry.register(MarkdownHoverParticipant); HoverParticipantRegistry.register(MarkerHoverParticipant); diff --git a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts index 6f9b9d2f6d5..4979526e24f 100644 --- a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts +++ b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts @@ -12,11 +12,12 @@ import { basename } from 'vs/base/common/resources'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; -import { IModelDecoration } from 'vs/editor/common/model'; import { CodeActionTriggerType } from 'vs/editor/common/languages'; +import { IModelDecoration } from 'vs/editor/common/model'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { IMarkerDecorationsService } from 'vs/editor/common/services/markerDecorations'; -import { getCodeActions } from 'vs/editor/contrib/codeAction/browser/codeAction'; -import { QuickFixAction, CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionCommands'; +import { getCodeActions, quickFixCommandId } from 'vs/editor/contrib/codeAction/browser/codeAction'; +import { CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionController'; import { CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from 'vs/editor/contrib/codeAction/common/types'; import { MarkerController, NextMarkerAction } from 'vs/editor/contrib/gotoError/browser/gotoError'; import { HoverAnchor, HoverAnchorType, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart } from 'vs/editor/contrib/hover/browser/hoverTypes'; @@ -25,7 +26,6 @@ import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; import { IMarker, IMarkerData, MarkerSeverity } from 'vs/platform/markers/common/markers'; import { IOpenerService } from 'vs/platform/opener/common/opener'; import { Progress } from 'vs/platform/progress/common/progress'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; const $ = dom.$; @@ -219,7 +219,7 @@ export class MarkerHoverParticipant implements IEditorHoverParticipant { showing = true; const controller = CodeActionController.get(this._editor); @@ -228,8 +228,8 @@ export class MarkerHoverParticipant implements IEditorHoverParticipant { + this._resize(new dom.Dimension(e.dimension.width, e.dimension.height)); + if (e.done) { + this._isResizing = false; + } + })); + this._register(this._resizableNode.onDidWillResize(() => { + this._isResizing = true; + })); + } + + get isResizing() { + return this._isResizing; + } + + abstract getId(): string; + + getDomNode(): HTMLElement { + return this._resizableNode.domNode; + } + + getPosition(): IContentWidgetPosition | null { + return this._contentPosition; + } + + get position(): Position | undefined { + return this._contentPosition?.position ? Position.lift(this._contentPosition.position) : undefined; + } + + protected _availableVerticalSpaceAbove(position: IPosition): number | undefined { + const editorDomNode = this._editor.getDomNode(); + const mouseBox = this._editor.getScrolledVisiblePosition(position); + if (!editorDomNode || !mouseBox) { + return; + } + const editorBox = dom.getDomNodePagePosition(editorDomNode); + return editorBox.top + mouseBox.top - TOP_HEIGHT; + } + + protected _availableVerticalSpaceBelow(position: IPosition): number | undefined { + const editorDomNode = this._editor.getDomNode(); + const mouseBox = this._editor.getScrolledVisiblePosition(position); + if (!editorDomNode || !mouseBox) { + return; + } + const editorBox = dom.getDomNodePagePosition(editorDomNode); + const bodyBox = dom.getClientArea(document.body); + const mouseBottom = editorBox.top + mouseBox.top + mouseBox.height; + return bodyBox.height - mouseBottom - BOTTOM_HEIGHT; + } + + protected _findPositionPreference(widgetHeight: number, showAtPosition: IPosition): ContentWidgetPositionPreference | undefined { + const maxHeightBelow = Math.min(this._availableVerticalSpaceBelow(showAtPosition) ?? Infinity, widgetHeight); + const maxHeightAbove = Math.min(this._availableVerticalSpaceAbove(showAtPosition) ?? Infinity, widgetHeight); + const maxHeight = Math.min(Math.max(maxHeightAbove, maxHeightBelow), widgetHeight); + const height = Math.min(widgetHeight, maxHeight); + let renderingAbove: ContentWidgetPositionPreference; + if (this._editor.getOption(EditorOption.hover).above) { + renderingAbove = height <= maxHeightAbove ? ContentWidgetPositionPreference.ABOVE : ContentWidgetPositionPreference.BELOW; + } else { + renderingAbove = height <= maxHeightBelow ? ContentWidgetPositionPreference.BELOW : ContentWidgetPositionPreference.ABOVE; + } + if (renderingAbove === ContentWidgetPositionPreference.ABOVE) { + this._resizableNode.enableSashes(true, true, false, false); + } else { + this._resizableNode.enableSashes(false, true, true, false); + } + return renderingAbove; + } + + protected _resize(dimension: dom.Dimension): void { + this._resizableNode.layout(dimension.height, dimension.width); + } +} diff --git a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts index 9d1f8e8bc5e..41638f5c3c7 100644 --- a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts +++ b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts @@ -147,7 +147,7 @@ class InPlaceReplaceUp extends EditorAction { if (!controller) { return Promise.resolve(undefined); } - return controller.run(this.id, true); + return controller.run(this.id, false); } } @@ -172,11 +172,10 @@ class InPlaceReplaceDown extends EditorAction { if (!controller) { return Promise.resolve(undefined); } - return controller.run(this.id, false); + return controller.run(this.id, true); } } registerEditorContribution(InPlaceReplaceController.ID, InPlaceReplaceController, EditorContributionInstantiation.Lazy); registerEditorAction(InPlaceReplaceUp); registerEditorAction(InPlaceReplaceDown); - diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts index dc40d34872c..fab60b557e3 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts @@ -495,6 +495,7 @@ export class InlayHintsController implements IEditorContribution { fontSize: `${fontSize}px`, fontFamily: `var(${fontFamilyVar}), ${EDITOR_FONT_DEFAULTS.fontFamily}`, verticalAlign: isUniform ? 'baseline' : 'middle', + unicodeBidi: 'isolate' }; if (isNonEmptyArray(item.hint.textEdits)) { diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts index b9ba892e108..4228e056034 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsLocations.ts @@ -6,6 +6,7 @@ import * as dom from 'vs/base/browser/dom'; import { Action, IAction, Separator } from 'vs/base/common/actions'; import { CancellationToken } from 'vs/base/common/cancellation'; +import { generateUuid } from 'vs/base/common/uuid'; import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; @@ -42,14 +43,16 @@ export async function showGoToContextMenu(accessor: ServicesAccessor, editor: IC // from all registered (not active) context menu actions select those // that are a symbol navigation actions const filter = new Set(MenuRegistry.getMenuItems(MenuId.EditorContext) - .map(item => isIMenuItem(item) ? item.command.id : '')); + .map(item => isIMenuItem(item) ? item.command.id : generateUuid())); for (const delegate of SymbolNavigationAction.all()) { if (filter.has(delegate.desc.id)) { menuActions.push(new Action(delegate.desc.id, MenuItemAction.label(delegate.desc, { renderShortTitle: true }), undefined, true, async () => { const ref = await resolverService.createModelReference(location.uri); try { - await instaService.invokeFunction(delegate.run.bind(delegate), editor, new SymbolNavigationAnchor(ref.object.textEditorModel, Range.getStartPosition(location.range))); + const symbolAnchor = new SymbolNavigationAnchor(ref.object.textEditorModel, Range.getStartPosition(location.range)); + const range = part.item.anchor.range; + await instaService.invokeFunction(delegate.runEditorCommand.bind(delegate), editor, symbolAnchor, range); } finally { ref.dispose(); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/consts.ts b/src/vs/editor/contrib/inlineCompletions/browser/commandIds.ts similarity index 100% rename from src/vs/editor/contrib/inlineCompletions/browser/consts.ts rename to src/vs/editor/contrib/inlineCompletions/browser/commandIds.ts diff --git a/src/vs/editor/contrib/inlineCompletions/browser/commands.ts b/src/vs/editor/contrib/inlineCompletions/browser/commands.ts new file mode 100644 index 00000000000..2370e210bf3 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/commands.ts @@ -0,0 +1,211 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { transaction } from 'vs/base/common/observable'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; +import { showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId, inlineSuggestCommitId } from 'vs/editor/contrib/inlineCompletions/browser/commandIds'; +import { InlineCompletionContextKeys } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys'; +import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController'; +import * as nls from 'vs/nls'; +import { MenuId, Action2 } from 'vs/platform/actions/common/actions'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; +import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; + +export class ShowNextInlineSuggestionAction extends EditorAction { + public static ID = showNextInlineSuggestionActionId; + constructor() { + super({ + id: ShowNextInlineSuggestionAction.ID, + label: nls.localize('action.inlineSuggest.showNext', "Show Next Inline Suggestion"), + alias: 'Show Next Inline Suggestion', + precondition: ContextKeyExpr.and(EditorContextKeys.writable, InlineCompletionContextKeys.inlineSuggestionVisible), + kbOpts: { + weight: 100, + primary: KeyMod.Alt | KeyCode.BracketRight, + }, + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + controller?.model.get()?.next(); + } +} + +export class ShowPreviousInlineSuggestionAction extends EditorAction { + public static ID = showPreviousInlineSuggestionActionId; + constructor() { + super({ + id: ShowPreviousInlineSuggestionAction.ID, + label: nls.localize('action.inlineSuggest.showPrevious', "Show Previous Inline Suggestion"), + alias: 'Show Previous Inline Suggestion', + precondition: ContextKeyExpr.and(EditorContextKeys.writable, InlineCompletionContextKeys.inlineSuggestionVisible), + kbOpts: { + weight: 100, + primary: KeyMod.Alt | KeyCode.BracketLeft, + }, + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + controller?.model.get()?.previous(); + } +} + +export class TriggerInlineSuggestionAction extends EditorAction { + constructor() { + super({ + id: 'editor.action.inlineSuggest.trigger', + label: nls.localize('action.inlineSuggest.trigger', "Trigger Inline Suggestion"), + alias: 'Trigger Inline Suggestion', + precondition: EditorContextKeys.writable + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + controller?.model.get()?.triggerExplicitly(); + } +} + +export class AcceptNextWordOfInlineCompletion extends EditorAction { + constructor() { + super({ + id: 'editor.action.inlineSuggest.acceptNextWord', + label: nls.localize('action.inlineSuggest.acceptNextWord', "Accept Next Word Of Inline Suggestion"), + alias: 'Accept Next Word Of Inline Suggestion', + precondition: ContextKeyExpr.and(EditorContextKeys.writable, InlineCompletionContextKeys.inlineSuggestionVisible), + kbOpts: { + weight: KeybindingWeight.EditorContrib + 1, + primary: KeyMod.CtrlCmd | KeyCode.RightArrow, + }, + menuOpts: [{ + menuId: MenuId.InlineSuggestionToolbar, + title: nls.localize('acceptWord', 'Accept Word'), + group: 'primary', + order: 2, + }], + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + await controller?.model.get()?.acceptNextWord(controller.editor); + } +} + +export class AcceptNextLineOfInlineCompletion extends EditorAction { + constructor() { + super({ + id: 'editor.action.inlineSuggest.acceptNextLine', + label: nls.localize('action.inlineSuggest.acceptNextLine', "Accept Next Line Of Inline Suggestion"), + alias: 'Accept Next Line Of Inline Suggestion', + precondition: ContextKeyExpr.and(EditorContextKeys.writable, InlineCompletionContextKeys.inlineSuggestionVisible), + kbOpts: { + weight: KeybindingWeight.EditorContrib + 1, + }, + menuOpts: [{ + menuId: MenuId.InlineSuggestionToolbar, + title: nls.localize('acceptLine', 'Accept Line'), + group: 'secondary', + order: 2, + }], + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + await controller?.model.get()?.acceptNextLine(controller.editor); + } +} + +export class AcceptInlineCompletion extends EditorAction { + constructor() { + super({ + id: inlineSuggestCommitId, + label: nls.localize('action.inlineSuggest.accept', "Accept Inline Suggestion"), + alias: 'Accept Inline Suggestion', + precondition: InlineCompletionContextKeys.inlineSuggestionVisible, + menuOpts: [{ + menuId: MenuId.InlineSuggestionToolbar, + title: nls.localize('accept', "Accept"), + group: 'primary', + order: 1, + }], + kbOpts: { + primary: KeyCode.Tab, + weight: 200, + kbExpr: ContextKeyExpr.and( + InlineCompletionContextKeys.inlineSuggestionVisible, + EditorContextKeys.tabMovesFocus.toNegated(), + InlineCompletionContextKeys.inlineSuggestionHasIndentationLessThanTabSize + ), + } + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + if (controller) { + controller.model.get()?.accept(controller.editor); + controller.editor.focus(); + } + } +} + +export class HideInlineCompletion extends EditorAction { + public static ID = 'editor.action.inlineSuggest.hide'; + + constructor() { + super({ + id: HideInlineCompletion.ID, + label: nls.localize('action.inlineSuggest.hide', "Hide Inline Suggestion"), + alias: 'Hide Inline Suggestion', + precondition: InlineCompletionContextKeys.inlineSuggestionVisible, + kbOpts: { + weight: 100, + primary: KeyCode.Escape, + } + }); + } + + public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { + const controller = InlineCompletionsController.get(editor); + transaction(tx => { + controller?.model.get()?.stop(tx); + }); + } +} + +export class ToggleAlwaysShowInlineSuggestionToolbar extends Action2 { + public static ID = 'editor.action.inlineSuggest.toggleAlwaysShowToolbar'; + + constructor() { + super({ + id: ToggleAlwaysShowInlineSuggestionToolbar.ID, + title: nls.localize('action.inlineSuggest.alwaysShowToolbar', "Always Show Toolbar"), + f1: false, + precondition: undefined, + menu: [{ + id: MenuId.InlineSuggestionToolbar, + group: 'secondary', + order: 10, + }], + toggled: ContextKeyExpr.equals('config.editor.inlineSuggest.showToolbar', 'always') + }); + } + + public async run(accessor: ServicesAccessor, editor: ICodeEditor): Promise { + const configService = accessor.get(IConfigurationService); + const currentValue = configService.getValue<'always' | 'onHover'>('editor.inlineSuggest.showToolbar'); + const newValue = currentValue === 'always' ? 'onHover' : 'always'; + configService.updateValue('editor.inlineSuggest.showToolbar', newValue); + } +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/ghostText.css b/src/vs/editor/contrib/inlineCompletions/browser/ghostText.css index d189a64ce7e..ea7193a130d 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/ghostText.css +++ b/src/vs/editor/contrib/inlineCompletions/browser/ghostText.css @@ -24,11 +24,7 @@ font-size: 0; } -.monaco-editor .ghost-text-decoration { - font-style: italic; -} - -.monaco-editor .suggest-preview-text { +.monaco-editor .ghost-text-decoration, .monaco-editor .suggest-preview-text .ghost-text { font-style: italic; } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/ghostText.ts b/src/vs/editor/contrib/inlineCompletions/browser/ghostText.ts index 69a700b2843..7c77ba19a3c 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/ghostText.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/ghostText.ts @@ -3,21 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { applyEdits } from 'vs/editor/contrib/inlineCompletions/browser/utils'; +import { Range } from 'vs/editor/common/core/range'; +import { ColumnRange, applyEdits } from 'vs/editor/contrib/inlineCompletions/browser/utils'; export class GhostText { - public static equals(a: GhostText | undefined, b: GhostText | undefined): boolean { - return a === b || (!!a && !!b && a.equals(b)); - } - constructor( public readonly lineNumber: number, public readonly parts: GhostTextPart[], - public readonly additionalReservedLineCount: number = 0 ) { } @@ -32,14 +24,12 @@ export class GhostText { */ render(documentText: string, debug: boolean = false): string { const l = this.lineNumber; - return applyEdits(documentText, - [ - ...this.parts.map(p => ({ - range: { startLineNumber: l, endLineNumber: l, startColumn: p.column, endColumn: p.column }, - text: debug ? `[${p.lines.join('\n')}]` : p.lines.join('\n') - })), - ] - ); + return applyEdits(documentText, [ + ...this.parts.map(p => ({ + range: { startLineNumber: l, endLineNumber: l, startColumn: p.column, endColumn: p.column }, + text: debug ? `[${p.lines.join('\n')}]` : p.lines.join('\n') + })), + ]); } renderForScreenReader(lineText: string): string { @@ -62,6 +52,10 @@ export class GhostText { isEmpty(): boolean { return this.parts.every(p => p.lines.length === 0); } + + get lineCount(): number { + return 1 + this.parts.reduce((r, p) => r + p.lines.length - 1, 0); + } } export class GhostTextPart { @@ -83,96 +77,47 @@ export class GhostTextPart { } export class GhostTextReplacement { - constructor( - readonly lineNumber: number, - readonly columnStart: number, - readonly length: number, - readonly newLines: readonly string[], - public readonly additionalReservedLineCount: number = 0, - ) { } public readonly parts: ReadonlyArray = [ new GhostTextPart( - this.columnStart + this.length, + this.columnRange.endColumnExclusive, this.newLines, false ), ]; + constructor( + readonly lineNumber: number, + readonly columnRange: ColumnRange, + readonly newLines: readonly string[], + public readonly additionalReservedLineCount: number = 0, + ) { } + renderForScreenReader(_lineText: string): string { return this.newLines.join('\n'); } render(documentText: string, debug: boolean = false): string { - const startLineNumber = this.lineNumber; - const endLineNumber = this.lineNumber; + const replaceRange = this.columnRange.toRange(this.lineNumber); if (debug) { - return applyEdits(documentText, - [ - { - range: { startLineNumber, endLineNumber, startColumn: this.columnStart, endColumn: this.columnStart }, - text: `(` - }, - { - range: { startLineNumber, endLineNumber, startColumn: this.columnStart + this.length, endColumn: this.columnStart + this.length }, - text: `)[${this.newLines.join('\n')}]` - } - ] - ); + return applyEdits(documentText, [ + { range: Range.fromPositions(replaceRange.getStartPosition()), text: `(` }, + { range: Range.fromPositions(replaceRange.getEndPosition()), text: `)[${this.newLines.join('\n')}]` } + ]); } else { - return applyEdits(documentText, - [ - { - range: { startLineNumber, endLineNumber, startColumn: this.columnStart, endColumn: this.columnStart + this.length }, - text: this.newLines.join('\n') - } - ] - ); + return applyEdits(documentText, [ + { range: replaceRange, text: this.newLines.join('\n') } + ]); } } -} -export interface GhostTextWidgetModel { - readonly onDidChange: Event; - readonly ghostText: GhostText | GhostTextReplacement | undefined; - - setExpanded(expanded: boolean): void; - readonly expanded: boolean; - - readonly minReservedLineCount: number; -} - -export abstract class BaseGhostTextWidgetModel extends Disposable implements GhostTextWidgetModel { - public abstract readonly ghostText: GhostText | GhostTextReplacement | undefined; - - private _expanded: boolean | undefined = undefined; - - protected readonly onDidChangeEmitter = new Emitter(); - public readonly onDidChange = this.onDidChangeEmitter.event; - - public abstract readonly minReservedLineCount: number; - - public get expanded() { - if (this._expanded === undefined) { - // TODO this should use a global hidden setting. - // See https://github.com/microsoft/vscode/issues/125037. - return true; - } - return this._expanded; + get lineCount(): number { + return this.newLines.length; } - constructor(protected readonly editor: IActiveCodeEditor) { - super(); - - this._register(editor.onDidChangeConfiguration((e) => { - if (e.hasChanged(EditorOption.suggest) && this._expanded === undefined) { - this.onDidChangeEmitter.fire(); - } - })); - } - - public setExpanded(expanded: boolean): void { - this._expanded = true; - this.onDidChangeEmitter.fire(); + isEmpty(): boolean { + return this.parts.every(p => p.lines.length === 0); } } + +export type GhostTextOrReplacement = GhostText | GhostTextReplacement; diff --git a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextController.ts b/src/vs/editor/contrib/inlineCompletions/browser/ghostTextController.ts deleted file mode 100644 index 4415eff9d91..00000000000 --- a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextController.ts +++ /dev/null @@ -1,439 +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 { Emitter } from 'vs/base/common/event'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { firstNonWhitespaceIndex } from 'vs/base/common/strings'; -import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; -import { Range } from 'vs/editor/common/core/range'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { inlineSuggestCommitId, showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId } from 'vs/editor/contrib/inlineCompletions/browser/consts'; -import { GhostTextModel } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextModel'; -import { GhostTextWidget } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextWidget'; -import { InlineSuggestionHintsWidget } from 'vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget'; -import * as nls from 'vs/nls'; -import { Action2, MenuId } from 'vs/platform/actions/common/actions'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpr, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; - -export class GhostTextController extends Disposable { - public static readonly inlineSuggestionVisible = new RawContextKey('inlineSuggestionVisible', false, nls.localize('inlineSuggestionVisible', "Whether an inline suggestion is visible")); - public static readonly inlineSuggestionHasIndentation = new RawContextKey('inlineSuggestionHasIndentation', false, nls.localize('inlineSuggestionHasIndentation', "Whether the inline suggestion starts with whitespace")); - public static readonly inlineSuggestionHasIndentationLessThanTabSize = new RawContextKey('inlineSuggestionHasIndentationLessThanTabSize', true, nls.localize('inlineSuggestionHasIndentationLessThanTabSize', "Whether the inline suggestion starts with whitespace that is less than what would be inserted by tab")); - /** - * Enables to use Ctrl+Left to undo partially accepted inline completions. - */ - public static readonly canUndoInlineSuggestion = new RawContextKey('canUndoInlineSuggestion', false, nls.localize('canUndoInlineSuggestion', "Whether undo would undo an inline suggestion")); - - public static readonly alwaysShowInlineSuggestionToolbar = new RawContextKey('alwaysShowInlineSuggestionToolbar', false, nls.localize('alwaysShowInlineSuggestionToolbar', "Whether the inline suggestion toolbar should always be visible")); - - static ID = 'editor.contrib.ghostTextController'; - - public static get(editor: ICodeEditor): GhostTextController | null { - return editor.getContribution(GhostTextController.ID); - } - - private triggeredExplicitly = false; - protected readonly activeController = this._register(new MutableDisposable()); - public get activeModel(): GhostTextModel | undefined { - return this.activeController.value?.model; - } - - private readonly activeModelDidChangeEmitter = this._register(new Emitter()); - public readonly onActiveModelDidChange = this.activeModelDidChangeEmitter.event; - - /** - * Tracks the first alternative version id until which only partial inline suggestions can be undone. - * Any other content change will invalidate this. - * This field is used to set the corresponding context key. - */ - private firstUndoableVersionId: number | undefined = undefined; - - public readonly alwaysShowInlineSuggestionToolbar = GhostTextController.alwaysShowInlineSuggestionToolbar.bindTo(this.contextKeyService); - - constructor( - public readonly editor: ICodeEditor, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IContextKeyService private readonly contextKeyService: IContextKeyService, - ) { - super(); - - this._register(this.editor.onDidChangeModelContent((e) => { - if (!e.isUndoing || this.firstUndoableVersionId && this.editor.getModel()!.getAlternativeVersionId() < this.firstUndoableVersionId) { - this.activeController.value?.contextKeys.canUndoInlineSuggestion.reset(); - this.firstUndoableVersionId = undefined; // Will be set again if this change was caused by an inline suggestion. - } - })); - - this._register(this.editor.onDidChangeCursorPosition((e) => { - if (e.reason === CursorChangeReason.Explicit) { - this.activeController.value?.contextKeys.canUndoInlineSuggestion.reset(); - this.firstUndoableVersionId = undefined; - } - })); - - this._register(this.editor.onDidChangeModel(() => { - this.update(); - })); - this._register(this.editor.onDidChangeConfiguration((e) => { - if (e.hasChanged(EditorOption.suggest) || e.hasChanged(EditorOption.inlineSuggest)) { - this.update(); - } - })); - this.update(); - } - - // Don't call this method when not necessary. It will recreate the activeController. - private update(): void { - const suggestOptions = this.editor.getOption(EditorOption.suggest); - const inlineSuggestOptions = this.editor.getOption(EditorOption.inlineSuggest); - - this.alwaysShowInlineSuggestionToolbar.set(inlineSuggestOptions.showToolbar === 'always'); - - const shouldCreate = this.editor.hasModel() && (suggestOptions.preview || inlineSuggestOptions.enabled || this.triggeredExplicitly); - - if (shouldCreate !== !!this.activeController.value) { - this.activeController.value = undefined; - // ActiveGhostTextController is only created if one of those settings is set or if the inline completions are triggered explicitly. - this.activeController.value = - shouldCreate ? this.instantiationService.createInstance( - ActiveGhostTextController, - this.editor as IActiveCodeEditor - ) - : undefined; - this.activeModelDidChangeEmitter.fire(); - } - } - - public shouldShowHoverAt(hoverRange: Range): boolean { - return this.activeModel?.shouldShowHoverAt(hoverRange) || false; - } - - public shouldShowHoverAtViewZone(viewZoneId: string): boolean { - return this.activeController.value?.widget?.shouldShowHoverAtViewZone(viewZoneId) || false; - } - - public trigger(): void { - this.triggeredExplicitly = true; - if (!this.activeController.value) { - this.update(); - } - this.activeModel?.triggerInlineCompletion(); - } - - public commitPartially(): void { - const nextVersion = this.firstUndoableVersionId; // Read this before committing, as it will be reset. - this.activeModel?.commitInlineCompletionPartially(); - this.activeController?.value?.contextKeys.canUndoInlineSuggestion.set(true); - // Don't override this field if the previous command already accepted some inline suggestion. - this.firstUndoableVersionId = nextVersion ?? this.editor.getModel()!.getAlternativeVersionId(); - } - - public commit(): void { - this.activeModel?.commitInlineCompletion(); - } - - public hide(): void { - this.activeModel?.hideInlineCompletion(); - } - - public showNextInlineCompletion(): void { - this.activeModel?.showNextInlineCompletion(); - } - - public showPreviousInlineCompletion(): void { - this.activeModel?.showPreviousInlineCompletion(); - } - - public async getInlineCompletionsCount(): Promise { - const result = await this.activeModel?.getInlineCompletionsCount(); - return result ?? 0; - } -} - -class GhostTextContextKeys { - public readonly inlineCompletionVisible = GhostTextController.inlineSuggestionVisible.bindTo(this.contextKeyService); - public readonly inlineCompletionSuggestsIndentation = GhostTextController.inlineSuggestionHasIndentation.bindTo(this.contextKeyService); - public readonly inlineCompletionSuggestsIndentationLessThanTabSize = GhostTextController.inlineSuggestionHasIndentationLessThanTabSize.bindTo(this.contextKeyService); - public readonly canUndoInlineSuggestion = GhostTextController.canUndoInlineSuggestion.bindTo(this.contextKeyService); - - constructor(private readonly contextKeyService: IContextKeyService) { - } -} - -/** - * The controller for a text editor with an initialized text model. - * Must be disposed as soon as the model detaches from the editor. -*/ -export class ActiveGhostTextController extends Disposable { - public readonly contextKeys = new GhostTextContextKeys(this.contextKeyService); - public readonly model = this._register(this.instantiationService.createInstance(GhostTextModel, this.editor)); - public readonly widget = this._register(this.instantiationService.createInstance(GhostTextWidget, this.editor, this.model)); - - public readonly hintsWidget = this._register(this.instantiationService.createInstance(InlineSuggestionHintsWidget, this.editor, this.model.inlineCompletionsModel)); - - constructor( - private readonly editor: IActiveCodeEditor, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IContextKeyService private readonly contextKeyService: IContextKeyService, - ) { - super(); - - this._register(toDisposable(() => { - this.contextKeys.inlineCompletionVisible.set(false); - this.contextKeys.inlineCompletionSuggestsIndentation.set(false); - this.contextKeys.inlineCompletionSuggestsIndentationLessThanTabSize.set(true); - })); - - this._register(this.model.onDidChange(() => { - this.updateContextKeys(); - })); - this.updateContextKeys(); - } - - private updateContextKeys(): void { - this.contextKeys.inlineCompletionVisible.set( - this.model.activeInlineCompletionsModel?.ghostText !== undefined - ); - - let startsWithIndentation = false; - let startsWithIndentationLessThanTabSize = true; - - const ghostText = this.model.inlineCompletionsModel.ghostText; - if (!!this.model.activeInlineCompletionsModel && ghostText && ghostText.parts.length > 0) { - const { column, lines } = ghostText.parts[0]; - - const firstLine = lines[0]; - - const indentationEndColumn = this.editor.getModel().getLineIndentColumn(ghostText.lineNumber); - const inIndentation = column <= indentationEndColumn; - - if (inIndentation) { - let firstNonWsIdx = firstNonWhitespaceIndex(firstLine); - if (firstNonWsIdx === -1) { - firstNonWsIdx = firstLine.length - 1; - } - startsWithIndentation = firstNonWsIdx > 0; - - const tabSize = this.editor.getModel().getOptions().tabSize; - const visibleColumnIndentation = CursorColumns.visibleColumnFromColumn(firstLine, firstNonWsIdx + 1, tabSize); - startsWithIndentationLessThanTabSize = visibleColumnIndentation < tabSize; - } - } - - this.contextKeys.inlineCompletionSuggestsIndentation.set(startsWithIndentation); - this.contextKeys.inlineCompletionSuggestsIndentationLessThanTabSize.set(startsWithIndentationLessThanTabSize); - } -} - - -export class ShowNextInlineSuggestionAction extends EditorAction { - public static ID = showNextInlineSuggestionActionId; - constructor() { - super({ - id: ShowNextInlineSuggestionAction.ID, - label: nls.localize('action.inlineSuggest.showNext', "Show Next Inline Suggestion"), - alias: 'Show Next Inline Suggestion', - precondition: ContextKeyExpr.and(EditorContextKeys.writable, GhostTextController.inlineSuggestionVisible), - kbOpts: { - weight: 100, - primary: KeyMod.Alt | KeyCode.BracketRight, - }, - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = GhostTextController.get(editor); - if (controller) { - controller.showNextInlineCompletion(); - editor.focus(); - } - } -} - -export class ShowPreviousInlineSuggestionAction extends EditorAction { - public static ID = showPreviousInlineSuggestionActionId; - constructor() { - super({ - id: ShowPreviousInlineSuggestionAction.ID, - label: nls.localize('action.inlineSuggest.showPrevious', "Show Previous Inline Suggestion"), - alias: 'Show Previous Inline Suggestion', - precondition: ContextKeyExpr.and(EditorContextKeys.writable, GhostTextController.inlineSuggestionVisible), - kbOpts: { - weight: 100, - primary: KeyMod.Alt | KeyCode.BracketLeft, - }, - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = GhostTextController.get(editor); - if (controller) { - controller.showPreviousInlineCompletion(); - editor.focus(); - } - } -} - -export class TriggerInlineSuggestionAction extends EditorAction { - constructor() { - super({ - id: 'editor.action.inlineSuggest.trigger', - label: nls.localize('action.inlineSuggest.trigger', "Trigger Inline Suggestion"), - alias: 'Trigger Inline Suggestion', - precondition: EditorContextKeys.writable - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = GhostTextController.get(editor); - controller?.trigger(); - } -} - -export class AcceptNextWordOfInlineCompletion extends EditorAction { - constructor() { - super({ - id: 'editor.action.inlineSuggest.acceptNextWord', - label: nls.localize('action.inlineSuggest.acceptNextWord', "Accept Next Word Of Inline Suggestion"), - alias: 'Accept Next Word Of Inline Suggestion', - precondition: ContextKeyExpr.and(EditorContextKeys.writable, GhostTextController.inlineSuggestionVisible), - kbOpts: { - weight: KeybindingWeight.EditorContrib + 1, - primary: KeyMod.CtrlCmd | KeyCode.RightArrow, - }, - menuOpts: [{ - menuId: MenuId.InlineSuggestionToolbar, - title: nls.localize('acceptWord', 'Accept Word'), - group: 'primary', - order: 2, - }], - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = GhostTextController.get(editor); - if (controller) { - controller.commitPartially(); - } - } -} - -export class AcceptInlineCompletion extends EditorAction { - constructor() { - super({ - id: inlineSuggestCommitId, - label: nls.localize('action.inlineSuggest.accept', "Accept Inline Suggestion"), - alias: 'Accept Inline Suggestion', - precondition: GhostTextController.inlineSuggestionVisible, - menuOpts: [{ - menuId: MenuId.InlineSuggestionToolbar, - title: nls.localize('accept', "Accept"), - group: 'primary', - order: 1, - }], - kbOpts: { - primary: KeyCode.Tab, - weight: 200, - kbExpr: ContextKeyExpr.and( - GhostTextController.inlineSuggestionVisible, - EditorContextKeys.tabMovesFocus.toNegated(), - GhostTextController.inlineSuggestionHasIndentationLessThanTabSize - ), - } - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = GhostTextController.get(editor); - if (controller) { - controller.commit(); - controller.editor.focus(); - } - } -} - -export class HideInlineCompletion extends EditorAction { - public static ID = 'editor.action.inlineSuggest.hide'; - - constructor() { - super({ - id: HideInlineCompletion.ID, - label: nls.localize('action.inlineSuggest.hide', "Hide Inline Suggestion"), - alias: 'Hide Inline Suggestion', - precondition: GhostTextController.inlineSuggestionVisible, - kbOpts: { - weight: 100, - primary: KeyCode.Escape, - } - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - const controller = GhostTextController.get(editor); - if (controller) { - controller.hide(); - } - } -} - -export class ToggleAlwaysShowInlineSuggestionToolbar extends Action2 { - public static ID = 'editor.action.inlineSuggest.toggleAlwaysShowToolbar'; - - constructor() { - super({ - id: ToggleAlwaysShowInlineSuggestionToolbar.ID, - title: nls.localize('action.inlineSuggest.alwaysShowToolbar', "Always Show Toolbar"), - f1: false, - precondition: undefined, - menu: [{ - id: MenuId.InlineSuggestionToolbar, - group: 'secondary', - order: 10, - }], - toggled: GhostTextController.alwaysShowInlineSuggestionToolbar, - }); - } - - public async run(accessor: ServicesAccessor, editor: ICodeEditor): Promise { - const configService = accessor.get(IConfigurationService); - const currentValue = configService.getValue<'always' | 'onHover'>('editor.inlineSuggest.showToolbar'); - const newValue = currentValue === 'always' ? 'onHover' : 'always'; - configService.updateValue('editor.inlineSuggest.showToolbar', newValue); - } -} - -export class UndoAcceptPart extends EditorAction { - constructor() { - super({ - id: 'editor.action.inlineSuggest.undo', - label: nls.localize('action.inlineSuggest.undo', "Undo Accept Word"), - alias: 'Undo Accept Word', - precondition: ContextKeyExpr.and(EditorContextKeys.writable, GhostTextController.canUndoInlineSuggestion), - kbOpts: { - weight: KeybindingWeight.EditorContrib + 1, - primary: KeyMod.CtrlCmd | KeyCode.LeftArrow, - kbExpr: ContextKeyExpr.and(EditorContextKeys.writable, GhostTextController.canUndoInlineSuggestion), - }, - menuOpts: [{ - menuId: MenuId.InlineSuggestionToolbar, - title: nls.localize('undoAcceptWord', 'Undo Accept Word'), - group: 'secondary', - order: 3, - }], - }); - } - - public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise { - editor.getModel()?.undo(); - } -} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextModel.ts b/src/vs/editor/contrib/inlineCompletions/browser/ghostTextModel.ts deleted file mode 100644 index 1302ead9f65..00000000000 --- a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextModel.ts +++ /dev/null @@ -1,168 +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 { Emitter } from 'vs/base/common/event'; -import { Disposable, IReference, MutableDisposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { InlineCompletionTriggerKind } from 'vs/editor/common/languages'; -import { GhostText, GhostTextReplacement, GhostTextWidgetModel } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; -import { InlineCompletionsModel, SynchronizedInlineCompletionsCache, TrackedInlineCompletions } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel'; -import { SuggestWidgetPreviewModel } from 'vs/editor/contrib/inlineCompletions/browser/suggestWidgetPreviewModel'; -import { createDisposableRef } from 'vs/editor/contrib/inlineCompletions/browser/utils'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; - -export abstract class DelegatingModel extends Disposable implements GhostTextWidgetModel { - private readonly onDidChangeEmitter = new Emitter(); - public readonly onDidChange = this.onDidChangeEmitter.event; - - private hasCachedGhostText = false; - private cachedGhostText: GhostText | GhostTextReplacement | undefined; - - private readonly currentModelRef = this._register(new MutableDisposable>()); - protected get targetModel(): GhostTextWidgetModel | undefined { - return this.currentModelRef.value?.object; - } - - protected setTargetModel(model: GhostTextWidgetModel | undefined): void { - if (this.currentModelRef.value?.object === model) { - return; - } - this.currentModelRef.clear(); - this.currentModelRef.value = model ? createDisposableRef(model, model.onDidChange(() => { - this.hasCachedGhostText = false; - this.onDidChangeEmitter.fire(); - })) : undefined; - - this.hasCachedGhostText = false; - this.onDidChangeEmitter.fire(); - } - - public get ghostText(): GhostText | GhostTextReplacement | undefined { - if (!this.hasCachedGhostText) { - this.cachedGhostText = this.currentModelRef.value?.object?.ghostText; - this.hasCachedGhostText = true; - } - return this.cachedGhostText; - } - - public setExpanded(expanded: boolean): void { - this.targetModel?.setExpanded(expanded); - } - - public get expanded(): boolean { - return this.targetModel ? this.targetModel.expanded : false; - } - - public get minReservedLineCount(): number { - return this.targetModel ? this.targetModel.minReservedLineCount : 0; - } -} - -/** - * A ghost text model that is both driven by inline completions and the suggest widget. -*/ -export class GhostTextModel extends DelegatingModel implements GhostTextWidgetModel { - public readonly sharedCache = this._register(new SharedInlineCompletionCache()); - public readonly suggestWidgetAdapterModel = this._register(this.instantiationService.createInstance(SuggestWidgetPreviewModel, this.editor, this.sharedCache)); - public readonly inlineCompletionsModel = this._register(this.instantiationService.createInstance(InlineCompletionsModel, this.editor, this.sharedCache)); - - public get activeInlineCompletionsModel(): InlineCompletionsModel | undefined { - if (this.targetModel === this.inlineCompletionsModel) { - return this.inlineCompletionsModel; - } - return undefined; - } - - constructor( - private readonly editor: IActiveCodeEditor, - @IInstantiationService private readonly instantiationService: IInstantiationService, - ) { - super(); - - this._register(this.suggestWidgetAdapterModel.onDidChange(() => { - this.updateModel(); - })); - this.updateModel(); - } - - private updateModel(): void { - this.setTargetModel( - this.suggestWidgetAdapterModel.isActive - ? this.suggestWidgetAdapterModel - : this.inlineCompletionsModel - ); - this.inlineCompletionsModel.setActive(this.targetModel === this.inlineCompletionsModel); - } - - public shouldShowHoverAt(hoverRange: Range): boolean { - const ghostText = this.activeInlineCompletionsModel?.ghostText; - if (ghostText) { - return ghostText.parts.some(p => hoverRange.containsPosition(new Position(ghostText.lineNumber, p.column))); - } - return false; - } - - public triggerInlineCompletion(): void { - this.activeInlineCompletionsModel?.trigger(InlineCompletionTriggerKind.Explicit); - } - - public commitInlineCompletion(): void { - this.activeInlineCompletionsModel?.commitCurrentSuggestion(); - } - - public commitInlineCompletionPartially(): void { - this.activeInlineCompletionsModel?.commitCurrentSuggestionPartially(); - } - - public hideInlineCompletion(): void { - this.activeInlineCompletionsModel?.hide(); - } - - public showNextInlineCompletion(): void { - this.activeInlineCompletionsModel?.showNext(); - } - - public showPreviousInlineCompletion(): void { - this.activeInlineCompletionsModel?.showPrevious(); - } - - public async getInlineCompletionsCount(): Promise { - const result = await this.activeInlineCompletionsModel?.getInlineCompletionsCount(); - return result ?? 0; - } -} - -export class SharedInlineCompletionCache extends Disposable { - private readonly onDidChangeEmitter = new Emitter(); - public readonly onDidChange = this.onDidChangeEmitter.event; - - private readonly cache = this._register(new MutableDisposable()); - - public get value(): SynchronizedInlineCompletionsCache | undefined { - return this.cache.value; - } - - public setValue(editor: IActiveCodeEditor, - completionsSource: TrackedInlineCompletions, - triggerKind: InlineCompletionTriggerKind - ) { - this.cache.value = new SynchronizedInlineCompletionsCache( - completionsSource, - editor, - () => this.onDidChangeEmitter.fire(), - triggerKind - ); - } - - public clearAndLeak(): SynchronizedInlineCompletionsCache | undefined { - return this.cache.clearAndLeak(); - } - - public clear() { - this.cache.clear(); - } -} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextWidget.ts b/src/vs/editor/contrib/inlineCompletions/browser/ghostTextWidget.ts index fe1ad377ea0..e2c2fa9d796 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextWidget.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/ghostTextWidget.ts @@ -3,88 +3,66 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; +import { Event } from 'vs/base/common/event'; +import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; +import { IObservable, autorun, derived, observableFromEvent, observableSignalFromEvent, observableValue } from 'vs/base/common/observable'; import * as strings from 'vs/base/common/strings'; import 'vs/css!./ghostText'; import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; -import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorFontLigatures, EditorOption, IComputedEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { IModelDeltaDecoration, InjectedTextCursorStops, PositionAffinity } from 'vs/editor/common/model'; import { ILanguageIdCodec } from 'vs/editor/common/languages'; import { ILanguageService } from 'vs/editor/common/languages/language'; +import { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from 'vs/editor/common/model'; +import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; import { RenderLineInput, renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; import { InlineDecorationType } from 'vs/editor/common/viewModel'; -import { GhostTextReplacement, GhostTextWidgetModel } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { GhostText, GhostTextReplacement } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; +import { ColumnRange, applyObservableDecorations } from 'vs/editor/contrib/inlineCompletions/browser/utils'; -const ttPolicy = window.trustedTypes?.createPolicy('editorGhostText', { createHTML: value => value }); +export interface IGhostTextWidgetModel { + readonly targetTextModel: IObservable; + readonly ghostText: IObservable; + readonly minReservedLineCount: IObservable; +} export class GhostTextWidget extends Disposable { - private disposed = false; - private readonly partsWidget = this._register(this.instantiationService.createInstance(DecorationsWidget, this.editor)); - private readonly additionalLinesWidget = this._register(new AdditionalLinesWidget(this.editor, this.languageService.languageIdCodec)); - private viewMoreContentWidget: ViewMoreLinesContentWidget | undefined = undefined; + private readonly isDisposed = observableValue('isDisposed', false); + private readonly currentTextModel = observableFromEvent(this.editor.onDidChangeModel, () => this.editor.getModel()); constructor( private readonly editor: ICodeEditor, - private readonly model: GhostTextWidgetModel, - @IInstantiationService private readonly instantiationService: IInstantiationService, + private readonly model: IGhostTextWidgetModel, @ILanguageService private readonly languageService: ILanguageService, ) { super(); - this._register(this.editor.onDidChangeConfiguration((e) => { - if ( - e.hasChanged(EditorOption.disableMonospaceOptimizations) - || e.hasChanged(EditorOption.stopRenderingLineAfter) - || e.hasChanged(EditorOption.renderWhitespace) - || e.hasChanged(EditorOption.renderControlCharacters) - || e.hasChanged(EditorOption.fontLigatures) - || e.hasChanged(EditorOption.fontInfo) - || e.hasChanged(EditorOption.lineHeight) - ) { - this.update(); - } - })); - - this._register(toDisposable(() => { - this.disposed = true; - this.update(); - - this.viewMoreContentWidget?.dispose(); - this.viewMoreContentWidget = undefined; - })); - - this._register(model.onDidChange(() => { - this.update(); - })); - this.update(); + this._register(toDisposable(() => { this.isDisposed.set(true, undefined); })); + this._register(applyObservableDecorations(this.editor, this.decorations)); } - public shouldShowHoverAtViewZone(viewZoneId: string): boolean { - return (this.additionalLinesWidget.viewZoneId === viewZoneId); - } - - private readonly replacementDecoration = this._register(new DisposableDecorations(this.editor)); - - private update(): void { - const ghostText = this.model.ghostText; - - if (!this.editor.hasModel() || !ghostText || this.disposed) { - this.partsWidget.clear(); - this.additionalLinesWidget.clear(); - this.replacementDecoration.clear(); - return; + private readonly uiState = derived('uiState', reader => { + if (this.isDisposed.read(reader)) { + return undefined; + } + const textModel = this.currentTextModel.read(reader); + if (textModel !== this.model.targetTextModel.read(reader)) { + return undefined; + } + const ghostText = this.model.ghostText.read(reader); + if (!ghostText) { + return undefined; } - const inlineTexts = new Array(); - const additionalLines = new Array(); + const replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined; + + const inlineTexts: { column: number; text: string; preview: boolean }[] = []; + const additionalLines: LineData[] = []; function addToAdditionalLines(lines: readonly string[], className: string | undefined) { if (additionalLines.length > 0) { @@ -104,26 +82,7 @@ export class GhostTextWidget extends Disposable { } } - if (ghostText instanceof GhostTextReplacement) { - this.replacementDecoration.setDecorations([ - { - range: new Range( - ghostText.lineNumber, - ghostText.columnStart, - ghostText.lineNumber, - ghostText.columnStart + ghostText.length - ), - options: { - inlineClassName: 'inline-completion-text-to-replace', - description: 'GhostTextReplacement' - } - }, - ]); - } else { - this.replacementDecoration.setDecorations([]); - } - - const textBufferLine = this.editor.getModel().getLineContent(ghostText.lineNumber); + const textBufferLine = textModel.getLineContent(ghostText.lineNumber); let hiddenTextStartColumn: number | undefined = undefined; let lastIdx = 0; @@ -153,154 +112,116 @@ export class GhostTextWidget extends Disposable { addToAdditionalLines([textBufferLine.substring(lastIdx)], undefined); } - this.partsWidget.setParts(ghostText.lineNumber, inlineTexts, - hiddenTextStartColumn !== undefined ? { column: hiddenTextStartColumn, length: textBufferLine.length + 1 - hiddenTextStartColumn } : undefined); - this.additionalLinesWidget.updateLines(ghostText.lineNumber, additionalLines, ghostText.additionalReservedLineCount); + const hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined; - if (0 < 0) { - // Not supported at the moment, condition is always false. - this.viewMoreContentWidget = this.renderViewMoreLines( - new Position(ghostText.lineNumber, this.editor.getModel()!.getLineMaxColumn(ghostText.lineNumber)), - '', 0 - ); - } else { - this.viewMoreContentWidget?.dispose(); - this.viewMoreContentWidget = undefined; - } - } + return { + replacedRange, + inlineTexts, + additionalLines, + hiddenRange, + lineNumber: ghostText.lineNumber, + additionalReservedLineCount: this.model.minReservedLineCount.read(reader), + targetTextModel: textModel, + }; + }); - private renderViewMoreLines(position: Position, firstLineText: string, remainingLinesLength: number): ViewMoreLinesContentWidget { - const fontInfo = this.editor.getOption(EditorOption.fontInfo); - const domNode = document.createElement('div'); - domNode.className = 'suggest-preview-additional-widget'; - applyFontInfo(domNode, fontInfo); - - const spacer = document.createElement('span'); - spacer.className = 'content-spacer'; - spacer.append(firstLineText); - domNode.append(spacer); - - const newline = document.createElement('span'); - newline.className = 'content-newline suggest-preview-text'; - newline.append('āŽ '); - domNode.append(newline); - - const disposableStore = new DisposableStore(); - - const button = document.createElement('div'); - button.className = 'button suggest-preview-text'; - button.append(`+${remainingLinesLength} lines…`); - - disposableStore.add(dom.addStandardDisposableListener(button, 'mousedown', (e) => { - this.model?.setExpanded(true); - e.preventDefault(); - this.editor.focus(); - })); - - domNode.append(button); - return new ViewMoreLinesContentWidget(this.editor, position, domNode, disposableStore); - } -} - -class DisposableDecorations { - private decorationIds: string[] = []; - - constructor(private readonly editor: ICodeEditor) { - } - - public setDecorations(decorations: IModelDeltaDecoration[]): void { - // Using change decorations ensures that we update the id's before some event handler is called. - this.editor.changeDecorations(accessor => { - this.decorationIds = accessor.deltaDecorations(this.decorationIds, decorations); - }); - } - - public clear(): void { - this.setDecorations([]); - } - - public dispose(): void { - this.clear(); - } -} - -interface HiddenText { - column: number; - length: number; -} - -interface InsertedInlineText { - column: number; - text: string; - preview: boolean; -} - -class DecorationsWidget implements IDisposable { - private decorationIds: string[] = []; - - constructor( - private readonly editor: ICodeEditor - ) { - } - - public dispose(): void { - this.clear(); - } - - public clear(): void { - // Using change decorations ensures that we update the id's before some event handler is called. - this.editor.changeDecorations(accessor => { - this.decorationIds = accessor.deltaDecorations(this.decorationIds, []); - }); - } - - public setParts(lineNumber: number, parts: InsertedInlineText[], hiddenText?: HiddenText): void { - const textModel = this.editor.getModel(); - if (!textModel) { - return; + private readonly decorations = derived('decorations', reader => { + const uiState = this.uiState.read(reader); + if (!uiState) { + return []; } - const hiddenTextDecorations = new Array(); - if (hiddenText) { - hiddenTextDecorations.push({ - range: Range.fromPositions(new Position(lineNumber, hiddenText.column), new Position(lineNumber, hiddenText.column + hiddenText.length)), + const decorations: IModelDeltaDecoration[] = []; + + if (uiState.replacedRange) { + decorations.push({ + range: uiState.replacedRange.toRange(uiState.lineNumber), + options: { inlineClassName: 'inline-completion-text-to-replace', description: 'GhostTextReplacement' } + }); + } + + if (uiState.hiddenRange) { + decorations.push({ + range: uiState.hiddenRange.toRange(uiState.lineNumber), + options: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', } + }); + } + + for (const p of uiState.inlineTexts) { + decorations.push({ + range: Range.fromPositions(new Position(uiState.lineNumber, p.column)), options: { - inlineClassName: 'ghost-text-hidden', - description: 'ghost-text-hidden', + description: 'ghost-text', + after: { content: p.text, inlineClassName: p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration', cursorStops: InjectedTextCursorStops.Left }, + showIfCollapsed: true, } }); } - // Using change decorations ensures that we update the id's before some event handler is called. - this.editor.changeDecorations(accessor => { - this.decorationIds = accessor.deltaDecorations(this.decorationIds, parts.map(p => { - return ({ - range: Range.fromPositions(new Position(lineNumber, p.column)), - options: { - description: 'ghost-text', - after: { content: p.text, inlineClassName: p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration', cursorStops: InjectedTextCursorStops.Left }, - showIfCollapsed: true, - } - }); - }).concat(hiddenTextDecorations)); - }); + return decorations; + }); + + private readonly additionalLinesWidget = this._register( + new AdditionalLinesWidget( + this.editor, + this.languageService.languageIdCodec, + derived('lines', (reader) => { + const uiState = this.uiState.read(reader); + return uiState ? { + lineNumber: uiState.lineNumber, + additionalLines: uiState.additionalLines, + minReservedLineCount: uiState.additionalReservedLineCount, + targetTextModel: uiState.targetTextModel, + } : undefined; + }) + ) + ); + + public ownsViewZone(viewZoneId: string): boolean { + return this.additionalLinesWidget.viewZoneId === viewZoneId; } } -class AdditionalLinesWidget implements IDisposable { +class AdditionalLinesWidget extends Disposable { private _viewZoneId: string | undefined = undefined; public get viewZoneId(): string | undefined { return this._viewZoneId; } + private readonly editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter( + this.editor.onDidChangeConfiguration, + e => e.hasChanged(EditorOption.disableMonospaceOptimizations) + || e.hasChanged(EditorOption.stopRenderingLineAfter) + || e.hasChanged(EditorOption.renderWhitespace) + || e.hasChanged(EditorOption.renderControlCharacters) + || e.hasChanged(EditorOption.fontLigatures) + || e.hasChanged(EditorOption.fontInfo) + || e.hasChanged(EditorOption.lineHeight) + )); + constructor( private readonly editor: ICodeEditor, - private readonly languageIdCodec: ILanguageIdCodec - ) { } + private readonly languageIdCodec: ILanguageIdCodec, + private readonly lines: IObservable<{ targetTextModel: ITextModel; lineNumber: number; additionalLines: LineData[]; minReservedLineCount: number } | undefined> + ) { + super(); - public dispose(): void { + this._register(autorun('update view zone', reader => { + const lines = this.lines.read(reader); + this.editorOptionsChanged.read(reader); + + if (lines) { + this.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount); + } else { + this.clear(); + } + })); + } + + public override dispose(): void { + super.dispose(); this.clear(); } - public clear(): void { + private clear(): void { this.editor.changeViewZones((changeAccessor) => { if (this._viewZoneId) { changeAccessor.removeZone(this._viewZoneId); @@ -309,7 +230,7 @@ class AdditionalLinesWidget implements IDisposable { }); } - public updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void { + private updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void { const textModel = this.editor.getModel(); if (!textModel) { return; @@ -340,7 +261,7 @@ class AdditionalLinesWidget implements IDisposable { } interface LineData { - content: string; + content: string; // Must not contain a linebreak! decorations: LineDecoration[]; } @@ -401,37 +322,4 @@ function renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], o domNode.innerHTML = trustedhtml as string; } -class ViewMoreLinesContentWidget extends Disposable implements IContentWidget { - readonly allowEditorOverflow = false; - readonly suppressMouseDown = false; - - constructor( - private editor: ICodeEditor, - private position: Position, - private domNode: HTMLElement, - disposableStore: DisposableStore - ) { - super(); - this._register(disposableStore); - this._register(toDisposable(() => { - this.editor.removeContentWidget(this); - })); - this.editor.addContentWidget(this); - } - - getId(): string { - return 'editor.widget.viewMoreLinesWidget'; - } - - getDomNode(): HTMLElement { - return this.domNode; - } - - getPosition(): IContentWidgetPosition | null { - return { - position: this.position, - preference: [ContentWidgetPositionPreference.EXACT] - }; - } -} - +const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value }); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextHoverParticipant.ts b/src/vs/editor/contrib/inlineCompletions/browser/hoverParticipant.ts similarity index 74% rename from src/vs/editor/contrib/inlineCompletions/browser/ghostTextHoverParticipant.ts rename to src/vs/editor/contrib/inlineCompletions/browser/hoverParticipant.ts index 37917f88a75..efa99199a6a 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/ghostTextHoverParticipant.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/hoverParticipant.ts @@ -5,16 +5,16 @@ import * as dom from 'vs/base/browser/dom'; import { MarkdownString } from 'vs/base/common/htmlContent'; -import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; +import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; +import { autorun, constObservable } from 'vs/base/common/observable'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; -import { Command } from 'vs/editor/common/languages'; import { ILanguageService } from 'vs/editor/common/languages/language'; import { IModelDecoration } from 'vs/editor/common/model'; import { HoverAnchor, HoverAnchorType, HoverForeignElementAnchor, IEditorHoverParticipant, IEditorHoverRenderContext, IHoverPart } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { GhostTextController } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextController'; -import { InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget'; +import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController'; +import { InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget'; import { MarkdownRenderer } from 'vs/editor/contrib/markdownRenderer/browser/markdownRenderer'; import * as nls from 'vs/nls'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; @@ -26,7 +26,7 @@ export class InlineCompletionsHover implements IHoverPart { constructor( public readonly owner: IEditorHoverParticipant, public readonly range: Range, - public readonly controller: GhostTextController + public readonly controller: InlineCompletionsController ) { } public isValidForHoverAnchor(anchor: HoverAnchor): boolean { @@ -36,31 +36,6 @@ export class InlineCompletionsHover implements IHoverPart { && this.range.endColumn >= anchor.range.endColumn ); } - - public requestExplicitContext(): void { - this.controller.activeModel?.activeInlineCompletionsModel?.completionSession.value?.ensureUpdateWithExplicitContext(); - } - - public getInlineCompletionsCount(): number | undefined { - const session = this.controller.activeModel?.activeInlineCompletionsModel?.completionSession.value; - if (!session?.hasBeenTriggeredExplicitly) { - return undefined; - } - return session?.getInlineCompletionsCountSync(); - } - - public getInlineCompletionIndex(): number | undefined { - return this.controller.activeModel?.activeInlineCompletionsModel?.completionSession.value?.currentlySelectedIndex; - } - - public onDidChange(handler: () => void): IDisposable { - const d = this.controller.activeModel?.activeInlineCompletionsModel?.onDidChange(handler); - return d || Disposable.None; - } - - public get commands(): Command[] { - return this.controller.activeModel?.activeInlineCompletionsModel?.completionSession.value?.commands || []; - } } export class InlineCompletionsHoverParticipant implements IEditorHoverParticipant { @@ -78,7 +53,7 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan } suggestHoverAnchor(mouseEvent: IEditorMouseEvent): HoverAnchor | null { - const controller = GhostTextController.get(this._editor); + const controller = InlineCompletionsController.get(this._editor); if (!controller) { return null; } @@ -112,7 +87,7 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan return []; } - const controller = GhostTextController.get(this._editor); + const controller = InlineCompletionsController.get(this._editor); if (controller && controller.shouldShowHoverAt(anchor.range)) { return [new InlineCompletionsHover(this, anchor.range, controller)]; } @@ -132,15 +107,18 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan this.renderScreenReaderText(context, part, disposableStore); } - const w = this._instantiationService.createInstance(InlineSuggestionHintsContentWidget, this._editor, false); + const model = part.controller.model.get()!; + + const w = this._instantiationService.createInstance(InlineSuggestionHintsContentWidget, this._editor, false, + constObservable(null), + model.selectedInlineCompletionIndex, + model.inlineCompletionsCount, + model.selectedInlineCompletion.map(v => v?.inlineCompletion.source.inlineCompletions.commands ?? []),); context.fragment.appendChild(w.getDomNode()); - w.update(null, part.getInlineCompletionIndex() || 0, part.getInlineCompletionsCount(), part.commands); - part.requestExplicitContext(); + model.triggerExplicitly(); - disposableStore.add(part.onDidChange(() => { - w.update(null, part.getInlineCompletionIndex() || 0, part.getInlineCompletionsCount(), part.commands); - })); + disposableStore.add(w); return disposableStore; } @@ -148,7 +126,7 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan private renderScreenReaderText(context: IEditorHoverRenderContext, part: InlineCompletionsHover, disposableStore: DisposableStore) { const $ = dom.$; const markdownHoverElement = $('div.hover-row.markdown-hover'); - const hoverContentsElement = dom.append(markdownHoverElement, $('div.hover-contents')); + const hoverContentsElement = dom.append(markdownHoverElement, $('div.hover-contents', { ['aria-live']: 'assertive' })); const renderer = disposableStore.add(new MarkdownRenderer({ editor: this._editor }, this._languageService, this._openerService)); const render = (code: string) => { disposableStore.add(renderer.onDidRenderAsync(() => { @@ -161,11 +139,16 @@ export class InlineCompletionsHoverParticipant implements IEditorHoverParticipan hoverContentsElement.replaceChildren(renderedContents.element); }; - const ghostText = part.controller.activeModel?.inlineCompletionsModel?.ghostText; - if (ghostText) { - const lineText = this._editor.getModel()!.getLineContent(ghostText.lineNumber); - render(ghostText.renderForScreenReader(lineText)); - } + disposableStore.add(autorun('update hover', (reader) => { + const ghostText = part.controller.model.read(reader)?.ghostText.read(reader); + if (ghostText) { + const lineText = this._editor.getModel()!.getLineContent(ghostText.lineNumber); + render(ghostText.renderForScreenReader(lineText)); + } else { + dom.reset(hoverContentsElement); + } + })); + context.fragment.appendChild(markdownHoverElement); } } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys.ts new file mode 100644 index 00000000000..bcd18d70301 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys.ts @@ -0,0 +1,75 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IObservable, autorun } from 'vs/base/common/observable'; +import { firstNonWhitespaceIndex } from 'vs/base/common/strings'; +import { CursorColumns } from 'vs/editor/common/core/cursorColumns'; +import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel'; +import { RawContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { localize } from 'vs/nls'; + +export class InlineCompletionContextKeys extends Disposable { + public static readonly inlineSuggestionVisible = new RawContextKey('inlineSuggestionVisible', false, localize('inlineSuggestionVisible', "Whether an inline suggestion is visible")); + public static readonly inlineSuggestionHasIndentation = new RawContextKey('inlineSuggestionHasIndentation', false, localize('inlineSuggestionHasIndentation', "Whether the inline suggestion starts with whitespace")); + public static readonly inlineSuggestionHasIndentationLessThanTabSize = new RawContextKey('inlineSuggestionHasIndentationLessThanTabSize', true, localize('inlineSuggestionHasIndentationLessThanTabSize', "Whether the inline suggestion starts with whitespace that is less than what would be inserted by tab")); + public static readonly suppressSuggestions = new RawContextKey('inlineSuggestionSuppressSuggestions', undefined, localize('suppressSuggestions', "Whether suggestions should be suppressed for the current suggestion")); + + public readonly inlineCompletionVisible = InlineCompletionContextKeys.inlineSuggestionVisible.bindTo(this.contextKeyService); + public readonly inlineCompletionSuggestsIndentation = InlineCompletionContextKeys.inlineSuggestionHasIndentation.bindTo(this.contextKeyService); + public readonly inlineCompletionSuggestsIndentationLessThanTabSize = InlineCompletionContextKeys.inlineSuggestionHasIndentationLessThanTabSize.bindTo(this.contextKeyService); + public readonly suppressSuggestions = InlineCompletionContextKeys.suppressSuggestions.bindTo(this.contextKeyService); + + constructor( + private readonly contextKeyService: IContextKeyService, + private readonly model: IObservable, + ) { + super(); + + this._register(autorun('update context key: inlineCompletionVisible, suppressSuggestions', (reader) => { + const model = this.model.read(reader); + const suggestion = model?.selectedInlineCompletion.read(reader); + const ghostText = model?.ghostText.read(reader); + const selectedSuggestItem = model?.selectedSuggestItem.read(reader); + this.inlineCompletionVisible.set(selectedSuggestItem === undefined && ghostText !== undefined && !ghostText.isEmpty()); + + if (ghostText && suggestion) { + this.suppressSuggestions.set(suggestion.inlineCompletion.source.inlineCompletions.suppressSuggestions); + } + })); + + this._register(autorun('update context key: inlineCompletionSuggestsIndentation, inlineCompletionSuggestsIndentationLessThanTabSize', (reader) => { + const model = this.model.read(reader); + + let startsWithIndentation = false; + let startsWithIndentationLessThanTabSize = true; + + const ghostText = model?.ghostText.read(reader); + if (!!model?.selectedSuggestItem && ghostText && ghostText.parts.length > 0) { + const { column, lines } = ghostText.parts[0]; + + const firstLine = lines[0]; + + const indentationEndColumn = model.textModel.getLineIndentColumn(ghostText.lineNumber); + const inIndentation = column <= indentationEndColumn; + + if (inIndentation) { + let firstNonWsIdx = firstNonWhitespaceIndex(firstLine); + if (firstNonWsIdx === -1) { + firstNonWsIdx = firstLine.length - 1; + } + startsWithIndentation = firstNonWsIdx > 0; + + const tabSize = model.textModel.getOptions().tabSize; + const visibleColumnIndentation = CursorColumns.visibleColumnFromColumn(firstLine, firstNonWsIdx + 1, tabSize); + startsWithIndentationLessThanTabSize = visibleColumnIndentation < tabSize; + } + } + + this.inlineCompletionSuggestsIndentation.set(startsWithIndentation); + this.inlineCompletionSuggestsIndentationLessThanTabSize.set(startsWithIndentationLessThanTabSize); + })); + } +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionToGhostText.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionToGhostText.ts deleted file mode 100644 index 505e5f4f4cf..00000000000 --- a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionToGhostText.ts +++ /dev/null @@ -1,281 +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 { IDiffChange, LcsDiff } from 'vs/base/common/diff/diff'; -import * as strings from 'vs/base/common/strings'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { ITextModel } from 'vs/editor/common/model'; -import { Command } from 'vs/editor/common/languages'; -import { GhostText, GhostTextPart } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; -import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; - -/** - * A normalized inline completion is an inline completion with a defined range. -*/ -export interface NormalizedInlineCompletion { - readonly filterText: string; - readonly command?: Command; - readonly range: Range; - readonly insertText: string; - readonly snippetInfo: - | { - snippet: string; - /* Could be different than the main range */ - range: Range; - } - | undefined; - - readonly additionalTextEdits: readonly ISingleEditOperation[]; -} - -/** - * Shrinks the range if the text has a suffix/prefix that agrees with the text buffer. - * E.g. text buffer: `ab[cdef]ghi`, [...] is the replace range, `cxyzf` is the new text. - * Then the minimized inline completion has range `abc[de]fghi` and text `xyz`. - */ -export function minimizeInlineCompletion(model: ITextModel, inlineCompletion: NormalizedInlineCompletion): NormalizedInlineCompletion; -export function minimizeInlineCompletion(model: ITextModel, inlineCompletion: NormalizedInlineCompletion | undefined): NormalizedInlineCompletion | undefined; -export function minimizeInlineCompletion(model: ITextModel, inlineCompletion: NormalizedInlineCompletion | undefined): NormalizedInlineCompletion | undefined { - if (!inlineCompletion) { - return inlineCompletion; - } - const valueToReplace = model.getValueInRange(inlineCompletion.range); - const commonPrefixLen = strings.commonPrefixLength(valueToReplace, inlineCompletion.insertText); - const startOffset = model.getOffsetAt(inlineCompletion.range.getStartPosition()) + commonPrefixLen; - const start = model.getPositionAt(startOffset); - - const remainingValueToReplace = valueToReplace.substr(commonPrefixLen); - const commonSuffixLen = strings.commonSuffixLength(remainingValueToReplace, inlineCompletion.insertText); - const end = model.getPositionAt(Math.max(startOffset, model.getOffsetAt(inlineCompletion.range.getEndPosition()) - commonSuffixLen)); - - return { - range: Range.fromPositions(start, end), - insertText: inlineCompletion.insertText.substr(commonPrefixLen, inlineCompletion.insertText.length - commonPrefixLen - commonSuffixLen), - snippetInfo: inlineCompletion.snippetInfo, - filterText: inlineCompletion.filterText, - additionalTextEdits: inlineCompletion.additionalTextEdits, - }; -} - -export function normalizedInlineCompletionsEquals(a: NormalizedInlineCompletion | undefined, b: NormalizedInlineCompletion | undefined): boolean { - if (a === b) { - return true; - } - if (!a || !b) { - return false; - } - return a.range.equalsRange(b.range) && a.insertText === b.insertText && a.command === b.command; -} - -/** - * @param previewSuffixLength Sets where to split `inlineCompletion.text`. - * If the text is `hello` and the suffix length is 2, the non-preview part is `hel` and the preview-part is `lo`. -*/ -export function inlineCompletionToGhostText( - inlineCompletion: NormalizedInlineCompletion, - textModel: ITextModel, - mode: 'prefix' | 'subword' | 'subwordSmart', - cursorPosition?: Position, - previewSuffixLength = 0 -): GhostText | undefined { - if (inlineCompletion.range.startLineNumber !== inlineCompletion.range.endLineNumber) { - // Only single line replacements are supported. - return undefined; - } - - const sourceLine = textModel.getLineContent(inlineCompletion.range.startLineNumber); - const sourceIndentationLength = strings.getLeadingWhitespace(sourceLine).length; - - const suggestionTouchesIndentation = inlineCompletion.range.startColumn - 1 <= sourceIndentationLength; - if (suggestionTouchesIndentation) { - // source: Ā·Ā·Ā·Ā·Ā·Ā·Ā·Ā·Ā·Ā·[Ā·Ā·Ā·Ā·Ā·Ā·abc] - // ^^^^^^^^^ inlineCompletion.range - // ^^^^^^^^^^ ^^^^^^ sourceIndentationLength - // ^^^^^^ replacedIndentation.length - // ^^^ rangeThatDoesNotReplaceIndentation - - // inlineCompletion.text: 'Ā·Ā·foo' - // ^^ suggestionAddedIndentationLength - - const suggestionAddedIndentationLength = strings.getLeadingWhitespace(inlineCompletion.insertText).length; - - const replacedIndentation = sourceLine.substring(inlineCompletion.range.startColumn - 1, sourceIndentationLength); - const rangeThatDoesNotReplaceIndentation = Range.fromPositions( - inlineCompletion.range.getStartPosition().delta(0, replacedIndentation.length), - inlineCompletion.range.getEndPosition() - ); - - const suggestionWithoutIndentationChange = - inlineCompletion.insertText.startsWith(replacedIndentation) - // Adds more indentation without changing existing indentation: We can add ghost text for this - ? inlineCompletion.insertText.substring(replacedIndentation.length) - // Changes or removes existing indentation. Only add ghost text for the non-indentation part. - : inlineCompletion.insertText.substring(suggestionAddedIndentationLength); - - inlineCompletion = { - range: rangeThatDoesNotReplaceIndentation, - insertText: suggestionWithoutIndentationChange, - command: inlineCompletion.command, - snippetInfo: undefined, - filterText: inlineCompletion.filterText, - additionalTextEdits: inlineCompletion.additionalTextEdits, - }; - } - - // This is a single line string - const valueToBeReplaced = textModel.getValueInRange(inlineCompletion.range); - - const changes = cachingDiff(valueToBeReplaced, inlineCompletion.insertText); - - if (!changes) { - // No ghost text in case the diff would be too slow to compute - return undefined; - } - - const lineNumber = inlineCompletion.range.startLineNumber; - - const parts = new Array(); - - if (mode === 'prefix') { - const filteredChanges = changes.filter(c => c.originalLength === 0); - if (filteredChanges.length > 1 || filteredChanges.length === 1 && filteredChanges[0].originalStart !== valueToBeReplaced.length) { - // Prefixes only have a single change. - return undefined; - } - } - - const previewStartInCompletionText = inlineCompletion.insertText.length - previewSuffixLength; - - for (const c of changes) { - const insertColumn = inlineCompletion.range.startColumn + c.originalStart + c.originalLength; - - if (mode === 'subwordSmart' && cursorPosition && cursorPosition.lineNumber === inlineCompletion.range.startLineNumber && insertColumn < cursorPosition.column) { - // No ghost text before cursor - return undefined; - } - - if (c.originalLength > 0) { - return undefined; - } - - if (c.modifiedLength === 0) { - continue; - } - - const modifiedEnd = c.modifiedStart + c.modifiedLength; - const nonPreviewTextEnd = Math.max(c.modifiedStart, Math.min(modifiedEnd, previewStartInCompletionText)); - const nonPreviewText = inlineCompletion.insertText.substring(c.modifiedStart, nonPreviewTextEnd); - const italicText = inlineCompletion.insertText.substring(nonPreviewTextEnd, Math.max(c.modifiedStart, modifiedEnd)); - - if (nonPreviewText.length > 0) { - const lines = strings.splitLines(nonPreviewText); - parts.push(new GhostTextPart(insertColumn, lines, false)); - } - if (italicText.length > 0) { - const lines = strings.splitLines(italicText); - parts.push(new GhostTextPart(insertColumn, lines, true)); - } - } - - return new GhostText(lineNumber, parts, 0); -} - -let lastRequest: { originalValue: string; newValue: string; changes: readonly IDiffChange[] | undefined } | undefined = undefined; -function cachingDiff(originalValue: string, newValue: string): readonly IDiffChange[] | undefined { - if (lastRequest?.originalValue === originalValue && lastRequest?.newValue === newValue) { - return lastRequest?.changes; - } else { - let changes = smartDiff(originalValue, newValue, true); - if (changes) { - const deletedChars = deletedCharacters(changes); - if (deletedChars > 0) { - // For performance reasons, don't compute diff if there is nothing to improve - const newChanges = smartDiff(originalValue, newValue, false); - if (newChanges && deletedCharacters(newChanges) < deletedChars) { - // Disabling smartness seems to be better here - changes = newChanges; - } - } - } - lastRequest = { - originalValue, - newValue, - changes - }; - return changes; - } -} - -function deletedCharacters(changes: readonly IDiffChange[]): number { - let sum = 0; - for (const c of changes) { - sum += c.originalLength; - } - return sum; -} - -/** - * When matching `if ()` with `if (f() = 1) { g(); }`, - * align it like this: `if ( )` - * Not like this: `if ( )` - * Also not like this: `if ( )`. - * - * The parenthesis are preprocessed to ensure that they match correctly. - */ -function smartDiff(originalValue: string, newValue: string, smartBracketMatching: boolean): (readonly IDiffChange[]) | undefined { - if (originalValue.length > 5000 || newValue.length > 5000) { - // We don't want to work on strings that are too big - return undefined; - } - - function getMaxCharCode(val: string): number { - let maxCharCode = 0; - for (let i = 0, len = val.length; i < len; i++) { - const charCode = val.charCodeAt(i); - if (charCode > maxCharCode) { - maxCharCode = charCode; - } - } - return maxCharCode; - } - - const maxCharCode = Math.max(getMaxCharCode(originalValue), getMaxCharCode(newValue)); - function getUniqueCharCode(id: number): number { - if (id < 0) { - throw new Error('unexpected'); - } - return maxCharCode + id + 1; - } - - function getElements(source: string): Int32Array { - let level = 0; - let group = 0; - const characters = new Int32Array(source.length); - for (let i = 0, len = source.length; i < len; i++) { - // TODO support more brackets - if (smartBracketMatching && source[i] === '(') { - const id = group * 100 + level; - characters[i] = getUniqueCharCode(2 * id); - level++; - } else if (smartBracketMatching && source[i] === ')') { - level = Math.max(level - 1, 0); - const id = group * 100 + level; - characters[i] = getUniqueCharCode(2 * id + 1); - if (level === 0) { - group++; - } - } else { - characters[i] = source.charCodeAt(i); - } - } - return characters; - } - - const elements1 = getElements(originalValue); - const elements2 = getElements(newValue); - - return new LcsDiff({ getElements: () => elements1 }, { getElements: () => elements2 }).ComputeDiff(false).changes; -} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/ghostText.contribution.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.ts similarity index 62% rename from src/vs/editor/contrib/inlineCompletions/browser/ghostText.contribution.ts rename to src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.ts index 9dabcfaffb7..ff80048cc4d 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/ghostText.contribution.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.ts @@ -5,18 +5,20 @@ import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; -import { AcceptInlineCompletion, AcceptNextWordOfInlineCompletion, ToggleAlwaysShowInlineSuggestionToolbar, GhostTextController, HideInlineCompletion, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, TriggerInlineSuggestionAction, UndoAcceptPart } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextController'; -import { InlineCompletionsHoverParticipant } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextHoverParticipant'; +import { TriggerInlineSuggestionAction, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, AcceptNextWordOfInlineCompletion, AcceptInlineCompletion, HideInlineCompletion, ToggleAlwaysShowInlineSuggestionToolbar, AcceptNextLineOfInlineCompletion } from 'vs/editor/contrib/inlineCompletions/browser/commands'; +import { InlineCompletionsHoverParticipant } from 'vs/editor/contrib/inlineCompletions/browser/hoverParticipant'; +import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController'; import { registerAction2 } from 'vs/platform/actions/common/actions'; -registerEditorContribution(GhostTextController.ID, GhostTextController, EditorContributionInstantiation.Eventually); +registerEditorContribution(InlineCompletionsController.ID, InlineCompletionsController, EditorContributionInstantiation.Eventually); + registerEditorAction(TriggerInlineSuggestionAction); registerEditorAction(ShowNextInlineSuggestionAction); registerEditorAction(ShowPreviousInlineSuggestionAction); registerEditorAction(AcceptNextWordOfInlineCompletion); +registerEditorAction(AcceptNextLineOfInlineCompletion); registerEditorAction(AcceptInlineCompletion); registerEditorAction(HideInlineCompletion); -registerEditorAction(UndoAcceptPart); registerAction2(ToggleAlwaysShowInlineSuggestionToolbar); HoverParticipantRegistry.register(InlineCompletionsHoverParticipant); diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController.ts new file mode 100644 index 00000000000..910f4b678eb --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController.ts @@ -0,0 +1,226 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { alert } from 'vs/base/browser/ui/aria/aria'; +import { Event } from 'vs/base/common/event'; +import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; +import { autorun, constObservable, observableFromEvent, observableValue } from 'vs/base/common/observable'; +import { ITransaction, disposableObservableValue, transaction } from 'vs/base/common/observableImpl/base'; +import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { Position } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; +import { ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; +import { inlineSuggestCommitId } from 'vs/editor/contrib/inlineCompletions/browser/commandIds'; +import { GhostTextWidget } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextWidget'; +import { InlineCompletionContextKeys } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys'; +import { InlineCompletionsHintsWidget, InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget'; +import { InlineCompletionsModel, VersionIdChangeReason } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel'; +import { SuggestWidgetAdaptor } from 'vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; +import { ICommandService } from 'vs/platform/commands/common/commands'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; + +export class InlineCompletionsController extends Disposable { + static ID = 'editor.contrib.inlineCompletionsController'; + + public static get(editor: ICodeEditor): InlineCompletionsController | null { + return editor.getContribution(InlineCompletionsController.ID); + } + + public readonly model = disposableObservableValue('inlineCompletionModel', undefined); + private readonly textModelVersionId = observableValue('textModelVersionId', -1); + private readonly cursorPosition = observableValue('cursorPosition', new Position(1, 1)); + private readonly suggestWidgetAdaptor = this._register(new SuggestWidgetAdaptor( + this.editor, + () => this.model.get()?.selectedInlineCompletion.get()?.toSingleTextEdit(undefined), + (tx) => this.updateObservables(tx, VersionIdChangeReason.Other) + )); + private readonly _enabled = observableFromEvent(this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineSuggest).enabled); + + private ghostTextWidget = this._register(this.instantiationService.createInstance(GhostTextWidget, this.editor, { + ghostText: this.model.map((v, reader) => v?.ghostText.read(reader)), + minReservedLineCount: constObservable(0), + targetTextModel: this.model.map(v => v?.textModel), + })); + + private readonly _debounceValue = this.debounceService.for( + this.languageFeaturesService.inlineCompletionsProvider, + 'InlineCompletionsDebounce', + { min: 50, max: 50 } + ); + + constructor( + public readonly editor: ICodeEditor, + @IInstantiationService private readonly instantiationService: IInstantiationService, + @IContextKeyService private readonly contextKeyService: IContextKeyService, + @IConfigurationService private readonly configurationService: IConfigurationService, + @ICommandService private readonly commandService: ICommandService, + @ILanguageFeatureDebounceService private readonly debounceService: ILanguageFeatureDebounceService, + @ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService, + @IAudioCueService private readonly audioCueService: IAudioCueService, + ) { + super(); + + this._register(new InlineCompletionContextKeys(this.contextKeyService, this.model)); + + this._register(Event.runAndSubscribe(editor.onDidChangeModel, () => transaction(tx => { + /** @description onDidChangeModel */ + this.model.set(undefined, tx); + this.updateObservables(tx, VersionIdChangeReason.Other); + + const textModel = editor.getModel(); + if (textModel) { + const model = instantiationService.createInstance( + InlineCompletionsModel, + textModel, + this.suggestWidgetAdaptor.selectedItem, + this.cursorPosition, + this.textModelVersionId, + this._debounceValue, + observableFromEvent(editor.onDidChangeConfiguration, () => editor.getOption(EditorOption.suggest).preview), + observableFromEvent(editor.onDidChangeConfiguration, () => editor.getOption(EditorOption.suggest).previewMode), + observableFromEvent(editor.onDidChangeConfiguration, () => editor.getOption(EditorOption.inlineSuggest).mode), + this._enabled, + ); + this.model.set(model, tx); + } + }))); + + const getReason = (e: IModelContentChangedEvent): VersionIdChangeReason => { + if (e.isUndoing) { return VersionIdChangeReason.Undo; } + if (e.isRedoing) { return VersionIdChangeReason.Redo; } + if (this.model.get()?.isAcceptingPartially) { return VersionIdChangeReason.AcceptWord; } + return VersionIdChangeReason.Other; + }; + this._register(editor.onDidChangeModelContent((e) => transaction(tx => + /** @description onDidChangeModelContent */ + this.updateObservables(tx, getReason(e)) + ))); + + this._register(editor.onDidChangeCursorPosition(e => transaction(tx => { + /** @description onDidChangeCursorPosition */ + this.updateObservables(tx, VersionIdChangeReason.Other); + if (e.reason === CursorChangeReason.Explicit) { + this.model.get()?.stop(tx); + } + }))); + + this._register(editor.onDidType(() => transaction(tx => { + /** @description onDidType */ + this.updateObservables(tx, VersionIdChangeReason.Other); + if (this._enabled.get()) { + this.model.get()?.trigger(tx); + } + }))); + + this._register(this.commandService.onDidExecuteCommand((e) => { + // These commands don't trigger onDidType. + const commands = new Set([ + CoreEditingCommands.Tab.id, + CoreEditingCommands.DeleteLeft.id, + CoreEditingCommands.DeleteRight.id, + inlineSuggestCommitId, + 'acceptSelectedSuggestion', + ]); + if (commands.has(e.commandId) && editor.hasTextFocus() && this._enabled.get()) { + transaction(tx => { + /** @description onDidExecuteCommand */ + this.model.get()?.trigger(tx); + }); + } + })); + + this._register(this.editor.onDidBlurEditorWidget(() => { + // This is a hidden setting very useful for debugging + if (this.configurationService.getValue('editor.inlineSuggest.keepOnBlur') || + editor.getOption(EditorOption.inlineSuggest).keepOnBlur) { + return; + } + if (InlineSuggestionHintsContentWidget.dropDownVisible) { + return; + } + transaction(tx => { + /** @description onDidBlurEditorWidget */ + this.model.get()?.stop(tx); + }); + })); + + this._register(autorun('forceRenderingAbove', reader => { + const state = this.model.read(reader)?.state.read(reader); + if (state?.suggestItem) { + if (state.ghostText.lineCount >= 2) { + this.suggestWidgetAdaptor.forceRenderingAbove(); + } + } else { + this.suggestWidgetAdaptor.stopForceRenderingAbove(); + } + })); + this._register(toDisposable(() => { + this.suggestWidgetAdaptor.stopForceRenderingAbove(); + })); + + let lastInlineCompletionId: string | undefined = undefined; + this._register(autorun('play audio cue & read suggestion', reader => { + const model = this.model.read(reader); + const state = model?.state.read(reader); + if (!model || !state || !state.completion) { + lastInlineCompletionId = undefined; + return; + } + + if (state.completion.semanticId !== lastInlineCompletionId) { + lastInlineCompletionId = state.completion.semanticId; + if (model.isNavigatingCurrentInlineCompletion) { + return; + } + + this.audioCueService.playAudioCue(AudioCue.inlineSuggestion).then(() => { + if (this.editor.getOption(EditorOption.screenReaderAnnounceInlineSuggestion)) { + const lineText = model.textModel.getLineContent(state.ghostText.lineNumber); + alert(state.ghostText.renderForScreenReader(lineText)); + } + }); + } + })); + + this._register(new InlineCompletionsHintsWidget(this.editor, this.model, this.instantiationService)); + } + + /** + * Copies over the relevant state from the text model to observables. + * This solves all kind of eventing issues, as we make sure we always operate on the latest state, + * regardless of who calls into us. + */ + private updateObservables(tx: ITransaction, changeReason: VersionIdChangeReason): void { + const newModel = this.editor.getModel(); + this.textModelVersionId.set(newModel?.getVersionId() ?? -1, tx, changeReason); + this.cursorPosition.set(this.editor.getPosition() ?? new Position(1, 1), tx); + } + + public shouldShowHoverAt(range: Range) { + const ghostText = this.model.get()?.ghostText.get(); + if (ghostText) { + return ghostText.parts.some(p => range.containsPosition(new Position(ghostText.lineNumber, p.column))); + } + return false; + } + + public shouldShowHoverAtViewZone(viewZoneId: string): boolean { + return this.ghostTextWidget.ownsViewZone(viewZoneId); + } + + public hide() { + transaction(tx => { + this.model.get()?.stop(tx); + }); + } +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget.css b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.css similarity index 95% rename from src/vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget.css rename to src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.css index 108de44c413..642e6c51d7a 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget.css +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.css @@ -5,7 +5,7 @@ .monaco-editor .inlineSuggestionsHints.withBorder { z-index: 39; - color: var(--vscode-editor-hoverForeground); + color: var(--vscode-editorHoverWidget-foreground); background-color: var(--vscode-editorHoverWidget-background); border: 1px solid var(--vscode-editorHoverWidget-border); } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.ts similarity index 69% rename from src/vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget.ts rename to src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.ts index 9f3a640a28b..c1c4376977b 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.ts @@ -7,18 +7,21 @@ import { h } from 'vs/base/browser/dom'; import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { KeybindingLabel, unthemedKeybindingLabelOptions } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; import { Action, IAction, Separator } from 'vs/base/common/actions'; +import { equals } from 'vs/base/common/arrays'; import { RunOnceScheduler } from 'vs/base/common/async'; import { Codicon } from 'vs/base/common/codicons'; import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; +import { IObservable, autorun, derived, observableFromEvent } from 'vs/base/common/observable'; +import { autorunWithStore2 } from 'vs/base/common/observableImpl/autorun'; import { OS } from 'vs/base/common/platform'; import { ThemeIcon } from 'vs/base/common/themables'; -import 'vs/css!./inlineSuggestionHintsWidget'; +import 'vs/css!./inlineCompletionsHintsWidget'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; -import { Command } from 'vs/editor/common/languages'; +import { Command, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; import { PositionAffinity } from 'vs/editor/common/model'; -import { showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId } from 'vs/editor/contrib/inlineCompletions/browser/consts'; +import { showPreviousInlineSuggestionActionId, showNextInlineSuggestionActionId } from 'vs/editor/contrib/inlineCompletions/browser/commandIds'; import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel'; import { localize } from 'vs/nls'; import { createAndFillInActionBarActions, MenuEntryActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; @@ -32,53 +35,19 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -export class InlineSuggestionHintsWidget extends Disposable { - private readonly widget = this._register(this.instantiationService.createInstance(InlineSuggestionHintsContentWidget, this.editor, true)); +export class InlineCompletionsHintsWidget extends Disposable { + private readonly alwaysShowToolbar = observableFromEvent(this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineSuggest).showToolbar === 'always'); private sessionPosition: Position | undefined = undefined; - private isDisposed = false; - constructor( - private readonly editor: ICodeEditor, - private readonly model: InlineCompletionsModel, - @IInstantiationService private readonly instantiationService: IInstantiationService, - ) { - super(); + private readonly position = derived('position', reader => { + const ghostText = this.model.read(reader)?.ghostText.read(reader); - editor.addContentWidget(this.widget); - this._register(toDisposable(() => editor.removeContentWidget(this.widget))); - this._register(model.onDidChange(() => this.update())); - this._register(editor.onDidChangeConfiguration(() => this.update())); - this.update(); - } - - override dispose(): void { - this.isDisposed = true; - super.dispose(); - } - - private update(): void { - if (this.isDisposed) { - return; - } - - const options = this.editor.getOption(EditorOption.inlineSuggest); - if (options.showToolbar !== 'always' || !this.model.ghostText) { - this.widget.update(null, 0, undefined, []); + if (!this.alwaysShowToolbar.read(reader) || !ghostText || ghostText.parts.length === 0) { this.sessionPosition = undefined; - return; + return null; } - if (!this.model.completionSession.value) { - return; - } - - if (!this.model.completionSession.value.hasBeenTriggeredExplicitly) { - this.model.completionSession.value.ensureUpdateWithExplicitContext(); - } - - const ghostText = this.model.ghostText; - const firstColumn = ghostText.parts[0].column; if (this.sessionPosition && this.sessionPosition.lineNumber !== ghostText.lineNumber) { this.sessionPosition = undefined; @@ -86,13 +55,44 @@ export class InlineSuggestionHintsWidget extends Disposable { const position = new Position(ghostText.lineNumber, Math.min(firstColumn, this.sessionPosition?.column ?? Number.MAX_SAFE_INTEGER)); this.sessionPosition = position; + return position; + }); - this.widget.update( - this.sessionPosition, - this.model.completionSession.value.currentlySelectedIndex, - this.model.completionSession.value.hasBeenTriggeredExplicitly ? this.model.completionSession.value.getInlineCompletionsCountSync() : undefined, - this.model.completionSession.value.commands, - ); + constructor( + private readonly editor: ICodeEditor, + private readonly model: IObservable, + @IInstantiationService private readonly instantiationService: IInstantiationService, + ) { + super(); + + this._register(autorunWithStore2('setup content widget', (reader, store) => { + const model = this.model.read(reader); + if (!model || !this.alwaysShowToolbar.read(reader)) { + return; + } + + const contentWidget = store.add(this.instantiationService.createInstance( + InlineSuggestionHintsContentWidget, + this.editor, + true, + this.position, + model.selectedInlineCompletionIndex, + model.inlineCompletionsCount, + model.selectedInlineCompletion.map(v => v?.inlineCompletion.source.inlineCompletions.commands ?? []), + )); + editor.addContentWidget(contentWidget); + store.add(toDisposable(() => editor.removeContentWidget(contentWidget))); + + store.add(autorun('request explicit', reader => { + const position = this.position.read(reader); + if (!position) { + return; + } + if (model.lastTriggerKind.read(reader) !== InlineCompletionTriggerKind.Explicit) { + model.triggerExplicitly(); + } + })); + })); } } @@ -115,7 +115,6 @@ export class InlineSuggestionHintsContentWidget extends Disposable implements IC h('div@toolBar'), ]) ]); - private position: Position | null = null; private createCommandAction(commandId: string, label: string, iconClassName: string): Action { const action = new Action( @@ -154,9 +153,16 @@ export class InlineSuggestionHintsContentWidget extends Disposable implements IC this.previousAction.enabled = this.nextAction.enabled = false; }, 100)); + private lastCommands: Command[] = []; + constructor( private readonly editor: ICodeEditor, private readonly withBorder: boolean, + private readonly _position: IObservable, + private readonly _currentSuggestionIdx: IObservable, + private readonly _suggestionCount: IObservable, + private readonly _extraCommands: IObservable, + @ICommandService private readonly _commandService: ICommandService, @IInstantiationService instantiationService: IInstantiationService, @IKeybindingService private readonly keybindingService: IKeybindingService, @@ -183,51 +189,65 @@ export class InlineSuggestionHintsContentWidget extends Disposable implements IC this._register(this.toolBar.onDidChangeDropdownVisibility(e => { InlineSuggestionHintsContentWidget._dropDownVisible = e; })); - } - public update(position: Position | null, currentSuggestionIdx: number, suggestionCount: number | undefined, extraCommands: Command[]): void { - this.position = position; - - if (suggestionCount !== undefined && suggestionCount > 1) { - this.disableButtonsDebounced.cancel(); - this.previousAction.enabled = this.nextAction.enabled = true; - } else { - this.disableButtonsDebounced.schedule(); - } - - if (suggestionCount !== undefined) { - this.clearAvailableSuggestionCountLabelDebounced.cancel(); - this.availableSuggestionCountAction.label = `${currentSuggestionIdx + 1}/${suggestionCount}`; - } else { - this.clearAvailableSuggestionCountLabelDebounced.schedule(); - } - - this.editor.layoutContentWidget(this); - - const extraActions = extraCommands.map(c => ({ - class: undefined, - id: c.id, - enabled: true, - tooltip: c.tooltip || '', - label: c.title, - run: (event) => { - return this._commandService.executeCommand(c.id); - }, + this._register(autorun('update position', (reader) => { + this._position.read(reader); + this.editor.layoutContentWidget(this); })); - for (const [_, group] of this.inlineCompletionsActionsMenus.getActions()) { - for (const action of group) { - if (action instanceof MenuItemAction) { - extraActions.push(action); + this._register(autorun('counts', (reader) => { + const suggestionCount = this._suggestionCount.read(reader); + const currentSuggestionIdx = this._currentSuggestionIdx.read(reader); + + if (suggestionCount !== undefined) { + this.clearAvailableSuggestionCountLabelDebounced.cancel(); + this.availableSuggestionCountAction.label = `${currentSuggestionIdx + 1}/${suggestionCount}`; + } else { + this.clearAvailableSuggestionCountLabelDebounced.schedule(); + } + + if (suggestionCount !== undefined && suggestionCount > 1) { + this.disableButtonsDebounced.cancel(); + this.previousAction.enabled = this.nextAction.enabled = true; + } else { + this.disableButtonsDebounced.schedule(); + } + })); + + this._register(autorun('extra commands', (reader) => { + const extraCommands = this._extraCommands.read(reader); + if (equals(this.lastCommands, extraCommands)) { + // nothing to update + return; + } + + this.lastCommands = extraCommands; + + const extraActions = extraCommands.map(c => ({ + class: undefined, + id: c.id, + enabled: true, + tooltip: c.tooltip || '', + label: c.title, + run: (event) => { + return this._commandService.executeCommand(c.id); + }, + })); + + for (const [_, group] of this.inlineCompletionsActionsMenus.getActions()) { + for (const action of group) { + if (action instanceof MenuItemAction) { + extraActions.push(action); + } } } - } - if (extraActions.length > 0) { - extraActions.unshift(new Separator()); - } + if (extraActions.length > 0) { + extraActions.unshift(new Separator()); + } - this.toolBar.setAdditionalSecondaryActions(extraActions); + this.toolBar.setAdditionalSecondaryActions(extraActions); + })); } getId(): string { return this.id; } @@ -238,7 +258,7 @@ export class InlineSuggestionHintsContentWidget extends Disposable implements IC getPosition(): IContentWidgetPosition | null { return { - position: this.position, + position: this._position.get(), preference: [ContentWidgetPositionPreference.ABOVE, ContentWidgetPositionPreference.BELOW], positionAffinity: PositionAffinity.LeftOfInjectedText, }; @@ -298,6 +318,11 @@ export class CustomizedMenuWorkbenchToolBar extends WorkbenchToolBar { } setAdditionalSecondaryActions(actions: IAction[]): void { + if (equals(this.additionalActions, actions, (a, b) => a === b)) { + // don't update if the actions are the same + return; + } + this.additionalActions = actions; this.updateToolbar(); } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel.ts index 4e230dc8350..c66ec2a6d56 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel.ts @@ -3,624 +3,300 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { assertNever } from 'vs/base/common/assert'; -import { CancelablePromise, createCancelablePromise, RunOnceScheduler } from 'vs/base/common/async'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors'; -import { Emitter } from 'vs/base/common/event'; -import { matchesSubString } from 'vs/base/common/filters'; -import { Disposable, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { CoreEditingCommands } from 'vs/editor/browser/coreCommands'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { mapFind } from 'vs/base/common/arrays'; +import { BugIndicatingError, onUnexpectedExternalError } from 'vs/base/common/errors'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IObservable, ITransaction, autorun, derived, keepAlive, observableSignal, observableValue, transaction } from 'vs/base/common/observable'; +import { subtransaction } from 'vs/base/common/observableImpl/base'; +import { derivedHandleChanges } from 'vs/base/common/observableImpl/derived'; +import { isDefined } from 'vs/base/common/types'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditOperation } from 'vs/editor/common/core/editOperation'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; -import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; -import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { Command, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; +import { InlineCompletionContext, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; -import { ITextModel } from 'vs/editor/common/model'; -import { fixBracketsInLine } from 'vs/editor/common/model/bracketPairsTextModelPart/fixBrackets'; -import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { inlineSuggestCommitId } from 'vs/editor/contrib/inlineCompletions/browser/consts'; -import { BaseGhostTextWidgetModel, GhostText, GhostTextReplacement, GhostTextWidgetModel } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; -import { SharedInlineCompletionCache } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextModel'; -import { inlineCompletionToGhostText, NormalizedInlineCompletion } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionToGhostText'; -import { InlineSuggestionHintsContentWidget } from 'vs/editor/contrib/inlineCompletions/browser/inlineSuggestionHintsWidget'; -import { getReadonlyEmptyArray } from 'vs/editor/contrib/inlineCompletions/browser/utils'; +import { EndOfLinePreference, ITextModel } from 'vs/editor/common/model'; +import { IFeatureDebounceInformation } from 'vs/editor/common/services/languageFeatureDebounce'; +import { GhostText, GhostTextOrReplacement } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; +import { InlineCompletionWithUpdatedRange, InlineCompletionsSource } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsSource'; +import { SuggestItemInfo } from 'vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider'; +import { addPositions, lengthOfText } from 'vs/editor/contrib/inlineCompletions/browser/utils'; import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { SnippetParser, Text } from 'vs/editor/contrib/snippet/browser/snippetParser'; import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -export class InlineCompletionsModel extends Disposable implements GhostTextWidgetModel { - protected readonly onDidChangeEmitter = new Emitter(); - public readonly onDidChange = this.onDidChangeEmitter.event; +export enum VersionIdChangeReason { + Undo, + Redo, + AcceptWord, + Other, +} - public readonly completionSession = this._register( - new MutableDisposable() - ); +export class InlineCompletionsModel extends Disposable { + private readonly _source = this._register(this._instantiationService.createInstance(InlineCompletionsSource, this.textModel, this.textModelVersionId, this._debounceValue)); + private readonly _isActive = observableValue('isActive', false); + private readonly _forceUpdate = observableSignal('forceUpdate'); - private active: boolean = false; - private disposed = false; - private readonly debounceValue = this.debounceService.for( - this.languageFeaturesService.inlineCompletionsProvider, - 'InlineCompletionsDebounce', - { min: 50, max: 50 } - ); + // We use a semantic id to keep the same inline completion selected even if the provider reorders the completions. + private readonly _selectedInlineCompletionId = observableValue('selectedInlineCompletionId', undefined); + + private _isAcceptingPartially = false; + public get isAcceptingPartially() { return this._isAcceptingPartially; } + + private _isNavigatingCurrentInlineCompletion = false; + public get isNavigatingCurrentInlineCompletion() { return this._isNavigatingCurrentInlineCompletion; } constructor( - private readonly editor: IActiveCodeEditor, - private readonly cache: SharedInlineCompletionCache, - @ICommandService private readonly commandService: ICommandService, - @ILanguageConfigurationService private readonly languageConfigurationService: ILanguageConfigurationService, - @ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService, - @ILanguageFeatureDebounceService private readonly debounceService: ILanguageFeatureDebounceService, - @IConfigurationService configurationService: IConfigurationService, + public readonly textModel: ITextModel, + public readonly selectedSuggestItem: IObservable, + public readonly cursorPosition: IObservable, + public readonly textModelVersionId: IObservable, + private readonly _debounceValue: IFeatureDebounceInformation, + private readonly _suggestPreviewEnabled: IObservable, + private readonly _suggestPreviewMode: IObservable<'prefix' | 'subword' | 'subwordSmart'>, + private readonly _inlineSuggestMode: IObservable<'prefix' | 'subword' | 'subwordSmart'>, + private readonly _enabled: IObservable, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + @ICommandService private readonly _commandService: ICommandService, + @ILanguageConfigurationService private readonly _languageConfigurationService: ILanguageConfigurationService, ) { super(); - this._register( - commandService.onDidExecuteCommand((e) => { - // These commands don't trigger onDidType. - const commands = new Set([ - CoreEditingCommands.Tab.id, - CoreEditingCommands.DeleteLeft.id, - CoreEditingCommands.DeleteRight.id, - inlineSuggestCommitId, - 'acceptSelectedSuggestion', - ]); - if (commands.has(e.commandId) && editor.hasTextFocus()) { - this.handleUserInput(); + this._register(keepAlive(this._fetchInlineCompletions, true)); + + let lastItem: InlineCompletionWithUpdatedRange | undefined = undefined; + this._register(autorun('call handleItemDidShow', reader => { + const item = this.state.read(reader); + const completion = item?.completion; + if (completion?.semanticId !== lastItem?.semanticId) { + lastItem = completion; + if (completion) { + const i = completion.inlineCompletion; + const src = i.source; + src.provider.handleItemDidShow?.(src.inlineCompletions, i.sourceInlineCompletion, i.insertText); } - }) - ); - - this._register( - this.editor.onDidType((e) => { - this.handleUserInput(); - }) - ); - - this._register( - this.editor.onDidChangeCursorPosition((e) => { - if (e.reason === CursorChangeReason.Explicit || - this.session && !this.session.isValid) { - this.hide(); - } - }) - ); - - this._register( - toDisposable(() => { - this.disposed = true; - }) - ); - - this._register( - this.editor.onDidBlurEditorWidget(() => { - // This is a hidden setting very useful for debugging - if (configurationService.getValue('editor.inlineSuggest.hideOnBlur')) { - return; - } - if (InlineSuggestionHintsContentWidget.dropDownVisible) { - return; - } - this.hide(); - }) - ); - } - - private handleUserInput() { - if (this.session && !this.session.isValid) { - this.hide(); - } - setTimeout(() => { - if (this.disposed) { - return; - } - // Wait for the cursor update that happens in the same iteration loop iteration - this.startSessionIfTriggered(); - }, 0); - } - - private get session(): InlineCompletionsSession | undefined { - return this.completionSession.value; - } - - public get ghostText(): GhostText | GhostTextReplacement | undefined { - return this.session?.ghostText; - } - - public get minReservedLineCount(): number { - return this.session ? this.session.minReservedLineCount : 0; - } - - public get expanded(): boolean { - return this.session ? this.session.expanded : false; - } - - public setExpanded(expanded: boolean): void { - this.session?.setExpanded(expanded); - } - - public setActive(active: boolean) { - this.active = active; - if (active) { - this.session?.scheduleAutomaticUpdate(); - } - } - - private startSessionIfTriggered(): void { - const suggestOptions = this.editor.getOption(EditorOption.inlineSuggest); - if (!suggestOptions.enabled) { - return; - } - - if (this.session && this.session.isValid) { - return; - } - - this.trigger(InlineCompletionTriggerKind.Automatic); - } - - public trigger(triggerKind: InlineCompletionTriggerKind): void { - if (this.completionSession.value) { - if (triggerKind === InlineCompletionTriggerKind.Explicit) { - void this.completionSession.value.ensureUpdateWithExplicitContext(); - } - return; - } - this.completionSession.value = new InlineCompletionsSession( - this.editor, - this.editor.getPosition(), - () => this.active, - this.commandService, - this.cache, - triggerKind, - this.languageConfigurationService, - this.languageFeaturesService.inlineCompletionsProvider, - this.debounceValue - ); - this.completionSession.value.takeOwnership( - this.completionSession.value.onDidChange(() => { - this.onDidChangeEmitter.fire(); - }) - ); - } - - public hide(): void { - this.completionSession.clear(); - this.onDidChangeEmitter.fire(); - } - - public commitCurrentSuggestion(): void { - // Don't dispose the session, so that after committing, more suggestions are shown. - this.session?.commitCurrentCompletion(); - } - - public commitCurrentSuggestionPartially(): void { - this.session?.commitCurrentCompletionNextWord(); - } - - public showNext(): void { - this.session?.showNextInlineCompletion(); - } - - public showPrevious(): void { - this.session?.showPreviousInlineCompletion(); - } - - public async getInlineCompletionsCount(): Promise { - const result = await this.session?.getInlineCompletionsCount(); - return result ?? 0; - } -} - -export class InlineCompletionsSession extends BaseGhostTextWidgetModel { - public readonly minReservedLineCount = 0; - - private readonly updateOperation = this._register(new MutableDisposable()); - - private readonly updateSoon = this._register(new RunOnceScheduler(() => { - const triggerKind = this.initialTriggerKind; - // All subsequent triggers are automatic. - this.initialTriggerKind = InlineCompletionTriggerKind.Automatic; - return this.update(triggerKind); - }, 50)); - - constructor( - editor: IActiveCodeEditor, - private readonly triggerPosition: Position, - private readonly shouldUpdate: () => boolean, - private readonly commandService: ICommandService, - private readonly cache: SharedInlineCompletionCache, - private initialTriggerKind: InlineCompletionTriggerKind, - private readonly languageConfigurationService: ILanguageConfigurationService, - private readonly registry: LanguageFeatureRegistry, - private readonly debounce: IFeatureDebounceInformation, - ) { - super(editor); - - let lastCompletionItem: InlineCompletion | undefined = undefined; - this._register(this.onDidChange(() => { - const currentCompletion = this.currentCompletion; - if (currentCompletion && currentCompletion.sourceInlineCompletion !== lastCompletionItem) { - lastCompletionItem = currentCompletion.sourceInlineCompletion; - - const provider = currentCompletion.sourceProvider; - provider.handleItemDidShow?.(currentCompletion.sourceInlineCompletions, lastCompletionItem); } })); - - this._register(toDisposable(() => { - this.cache.clear(); - })); - - this._register(this.editor.onDidChangeCursorPosition((e) => { - if (e.reason === CursorChangeReason.Explicit) { - return; - } - // Ghost text depends on the cursor position - this.cache.value?.updateRanges(); - if (this.cache.value) { - this.updateFilteredInlineCompletions(); - this.onDidChangeEmitter.fire(); - } - })); - - this._register(this.editor.onDidChangeModelContent((e) => { - // Call this in case `onDidChangeModelContent` calls us first. - this.cache.value?.updateRanges(); - this.updateFilteredInlineCompletions(); - this.scheduleAutomaticUpdate(); - })); - - this._register(this.registry.onDidChange(() => { - this.updateSoon.schedule(this.debounce.get(this.editor.getModel())); - })); - - this.scheduleAutomaticUpdate(); } - private filteredCompletions: readonly CachedInlineCompletion[] = []; - - private updateFilteredInlineCompletions() { - if (!this.cache.value) { - this.filteredCompletions = []; - return; + private readonly _preserveCurrentCompletionReasons = new Set([ + VersionIdChangeReason.Redo, + VersionIdChangeReason.Undo, + VersionIdChangeReason.AcceptWord, + ]); + private readonly _fetchInlineCompletions = derivedHandleChanges('fetch inline completions', { + createEmptyChangeSummary: () => ({ + preserveCurrentCompletion: false, + inlineCompletionTriggerKind: InlineCompletionTriggerKind.Automatic + }), + handleChange: (ctx, changeSummary) => { + if (ctx.didChange(this.textModelVersionId) && this._preserveCurrentCompletionReasons.has(ctx.change)) { + changeSummary.preserveCurrentCompletion = true; + } else if (ctx.didChange(this._forceUpdate)) { + changeSummary.inlineCompletionTriggerKind = ctx.change; + } + return true; + }, + }, (reader, changeSummary) => { + this._forceUpdate.read(reader); + const shouldUpdate = (this._enabled.read(reader) && this.selectedSuggestItem.read(reader)) || this._isActive.read(reader); + if (!shouldUpdate) { + this._source.cancelUpdate(); + return undefined; } - const model = this.editor.getModel(); - const cursorPosition = model.validatePosition(this.editor.getPosition()); - this.filteredCompletions = this.cache.value.completions.filter(c => { - const originalValue = model.getValueInRange(c.synchronizedRange).toLowerCase(); - const filterText = c.inlineCompletion.filterText.toLowerCase(); + this.textModelVersionId.read(reader); // Refetch on text change - const indent = model.getLineIndentColumn(c.synchronizedRange.startLineNumber); + const itemToPreserveCandidate = this.selectedInlineCompletion.get(); + const itemToPreserve = changeSummary.preserveCurrentCompletion || itemToPreserveCandidate?.forwardStable + ? itemToPreserveCandidate : undefined; - - const cursorPosIndex = Math.max(0, cursorPosition.column - c.synchronizedRange.startColumn); - - let filterTextBefore = filterText.substring(0, cursorPosIndex); - let filterTextAfter = filterText.substring(cursorPosIndex); - - let originalValueBefore = originalValue.substring(0, cursorPosIndex); - let originalValueAfter = originalValue.substring(cursorPosIndex); - - if (c.synchronizedRange.startColumn <= indent) { - // Remove indentation - originalValueBefore = originalValueBefore.trimStart(); - if (originalValueBefore.length === 0) { - originalValueAfter = originalValueAfter.trimStart(); + const suggestWidgetInlineCompletions = this._source.suggestWidgetInlineCompletions.get(); + const suggestItem = this.selectedSuggestItem.read(reader); + if (suggestWidgetInlineCompletions && !suggestItem) { + const inlineCompletions = this._source.inlineCompletions.get(); + transaction(tx => { + /** @description Seed inline completions with (newer) suggest widget inline completions */ + if (inlineCompletions && suggestWidgetInlineCompletions.request.versionId > inlineCompletions.request.versionId) { + this._source.inlineCompletions.set(suggestWidgetInlineCompletions.clone(), tx); } - filterTextBefore = filterTextBefore.trimStart(); - if (filterTextBefore.length === 0) { - filterTextAfter = filterTextAfter.trimStart(); - } - } + this._source.clearSuggestWidgetInlineCompletions(tx); + }); + } - return filterTextBefore.startsWith(originalValueBefore) - && matchesSubString(originalValueAfter, filterTextAfter); + const cursorPosition = this.cursorPosition.read(reader); + const context: InlineCompletionContext = { + triggerKind: changeSummary.inlineCompletionTriggerKind, + selectedSuggestionInfo: suggestItem?.toSelectedSuggestionInfo(), + }; + return this._source.fetch(cursorPosition, context, itemToPreserve); + }); + + public async trigger(tx?: ITransaction): Promise { + this._isActive.set(true, tx); + await this._fetchInlineCompletions.get(); + } + + public async triggerExplicitly(tx?: ITransaction): Promise { + subtransaction(tx, tx => { + this._isActive.set(true, tx); + this._forceUpdate.trigger(tx, InlineCompletionTriggerKind.Explicit); + }); + await this._fetchInlineCompletions.get(); + } + + public stop(tx?: ITransaction): void { + subtransaction(tx, tx => { + this._isActive.set(false, tx); + this._source.clear(tx); }); } - //#region Selection + private readonly _filteredInlineCompletionItems = derived('filteredInlineCompletionItems', (reader) => { + const c = this._source.inlineCompletions.read(reader); + if (!c) { return []; } + const cursorPosition = this.cursorPosition.read(reader); + const filteredCompletions = c.inlineCompletions.filter(c => c.isVisible(this.textModel, cursorPosition, reader)); + return filteredCompletions; + }); - // We use a semantic id to track the selection even if the cache changes. - private currentlySelectedCompletionId: string | undefined = undefined; - - public get currentlySelectedIndex(): number { - return this.fixAndGetIndexOfCurrentSelection(); - } - - private fixAndGetIndexOfCurrentSelection(): number { - if (!this.currentlySelectedCompletionId || !this.cache.value) { - return 0; - } - if (this.cache.value.completions.length === 0) { - // don't reset the selection in this case - return 0; - } - - const idx = this.filteredCompletions.findIndex(v => v.semanticId === this.currentlySelectedCompletionId); + public readonly selectedInlineCompletionIndex = derived('selectedCachedCompletionIndex', (reader) => { + const selectedInlineCompletionId = this._selectedInlineCompletionId.read(reader); + const filteredCompletions = this._filteredInlineCompletionItems.read(reader); + const idx = this._selectedInlineCompletionId === undefined ? -1 + : filteredCompletions.findIndex(v => v.semanticId === selectedInlineCompletionId); if (idx === -1) { // Reset the selection so that the selection does not jump back when it appears again - this.currentlySelectedCompletionId = undefined; + this._selectedInlineCompletionId.set(undefined, undefined); return 0; } return idx; - } + }); - private get currentCachedCompletion(): CachedInlineCompletion | undefined { - if (!this.cache.value) { - return undefined; - } - return this.filteredCompletions[this.fixAndGetIndexOfCurrentSelection()]; - } + public readonly selectedInlineCompletion = derived('selectedCachedCompletion', (reader) => { + const filteredCompletions = this._filteredInlineCompletionItems.read(reader); + const idx = this.selectedInlineCompletionIndex.read(reader); + return filteredCompletions[idx]; + }); - public async showNextInlineCompletion(): Promise { - await this.ensureUpdateWithExplicitContext(); + public readonly lastTriggerKind: IObservable = this._source.inlineCompletions.map( + v => /** @description lastTriggerKind */ v?.request.context.triggerKind + ); - const completions = this.filteredCompletions || []; - if (completions.length > 0) { - const newIdx = (this.fixAndGetIndexOfCurrentSelection() + 1) % completions.length; - this.currentlySelectedCompletionId = completions[newIdx].semanticId; + public readonly inlineCompletionsCount = derived('selectedInlineCompletionsCount', reader => { + if (this.lastTriggerKind.read(reader) === InlineCompletionTriggerKind.Explicit) { + return this._filteredInlineCompletionItems.read(reader).length; } else { - this.currentlySelectedCompletionId = undefined; - } - this.onDidChangeEmitter.fire(); - } - - public async showPreviousInlineCompletion(): Promise { - await this.ensureUpdateWithExplicitContext(); - - const completions = this.filteredCompletions || []; - if (completions.length > 0) { - const newIdx = (this.fixAndGetIndexOfCurrentSelection() + completions.length - 1) % completions.length; - this.currentlySelectedCompletionId = completions[newIdx].semanticId; - } else { - this.currentlySelectedCompletionId = undefined; - } - this.onDidChangeEmitter.fire(); - } - - public get hasBeenTriggeredExplicitly(): boolean { - return this.cache.value?.triggerKind === InlineCompletionTriggerKind.Explicit; - } - - public async ensureUpdateWithExplicitContext(): Promise { - if (this.updateOperation.value) { - // Restart or wait for current update operation - if (this.updateOperation.value.triggerKind === InlineCompletionTriggerKind.Explicit) { - await this.updateOperation.value.promise; - } else { - await this.update(InlineCompletionTriggerKind.Explicit); - } - } else if (this.cache.value?.triggerKind !== InlineCompletionTriggerKind.Explicit) { - // Refresh cache - await this.update(InlineCompletionTriggerKind.Explicit); - } - } - - public async getInlineCompletionsCount(): Promise { - await this.ensureUpdateWithExplicitContext(); - return this.getInlineCompletionsCountSync(); - } - - public getInlineCompletionsCountSync(): number { - return this.filteredCompletions.length || 0; - } - - //#endregion - - public get ghostText(): GhostText | GhostTextReplacement | undefined { - const currentCompletion = this.currentCompletion; - if (!currentCompletion) { - return undefined; - } - const cursorPosition = this.editor.getPosition(); - if (currentCompletion.range.getEndPosition().isBefore(cursorPosition)) { return undefined; } + }); - const mode = this.editor.getOptions().get(EditorOption.inlineSuggest).mode; + public readonly state = derived<{ + suggestItem: SuggestItemInfo | undefined; + completion: InlineCompletionWithUpdatedRange | undefined; + ghostText: GhostTextOrReplacement; + } | undefined>('ghostTextAndCompletion', (reader) => { + const model = this.textModel; - const ghostText = inlineCompletionToGhostText(currentCompletion, this.editor.getModel(), mode, cursorPosition); - if (ghostText) { - if (ghostText.isEmpty()) { + const suggestItem = this.selectedSuggestItem.read(reader); + if (suggestItem) { + const suggestWidgetInlineCompletions = this._source.suggestWidgetInlineCompletions.read(reader); + const candidateInlineCompletions = suggestWidgetInlineCompletions + ? suggestWidgetInlineCompletions.inlineCompletions + : [this.selectedInlineCompletion.read(reader)].filter(isDefined); + + const suggestCompletion = suggestItem.toSingleTextEdit().removeCommonPrefix(model); + + const augmentedCompletion = mapFind(candidateInlineCompletions, completion => { + let r = completion.toSingleTextEdit(reader); + r = r.removeCommonPrefix(model, Range.fromPositions(r.range.getStartPosition(), suggestItem.range.getEndPosition())); + return r.augments(suggestCompletion) ? { edit: r, completion } : undefined; + }); + + const isSuggestionPreviewEnabled = this._suggestPreviewEnabled.read(reader); + if (!isSuggestionPreviewEnabled && !augmentedCompletion) { return undefined; } - return ghostText; - } - return new GhostTextReplacement( - currentCompletion.range.startLineNumber, - currentCompletion.range.startColumn, - currentCompletion.range.endColumn - currentCompletion.range.startColumn, - currentCompletion.insertText.split('\n'), - 0 - ); - } - get currentCompletion(): TrackedInlineCompletion | undefined { - const completion = this.currentCachedCompletion; - if (!completion) { - return undefined; - } - return completion.toLiveInlineCompletion(); - } + const edit = augmentedCompletion?.edit ?? suggestCompletion; + const editPreviewLength = augmentedCompletion ? augmentedCompletion.edit.text.length - suggestCompletion.text.length : 0; - get isValid(): boolean { - return this.editor.getPosition().lineNumber === this.triggerPosition.lineNumber; - } + const mode = this._suggestPreviewMode.read(reader); + const cursor = this.cursorPosition.read(reader); + const newGhostText = edit.computeGhostText(model, mode, cursor, editPreviewLength); - public scheduleAutomaticUpdate(): void { - // Since updateSoon debounces, starvation can happen. - // To prevent stale cache, we clear the current update operation. - this.updateOperation.clear(); - this.updateSoon.schedule(this.debounce.get(this.editor.getModel())); - } - - private async update(triggerKind: InlineCompletionTriggerKind): Promise { - if (!this.shouldUpdate()) { - return; - } - - const position = this.editor.getPosition(); - - const startTime = new Date(); - - const promise = createCancelablePromise(async token => { - let result; - try { - result = await provideInlineCompletions(this.registry, position, - this.editor.getModel(), - { triggerKind, selectedSuggestionInfo: undefined }, - token, - this.languageConfigurationService - ); - - const endTime = new Date(); - this.debounce.update(this.editor.getModel(), endTime.getTime() - startTime.getTime()); - - } catch (e) { - onUnexpectedError(e); - return; - } - - if (token.isCancellationRequested) { - return; - } - - this.cache.setValue( - this.editor, - result, - triggerKind - ); - this.updateFilteredInlineCompletions(); - this.onDidChangeEmitter.fire(); - }); - const operation = new UpdateOperation(promise, triggerKind); - this.updateOperation.value = operation; - await promise; - if (this.updateOperation.value === operation) { - this.updateOperation.clear(); - } - } - - public takeOwnership(disposable: IDisposable): void { - this._register(disposable); - } - - public commitCurrentCompletionNextWord(): void { - const ghostText = this.ghostText; - if (!ghostText) { - return; - } - const completion = this.currentCompletion; - if (!completion) { - return; - } - - if (completion.snippetInfo || completion.filterText !== completion.insertText) { - // not in WYSIWYG mode, partial commit might change completion, thus it is not supported - this.commit(completion); - return; - } - - if (ghostText.parts.length === 0) { - return; - } - const firstPart = ghostText.parts[0]; - const position = new Position(ghostText.lineNumber, firstPart.column); - - const line = firstPart.lines[0]; - const langId = this.editor.getModel()!.getLanguageIdAtPosition(ghostText.lineNumber, 1); - const config = this.languageConfigurationService.getLanguageConfiguration(langId); - const wordRegExp = new RegExp(config.wordDefinition.source, config.wordDefinition.flags.replace('g', '')); - - const m1 = line.match(wordRegExp); - let acceptUntilIndexExclusive = 0; - if (m1 && m1.index !== undefined) { - if (m1.index === 0) { - acceptUntilIndexExclusive = m1[0].length; - } else { - acceptUntilIndexExclusive = m1.index; - } + // Show an invisible ghost text to reserve space + const ghostText = newGhostText ?? new GhostText(edit.range.endLineNumber, []); + return { ghostText, completion: augmentedCompletion?.completion, suggestItem }; } else { - acceptUntilIndexExclusive = line.length; - } + if (!this._isActive.read(reader)) { return undefined; } + const item = this.selectedInlineCompletion.read(reader); + if (!item) { return undefined; } - const wsRegExp = /\s/g; - let m2 = wsRegExp.exec(line); - if (m2 && m2.index === 0) { - m2 = wsRegExp.exec(line); + const replacement = item.toSingleTextEdit(reader); + const mode = this._inlineSuggestMode.read(reader); + const cursor = this.cursorPosition.read(reader); + const ghostText = replacement.computeGhostText(model, mode, cursor); + return ghostText ? { ghostText, completion: item, suggestItem: undefined } : undefined; } - if (m2 && m2.index !== undefined) { - if (m2.index < acceptUntilIndexExclusive) { - acceptUntilIndexExclusive = m2.index; + }); + + public readonly ghostText = derived('ghostText', (reader) => { + const v = this.state.read(reader); + if (!v) { return undefined; } + return v.ghostText; + }); + + private async _deltaSelectedInlineCompletionIndex(delta: 1 | -1): Promise { + await this.triggerExplicitly(); + + this._isNavigatingCurrentInlineCompletion = true; + try { + const completions = this._filteredInlineCompletionItems.get() || []; + if (completions.length > 0) { + const newIdx = (this.selectedInlineCompletionIndex.get() + delta + completions.length) % completions.length; + this._selectedInlineCompletionId.set(completions[newIdx].semanticId, undefined); + } else { + this._selectedInlineCompletionId.set(undefined, undefined); } - } - - const partialText = line.substring(0, acceptUntilIndexExclusive); - - this.editor.pushUndoStop(); - this.editor.executeEdits( - 'inlineSuggestion.accept', - [ - EditOperation.replace(Range.fromPositions(position), partialText), - ] - ); - this.editor.setPosition(position.delta(0, partialText.length)); - - if (completion.sourceProvider.handlePartialAccept) { - const acceptedRange = Range.fromPositions(completion.range.getStartPosition(), position.delta(0, acceptUntilIndexExclusive)); - - // This assumes that the inline completion and the model use the same EOL style. - // This is not a problem at the moment, because partial acceptance only works for the first line of an - // inline completion. - const text = this.editor.getModel()!.getValueInRange(acceptedRange); - completion.sourceProvider.handlePartialAccept( - completion.sourceInlineCompletions, - completion.sourceInlineCompletion, - text.length, - ); + } finally { + this._isNavigatingCurrentInlineCompletion = false; } } - public commitCurrentCompletion(): void { - const ghostText = this.ghostText; - if (!ghostText) { - // No ghost text was shown for this completion. - // Thus, we don't want to commit anything. + public async next(): Promise { + await this._deltaSelectedInlineCompletionIndex(1); + } + + public async previous(): Promise { + await this._deltaSelectedInlineCompletionIndex(-1); + } + + public async accept(editor: ICodeEditor): Promise { + if (editor.getModel() !== this.textModel) { + throw new BugIndicatingError(); + } + + const ghostText = this.ghostText.get(); + const completion = this.selectedInlineCompletion.get()?.toInlineCompletion(undefined); + if (!ghostText || !completion) { return; } - const completion = this.currentCompletion; - if (completion) { - this.commit(completion); - } - } - public commit(completion: TrackedInlineCompletion): void { - // Mark the cache as stale, but don't dispose it yet, - // otherwise command args might get disposed. - const cache = this.cache.clearAndLeak(); - - this.editor.pushUndoStop(); + editor.pushUndoStop(); if (completion.snippetInfo) { - this.editor.executeEdits( + editor.executeEdits( 'inlineSuggestion.accept', [ EditOperation.replaceMove(completion.range, ''), ...completion.additionalTextEdits ] ); - this.editor.setPosition(completion.snippetInfo.range.getStartPosition()); - SnippetController2.get(this.editor)?.insert(completion.snippetInfo.snippet, { undoStopBefore: false }); + editor.setPosition(completion.snippetInfo.range.getStartPosition()); + SnippetController2.get(editor)?.insert(completion.snippetInfo.snippet, { undoStopBefore: false }); } else { - this.editor.executeEdits( + editor.executeEdits( 'inlineSuggestion.accept', [ EditOperation.replaceMove(completion.range, completion.insertText), @@ -630,314 +306,118 @@ export class InlineCompletionsSession extends BaseGhostTextWidgetModel { } if (completion.command) { - this.commandService - .executeCommand(completion.command.id, ...(completion.command.arguments || [])) - .finally(() => { - cache?.dispose(); - }) - .then(undefined, onUnexpectedExternalError); - } else { - cache?.dispose(); + // Make sure the completion list will not be disposed. + completion.source.addRef(); } - this.onDidChangeEmitter.fire(); - } - - public get commands(): Command[] { - const lists = new Set(this.cache.value?.completions.map(c => c.inlineCompletion.sourceInlineCompletions) || []); - return [...lists].flatMap(l => l.commands || []); - } -} - -export class UpdateOperation implements IDisposable { - constructor(public readonly promise: CancelablePromise, public readonly triggerKind: InlineCompletionTriggerKind) { - } - - dispose() { - this.promise.cancel(); - } -} - -/** - * The cache keeps itself in sync with the editor. - * It also owns the completions result and disposes it when the cache is diposed. -*/ -export class SynchronizedInlineCompletionsCache extends Disposable { - public readonly completions: readonly CachedInlineCompletion[]; - private isDisposing = false; - - constructor( - completionsSource: TrackedInlineCompletions, - private readonly editor: IActiveCodeEditor, - private readonly onChange: () => void, - public readonly triggerKind: InlineCompletionTriggerKind, - ) { - super(); - - const decorationIds = editor.changeDecorations((changeAccessor) => { - return changeAccessor.deltaDecorations( - [], - completionsSource.items.map(i => ({ - range: i.range, - options: { - description: 'inline-completion-tracking-range' - }, - })) - ); + // Reset before invoking the command, since the command might cause a follow up trigger. + transaction(tx => { + this._source.clear(tx); + // Potentially, isActive will get set back to true by the typing or accept inline suggest event + // if automatic inline suggestions are enabled. + this._isActive.set(false, tx); }); - this._register(toDisposable(() => { - this.isDisposing = true; - editor.removeDecorations(decorationIds); - })); - - this.completions = completionsSource.items.map((c, idx) => new CachedInlineCompletion(c, decorationIds[idx])); - - this._register(editor.onDidChangeModelContent(() => { - this.updateRanges(); - })); - - this._register(completionsSource); + if (completion.command) { + await this._commandService + .executeCommand(completion.command.id, ...(completion.command.arguments || [])) + .then(undefined, onUnexpectedExternalError); + completion.source.removeRef(); + } } - public updateRanges(): void { - if (this.isDisposing) { + public async acceptNextWord(editor: ICodeEditor): Promise { + await this._acceptNext(editor, (pos, text) => { + const langId = this.textModel.getLanguageIdAtPosition(pos.lineNumber, pos.column); + const config = this._languageConfigurationService.getLanguageConfiguration(langId); + const wordRegExp = new RegExp(config.wordDefinition.source, config.wordDefinition.flags.replace('g', '')); + + const m1 = text.match(wordRegExp); + let acceptUntilIndexExclusive = 0; + if (m1 && m1.index !== undefined) { + if (m1.index === 0) { + acceptUntilIndexExclusive = m1[0].length; + } else { + acceptUntilIndexExclusive = m1.index; + } + } else { + acceptUntilIndexExclusive = text.length; + } + + const wsRegExp = /\s+/g; + const m2 = wsRegExp.exec(text); + if (m2 && m2.index !== undefined) { + if (m2.index + m2[0].length < acceptUntilIndexExclusive) { + acceptUntilIndexExclusive = m2.index + m2[0].length; + } + } + return acceptUntilIndexExclusive; + }); + } + + public async acceptNextLine(editor: ICodeEditor): Promise { + await this._acceptNext(editor, (pos, text) => { + const m = text.match(/\n/); + if (m && m.index !== undefined) { + return m.index + 1; + } + return text.length; + }); + } + + private async _acceptNext(editor: ICodeEditor, getAcceptUntilIndex: (position: Position, text: string) => number): Promise { + if (editor.getModel() !== this.textModel) { + throw new BugIndicatingError(); + } + + const ghostText = this.ghostText.get(); + const completion = this.selectedInlineCompletion.get()?.toInlineCompletion(undefined); + if (!ghostText || !completion) { return; } - let hasChanged = false; - const model = this.editor.getModel(); - for (const c of this.completions) { - const newRange = model.getDecorationRange(c.decorationId); - if (!newRange) { - onUnexpectedError(new Error('Decoration has no range')); - continue; - } - if (!c.synchronizedRange.equalsRange(newRange)) { - hasChanged = true; - c.synchronizedRange = newRange; - } + if (completion.snippetInfo || completion.filterText !== completion.insertText) { + // not in WYSIWYG mode, partial commit might change completion, thus it is not supported + await this.accept(editor); + return; } - if (hasChanged) { - this.onChange(); + + if (ghostText.parts.length === 0) { + return; + } + const firstPart = ghostText.parts[0]; + const position = new Position(ghostText.lineNumber, firstPart.column); + const line = firstPart.lines.join('\n'); + const acceptUntilIndexExclusive = getAcceptUntilIndex(position, line); + + if (acceptUntilIndexExclusive === line.length && ghostText.parts.length === 1) { + this.accept(editor); + return; + } + + const partialText = line.substring(0, acceptUntilIndexExclusive); + + this._isAcceptingPartially = true; + try { + editor.pushUndoStop(); + editor.executeEdits('inlineSuggestion.accept', [ + EditOperation.replace(Range.fromPositions(position), partialText), + ]); + const length = lengthOfText(partialText); + editor.setPosition(addPositions(position, length)); + } finally { + this._isAcceptingPartially = false; + } + + if (completion.source.provider.handlePartialAccept) { + const acceptedRange = Range.fromPositions(completion.range.getStartPosition(), addPositions(position, lengthOfText(partialText))); + // This assumes that the inline completion and the model use the same EOL style. + const text = editor.getModel()!.getValueInRange(acceptedRange, EndOfLinePreference.LF); + completion.source.provider.handlePartialAccept( + completion.source.inlineCompletions, + completion.sourceInlineCompletion, + text.length, + ); } } } - -class CachedInlineCompletion { - public readonly semanticId: string = JSON.stringify({ - text: this.inlineCompletion.insertText, - abbreviation: this.inlineCompletion.filterText, - startLine: this.inlineCompletion.range.startLineNumber, - startColumn: this.inlineCompletion.range.startColumn, - command: this.inlineCompletion.command - }); - - /** - * The range, synchronized with text model changes. - */ - public synchronizedRange: Range; - - constructor( - public readonly inlineCompletion: TrackedInlineCompletion, - public readonly decorationId: string, - ) { - this.synchronizedRange = inlineCompletion.range; - } - - public toLiveInlineCompletion(): TrackedInlineCompletion | undefined { - return { - insertText: this.inlineCompletion.insertText, - range: this.synchronizedRange, - command: this.inlineCompletion.command, - sourceProvider: this.inlineCompletion.sourceProvider, - sourceInlineCompletions: this.inlineCompletion.sourceInlineCompletions, - sourceInlineCompletion: this.inlineCompletion.sourceInlineCompletion, - snippetInfo: this.inlineCompletion.snippetInfo, - filterText: this.inlineCompletion.filterText, - additionalTextEdits: this.inlineCompletion.additionalTextEdits, - }; - } -} - -export async function provideInlineCompletions( - registry: LanguageFeatureRegistry, - position: Position, - model: ITextModel, - context: InlineCompletionContext, - token: CancellationToken = CancellationToken.None, - languageConfigurationService?: ILanguageConfigurationService -): Promise { - const defaultReplaceRange = getDefaultRange(position, model); - - const providers = registry.all(model); - const results = await Promise.all( - providers.map( - async provider => { - const completions = await Promise.resolve(provider.provideInlineCompletions(model, position, context, token)).catch(onUnexpectedExternalError); - return ({ - completions, - provider, - dispose: () => { - if (completions) { - provider.freeInlineCompletions(completions); - } - } - }); - } - ) - ); - - const itemsByHash = new Map(); - for (const result of results) { - const completions = result.completions; - if (!completions) { - continue; - } - - for (const item of completions.items) { - let range = item.range ? Range.lift(item.range) : defaultReplaceRange; - - if (range.startLineNumber !== range.endLineNumber) { - // Ignore invalid ranges. - continue; - } - - let insertText: string; - let snippetInfo: { - snippet: string; - /* Could be different than the main range */ - range: Range; - } - | undefined; - - if (typeof item.insertText === 'string') { - insertText = item.insertText; - - if (languageConfigurationService && item.completeBracketPairs) { - insertText = closeBrackets( - insertText, - range.getStartPosition(), - model, - languageConfigurationService - ); - - // Modify range depending on if brackets are added or removed - const diff = insertText.length - item.insertText.length; - if (diff !== 0) { - range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff); - } - } - - snippetInfo = undefined; - } else if ('snippet' in item.insertText) { - const preBracketCompletionLength = item.insertText.snippet.length; - - if (languageConfigurationService && item.completeBracketPairs) { - item.insertText.snippet = closeBrackets( - item.insertText.snippet, - range.getStartPosition(), - model, - languageConfigurationService - ); - - // Modify range depending on if brackets are added or removed - const diff = item.insertText.snippet.length - preBracketCompletionLength; - if (diff !== 0) { - range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff); - } - } - - const snippet = new SnippetParser().parse(item.insertText.snippet); - - if (snippet.children.length === 1 && snippet.children[0] instanceof Text) { - insertText = snippet.children[0].value; - snippetInfo = undefined; - } else { - insertText = snippet.toString(); - snippetInfo = { - snippet: item.insertText.snippet, - range: range - }; - } - } else { - assertNever(item.insertText); - } - - const trackedItem: TrackedInlineCompletion = ({ - insertText, - snippetInfo, - range, - command: item.command, - sourceProvider: result.provider, - sourceInlineCompletions: completions, - sourceInlineCompletion: item, - filterText: item.filterText || insertText, - additionalTextEdits: item.additionalTextEdits || getReadonlyEmptyArray() - }); - - itemsByHash.set(JSON.stringify({ insertText, range: item.range }), trackedItem); - } - } - - return { - items: [...itemsByHash.values()], - dispose: () => { - for (const result of results) { - result.dispose(); - } - }, - }; -} - -/** - * Contains no duplicated items and can be disposed. -*/ -export interface TrackedInlineCompletions { - readonly items: readonly TrackedInlineCompletion[]; - dispose(): void; -} - -/** - * A normalized inline completion that tracks which inline completion it has been constructed from. -*/ -export interface TrackedInlineCompletion extends NormalizedInlineCompletion { - sourceProvider: InlineCompletionsProvider; - - /** - * A reference to the original inline completion this inline completion has been constructed from. - * Used for event data to ensure referential equality. - */ - sourceInlineCompletion: InlineCompletion; - - /** - * A reference to the original inline completion list this inline completion has been constructed from. - * Used for event data to ensure referential equality. - */ - sourceInlineCompletions: InlineCompletions; -} - -function getDefaultRange(position: Position, model: ITextModel): Range { - const word = model.getWordAtPosition(position); - const maxColumn = model.getLineMaxColumn(position.lineNumber); - // By default, always replace up until the end of the current line. - // This default might be subject to change! - return word - ? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn) - : Range.fromPositions(position, position.with(undefined, maxColumn)); -} - -function closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string { - const lineStart = model.getLineContent(position.lineNumber).substring(0, position.column - 1); - const newLine = lineStart + text; - - const newTokens = model.tokenization.tokenizeLineWithEdit(position, newLine.length - (position.column - 1), text); - const slicedTokens = newTokens?.sliceAndInflate(position.column - 1, newLine.length, 0); - if (!slicedTokens) { - return text; - } - - const newText = fixBracketsInLine(slicedTokens, languageConfigurationService); - - return newText; -} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsSource.ts b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsSource.ts new file mode 100644 index 00000000000..c844e63e8a1 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsSource.ts @@ -0,0 +1,359 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; +import { matchesSubString } from 'vs/base/common/filters'; +import { Disposable, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { ITransaction, derived } from 'vs/base/common/observable'; +import { IObservable, IReader, disposableObservableValue, transaction } from 'vs/base/common/observableImpl/base'; +import { Position } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { InlineCompletionContext, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { EndOfLinePreference, ITextModel } from 'vs/editor/common/model'; +import { IFeatureDebounceInformation } from 'vs/editor/common/services/languageFeatureDebounce'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { SingleTextEdit } from 'vs/editor/contrib/inlineCompletions/browser/singleTextEdit'; +import { InlineCompletionItem, InlineCompletionProviderResult, provideInlineCompletions } from 'vs/editor/contrib/inlineCompletions/browser/provideInlineCompletions'; + +export class InlineCompletionsSource extends Disposable { + private readonly _updateOperation = this._register(new MutableDisposable()); + public readonly inlineCompletions = disposableObservableValue('inlineCompletions', undefined); + public readonly suggestWidgetInlineCompletions = disposableObservableValue('suggestWidgetInlineCompletions', undefined); + + constructor( + private readonly textModel: ITextModel, + private readonly versionId: IObservable, + private readonly _debounceValue: IFeatureDebounceInformation, + @ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService, + @ILanguageConfigurationService private readonly languageConfigurationService: ILanguageConfigurationService, + ) { + super(); + + this._register(this.textModel.onDidChangeContent(() => { + this._updateOperation.clear(); + })); + } + + public fetch(position: Position, context: InlineCompletionContext, activeInlineCompletion: InlineCompletionWithUpdatedRange | undefined): Promise { + const request = new UpdateRequest(position, context, this.textModel.getVersionId()); + + const target = context.selectedSuggestionInfo ? this.suggestWidgetInlineCompletions : this.inlineCompletions; + + if (this._updateOperation.value?.request.satisfies(request)) { + return this._updateOperation.value.promise; + } else if (target.get()?.request.satisfies(request)) { + return Promise.resolve(true); + } + + const updateOngoing = !!this._updateOperation.value; + this._updateOperation.clear(); + + const source = new CancellationTokenSource(); + + const promise = (async () => { + const shouldDebounce = updateOngoing || context.triggerKind === InlineCompletionTriggerKind.Automatic; + if (shouldDebounce) { + // This debounces the operation + await wait(this._debounceValue.get(this.textModel)); + } + + if (source.token.isCancellationRequested || this.textModel.getVersionId() !== request.versionId) { + return false; + } + + const startTime = new Date(); + const updatedCompletions = await provideInlineCompletions( + this.languageFeaturesService.inlineCompletionsProvider, + position, + this.textModel, + context, + source.token, + this.languageConfigurationService + ); + + if (source.token.isCancellationRequested || this.textModel.getVersionId() !== request.versionId) { + return false; + } + + const endTime = new Date(); + this._debounceValue.update(this.textModel, endTime.getTime() - startTime.getTime()); + + const completions = new UpToDateInlineCompletions(updatedCompletions, request, this.textModel, this.versionId); + if (activeInlineCompletion) { + const asInlineCompletion = activeInlineCompletion.toInlineCompletion(undefined); + if (activeInlineCompletion.canBeReused(this.textModel, position) && !updatedCompletions.has(asInlineCompletion)) { + completions.prepend(activeInlineCompletion.inlineCompletion, asInlineCompletion.range, true); + } + } + + this._updateOperation.clear(); + transaction(tx => { + target.set(completions, tx); + }); + + return true; + })(); + + const updateOperation = new UpdateOperation(request, source, promise); + this._updateOperation.value = updateOperation; + + return promise; + } + + public clear(tx: ITransaction): void { + this._updateOperation.clear(); + this.inlineCompletions.set(undefined, tx); + this.suggestWidgetInlineCompletions.set(undefined, tx); + } + + public clearSuggestWidgetInlineCompletions(tx: ITransaction): void { + if (this._updateOperation.value?.request.context.selectedSuggestionInfo) { + this._updateOperation.clear(); + } + this.suggestWidgetInlineCompletions.set(undefined, tx); + } + + public cancelUpdate(): void { + this._updateOperation.clear(); + } +} + +function wait(ms: number, cancellationToken?: CancellationToken): Promise { + return new Promise(resolve => { + let d: IDisposable | undefined = undefined; + const handle = setTimeout(() => { + if (d) { d.dispose(); } + resolve(); + }, ms); + if (cancellationToken) { + d = cancellationToken.onCancellationRequested(() => { + clearTimeout(handle); + if (d) { d.dispose(); } + resolve(); + }); + } + }); +} + +class UpdateRequest { + constructor( + public readonly position: Position, + public readonly context: InlineCompletionContext, + public readonly versionId: number, + ) { + } + + public satisfies(other: UpdateRequest): boolean { + return this.position.equals(other.position) + && equals(this.context.selectedSuggestionInfo, other.context.selectedSuggestionInfo, (v1, v2) => v1.equals(v2)) + && (other.context.triggerKind === InlineCompletionTriggerKind.Automatic + || this.context.triggerKind === InlineCompletionTriggerKind.Explicit) + && this.versionId === other.versionId; + } +} + +function equals(v1: T | undefined, v2: T | undefined, equals: (v1: T, v2: T) => boolean): boolean { + if (!v1 || !v2) { + return v1 === v2; + } + return equals(v1, v2); +} + +class UpdateOperation implements IDisposable { + constructor( + public readonly request: UpdateRequest, + public readonly cancellationTokenSource: CancellationTokenSource, + public readonly promise: Promise, + ) { + } + + dispose() { + this.cancellationTokenSource.cancel(); + } +} + +export class UpToDateInlineCompletions implements IDisposable { + private readonly _inlineCompletions: InlineCompletionWithUpdatedRange[]; + public get inlineCompletions(): ReadonlyArray { return this._inlineCompletions; } + + private _refCount = 1; + private readonly _prependedInlineCompletionItems: InlineCompletionItem[] = []; + + private _rangeVersionIdValue = 0; + private readonly _rangeVersionId = derived('ranges', reader => { + this.versionId.read(reader); + let changed = false; + for (const i of this._inlineCompletions) { + changed = changed || i._updateRange(this.textModel); + } + if (changed) { + this._rangeVersionIdValue++; + } + return this._rangeVersionIdValue; + }); + + constructor( + private readonly inlineCompletionProviderResult: InlineCompletionProviderResult, + public readonly request: UpdateRequest, + private readonly textModel: ITextModel, + private readonly versionId: IObservable, + ) { + const ids = textModel.deltaDecorations([], inlineCompletionProviderResult.completions.map(i => ({ + range: i.range, + options: { + description: 'inline-completion-tracking-range' + }, + }))); + + this._inlineCompletions = inlineCompletionProviderResult.completions.map( + (i, index) => new InlineCompletionWithUpdatedRange(i, ids[index], this._rangeVersionId) + ); + } + + public clone(): this { + this._refCount++; + return this; + } + + public dispose(): void { + this._refCount--; + if (this._refCount === 0) { + this.textModel.deltaDecorations(this._inlineCompletions.map(i => i.decorationId), []); + this.inlineCompletionProviderResult.dispose(); + for (const i of this._prependedInlineCompletionItems) { + i.source.removeRef(); + } + } + } + + public prepend(inlineCompletion: InlineCompletionItem, range: Range, addRefToSource: boolean): void { + if (addRefToSource) { + inlineCompletion.source.addRef(); + } + + const id = this.textModel.deltaDecorations([], [{ + range, + options: { + description: 'inline-completion-tracking-range' + }, + }])[0]; + this._inlineCompletions.unshift(new InlineCompletionWithUpdatedRange(inlineCompletion, id, this._rangeVersionId, range)); + this._prependedInlineCompletionItems.push(inlineCompletion); + } +} + +export class InlineCompletionWithUpdatedRange { + public readonly semanticId = JSON.stringify([ + this.inlineCompletion.filterText, + this.inlineCompletion.insertText, + this.inlineCompletion.range.getStartPosition().toString() + ]); + private _updatedRange: Range; + private _isValid = true; + + public get forwardStable() { + return this.inlineCompletion.source.inlineCompletions.enableForwardStability ?? false; + } + + constructor( + public readonly inlineCompletion: InlineCompletionItem, + public readonly decorationId: string, + private readonly rangeVersion: IObservable, + initialRange?: Range, + ) { + this._updatedRange = initialRange ?? inlineCompletion.range; + } + + public toInlineCompletion(reader: IReader | undefined): InlineCompletionItem { + return this.inlineCompletion.withRange(this._getUpdatedRange(reader)); + } + + public toSingleTextEdit(reader: IReader | undefined): SingleTextEdit { + return new SingleTextEdit(this._getUpdatedRange(reader), this.inlineCompletion.insertText); + } + + public isVisible(model: ITextModel, cursorPosition: Position, reader: IReader | undefined): boolean { + const minimizedReplacement = this._toFilterTextReplacement(reader).removeCommonPrefix(model); + + if ( + !this._isValid + || !this.inlineCompletion.range.getStartPosition().equals(this._getUpdatedRange(reader).getStartPosition()) + || cursorPosition.lineNumber !== minimizedReplacement.range.startLineNumber + ) { + return false; + } + + const originalValue = model.getValueInRange(minimizedReplacement.range, EndOfLinePreference.LF).toLowerCase(); + const filterText = minimizedReplacement.text.toLowerCase(); + + const cursorPosIndex = Math.max(0, cursorPosition.column - minimizedReplacement.range.startColumn); + + let filterTextBefore = filterText.substring(0, cursorPosIndex); + let filterTextAfter = filterText.substring(cursorPosIndex); + + let originalValueBefore = originalValue.substring(0, cursorPosIndex); + let originalValueAfter = originalValue.substring(cursorPosIndex); + + const originalValueIndent = model.getLineIndentColumn(minimizedReplacement.range.startLineNumber); + if (minimizedReplacement.range.startColumn <= originalValueIndent) { + // Remove indentation + originalValueBefore = originalValueBefore.trimStart(); + if (originalValueBefore.length === 0) { + originalValueAfter = originalValueAfter.trimStart(); + } + filterTextBefore = filterTextBefore.trimStart(); + if (filterTextBefore.length === 0) { + filterTextAfter = filterTextAfter.trimStart(); + } + } + + return filterTextBefore.startsWith(originalValueBefore) + && !!matchesSubString(originalValueAfter, filterTextAfter); + } + + public canBeReused(model: ITextModel, position: Position): boolean { + const result = this._isValid + && this._getUpdatedRange(undefined).containsPosition(position) + && this.isVisible(model, position, undefined) + && !this._isSmallerThanOriginal(undefined); + return result; + } + + private _toFilterTextReplacement(reader: IReader | undefined): SingleTextEdit { + return new SingleTextEdit(this._getUpdatedRange(reader), this.inlineCompletion.filterText); + } + + private _isSmallerThanOriginal(reader: IReader | undefined): boolean { + return length(this._getUpdatedRange(reader)).isBefore(length(this.inlineCompletion.range)); + } + + private _getUpdatedRange(reader: IReader | undefined): Range { + this.rangeVersion.read(reader); // This makes sure all the ranges are updated. + return this._updatedRange; + } + + public _updateRange(textModel: ITextModel): boolean { + const range = textModel.getDecorationRange(this.decorationId); + if (!range) { + // A setValue call might flush all decorations. + this._isValid = false; + return true; + } + if (!this._updatedRange.equalsRange(range)) { + this._updatedRange = range; + return true; + } + return false; + } +} + +function length(range: Range): Position { + if (range.startLineNumber === range.endLineNumber) { + return new Position(1, 1 + range.endColumn - range.startColumn); + } else { + return new Position(1 + range.endLineNumber - range.startLineNumber, range.endColumn); + } +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/provideInlineCompletions.ts b/src/vs/editor/contrib/inlineCompletions/browser/provideInlineCompletions.ts new file mode 100644 index 00000000000..a9952a50f14 --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/provideInlineCompletions.ts @@ -0,0 +1,340 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { assertNever } from 'vs/base/common/assert'; +import { DeferredPromise } from 'vs/base/common/async'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { SetMap } from 'vs/base/common/collections'; +import { onUnexpectedExternalError } from 'vs/base/common/errors'; +import { IDisposable } from 'vs/base/common/lifecycle'; +import { ISingleEditOperation } from 'vs/editor/common/core/editOperation'; +import { Position } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; +import { Command, InlineCompletion, InlineCompletionContext, InlineCompletionProviderGroupId, InlineCompletions, InlineCompletionsProvider } from 'vs/editor/common/languages'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { ITextModel } from 'vs/editor/common/model'; +import { fixBracketsInLine } from 'vs/editor/common/model/bracketPairsTextModelPart/fixBrackets'; +import { SingleTextEdit } from 'vs/editor/contrib/inlineCompletions/browser/singleTextEdit'; +import { getReadonlyEmptyArray } from 'vs/editor/contrib/inlineCompletions/browser/utils'; +import { SnippetParser, Text } from 'vs/editor/contrib/snippet/browser/snippetParser'; + +export async function provideInlineCompletions( + registry: LanguageFeatureRegistry, + position: Position, + model: ITextModel, + context: InlineCompletionContext, + token: CancellationToken = CancellationToken.None, + languageConfigurationService?: ILanguageConfigurationService, +): Promise { + // Important: Don't use position after the await calls, as the model could have been changed in the meantime! + const defaultReplaceRange = getDefaultRange(position, model); + const providers = registry.all(model); + + const multiMap = new SetMap>(); + for (const provider of providers) { + if (provider.groupId) { + multiMap.add(provider.groupId, provider); + } + } + + function getPreferredProviders(provider: InlineCompletionsProvider): InlineCompletionsProvider[] { + if (!provider.yieldsToGroupIds) { return []; } + const result: InlineCompletionsProvider[] = []; + for (const groupId of provider.yieldsToGroupIds || []) { + const providers = multiMap.get(groupId); + for (const p of providers) { + result.push(p); + } + } + return result; + } + + type Result = Promise | null | undefined>; + const states = new Map>, Result>(); + + const seen = new Set>>(); + function findPreferredProviderCircle(provider: InlineCompletionsProvider, stack: InlineCompletionsProvider[]): InlineCompletionsProvider[] | undefined { + stack = [...stack, provider]; + if (seen.has(provider)) { return stack; } + + seen.add(provider); + try { + const preferred = getPreferredProviders(provider); + for (const p of preferred) { + const c = findPreferredProviderCircle(p, stack); + if (c) { return c; } + } + } finally { + seen.delete(provider); + } + return undefined; + } + + function processProvider(provider: InlineCompletionsProvider): Result { + const state = states.get(provider); + if (state) { + return state; + } + + const circle = findPreferredProviderCircle(provider, []); + if (circle) { + onUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected. Path: ${circle.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`)); + } + + const deferredPromise = new DeferredPromise | null | undefined>(); + states.set(provider, deferredPromise.p); + + (async () => { + if (!circle) { + const preferred = getPreferredProviders(provider); + for (const p of preferred) { + const result = await processProvider(p); + if (result && result.items.length > 0) { + // Skip provider + return undefined; + } + } + } + + try { + const completions = await provider.provideInlineCompletions(model, position, context, token); + return completions; + } catch (e) { + onUnexpectedExternalError(e); + return undefined; + } + })().then(c => deferredPromise.complete(c), e => deferredPromise.error(e)); + + return deferredPromise.p; + } + + const providerResults = await Promise.all(providers.map(async provider => ({ provider, completions: await processProvider(provider) }))); + + const itemsByHash = new Map(); + const lists: InlineCompletionList[] = []; + for (const result of providerResults) { + const completions = result.completions; + if (!completions) { + continue; + } + const list = new InlineCompletionList(completions, result.provider); + lists.push(list); + + for (const item of completions.items) { + const inlineCompletionItem = InlineCompletionItem.from( + item, + list, + defaultReplaceRange, + model, + languageConfigurationService + ); + itemsByHash.set(inlineCompletionItem.hash(), inlineCompletionItem); + } + } + + return new InlineCompletionProviderResult(Array.from(itemsByHash.values()), new Set(itemsByHash.keys()), lists); +} + +export class InlineCompletionProviderResult implements IDisposable { + + constructor( + /** + * Free of duplicates. + */ + public readonly completions: readonly InlineCompletionItem[], + private readonly hashs: Set, + private readonly providerResults: readonly InlineCompletionList[], + ) { } + + public has(item: InlineCompletionItem): boolean { + return this.hashs.has(item.hash()); + } + + dispose(): void { + for (const result of this.providerResults) { + result.removeRef(); + } + } +} + +/** + * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that + * computed them. + */ +export class InlineCompletionList { + private refCount = 1; + constructor( + public readonly inlineCompletions: InlineCompletions, + public readonly provider: InlineCompletionsProvider, + ) { } + + addRef(): void { + this.refCount++; + } + + removeRef(): void { + this.refCount--; + if (this.refCount === 0) { + this.provider.freeInlineCompletions(this.inlineCompletions); + } + } +} + +export class InlineCompletionItem { + public static from( + inlineCompletion: InlineCompletion, + source: InlineCompletionList, + defaultReplaceRange: Range, + textModel: ITextModel, + languageConfigurationService: ILanguageConfigurationService | undefined, + ) { + let insertText: string; + let snippetInfo: SnippetInfo | undefined; + let range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange; + + if (typeof inlineCompletion.insertText === 'string') { + insertText = inlineCompletion.insertText; + + if (languageConfigurationService && inlineCompletion.completeBracketPairs) { + insertText = closeBrackets( + insertText, + range.getStartPosition(), + textModel, + languageConfigurationService + ); + + // Modify range depending on if brackets are added or removed + const diff = insertText.length - inlineCompletion.insertText.length; + if (diff !== 0) { + range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff); + } + } + + snippetInfo = undefined; + } else if ('snippet' in inlineCompletion.insertText) { + const preBracketCompletionLength = inlineCompletion.insertText.snippet.length; + + if (languageConfigurationService && inlineCompletion.completeBracketPairs) { + inlineCompletion.insertText.snippet = closeBrackets( + inlineCompletion.insertText.snippet, + range.getStartPosition(), + textModel, + languageConfigurationService + ); + + // Modify range depending on if brackets are added or removed + const diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength; + if (diff !== 0) { + range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff); + } + } + + const snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet); + + if (snippet.children.length === 1 && snippet.children[0] instanceof Text) { + insertText = snippet.children[0].value; + snippetInfo = undefined; + } else { + insertText = snippet.toString(); + snippetInfo = { + snippet: inlineCompletion.insertText.snippet, + range: range + }; + } + } else { + assertNever(inlineCompletion.insertText); + } + + return new InlineCompletionItem( + insertText, + inlineCompletion.command, + range, + insertText, + snippetInfo, + inlineCompletion.additionalTextEdits || getReadonlyEmptyArray(), + inlineCompletion, + source, + ); + } + + constructor( + readonly filterText: string, + readonly command: Command | undefined, + readonly range: Range, + readonly insertText: string, + readonly snippetInfo: SnippetInfo | undefined, + + readonly additionalTextEdits: readonly ISingleEditOperation[], + + + /** + * A reference to the original inline completion this inline completion has been constructed from. + * Used for event data to ensure referential equality. + */ + readonly sourceInlineCompletion: InlineCompletion, + + /** + * A reference to the original inline completion list this inline completion has been constructed from. + * Used for event data to ensure referential equality. + */ + readonly source: InlineCompletionList, + ) { + filterText = filterText.replace(/\r\n|\r/g, '\n'); + insertText = filterText.replace(/\r\n|\r/g, '\n'); + } + + public withRange(updatedRange: Range): InlineCompletionItem { + return new InlineCompletionItem( + this.filterText, + this.command, + updatedRange, + this.insertText, + this.snippetInfo, + this.additionalTextEdits, + this.sourceInlineCompletion, + this.source, + ); + } + + public hash(): string { + return JSON.stringify({ insertText: this.insertText, range: this.range.toString() }); + } + + public toSingleTextEdit(): SingleTextEdit { + return new SingleTextEdit(this.range, this.insertText); + } +} + +export interface SnippetInfo { + snippet: string; + /* Could be different than the main range */ + range: Range; +} + +function getDefaultRange(position: Position, model: ITextModel): Range { + const word = model.getWordAtPosition(position); + const maxColumn = model.getLineMaxColumn(position.lineNumber); + // By default, always replace up until the end of the current line. + // This default might be subject to change! + return word + ? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn) + : Range.fromPositions(position, position.with(undefined, maxColumn)); +} + +function closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string { + const lineStart = model.getLineContent(position.lineNumber).substring(0, position.column - 1); + const newLine = lineStart + text; + + const newTokens = model.tokenization.tokenizeLineWithEdit(position, newLine.length - (position.column - 1), text); + const slicedTokens = newTokens?.sliceAndInflate(position.column - 1, newLine.length, 0); + if (!slicedTokens) { + return text; + } + + const newText = fixBracketsInLine(slicedTokens, languageConfigurationService); + + return newText; +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/singleTextEdit.ts b/src/vs/editor/contrib/inlineCompletions/browser/singleTextEdit.ts new file mode 100644 index 00000000000..8d74bd7bdcd --- /dev/null +++ b/src/vs/editor/contrib/inlineCompletions/browser/singleTextEdit.ts @@ -0,0 +1,250 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IDiffChange, LcsDiff } from 'vs/base/common/diff/diff'; +import { commonPrefixLength, getLeadingWhitespace, splitLines } from 'vs/base/common/strings'; +import { Position } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { EndOfLinePreference, ITextModel } from 'vs/editor/common/model'; +import { GhostText, GhostTextPart } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; +import { addPositions, lengthOfText } from 'vs/editor/contrib/inlineCompletions/browser/utils'; + +export class SingleTextEdit { + constructor( + public readonly range: Range, + public readonly text: string + ) { + } + + removeCommonPrefix(model: ITextModel, validModelRange?: Range): SingleTextEdit { + const modelRange = validModelRange ? this.range.intersectRanges(validModelRange) : this.range; + if (!modelRange) { + return this; + } + const valueToReplace = model.getValueInRange(modelRange, EndOfLinePreference.LF); + const commonPrefixLen = commonPrefixLength(valueToReplace, this.text); + const start = addPositions(this.range.getStartPosition(), lengthOfText(valueToReplace.substring(0, commonPrefixLen))); + const text = this.text.substring(commonPrefixLen); + const range = Range.fromPositions(start, this.range.getEndPosition()); + return new SingleTextEdit(range, text); + } + + augments(base: SingleTextEdit): boolean { + // The augmented completion must replace the base range, but can replace even more + return this.text.startsWith(base.text) && rangeExtends(this.range, base.range); + } + + /** + * @param previewSuffixLength Sets where to split `inlineCompletion.text`. + * If the text is `hello` and the suffix length is 2, the non-preview part is `hel` and the preview-part is `lo`. + */ + computeGhostText( + model: ITextModel, + mode: 'prefix' | 'subword' | 'subwordSmart', + cursorPosition?: Position, + previewSuffixLength = 0 + ): GhostText | undefined { + let edit = this.removeCommonPrefix(model); + + if (edit.range.endLineNumber !== edit.range.startLineNumber) { + // This edit might span multiple lines, but the first lines must be a common prefix. + return undefined; + } + + const sourceLine = model.getLineContent(edit.range.startLineNumber); + const sourceIndentationLength = getLeadingWhitespace(sourceLine).length; + + const suggestionTouchesIndentation = edit.range.startColumn - 1 <= sourceIndentationLength; + if (suggestionTouchesIndentation) { + // source: Ā·Ā·Ā·Ā·Ā·Ā·Ā·Ā·Ā·Ā·[Ā·Ā·Ā·Ā·Ā·Ā·abc] + // ^^^^^^^^^ inlineCompletion.range + // ^^^^^^^^^^ ^^^^^^ sourceIndentationLength + // ^^^^^^ replacedIndentation.length + // ^^^ rangeThatDoesNotReplaceIndentation + + // inlineCompletion.text: 'Ā·Ā·foo' + // ^^ suggestionAddedIndentationLength + + const suggestionAddedIndentationLength = getLeadingWhitespace(edit.text).length; + + const replacedIndentation = sourceLine.substring(edit.range.startColumn - 1, sourceIndentationLength); + + const [startPosition, endPosition] = [edit.range.getStartPosition(), edit.range.getEndPosition()]; + const newStartPosition = + startPosition.column + replacedIndentation.length <= endPosition.column + ? startPosition.delta(0, replacedIndentation.length) + : endPosition; + const rangeThatDoesNotReplaceIndentation = Range.fromPositions(newStartPosition, endPosition); + + const suggestionWithoutIndentationChange = + edit.text.startsWith(replacedIndentation) + // Adds more indentation without changing existing indentation: We can add ghost text for this + ? edit.text.substring(replacedIndentation.length) + // Changes or removes existing indentation. Only add ghost text for the non-indentation part. + : edit.text.substring(suggestionAddedIndentationLength); + + edit = new SingleTextEdit(rangeThatDoesNotReplaceIndentation, suggestionWithoutIndentationChange); + } + + // This is a single line string + const valueToBeReplaced = model.getValueInRange(edit.range); + + const changes = cachingDiff(valueToBeReplaced, edit.text); + + if (!changes) { + // No ghost text in case the diff would be too slow to compute + return undefined; + } + + const lineNumber = edit.range.startLineNumber; + + const parts = new Array(); + + if (mode === 'prefix') { + const filteredChanges = changes.filter(c => c.originalLength === 0); + if (filteredChanges.length > 1 || filteredChanges.length === 1 && filteredChanges[0].originalStart !== valueToBeReplaced.length) { + // Prefixes only have a single change. + return undefined; + } + } + + const previewStartInCompletionText = edit.text.length - previewSuffixLength; + + for (const c of changes) { + const insertColumn = edit.range.startColumn + c.originalStart + c.originalLength; + + if (mode === 'subwordSmart' && cursorPosition && cursorPosition.lineNumber === edit.range.startLineNumber && insertColumn < cursorPosition.column) { + // No ghost text before cursor + return undefined; + } + + if (c.originalLength > 0) { + return undefined; + } + + if (c.modifiedLength === 0) { + continue; + } + + const modifiedEnd = c.modifiedStart + c.modifiedLength; + const nonPreviewTextEnd = Math.max(c.modifiedStart, Math.min(modifiedEnd, previewStartInCompletionText)); + const nonPreviewText = edit.text.substring(c.modifiedStart, nonPreviewTextEnd); + const italicText = edit.text.substring(nonPreviewTextEnd, Math.max(c.modifiedStart, modifiedEnd)); + + if (nonPreviewText.length > 0) { + const lines = splitLines(nonPreviewText); + parts.push(new GhostTextPart(insertColumn, lines, false)); + } + if (italicText.length > 0) { + const lines = splitLines(italicText); + parts.push(new GhostTextPart(insertColumn, lines, true)); + } + } + + return new GhostText(lineNumber, parts); + } +} + +function rangeExtends(extendingRange: Range, rangeToExtend: Range): boolean { + return rangeToExtend.getStartPosition().equals(extendingRange.getStartPosition()) + && rangeToExtend.getEndPosition().isBeforeOrEqual(extendingRange.getEndPosition()); +} + +let lastRequest: { originalValue: string; newValue: string; changes: readonly IDiffChange[] | undefined } | undefined = undefined; +function cachingDiff(originalValue: string, newValue: string): readonly IDiffChange[] | undefined { + if (lastRequest?.originalValue === originalValue && lastRequest?.newValue === newValue) { + return lastRequest?.changes; + } else { + let changes = smartDiff(originalValue, newValue, true); + if (changes) { + const deletedChars = deletedCharacters(changes); + if (deletedChars > 0) { + // For performance reasons, don't compute diff if there is nothing to improve + const newChanges = smartDiff(originalValue, newValue, false); + if (newChanges && deletedCharacters(newChanges) < deletedChars) { + // Disabling smartness seems to be better here + changes = newChanges; + } + } + } + lastRequest = { + originalValue, + newValue, + changes + }; + return changes; + } +} + +function deletedCharacters(changes: readonly IDiffChange[]): number { + let sum = 0; + for (const c of changes) { + sum += c.originalLength; + } + return sum; +} + +/** + * When matching `if ()` with `if (f() = 1) { g(); }`, + * align it like this: `if ( )` + * Not like this: `if ( )` + * Also not like this: `if ( )`. + * + * The parenthesis are preprocessed to ensure that they match correctly. + */ +function smartDiff(originalValue: string, newValue: string, smartBracketMatching: boolean): (readonly IDiffChange[]) | undefined { + if (originalValue.length > 5000 || newValue.length > 5000) { + // We don't want to work on strings that are too big + return undefined; + } + + function getMaxCharCode(val: string): number { + let maxCharCode = 0; + for (let i = 0, len = val.length; i < len; i++) { + const charCode = val.charCodeAt(i); + if (charCode > maxCharCode) { + maxCharCode = charCode; + } + } + return maxCharCode; + } + + const maxCharCode = Math.max(getMaxCharCode(originalValue), getMaxCharCode(newValue)); + function getUniqueCharCode(id: number): number { + if (id < 0) { + throw new Error('unexpected'); + } + return maxCharCode + id + 1; + } + + function getElements(source: string): Int32Array { + let level = 0; + let group = 0; + const characters = new Int32Array(source.length); + for (let i = 0, len = source.length; i < len; i++) { + // TODO support more brackets + if (smartBracketMatching && source[i] === '(') { + const id = group * 100 + level; + characters[i] = getUniqueCharCode(2 * id); + level++; + } else if (smartBracketMatching && source[i] === ')') { + level = Math.max(level - 1, 0); + const id = group * 100 + level; + characters[i] = getUniqueCharCode(2 * id + 1); + if (level === 0) { + group++; + } + } else { + characters[i] = source.charCodeAt(i); + } + } + return characters; + } + + const elements1 = getElements(originalValue); + const elements2 = getElements(newValue); + + return new LcsDiff({ getElements: () => elements1 }, { getElements: () => elements2 }).ComputeDiff(false).changes; +} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider.ts b/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider.ts index 0ff0c4d5726..b2e56cdea96 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider.ts @@ -3,54 +3,37 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { compareBy, findMaxBy, numberComparator } from 'vs/base/common/arrays'; -import { Emitter, Event } from 'vs/base/common/event'; +import { Event } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; -import { CompletionItemInsertTextRule, CompletionItemKind } from 'vs/editor/common/languages'; +import { CompletionItemInsertTextRule, CompletionItemKind, SelectedSuggestionInfo } from 'vs/editor/common/languages'; import { SnippetParser } from 'vs/editor/contrib/snippet/browser/snippetParser'; import { SnippetSession } from 'vs/editor/contrib/snippet/browser/snippetSession'; import { CompletionItem } from 'vs/editor/contrib/suggest/browser/suggest'; import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; -import { minimizeInlineCompletion, NormalizedInlineCompletion, normalizedInlineCompletionsEquals } from './inlineCompletionToGhostText'; +import { IObservable, ITransaction, observableValue, transaction } from 'vs/base/common/observable'; +import { SingleTextEdit } from 'vs/editor/contrib/inlineCompletions/browser/singleTextEdit'; +import { ITextModel } from 'vs/editor/common/model'; +import { compareBy, findMaxBy, numberComparator } from 'vs/base/common/arrays'; -export interface SuggestWidgetState { - /** - * Represents the currently selected item in the suggest widget as inline completion, if possible. - */ - selectedItem: SuggestItemInfo | undefined; -} - -export interface SuggestItemInfo { - normalizedInlineCompletion: NormalizedInlineCompletion; - isSnippetText: boolean; - completionItemKind: CompletionItemKind; -} - -export class SuggestWidgetInlineCompletionProvider extends Disposable { +export class SuggestWidgetAdaptor extends Disposable { private isSuggestWidgetVisible: boolean = false; private isShiftKeyPressed = false; private _isActive = false; private _currentSuggestItemInfo: SuggestItemInfo | undefined = undefined; - private readonly onDidChangeEmitter = new Emitter(); - public readonly onDidChange = this.onDidChangeEmitter.event; + private readonly _selectedItem = observableValue('suggestWidgetInlineCompletionProvider.selectedItem', undefined as SuggestItemInfo | undefined); - /** - * Returns undefined if the suggest widget is not active. - */ - get state(): SuggestWidgetState | undefined { - if (!this._isActive) { - return undefined; - } - return { selectedItem: this._currentSuggestItemInfo }; + public get selectedItem(): IObservable { + return this._selectedItem; } constructor( - private readonly editor: IActiveCodeEditor, - private readonly suggestControllerPreselector: () => NormalizedInlineCompletion | undefined + private readonly editor: ICodeEditor, + private readonly suggestControllerPreselector: () => SingleTextEdit | undefined, + private readonly checkModelVersion: (tx: ITransaction) => void, ) { super(); @@ -73,26 +56,28 @@ export class SuggestWidgetInlineCompletionProvider extends Disposable { this._register(suggestController.registerSelector({ priority: 100, select: (model, pos, suggestItems) => { + transaction(tx => this.checkModelVersion(tx)); + const textModel = this.editor.getModel(); - const normalizedItemToPreselect = minimizeInlineCompletion(textModel, this.suggestControllerPreselector()); - if (!normalizedItemToPreselect) { + if (!textModel) { + // Should not happen + return -1; + } + + const itemToPreselect = this.suggestControllerPreselector()?.removeCommonPrefix(textModel); + if (!itemToPreselect) { return -1; } const position = Position.lift(pos); const candidates = suggestItems .map((suggestItem, index) => { - const inlineSuggestItem = suggestionToSuggestItemInfo(suggestController, position, suggestItem, this.isShiftKeyPressed); - const normalizedSuggestItem = minimizeInlineCompletion(textModel, inlineSuggestItem?.normalizedInlineCompletion); - if (!normalizedSuggestItem) { - return undefined; - } - const valid = - rangeStartsWith(normalizedItemToPreselect.range, normalizedSuggestItem.range) && - normalizedItemToPreselect.insertText.startsWith(normalizedSuggestItem.insertText); - return { index, valid, prefixLength: normalizedSuggestItem.insertText.length, suggestItem }; + const suggestItemInfo = SuggestItemInfo.fromSuggestion(suggestController, textModel, position, suggestItem, this.isShiftKeyPressed); + const suggestItemTextEdit = suggestItemInfo.toSingleTextEdit().removeCommonPrefix(textModel); + const valid = itemToPreselect.augments(suggestItemTextEdit); + return { index, valid, prefixLength: suggestItemTextEdit.text.length, suggestItem }; }) - .filter(item => item && item.valid); + .filter(item => item && item.valid && item.prefixLength > 0); const result = findMaxBy( candidates, @@ -132,37 +117,36 @@ export class SuggestWidgetInlineCompletionProvider extends Disposable { private update(newActive: boolean): void { const newInlineCompletion = this.getSuggestItemInfo(); - let shouldFire = false; - if (!suggestItemInfoEquals(this._currentSuggestItemInfo, newInlineCompletion)) { - this._currentSuggestItemInfo = newInlineCompletion; - shouldFire = true; - } - if (this._isActive !== newActive) { + + if (this._isActive !== newActive || !suggestItemInfoEquals(this._currentSuggestItemInfo, newInlineCompletion)) { this._isActive = newActive; - shouldFire = true; - } - if (shouldFire) { - this.onDidChangeEmitter.fire(); + this._currentSuggestItemInfo = newInlineCompletion; + + transaction(tx => { + this.checkModelVersion(tx); + this._selectedItem.set(this._isActive ? this._currentSuggestItemInfo : undefined, tx); + }); } } private getSuggestItemInfo(): SuggestItemInfo | undefined { const suggestController = SuggestController.get(this.editor); - if (!suggestController) { - return undefined; - } - if (!this.isSuggestWidgetVisible) { - return undefined; - } - const focusedItem = suggestController.widget.value.getFocusedItem(); - if (!focusedItem) { + if (!suggestController || !this.isSuggestWidgetVisible) { return undefined; } - // TODO: item.isResolved - return suggestionToSuggestItemInfo( + const focusedItem = suggestController.widget.value.getFocusedItem(); + const position = this.editor.getPosition(); + const model = this.editor.getModel(); + + if (!focusedItem || !position || !model) { + return undefined; + } + + return SuggestItemInfo.fromSuggestion( suggestController, - this.editor.getPosition(), + model, + position, focusedItem.item, this.isShiftKeyPressed ); @@ -179,14 +163,56 @@ export class SuggestWidgetInlineCompletionProvider extends Disposable { } } -export function rangeStartsWith(rangeToTest: Range, prefix: Range): boolean { - return ( - prefix.startLineNumber === rangeToTest.startLineNumber && - prefix.startColumn === rangeToTest.startColumn && - (prefix.endLineNumber < rangeToTest.endLineNumber || - (prefix.endLineNumber === rangeToTest.endLineNumber && - prefix.endColumn <= rangeToTest.endColumn)) - ); +export class SuggestItemInfo { + public static fromSuggestion(suggestController: SuggestController, model: ITextModel, position: Position, item: CompletionItem, toggleMode: boolean): SuggestItemInfo { + let { insertText } = item.completion; + let isSnippetText = false; + if (item.completion.insertTextRules! & CompletionItemInsertTextRule.InsertAsSnippet) { + const snippet = new SnippetParser().parse(insertText); + + if (snippet.children.length < 100) { + // Adjust whitespace is expensive. + SnippetSession.adjustWhitespace(model, position, true, snippet); + } + + insertText = snippet.toString(); + isSnippetText = true; + } + + const info = suggestController.getOverwriteInfo(item, toggleMode); + + return new SuggestItemInfo( + Range.fromPositions( + position.delta(0, -info.overwriteBefore), + position.delta(0, Math.max(info.overwriteAfter, 0)) + ), + insertText, + item.completion.kind, + isSnippetText, + ); + } + + private constructor( + public readonly range: Range, + public readonly insertText: string, + public readonly completionItemKind: CompletionItemKind, + public readonly isSnippetText: boolean, + ) { } + + public equals(other: SuggestItemInfo): boolean { + return this.range.equalsRange(other.range) + && this.insertText === other.insertText + && this.completionItemKind === other.completionItemKind + && this.isSnippetText === other.isSnippetText; + } + + public toSelectedSuggestionInfo(): SelectedSuggestionInfo { + return new SelectedSuggestionInfo(this.range, this.insertText, this.completionItemKind, this.isSnippetText); + } + + public toSingleTextEdit(): SingleTextEdit { + return new SingleTextEdit(this.range, this.insertText); + } } function suggestItemInfoEquals(a: SuggestItemInfo | undefined, b: SuggestItemInfo | undefined): boolean { @@ -196,59 +222,5 @@ function suggestItemInfoEquals(a: SuggestItemInfo | undefined, b: SuggestItemInf if (!a || !b) { return false; } - return a.completionItemKind === b.completionItemKind && - a.isSnippetText === b.isSnippetText && - normalizedInlineCompletionsEquals(a.normalizedInlineCompletion, b.normalizedInlineCompletion); -} - -function suggestionToSuggestItemInfo(suggestController: SuggestController, position: Position, item: CompletionItem, toggleMode: boolean): SuggestItemInfo | undefined { - // additionalTextEdits might not be resolved here, this could be problematic. - if (Array.isArray(item.completion.additionalTextEdits) && item.completion.additionalTextEdits.length > 0) { - // cannot represent additional text edits. TODO: Now we can. - return { - completionItemKind: item.completion.kind, - isSnippetText: false, - normalizedInlineCompletion: { - // Dummy element, so that space is reserved, but no text is shown - range: Range.fromPositions(position, position), - insertText: '', - filterText: '', - snippetInfo: undefined, - additionalTextEdits: [], - }, - }; - } - - let { insertText } = item.completion; - let isSnippetText = false; - if (item.completion.insertTextRules! & CompletionItemInsertTextRule.InsertAsSnippet) { - const snippet = new SnippetParser().parse(insertText); - const model = suggestController.editor.getModel()!; - - // Ignore snippets that are too large. - // Adjust whitespace is expensive for them. - if (snippet.children.length > 100) { - return undefined; - } - - SnippetSession.adjustWhitespace(model, position, true, snippet); - insertText = snippet.toString(); - isSnippetText = true; - } - - const info = suggestController.getOverwriteInfo(item, toggleMode); - return { - isSnippetText, - completionItemKind: item.completion.kind, - normalizedInlineCompletion: { - insertText: insertText, - filterText: insertText, - range: Range.fromPositions( - position.delta(0, -info.overwriteBefore), - position.delta(0, Math.max(info.overwriteAfter, 0)) - ), - snippetInfo: undefined, - additionalTextEdits: [], - } - }; + return a.equals(b); } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetPreviewModel.ts b/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetPreviewModel.ts deleted file mode 100644 index 0de4fb2806a..00000000000 --- a/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetPreviewModel.ts +++ /dev/null @@ -1,198 +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 { createCancelablePromise, RunOnceScheduler } from 'vs/base/common/async'; -import { onUnexpectedError } from 'vs/base/common/errors'; -import { MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; -import { Range } from 'vs/editor/common/core/range'; -import { CompletionItemKind, InlineCompletionTriggerKind, SelectedSuggestionInfo } from 'vs/editor/common/languages'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { SharedInlineCompletionCache } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextModel'; -import { BaseGhostTextWidgetModel, GhostText } from './ghostText'; -import { provideInlineCompletions, TrackedInlineCompletions, UpdateOperation } from './inlineCompletionsModel'; -import { inlineCompletionToGhostText, minimizeInlineCompletion, NormalizedInlineCompletion } from './inlineCompletionToGhostText'; -import { SuggestWidgetInlineCompletionProvider } from './suggestWidgetInlineCompletionProvider'; - -export class SuggestWidgetPreviewModel extends BaseGhostTextWidgetModel { - private readonly suggestionInlineCompletionSource = this._register( - new SuggestWidgetInlineCompletionProvider( - this.editor, - // Use the first cache item (if any) as preselection. - () => { - // We might get asked in a content change event before the cache has received that event. - this.cache.value?.updateRanges(); - return this.cache.value?.completions[0]?.toLiveInlineCompletion(); - } - ) - ); - private readonly updateOperation = this._register(new MutableDisposable()); - private readonly updateCacheSoon = this._register(new RunOnceScheduler(() => this.updateCache(), 50)); - - public override minReservedLineCount: number = 0; - - public get isActive(): boolean { - return this.suggestionInlineCompletionSource.state !== undefined; - } - - constructor( - editor: IActiveCodeEditor, - private readonly cache: SharedInlineCompletionCache, - @ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService, - ) { - super(editor); - - this._register(this.suggestionInlineCompletionSource.onDidChange(() => { - if (!this.editor.hasModel()) { - // onDidChange might be called when calling setModel on the editor, before we are disposed. - return; - } - - this.updateCacheSoon.schedule(); - - const suggestWidgetState = this.suggestionInlineCompletionSource.state; - if (!suggestWidgetState) { - this.minReservedLineCount = 0; - } - - const newGhostText = this.ghostText; - if (newGhostText) { - this.minReservedLineCount = Math.max(this.minReservedLineCount, sum(newGhostText.parts.map(p => p.lines.length - 1))); - } - - if (this.minReservedLineCount >= 1) { - this.suggestionInlineCompletionSource.forceRenderingAbove(); - } else { - this.suggestionInlineCompletionSource.stopForceRenderingAbove(); - } - this.onDidChangeEmitter.fire(); - })); - - this._register(this.cache.onDidChange(() => { - this.onDidChangeEmitter.fire(); - })); - - this._register(this.editor.onDidChangeCursorPosition((e) => { - this.minReservedLineCount = 0; - this.updateCacheSoon.schedule(); - this.onDidChangeEmitter.fire(); - })); - - this._register(toDisposable(() => this.suggestionInlineCompletionSource.stopForceRenderingAbove())); - } - - private isSuggestionPreviewEnabled(): boolean { - const suggestOptions = this.editor.getOption(EditorOption.suggest); - return suggestOptions.preview; - } - - private async updateCache() { - const state = this.suggestionInlineCompletionSource.state; - if (!state || !state.selectedItem) { - return; - } - - const info: SelectedSuggestionInfo = { - text: state.selectedItem.normalizedInlineCompletion.insertText, - range: state.selectedItem.normalizedInlineCompletion.range, - isSnippetText: state.selectedItem.isSnippetText, - completionKind: state.selectedItem.completionItemKind, - }; - - const position = this.editor.getPosition(); - - if ( - state.selectedItem.isSnippetText || - state.selectedItem.completionItemKind === CompletionItemKind.Snippet || - state.selectedItem.completionItemKind === CompletionItemKind.File || - state.selectedItem.completionItemKind === CompletionItemKind.Folder - ) { - // Don't ask providers for these types of suggestions. - this.cache.clear(); - return; - } - - const promise = createCancelablePromise(async token => { - let result: TrackedInlineCompletions; - try { - result = await provideInlineCompletions(this.languageFeaturesService.inlineCompletionsProvider, position, - this.editor.getModel(), - { triggerKind: InlineCompletionTriggerKind.Automatic, selectedSuggestionInfo: info }, - token - ); - } catch (e) { - onUnexpectedError(e); - return; - } - if (token.isCancellationRequested) { - result.dispose(); - return; - } - this.cache.setValue( - this.editor, - result, - InlineCompletionTriggerKind.Automatic - ); - this.onDidChangeEmitter.fire(); - }); - const operation = new UpdateOperation(promise, InlineCompletionTriggerKind.Automatic); - this.updateOperation.value = operation; - await promise; - if (this.updateOperation.value === operation) { - this.updateOperation.clear(); - } - } - - public override get ghostText(): GhostText | undefined { - const isSuggestionPreviewEnabled = this.isSuggestionPreviewEnabled(); - const model = this.editor.getModel(); - const augmentedCompletion = minimizeInlineCompletion(model, this.cache.value?.completions[0]?.toLiveInlineCompletion()); - - const suggestWidgetState = this.suggestionInlineCompletionSource.state; - const suggestInlineCompletion = minimizeInlineCompletion(model, suggestWidgetState?.selectedItem?.normalizedInlineCompletion); - - const isAugmentedCompletionValid = augmentedCompletion - && suggestInlineCompletion - // The intellisense completion must be a prefix of the augmented completion - && augmentedCompletion.insertText.startsWith(suggestInlineCompletion.insertText) - // The augmented completion must replace the intellisense completion range, but can replace even more - && rangeExtends(augmentedCompletion.range, suggestInlineCompletion.range); - - if (!isSuggestionPreviewEnabled && !isAugmentedCompletionValid) { - return undefined; - } - - // If the augmented completion is not valid and there is no suggest inline completion, we still show the augmented completion. - const finalCompletion = isAugmentedCompletionValid ? augmentedCompletion : (suggestInlineCompletion || augmentedCompletion); - - const inlineCompletionPreviewLength = isAugmentedCompletionValid ? finalCompletion!.insertText.length - suggestInlineCompletion.insertText.length : 0; - const newGhostText = this.toGhostText(finalCompletion, inlineCompletionPreviewLength); - - return newGhostText; - } - - private toGhostText(completion: NormalizedInlineCompletion | undefined, inlineCompletionPreviewLength: number): GhostText | undefined { - const mode = this.editor.getOptions().get(EditorOption.suggest).previewMode; - return completion - ? ( - inlineCompletionToGhostText(completion, this.editor.getModel(), mode, this.editor.getPosition(), inlineCompletionPreviewLength) || - // Show an invisible ghost text to reserve space - new GhostText(completion.range.endLineNumber, [], this.minReservedLineCount) - ) - : undefined; - } -} - -function sum(arr: number[]): number { - return arr.reduce((a, b) => a + b, 0); -} - -function rangeExtends(extendingRange: Range, rangeToExtend: Range): boolean { - return extendingRange.startLineNumber === rangeToExtend.startLineNumber && - extendingRange.startColumn === rangeToExtend.startColumn && - ((extendingRange.endLineNumber === rangeToExtend.endLineNumber && extendingRange.endColumn >= rangeToExtend.endColumn) - || extendingRange.endLineNumber > rangeToExtend.endLineNumber); -} diff --git a/src/vs/editor/contrib/inlineCompletions/browser/utils.ts b/src/vs/editor/contrib/inlineCompletions/browser/utils.ts index 04392dc4781..b256d9dc8d7 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/utils.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/utils.ts @@ -3,16 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable, IReference } from 'vs/base/common/lifecycle'; +import { BugIndicatingError } from 'vs/base/common/errors'; +import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; +import { IObservable, autorun } from 'vs/base/common/observable'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; - -export function createDisposableRef(object: T, disposable?: IDisposable): IReference { - return { - object, - dispose: () => disposable?.dispose(), - }; -} +import { IModelDeltaDecoration } from 'vs/editor/common/model'; export function applyEdits(text: string, edits: { range: IRange; text: string }[]): string { const transformer = new PositionOffsetTransformer(text); @@ -56,3 +53,51 @@ const array: ReadonlyArray = []; export function getReadonlyEmptyArray(): readonly T[] { return array; } + +export class ColumnRange { + constructor( + public readonly startColumn: number, + public readonly endColumnExclusive: number, + ) { + if (startColumn > endColumnExclusive) { + throw new BugIndicatingError(`startColumn ${startColumn} cannot be after endColumnExclusive ${endColumnExclusive}`); + } + } + + toRange(lineNumber: number): Range { + return new Range(lineNumber, this.startColumn, lineNumber, this.endColumnExclusive); + } +} + +export function applyObservableDecorations(editor: ICodeEditor, decorations: IObservable): IDisposable { + const d = new DisposableStore(); + const decorationsCollection = editor.createDecorationsCollection(); + d.add(autorun(`Apply decorations from ${decorations.debugName}`, reader => { + const d = decorations.read(reader); + decorationsCollection.set(d); + })); + d.add({ + dispose: () => { + decorationsCollection.clear(); + } + }); + return d; +} + +export function addPositions(pos1: Position, pos2: Position): Position { + return new Position(pos1.lineNumber + pos2.lineNumber - 1, pos2.lineNumber === 1 ? pos1.column + pos2.column - 1 : pos2.column); +} + +export function lengthOfText(text: string): Position { + let line = 1; + let column = 1; + for (const c of text) { + if (c === '\n') { + line++; + column = 1; + } else { + column++; + } + } + return new Position(line, column); +} diff --git a/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts b/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts index 6c9d94964ea..4a836a2b3d5 100644 --- a/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts +++ b/src/vs/editor/contrib/inlineCompletions/test/browser/inlineCompletionsProvider.test.ts @@ -9,17 +9,18 @@ import { DisposableStore } from 'vs/base/common/lifecycle'; import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { Range } from 'vs/editor/common/core/range'; -import { InlineCompletionsProvider, InlineCompletionTriggerKind } from 'vs/editor/common/languages'; +import { InlineCompletionsProvider } from 'vs/editor/common/languages'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { SharedInlineCompletionCache } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextModel'; +import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController'; import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel'; +import { SingleTextEdit } from 'vs/editor/contrib/inlineCompletions/browser/singleTextEdit'; import { GhostTextContext, MockInlineCompletionsProvider } from 'vs/editor/contrib/inlineCompletions/test/browser/utils'; import { ITestCodeEditor, TestCodeEditorInstantiationOptions, withAsyncTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { inlineCompletionToGhostText } from '../../browser/inlineCompletionToGhostText'; suite('Inline Completions', () => { ensureNoDisposablesAreLeakedInTestSuite(); @@ -35,11 +36,7 @@ suite('Inline Completions', () => { const options = ['prefix', 'subword'] as const; const result = {} as any; for (const option of options) { - result[option] = inlineCompletionToGhostText( - { insertText: suggestion, filterText: suggestion, snippetInfo: undefined, range, additionalTextEdits: [], }, - tempModel, - option - )?.render(cleanedText, true); + result[option] = new SingleTextEdit(range, suggestion).computeGhostText(tempModel, option)?.render(cleanedText, true); } tempModel.dispose(); @@ -80,8 +77,12 @@ suite('Inline Completions', () => { assert.deepStrictEqual(getOutput('bar[\tfoo]', 'foobar'), undefined); }); - test('Unsupported cases', () => { - assert.deepStrictEqual(getOutput('foo[\n]', '\n'), undefined); + test('Unsupported Case', () => { + assert.deepStrictEqual(getOutput('fo[o\n]', 'x\nbar'), undefined); + }); + + test('New Line', () => { + assert.deepStrictEqual(getOutput('fo[o\n]', 'o\nbar'), 'foo\n[bar]'); }); test('Multi Part Diffing', () => { @@ -115,8 +116,6 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider, inlineSuggest: { enabled: false } }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('foo'); await timeout(1000); @@ -132,11 +131,9 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('foo'); provider.setReturnValue({ insertText: 'foobar', range: new Range(1, 1, 1, 4) }); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1000); assert.deepStrictEqual(provider.getAndClearCallHistory(), [ @@ -152,7 +149,6 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider, inlineSuggest: { enabled: true } }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); context.keyboardType('foo'); provider.setReturnValue({ insertText: 'foobar', range: new Range(1, 1, 1, 4) }); @@ -171,11 +167,9 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - provider.setReturnValue({ insertText: 'foobar', range: new Range(1, 1, 1, 4) }); context.keyboardType('foo'); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1000); provider.setReturnValue({ insertText: 'foobizz', range: new Range(1, 1, 1, 6) }); @@ -200,16 +194,14 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType(' '); provider.setReturnValue({ insertText: 'foo', range: new Range(1, 2, 1, 3) }); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['', ' [foo]']); - model.commitCurrentSuggestion(); + model.accept(editor); assert.deepStrictEqual(provider.getAndClearCallHistory(), [ { position: '(1,3)', text: ' ', triggerKind: 1, }, @@ -225,16 +217,14 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('\t\t'); provider.setReturnValue({ insertText: 'foo', range: new Range(1, 2, 1, 3) }); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['', '\t\t[foo]']); - model.commitCurrentSuggestion(); + model.accept(editor); assert.deepStrictEqual(provider.getAndClearCallHistory(), [ { position: '(1,3)', text: '\t\t', triggerKind: 1, }, @@ -250,16 +240,14 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('buzz '); provider.setReturnValue({ insertText: 'foo', range: new Range(1, 6, 1, 7) }); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1000); - assert.deepStrictEqual(context.getAndClearViewStates(), ['', 'buzz ']); + assert.deepStrictEqual(context.getAndClearViewStates(), ['']); - model.commitCurrentSuggestion(); + model.accept(editor); assert.deepStrictEqual(provider.getAndClearCallHistory(), [ { position: '(1,7)', text: 'buzz ', triggerKind: 1, }, @@ -275,11 +263,9 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('foo'); provider.setReturnValue({ insertText: 'foobar1', range: new Range(1, 1, 1, 4) }); - model.trigger(InlineCompletionTriggerKind.Automatic); + model.trigger(); await timeout(1000); assert.deepStrictEqual( @@ -293,27 +279,27 @@ suite('Inline Completions', () => { { insertText: 'foobuzz3', range: new Range(1, 1, 1, 4) } ]); - model.showNext(); + model.next(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['foo[bizz2]']); - model.showNext(); + model.next(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['foo[buzz3]']); - model.showNext(); + model.next(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['foo[bar1]']); - model.showPrevious(); + model.previous(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['foo[buzz3]']); - model.showPrevious(); + model.previous(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['foo[bizz2]']); - model.showPrevious(); + model.previous(); await timeout(1000); assert.deepStrictEqual(context.getAndClearViewStates(), ['foo[bar1]']); @@ -330,8 +316,7 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - model.trigger(InlineCompletionTriggerKind.Automatic); + model.trigger(); context.keyboardType('f'); await timeout(40); @@ -358,8 +343,6 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider, inlineSuggest: { enabled: true } }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('foo'); provider.setReturnValue({ insertText: 'foobar', range: new Range(1, 1, 1, 4) }); @@ -387,11 +370,9 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - provider.setReturnValue({ insertText: 'foobar', range: new Range(1, 1, 1, 4) }); context.keyboardType('foo'); - model.trigger(InlineCompletionTriggerKind.Automatic); + model.trigger(); await timeout(1000); assert.deepStrictEqual(provider.getAndClearCallHistory(), [ { position: '(1,4)', text: 'foo', triggerKind: 0, } @@ -426,10 +407,9 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); provider.setReturnValue({ insertText: 'foobar', range: new Range(1, 1, 1, 4) }); context.keyboardType('foo'); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(100); assert.deepStrictEqual(provider.getAndClearCallHistory(), [ { position: '(1,4)', text: 'foo', triggerKind: 1, } @@ -455,13 +435,11 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('fooba'); provider.setReturnValue({ insertText: 'foobar', range: new Range(1, 1, 1, 6) }); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1000); assert.deepStrictEqual(provider.getAndClearCallHistory(), [ { position: '(1,6)', text: 'fooba', triggerKind: 1, } @@ -487,11 +465,10 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider, }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); context.keyboardType('h'); provider.setReturnValue({ insertText: 'helloworld', range: new Range(1, 1, 1, 2) }, 1000); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1030); context.keyboardType('ello'); @@ -513,9 +490,10 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider, inlineSuggest: { enabled: true } }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); context.keyboardType('hello\n'); context.cursorLeft(); + context.keyboardType('x'); + context.leftDelete(); provider.setReturnValue({ insertText: 'helloworld', range: new Range(1, 1, 1, 6) }, 1000); await timeout(2000); @@ -547,7 +525,6 @@ suite('Inline Completions', () => { assert.deepStrictEqual(context.getAndClearViewStates(), [ '', - 'hello\n', 'hello[world]\n', 'hello\n', 'hello\nhello[world]', @@ -560,8 +537,6 @@ suite('Inline Completions', () => { await withAsyncTestCodeEditorAndInlineCompletionsModel('', { fakeClock: true, provider }, async ({ editor, editorViewModel, model, context }) => { - model.setActive(true); - context.keyboardType('buzz\nbaz'); provider.setReturnValue({ insertText: 'bazz', @@ -571,10 +546,10 @@ suite('Inline Completions', () => { text: 'bla' }], }); - model.trigger(InlineCompletionTriggerKind.Explicit); + model.triggerExplicitly(); await timeout(1000); - model.commitCurrentSuggestion(); + model.accept(editor); assert.deepStrictEqual(provider.getAndClearCallHistory(), ([{ position: "(2,4)", triggerKind: 1, text: "buzz\nbaz" }])); @@ -598,7 +573,6 @@ async function withAsyncTestCodeEditorAndInlineCompletionsModel( }, async () => { const disposableStore = new DisposableStore(); - try { if (options.provider) { const languageFeaturesService = new LanguageFeaturesService(); @@ -606,20 +580,25 @@ async function withAsyncTestCodeEditorAndInlineCompletionsModel( options.serviceCollection = new ServiceCollection(); } options.serviceCollection.set(ILanguageFeaturesService, languageFeaturesService); + options.serviceCollection.set(IAudioCueService, { + playAudioCue: async () => { }, + isEnabled(cue: unknown) { return false; }, + } as any); const d = languageFeaturesService.inlineCompletionsProvider.register({ pattern: '**' }, options.provider); disposableStore.add(d); } let result: T; await withAsyncTestCodeEditor(text, options, async (editor, editorViewModel, instantiationService) => { - const cache = disposableStore.add(new SharedInlineCompletionCache()); - const model = instantiationService.createInstance(InlineCompletionsModel, editor, cache); + const controller = instantiationService.createInstance(InlineCompletionsController, editor); + const model = controller.model.get()!; const context = new GhostTextContext(model, editor); try { result = await callback({ editor, editorViewModel, model, context }); } finally { context.dispose(); model.dispose(); + controller.dispose(); } }); diff --git a/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts b/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts index 632700ef531..661894710d7 100644 --- a/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts +++ b/src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts @@ -12,8 +12,6 @@ import { Range } from 'vs/editor/common/core/range'; import { CompletionItemKind, CompletionItemProvider } from 'vs/editor/common/languages'; import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; -import { SharedInlineCompletionCache } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextModel'; -import { SuggestWidgetPreviewModel } from 'vs/editor/contrib/inlineCompletions/browser/suggestWidgetPreviewModel'; import { GhostTextContext } from 'vs/editor/contrib/inlineCompletions/test/browser/utils'; import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; @@ -28,24 +26,21 @@ import { InMemoryStorageService, IStorageService } from 'vs/platform/storage/com import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; import * as assert from 'assert'; -import { createTextModel } from 'vs/editor/test/common/testTextModel'; import { ILabelService } from 'vs/platform/label/common/label'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { rangeStartsWith } from 'vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider'; import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { minimizeInlineCompletion } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionToGhostText'; +import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel'; +import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController'; +import { autorun } from 'vs/base/common/observable'; +import { setUnexpectedErrorHandler } from 'vs/base/common/errors'; +import { IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; suite('Suggest Widget Model', () => { - test('rangeStartsWith', () => { - assert.strictEqual(rangeStartsWith(new Range(1, 1, 10, 5), new Range(1, 1, 1, 1)), true); - assert.strictEqual(rangeStartsWith(new Range(1, 1, 10, 5), new Range(1, 1, 10, 5)), true); - assert.strictEqual(rangeStartsWith(new Range(1, 1, 10, 5), new Range(1, 1, 10, 4)), true); - assert.strictEqual(rangeStartsWith(new Range(1, 1, 10, 5), new Range(1, 1, 9, 6)), true); - - assert.strictEqual(rangeStartsWith(new Range(2, 1, 10, 5), new Range(1, 1, 10, 5)), false); - assert.strictEqual(rangeStartsWith(new Range(1, 1, 10, 5), new Range(1, 1, 10, 6)), false); - assert.strictEqual(rangeStartsWith(new Range(1, 1, 10, 5), new Range(1, 1, 11, 4)), false); + setup(() => { + setUnexpectedErrorHandler(function (err) { + throw err; + }); }); // This test is skipped because the fix for this causes https://github.com/microsoft/vscode/issues/166023 @@ -55,9 +50,10 @@ suite('Suggest Widget Model', () => { async ({ editor, editorViewModel, context, model }) => { let last: boolean | undefined = undefined; const history = new Array(); - model.onDidChange(() => { - if (last !== model.isActive) { - last = model.isActive; + const d = autorun('debug', reader => { + const selectedSuggestItem = !!model.selectedSuggestItem.read(reader); + if (last !== selectedSuggestItem) { + last = selectedSuggestItem; history.push(last); } }); @@ -77,6 +73,8 @@ suite('Suggest Widget Model', () => { await timeout(1000); assert.deepStrictEqual(history.splice(0), [false]); + + d.dispose(); } ); }); @@ -89,11 +87,11 @@ suite('Suggest Widget Model', () => { const suggestController = (editor.getContribution(SuggestController.ID) as SuggestController); suggestController.triggerSuggest(); await timeout(1000); - assert.deepStrictEqual(context.getAndClearViewStates(), ['', 'h', 'h[ello]']); + assert.deepStrictEqual(context.getAndClearViewStates(), ['', 'h[ello]']); context.keyboardType('.'); await timeout(1000); - assert.deepStrictEqual(context.getAndClearViewStates(), ['h', 'hello', 'hello.', 'hello.[hello]']); + assert.deepStrictEqual(context.getAndClearViewStates(), ['h', 'hello.[hello]']); suggestController.cancelSuggestWidget(); @@ -102,30 +100,10 @@ suite('Suggest Widget Model', () => { } ); }); - - test('minimizeInlineCompletion', async () => { - const model = createTextModel('fun'); - const result = minimizeInlineCompletion(model, { - range: new Range(1, 1, 1, 4), - filterText: 'function', - insertText: 'function', - snippetInfo: undefined, - additionalTextEdits: [], - })!; - - assert.deepStrictEqual({ - range: result.range.toString(), - text: result.insertText - }, { - range: '[1,4 -> 1,4]', - text: 'ction' - }); - - model.dispose(); - }); }); const provider: CompletionItemProvider = { + _debugDisplayName: 'test', triggerCharacters: ['.'], async provideCompletionItems(model, pos) { const word = model.getWordAtPosition(pos); @@ -148,7 +126,7 @@ const provider: CompletionItemProvider = { async function withAsyncTestCodeEditorAndInlineCompletionsModel( text: string, options: TestCodeEditorInstantiationOptions & { provider?: CompletionItemProvider; fakeClock?: boolean; serviceCollection?: never }, - callback: (args: { editor: ITestCodeEditor; editorViewModel: ViewModel; model: SuggestWidgetPreviewModel; context: GhostTextContext }) => Promise + callback: (args: { editor: ITestCodeEditor; editorViewModel: ViewModel; model: InlineCompletionsModel; context: GhostTextContext }) => Promise ): Promise { await runWithFakedTimers({ useFakeTimers: options.fakeClock }, async () => { const disposableStore = new DisposableStore(); @@ -178,6 +156,10 @@ async function withAsyncTestCodeEditorAndInlineCompletionsModel( }], [ILabelService, new class extends mock() { }], [IWorkspaceContextService, new class extends mock() { }], + [IAudioCueService, { + playAudioCue: async () => { }, + isEnabled(cue: unknown) { return false; }, + } as any] ); if (options.provider) { @@ -190,11 +172,12 @@ async function withAsyncTestCodeEditorAndInlineCompletionsModel( await withAsyncTestCodeEditor(text, { ...options, serviceCollection }, async (editor, editorViewModel, instantiationService) => { editor.registerAndInstantiateContribution(SnippetController2.ID, SnippetController2); editor.registerAndInstantiateContribution(SuggestController.ID, SuggestController); - const cache = disposableStore.add(new SharedInlineCompletionCache()); - const model = instantiationService.createInstance(SuggestWidgetPreviewModel, editor, cache); + editor.registerAndInstantiateContribution(InlineCompletionsController.ID, InlineCompletionsController); + const model = InlineCompletionsController.get(editor)?.model.get()!; + const context = new GhostTextContext(model, editor); await callback({ editor, editorViewModel, model, context }); - model.dispose(); + context.dispose(); }); } finally { disposableStore.dispose(); diff --git a/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts b/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts index 17eba2098c3..b25536d3703 100644 --- a/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts +++ b/src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts @@ -10,8 +10,9 @@ import { CoreEditingCommands, CoreNavigationCommands } from 'vs/editor/browser/c import { Position } from 'vs/editor/common/core/position'; import { ITextModel } from 'vs/editor/common/model'; import { InlineCompletion, InlineCompletionContext, InlineCompletionsProvider } from 'vs/editor/common/languages'; -import { GhostTextWidgetModel } from 'vs/editor/contrib/inlineCompletions/browser/ghostText'; import { ITestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; +import { InlineCompletionsModel } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel'; +import { autorun } from 'vs/base/common/observable'; export class MockInlineCompletionsProvider implements InlineCompletionsProvider { private returnValue: InlineCompletion[] = []; @@ -76,30 +77,23 @@ export class GhostTextContext extends Disposable { return this._currentPrettyViewState; } - constructor(private readonly model: GhostTextWidgetModel, private readonly editor: ITestCodeEditor) { + constructor(model: InlineCompletionsModel, private readonly editor: ITestCodeEditor) { super(); - this._register( - model.onDidChange(() => { - this.update(); - }) - ); - this.update(); - } + this._register(autorun('update', reader => { + const ghostText = model.ghostText.read(reader); + let view: string | undefined; + if (ghostText) { + view = ghostText.render(this.editor.getValue(), true); + } else { + view = this.editor.getValue(); + } - private update(): void { - const ghostText = this.model?.ghostText; - let view: string | undefined; - if (ghostText) { - view = ghostText.render(this.editor.getValue(), true); - } else { - view = this.editor.getValue(); - } - - if (this._currentPrettyViewState !== view) { - this.prettyViewStates.push(view); - } - this._currentPrettyViewState = view; + if (this._currentPrettyViewState !== view) { + this.prettyViewStates.push(view); + } + this._currentPrettyViewState = view; + })); } public getAndClearViewStates(): (string | undefined)[] { diff --git a/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.ts b/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.ts new file mode 100644 index 00000000000..db892ea676c --- /dev/null +++ b/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.ts @@ -0,0 +1,165 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as dom from 'vs/base/browser/dom'; +import { CancelablePromise, disposableTimeout } from 'vs/base/common/async'; +import { Codicon } from 'vs/base/common/codicons'; +import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { noBreakWhitespace } from 'vs/base/common/strings'; +import { ThemeIcon } from 'vs/base/common/themables'; +import 'vs/css!./inlineProgressWidget'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { IPosition } from 'vs/editor/common/core/position'; +import { Range } from 'vs/editor/common/core/range'; +import { IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; +import { TrackedRangeStickiness } from 'vs/editor/common/model'; +import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; + +const inlineProgressDecoration = ModelDecorationOptions.register({ + description: 'inline-progress-widget', + stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges, + showIfCollapsed: true, + after: { + content: noBreakWhitespace, + inlineClassName: 'inline-editor-progress-decoration', + inlineClassNameAffectsLetterSpacing: true, + } +}); + + +class InlineProgressWidget extends Disposable implements IContentWidget { + private static readonly baseId = 'editor.widget.inlineProgressWidget'; + + allowEditorOverflow = false; + suppressMouseDown = true; + + private domNode!: HTMLElement; + + constructor( + private readonly typeId: string, + private readonly editor: ICodeEditor, + private readonly range: Range, + title: string, + private readonly delegate: InlineProgressDelegate, + ) { + super(); + + this.create(title); + + this.editor.addContentWidget(this); + this.editor.layoutContentWidget(this); + } + + private create(title: string): void { + this.domNode = dom.$('.inline-progress-widget'); + this.domNode.role = 'button'; + this.domNode.title = title; + + const iconElement = dom.$('span.icon'); + this.domNode.append(iconElement); + + iconElement.classList.add(...ThemeIcon.asClassNameArray(Codicon.loading), 'codicon-modifier-spin'); + + const updateSize = () => { + const lineHeight = this.editor.getOption(EditorOption.lineHeight); + this.domNode.style.height = `${lineHeight}px`; + this.domNode.style.width = `${Math.ceil(0.8 * lineHeight)}px`; + }; + updateSize(); + + this._register(this.editor.onDidChangeConfiguration(c => { + if (c.hasChanged(EditorOption.fontSize) || c.hasChanged(EditorOption.lineHeight)) { + updateSize(); + } + })); + + this._register(dom.addDisposableListener(this.domNode, dom.EventType.CLICK, e => { + this.delegate.cancel(); + })); + } + + getId(): string { + return InlineProgressWidget.baseId + '.' + this.typeId; + } + + getDomNode(): HTMLElement { + return this.domNode; + } + + getPosition(): IContentWidgetPosition | null { + return { + position: { lineNumber: this.range.startLineNumber, column: this.range.startColumn }, + preference: [ContentWidgetPositionPreference.EXACT] + }; + } + + override dispose(): void { + super.dispose(); + this.editor.removeContentWidget(this); + } +} + +interface InlineProgressDelegate { + cancel(): void; +} + +export class InlineProgressManager extends Disposable { + + /** Delay before showing the progress widget */ + private readonly _showDelay = 500; // ms + private readonly _showPromise = this._register(new MutableDisposable()); + + private readonly _currentDecorations: IEditorDecorationsCollection; + private readonly _currentWidget = new MutableDisposable(); + + private _operationIdPool = 0; + private _currentOperation?: number; + + constructor( + readonly id: string, + private readonly _editor: ICodeEditor, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + ) { + super(); + + this._currentDecorations = _editor.createDecorationsCollection(); + } + + public async showWhile(position: IPosition, title: string, promise: CancelablePromise): Promise { + const operationId = this._operationIdPool++; + this._currentOperation = operationId; + + this.clear(); + + this._showPromise.value = disposableTimeout(() => { + const range = Range.fromPositions(position); + const decorationIds = this._currentDecorations.set([{ + range: range, + options: inlineProgressDecoration, + }]); + + if (decorationIds.length > 0) { + this._currentWidget.value = this._instantiationService.createInstance(InlineProgressWidget, this.id, this._editor, range, title, promise); + } + }, this._showDelay); + + try { + return await promise; + } finally { + if (this._currentOperation === operationId) { + this.clear(); + this._currentOperation = undefined; + } + } + } + + private clear() { + this._showPromise.clear(); + this._currentDecorations.clear(); + this._currentWidget.clear(); + } +} diff --git a/src/vs/editor/contrib/inlineProgress/browser/inlineProgressWidget.css b/src/vs/editor/contrib/inlineProgress/browser/inlineProgressWidget.css new file mode 100644 index 00000000000..105c60d52b5 --- /dev/null +++ b/src/vs/editor/contrib/inlineProgress/browser/inlineProgressWidget.css @@ -0,0 +1,29 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +.inline-editor-progress-decoration { + display: inline-block; + width: 1em; + height: 1em; +} + +.inline-progress-widget { + display: flex !important; + justify-content: center; + align-items: center; +} + +.inline-progress-widget .icon { + font-size: 80% !important; +} + +.inline-progress-widget:hover .icon { + font-size: 90% !important; + animation: none; +} + +.inline-progress-widget:hover .icon::before { + content: "\ea76"; /* codicon-x */ +} diff --git a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.css b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.css index 5e2ecdb5400..5661e84b0a3 100644 --- a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.css +++ b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.css @@ -5,5 +5,7 @@ .monaco-editor .linked-editing-decoration { background-color: var(--vscode-editor-linkedEditingBackground); - border-left-color: var(--vscode-editor-linkedEditingBackground); + + /* Ensure decoration is visible even if range is empty */ + min-width: 1px; } diff --git a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts index c75f8ccb0d4..f862405cd96 100644 --- a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts +++ b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts @@ -91,7 +91,7 @@ export class LinkedEditingContribution extends Disposable implements IEditorCont this._providers = languageFeaturesService.linkedEditingRangeProvider; this._enabled = false; this._visibleContextKey = CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE.bindTo(contextKeyService); - this._debounceInformation = languageFeatureDebounceService.for(this._providers, 'Linked Editing', { min: 200 }); + this._debounceInformation = languageFeatureDebounceService.for(this._providers, 'Linked Editing', { max: 200 }); this._currentDecorations = this._editor.createDecorationsCollection(); this._languageWordPattern = null; @@ -177,7 +177,7 @@ export class LinkedEditingContribution extends Disposable implements IEditorCont } private _syncRanges(token: number): void { - // dalayed invocation, make sure we're still on + // delayed invocation, make sure we're still on if (!this._editor.hasModel() || token !== this._syncRangesToken || this._currentDecorations.length === 0) { // nothing to do return; @@ -300,6 +300,9 @@ export class LinkedEditingContribution extends Disposable implements IEditorCont } } + // Clear existing decorations while we compute new ones + this.clearRanges(); + this._currentRequestPosition = position; this._currentRequestModelVersion = modelVersionId; const request = createCancelablePromise(async token => { diff --git a/src/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.ts b/src/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.ts index bf05c584c46..bb27260aa40 100644 --- a/src/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.ts +++ b/src/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.ts @@ -4,10 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { MarkdownRenderOptions, MarkedOptions, renderMarkdown } from 'vs/base/browser/markdownRenderer'; +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import { onUnexpectedError } from 'vs/base/common/errors'; import { Emitter } from 'vs/base/common/event'; import { IMarkdownString, MarkdownStringTrustedOptions } from 'vs/base/common/htmlContent'; import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; +import 'vs/css!./renderedMarkdown'; import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; @@ -32,7 +34,7 @@ export interface IMarkdownRendererOptions { */ export class MarkdownRenderer { - private static _ttpTokenizer = window.trustedTypes?.createPolicy('tokenizeToString', { + private static _ttpTokenizer = createTrustedTypesPolicy('tokenizeToString', { createHTML(html: string) { return html; } @@ -59,6 +61,7 @@ export class MarkdownRenderer { const disposables = new DisposableStore(); const rendered = disposables.add(renderMarkdown(markdown, { ...this._getRenderOptions(markdown, disposables), ...options }, markedOptions)); + rendered.element.classList.add('rendered-markdown'); return { element: rendered.element, dispose: () => disposables.dispose() diff --git a/src/vs/editor/contrib/markdownRenderer/browser/renderedMarkdown.css b/src/vs/editor/contrib/markdownRenderer/browser/renderedMarkdown.css new file mode 100644 index 00000000000..d784524a2f1 --- /dev/null +++ b/src/vs/editor/contrib/markdownRenderer/browser/renderedMarkdown.css @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +.monaco-editor .rendered-markdown kbd { + background-color: var(--vscode-keybindingLabel-background); + color: var(--vscode-keybindingLabel-foreground); + border-style: solid; + border-width: 1px; + border-radius: 3px; + border-color: var(--vscode-keybindingLabel-border); + border-bottom-color: var(--vscode-keybindingLabel-bottomBorder); + box-shadow: inset 0 -1px 0 var(--vscode-widget-shadow); + vertical-align: middle; + padding: 1px 3px; +} diff --git a/src/vs/editor/contrib/message/browser/messageController.css b/src/vs/editor/contrib/message/browser/messageController.css index 2644813044d..6ea335781ce 100644 --- a/src/vs/editor/contrib/message/browser/messageController.css +++ b/src/vs/editor/contrib/message/browser/messageController.css @@ -31,10 +31,23 @@ } .monaco-editor .monaco-editor-overlaymessage .message { - padding: 1px 4px; - color: var(--vscode-inputValidation-infoForeground); - background-color: var(--vscode-inputValidation-infoBackground); + padding: 2px 4px; + color: var(--vscode-editorHoverWidget-foreground); + background-color: var(--vscode-editorHoverWidget-background); border: 1px solid var(--vscode-inputValidation-infoBorder); + border-radius: 3px; +} + +.monaco-editor .monaco-editor-overlaymessage .message p { + margin-block: 0px; +} + +.monaco-editor .monaco-editor-overlaymessage .message a { + color: var(--vscode-textLink-foreground); +} + +.monaco-editor .monaco-editor-overlaymessage .message a:hover { + color: var(--vscode-textLink-activeForeground); } .monaco-editor.hc-black .monaco-editor-overlaymessage .message, @@ -50,6 +63,7 @@ z-index: 1000; border-width: 8px; position: absolute; + left: 2px; } .monaco-editor .monaco-editor-overlaymessage .anchor.top { diff --git a/src/vs/editor/contrib/message/browser/messageController.ts b/src/vs/editor/contrib/message/browser/messageController.ts index 20176e5221d..e4466162dc4 100644 --- a/src/vs/editor/contrib/message/browser/messageController.ts +++ b/src/vs/editor/contrib/message/browser/messageController.ts @@ -3,8 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { renderMarkdown } from 'vs/base/browser/markdownRenderer'; import { alert } from 'vs/base/browser/ui/aria/aria'; -import { TimeoutTimer } from 'vs/base/common/async'; +import { Event } from 'vs/base/common/event'; +import { IMarkdownString, isMarkdownString } from 'vs/base/common/htmlContent'; import { KeyCode } from 'vs/base/common/keyCodes'; import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; import 'vs/css!./messageController'; @@ -14,9 +16,12 @@ import { IPosition } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; import { PositionAffinity } from 'vs/editor/common/model'; +import { openLinkFromMarkdown } from 'vs/editor/contrib/markdownRenderer/browser/markdownRenderer'; import * as nls from 'vs/nls'; import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import * as dom from 'vs/base/browser/dom'; export class MessageController implements IEditorContribution { @@ -32,10 +37,13 @@ export class MessageController implements IEditorContribution { private readonly _visible: IContextKey; private readonly _messageWidget = new MutableDisposable(); private readonly _messageListeners = new DisposableStore(); + private _message: { element: HTMLElement; dispose: () => void } | undefined; + private _mouseOverMessage: boolean = false; constructor( editor: ICodeEditor, - @IContextKeyService contextKeyService: IContextKeyService + @IContextKeyService contextKeyService: IContextKeyService, + @IOpenerService private readonly _openerService: IOpenerService ) { this._editor = editor; @@ -43,6 +51,7 @@ export class MessageController implements IEditorContribution { } dispose(): void { + this._message?.dispose(); this._messageListeners.dispose(); this._messageWidget.dispose(); this._visible.reset(); @@ -52,23 +61,39 @@ export class MessageController implements IEditorContribution { return this._visible.get(); } - showMessage(message: string, position: IPosition): void { + showMessage(message: IMarkdownString | string, position: IPosition): void { - alert(message); + alert(isMarkdownString(message) ? message.value : message); this._visible.set(true); this._messageWidget.clear(); this._messageListeners.clear(); - this._messageWidget.value = new MessageWidget(this._editor, position, message); + this._message = isMarkdownString(message) ? renderMarkdown(message, { + actionHandler: { + callback: (url) => openLinkFromMarkdown(this._openerService, url, isMarkdownString(message) ? message.isTrusted : undefined), + disposables: this._messageListeners + }, + }) : undefined; + this._messageWidget.value = new MessageWidget(this._editor, position, typeof message === 'string' ? message : this._message!.element); - // close on blur, cursor, model change, dispose - this._messageListeners.add(this._editor.onDidBlurEditorText(() => this.closeMessage())); + // close on blur (debounced to allow to tab into the message), cursor, model change, dispose + this._messageListeners.add(Event.debounce(this._editor.onDidBlurEditorText, (last, event) => event, 0)(() => { + if (this._mouseOverMessage) { + return; // override when mouse over message + } + + if (this._messageWidget.value && dom.isAncestor(document.activeElement, this._messageWidget.value.getDomNode())) { + return; // override when focus is inside the message + } + + this.closeMessage(); + } + )); this._messageListeners.add(this._editor.onDidChangeCursorPosition(() => this.closeMessage())); this._messageListeners.add(this._editor.onDidDispose(() => this.closeMessage())); this._messageListeners.add(this._editor.onDidChangeModel(() => this.closeMessage())); - - // 3sec - this._messageListeners.add(new TimeoutTimer(() => this.closeMessage(), 3000)); + this._messageListeners.add(dom.addDisposableListener(this._messageWidget.value.getDomNode(), dom.EventType.MOUSE_ENTER, () => this._mouseOverMessage = true, true)); + this._messageListeners.add(dom.addDisposableListener(this._messageWidget.value.getDomNode(), dom.EventType.MOUSE_LEAVE, () => this._mouseOverMessage = false, true)); // close on mouse move let bounds: Range; @@ -132,7 +157,7 @@ class MessageWidget implements IContentWidget { return { dispose }; } - constructor(editor: ICodeEditor, { lineNumber, column }: IPosition, text: string) { + constructor(editor: ICodeEditor, { lineNumber, column }: IPosition, text: HTMLElement | string) { this._editor = editor; this._editor.revealLinesInCenterIfOutsideViewport(lineNumber, lineNumber, ScrollType.Smooth); @@ -147,8 +172,13 @@ class MessageWidget implements IContentWidget { this._domNode.appendChild(anchorTop); const message = document.createElement('div'); - message.classList.add('message'); - message.textContent = text; + if (typeof text === 'string') { + message.classList.add('message'); + message.textContent = text; + } else { + text.classList.add('message'); + message.appendChild(text); + } this._domNode.appendChild(message); const anchorBottom = document.createElement('div'); 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 130901fcf03..dffb158ed25 100644 --- a/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts +++ b/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts @@ -92,7 +92,9 @@ suite('Multicursor selection', () => { get: (key: string) => queryState[key], getBoolean: (key: string) => !!queryState[key], getNumber: (key: string) => undefined!, + getObject: (key: string) => undefined!, store: (key: string, value: any) => { queryState[key] = value; return Promise.resolve(); }, + storeAll: () => { throw new Error(); }, remove: (key) => undefined, log: () => undefined, switch: () => Promise.resolve(undefined), diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHints.css b/src/vs/editor/contrib/parameterHints/browser/parameterHints.css index d6537f63f1c..93758171dac 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHints.css +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHints.css @@ -10,7 +10,7 @@ flex-direction: column; line-height: 1.5em; cursor: default; - color: var(--vscode-editor-hoverForeground); + color: var(--vscode-editorHoverWidget-foreground); background-color: var(--vscode-editorHoverWidget-background); border: 1px solid var(--vscode-editorHoverWidget-border); } diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts index bfc1373c295..dda7f97531a 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts @@ -20,7 +20,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ParameterHintsWidget } from './parameterHintsWidget'; -class ParameterHintsController extends Disposable implements IEditorContribution { +export class ParameterHintsController extends Disposable implements IEditorContribution { public static readonly ID = 'editor.controller.parameterHints'; diff --git a/src/vs/editor/contrib/peekView/browser/peekView.ts b/src/vs/editor/contrib/peekView/browser/peekView.ts index 49df433bf1a..5c0882b8db4 100644 --- a/src/vs/editor/contrib/peekView/browser/peekView.ts +++ b/src/vs/editor/contrib/peekView/browser/peekView.ts @@ -26,7 +26,7 @@ import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActio import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { createDecorator, IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { activeContrastBorder, contrastBorder, editorForeground, editorInfoForeground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; +import { activeContrastBorder, contrastBorder, editorForeground, editorInfoForeground, registerColor } from 'vs/platform/theme/common/colorRegistry'; export const IPeekViewService = createDecorator('IPeekViewService'); export interface IPeekViewService { @@ -278,7 +278,7 @@ export abstract class PeekViewWidget extends ZoneWidget { } -export const peekViewTitleBackground = registerColor('peekViewTitle.background', { dark: transparent(editorInfoForeground, .1), light: transparent(editorInfoForeground, .1), hcDark: null, hcLight: null }, nls.localize('peekViewTitleBackground', 'Background color of the peek view title area.')); +export const peekViewTitleBackground = registerColor('peekViewTitle.background', { dark: '#252526', light: '#F3F3F3', hcDark: Color.black, hcLight: Color.white }, nls.localize('peekViewTitleBackground', 'Background color of the peek view title area.')); export const peekViewTitleForeground = registerColor('peekViewTitleLabel.foreground', { dark: Color.white, light: Color.black, hcDark: Color.white, hcLight: editorForeground }, nls.localize('peekViewTitleForeground', 'Color of the peek view title.')); export const peekViewTitleInfoForeground = registerColor('peekViewTitleDescription.foreground', { dark: '#ccccccb3', light: '#616161', hcDark: '#FFFFFF99', hcLight: '#292929' }, nls.localize('peekViewTitleInfoForeground', 'Color of the peek view title info.')); export const peekViewBorder = registerColor('peekView.border', { dark: editorInfoForeground, light: editorInfoForeground, hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('peekViewBorder', 'Color of the peek view borders and arrow.')); diff --git a/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts b/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts index dca77e96526..4336914a3ce 100644 --- a/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts +++ b/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts @@ -16,10 +16,11 @@ import { overviewRulerRangeHighlight } from 'vs/editor/common/core/editorColorRe import { IQuickAccessProvider } from 'vs/platform/quickinput/common/quickAccess'; import { IKeyMods, IQuickPick, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; import { themeColorFromId } from 'vs/platform/theme/common/themeService'; +import { status } from 'vs/base/browser/ui/aria/aria'; interface IEditorLineDecoration { - rangeHighlightId: string; - overviewRulerDecorationId: string; + readonly rangeHighlightId: string; + readonly overviewRulerDecorationId: string; } export interface IEditorNavigationQuickAccessOptions { @@ -146,6 +147,10 @@ export abstract class AbstractEditorNavigationQuickAccessProvider implements IQu if (!options.preserveFocus) { editor.focus(); } + const model = editor.getModel(); + if (model && 'getLineContent' in model) { + status(`${model.getLineContent(options.range.startLineNumber)}`); + } } protected getModel(editor: IEditor | IDiffEditor): ITextModel | undefined { diff --git a/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts b/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts index 138f8527bba..36ff95e8105 100644 --- a/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts +++ b/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts @@ -3,9 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { MarkdownString } from 'vs/base/common/htmlContent'; import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; import * as nls from 'vs/nls'; @@ -24,11 +26,16 @@ export class ReadOnlyMessageController extends Disposable implements IEditorCont private _onDidAttemptReadOnlyEdit(): void { const messageController = MessageController.get(this.editor); if (messageController && this.editor.hasModel()) { - if (this.editor.isSimpleWidget) { - messageController.showMessage(nls.localize('editor.simple.readonly', "Cannot edit in read-only input"), this.editor.getPosition()); - } else { - messageController.showMessage(nls.localize('editor.readonly', "Cannot edit in read-only editor"), this.editor.getPosition()); + let message = this.editor.getOptions().get(EditorOption.readOnlyMessage); + if (!message) { + if (this.editor.isSimpleWidget) { + message = new MarkdownString(nls.localize('editor.simple.readonly', "Cannot edit in read-only input")); + } else { + message = new MarkdownString(nls.localize('editor.readonly', "Cannot edit in read-only editor")); + } } + + messageController.showMessage(message, this.editor.getPosition()); } } } diff --git a/src/vs/editor/contrib/rename/browser/rename.ts b/src/vs/editor/contrib/rename/browser/rename.ts index 6b9f4f50237..926d9da07c3 100644 --- a/src/vs/editor/contrib/rename/browser/rename.ts +++ b/src/vs/editor/contrib/rename/browser/rename.ts @@ -155,7 +155,10 @@ class RenameController implements IEditorContribution { async run(): Promise { + // set up cancellation token to prevent reentrant rename, this + // is the parent to the resolve- and rename-tokens this._cts.dispose(true); + this._cts = new CancellationTokenSource(); if (!this.editor.hasModel()) { return undefined; @@ -168,17 +171,21 @@ class RenameController implements IEditorContribution { return undefined; } - this._cts = new EditorStateCancellationTokenSource(this.editor, CodeEditorStateFlag.Position | CodeEditorStateFlag.Value); + // part 1 - resolve rename location + const cts1 = new EditorStateCancellationTokenSource(this.editor, CodeEditorStateFlag.Position | CodeEditorStateFlag.Value, undefined, this._cts.token); - // resolve rename location let loc: RenameLocation & Rejection | undefined; try { - const resolveLocationOperation = skeleton.resolveRenameLocation(this._cts.token); + const resolveLocationOperation = skeleton.resolveRenameLocation(cts1.token); this._progressService.showWhile(resolveLocationOperation, 250); loc = await resolveLocationOperation; + } catch (e) { MessageController.get(this.editor)?.showMessage(e || nls.localize('resolveRenameLocationFailed', "An unknown error occurred while resolving rename location"), position); return undefined; + + } finally { + cts1.dispose(); } if (!loc) { @@ -190,13 +197,13 @@ class RenameController implements IEditorContribution { return undefined; } - if (this._cts.token.isCancellationRequested) { + if (cts1.token.isCancellationRequested) { return undefined; } - this._cts.dispose(); - this._cts = new EditorStateCancellationTokenSource(this.editor, CodeEditorStateFlag.Position | CodeEditorStateFlag.Value, loc.range); - // do rename at location + // part 2 - do rename at location + const cts2 = new EditorStateCancellationTokenSource(this.editor, CodeEditorStateFlag.Position | CodeEditorStateFlag.Value, loc.range, this._cts.token); + const selection = this.editor.getSelection(); let selectionStart = 0; let selectionEnd = loc.text.length; @@ -207,19 +214,20 @@ class RenameController implements IEditorContribution { } const supportPreview = this._bulkEditService.hasPreviewHandler() && this._configService.getValue(this.editor.getModel().uri, 'editor.rename.enablePreview'); - const inputFieldResult = await this._renameInputField.getInput(loc.range, loc.text, selectionStart, selectionEnd, supportPreview, this._cts.token); + const inputFieldResult = await this._renameInputField.getInput(loc.range, loc.text, selectionStart, selectionEnd, supportPreview, cts2.token); // no result, only hint to focus the editor or not if (typeof inputFieldResult === 'boolean') { if (inputFieldResult) { this.editor.focus(); } + cts2.dispose(); return undefined; } this.editor.focus(); - const renameOperation = raceCancellation(skeleton.provideRenameEdits(inputFieldResult.newName, this._cts.token), this._cts.token).then(async renameResult => { + const renameOperation = raceCancellation(skeleton.provideRenameEdits(inputFieldResult.newName, cts2.token), cts2.token).then(async renameResult => { if (!renameResult || !this.editor.hasModel()) { return; @@ -252,6 +260,9 @@ class RenameController implements IEditorContribution { }, err => { this._notificationService.error(nls.localize('rename.failed', "Rename failed to compute edits")); this._logService.error(err); + + }).finally(() => { + cts2.dispose(); }); this._progressService.showWhile(renameOperation, 250); @@ -330,7 +341,7 @@ registerEditorCommand(new RenameCommand({ handler: x => x.acceptRenameInput(false), kbOpts: { weight: KeybindingWeight.EditorContrib + 99, - kbExpr: EditorContextKeys.focus, + kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, ContextKeyExpr.not('isComposing')), primary: KeyCode.Enter } })); @@ -341,7 +352,7 @@ registerEditorCommand(new RenameCommand({ handler: x => x.acceptRenameInput(true), kbOpts: { weight: KeybindingWeight.EditorContrib + 99, - kbExpr: EditorContextKeys.focus, + kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, ContextKeyExpr.not('isComposing')), primary: KeyMod.Shift + KeyCode.Enter } })); diff --git a/src/vs/editor/contrib/rename/browser/renameInputField.ts b/src/vs/editor/contrib/rename/browser/renameInputField.ts index 9e27efec8b7..2ea6da1d7f8 100644 --- a/src/vs/editor/contrib/rename/browser/renameInputField.ts +++ b/src/vs/editor/contrib/rename/browser/renameInputField.ts @@ -8,6 +8,7 @@ import { DisposableStore } from 'vs/base/common/lifecycle'; import 'vs/css!./renameInputField'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { IDimension } from 'vs/editor/common/core/dimension'; import { Position } from 'vs/editor/common/core/position'; import { IRange } from 'vs/editor/common/core/range'; import { ScrollType } from 'vs/editor/common/editorCommon'; @@ -79,13 +80,6 @@ export class RenameInputField implements IContentWidget { this._label = document.createElement('div'); this._label.className = 'rename-label'; this._domNode.appendChild(this._label); - const updateLabel = () => { - const [accept, preview] = this._acceptKeybindings; - this._keybindingService.lookupKeybinding(accept); - this._label!.innerText = localize({ key: 'label', comment: ['placeholders are keybindings, e.g "F2 to Rename, Shift+F2 to Preview"'] }, "{0} to Rename, {1} to Preview", this._keybindingService.lookupKeybinding(accept)?.getLabel(), this._keybindingService.lookupKeybinding(preview)?.getLabel()); - }; - updateLabel(); - this._disposables.add(this._keybindingService.onDidUpdateKeybindings(updateLabel)); this._updateFont(); this._updateStyles(this._themeService.getColorTheme()); @@ -136,6 +130,12 @@ export class RenameInputField implements IContentWidget { }; } + beforeRender(): IDimension | null { + const [accept, preview] = this._acceptKeybindings; + this._label!.innerText = localize({ key: 'label', comment: ['placeholders are keybindings, e.g "F2 to Rename, Shift+F2 to Preview"'] }, "{0} to Rename, {1} to Preview", this._keybindingService.lookupKeybinding(accept)?.getLabel(), this._keybindingService.lookupKeybinding(preview)?.getLabel()); + return null; + } + afterRender(position: ContentWidgetPositionPreference | null): void { if (!position) { // cancel rename when input widget isn't rendered anymore diff --git a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts index 43c004886d0..10ad6211d76 100644 --- a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts +++ b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts @@ -126,6 +126,11 @@ class ModelSemanticColoring extends Disposable { this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model)); } })); + this._register(this._model.onDidChangeAttached(() => { + if (!this._fetchDocumentSemanticTokens.isScheduled()) { + this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model)); + } + })); this._register(this._model.onDidChangeLanguage(() => { // clear any outstanding state if (this._currentDocumentResponse) { @@ -180,6 +185,8 @@ class ModelSemanticColoring extends Disposable { this._currentDocumentRequestCancellationTokenSource.cancel(); this._currentDocumentRequestCancellationTokenSource = null; } + dispose(this._documentProvidersChangeListeners); + this._documentProvidersChangeListeners = []; this._setDocumentSemanticTokens(null, null, null, []); this._isDisposed = true; @@ -201,6 +208,11 @@ class ModelSemanticColoring extends Disposable { return; } + if (!this._model.isAttachedToEditor()) { + // this document is not visible, there is no need to fetch semantic tokens for it + return; + } + const cancellationTokenSource = new CancellationTokenSource(); const lastProvider = this._currentDocumentResponse ? this._currentDocumentResponse.provider : null; const lastResultId = this._currentDocumentResponse ? this._currentDocumentResponse.resultId || null : null; diff --git a/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts b/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts index ccf205ae1b6..52a1f9401ac 100644 --- a/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts +++ b/src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts @@ -22,7 +22,7 @@ import { DocumentRangeSemanticTokensProvider } from 'vs/editor/common/languages' import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { ISemanticTokensStylingService } from 'vs/editor/common/services/semanticTokensStyling'; -class ViewportSemanticTokensContribution extends Disposable implements IEditorContribution { +export class ViewportSemanticTokensContribution extends Disposable implements IEditorContribution { public static readonly ID = 'editor.contrib.viewportSemanticTokens'; diff --git a/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts b/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts index 9a4c4876426..85cda9b2e53 100644 --- a/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts +++ b/src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts @@ -31,6 +31,8 @@ import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeatu import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { SemanticTokensStylingService } from 'vs/editor/common/services/semanticTokensStylingService'; import { DocumentSemanticTokensFeature } from 'vs/editor/contrib/semanticTokens/browser/documentSemanticTokens'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { mock } from 'vs/base/test/common/mock'; suite('ModelSemanticColoring', () => { @@ -54,7 +56,11 @@ suite('ModelSemanticColoring', () => { languageService, new TestLanguageConfigurationService(), )); - disposables.add(new DocumentSemanticTokensFeature(semanticTokensStylingService, modelService, themeService, configService, new LanguageFeatureDebounceService(logService), languageFeaturesService)); + const envService = new class extends mock() { + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }; + disposables.add(new DocumentSemanticTokensFeature(semanticTokensStylingService, modelService, themeService, configService, new LanguageFeatureDebounceService(logService, envService), languageFeaturesService)); }); teardown(() => { @@ -96,6 +102,8 @@ suite('ModelSemanticColoring', () => { })); const textModel = disposables.add(modelService.createModel('Hello world', languageService.createById('testMode'))); + // pretend the text model is attached to an editor (so that semantic tokens are computed) + textModel.onBeforeAttached(); // wait for the provider to be called await inFirstCall.wait(); @@ -151,6 +159,8 @@ suite('ModelSemanticColoring', () => { })); const textModel = disposables.add(modelService.createModel('', languageService.createById('testMode'))); + // pretend the text model is attached to an editor (so that semantic tokens are computed) + textModel.onBeforeAttached(); // wait for the semantic tokens to be fetched await Event.toPromise(textModel.onDidChangeTokens); @@ -192,7 +202,9 @@ suite('ModelSemanticColoring', () => { } })); - disposables.add(modelService.createModel('', languageService.createById('testMode'))); + const textModel = disposables.add(modelService.createModel('', languageService.createById('testMode'))); + // pretend the text model is attached to an editor (so that semantic tokens are computed) + textModel.onBeforeAttached(); await timeout(5000); assert.deepStrictEqual(requestCount, 2); diff --git a/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts b/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts index 662b3dacf90..99572b42cb7 100644 --- a/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts +++ b/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts @@ -51,7 +51,7 @@ class SelectionRanges { } } -class SmartSelectController implements IEditorContribution { +export class SmartSelectController implements IEditorContribution { static readonly ID = 'editor.contrib.smartSelectController'; @@ -208,12 +208,13 @@ registerEditorAction(ShrinkSelectionAction); export interface SelectionRangesOptions { selectLeadingAndTrailingWhitespace: boolean; + selectSubwords: boolean; } export async function provideSelectionRanges(registry: LanguageFeatureRegistry, model: ITextModel, positions: Position[], options: SelectionRangesOptions, token: CancellationToken): Promise { const providers = registry.all(model) - .concat(new WordSelectionRangeProvider()); // ALWAYS have word based selection range + .concat(new WordSelectionRangeProvider(options.selectSubwords)); // ALWAYS have word based selection range if (providers.length === 1) { // add word selection and bracket selection when no provider exists @@ -313,7 +314,7 @@ CommandsRegistry.registerCommand('_executeSelectionRangeProvider', async functio const reference = await accessor.get(ITextModelService).createModelReference(resource); try { - return provideSelectionRanges(registry, reference.object.textEditorModel, positions, { selectLeadingAndTrailingWhitespace: true }, CancellationToken.None); + return provideSelectionRanges(registry, reference.object.textEditorModel, positions, { selectLeadingAndTrailingWhitespace: true, selectSubwords: true }, CancellationToken.None); } finally { reference.dispose(); } diff --git a/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts b/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts index 35fd9869500..d42513998a4 100644 --- a/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts +++ b/src/vs/editor/contrib/smartSelect/browser/wordSelections.ts @@ -12,12 +12,16 @@ import { SelectionRange, SelectionRangeProvider } from 'vs/editor/common/languag export class WordSelectionRangeProvider implements SelectionRangeProvider { + constructor(private readonly selectSubwords = true) { } + provideSelectionRanges(model: ITextModel, positions: Position[]): SelectionRange[][] { const result: SelectionRange[][] = []; for (const position of positions) { const bucket: SelectionRange[] = []; result.push(bucket); - this._addInWordRanges(bucket, model, position); + if (this.selectSubwords) { + this._addInWordRanges(bucket, model, position); + } this._addWordRanges(bucket, model, position); this._addWhitespaceLine(bucket, model, position); bucket.push({ range: model.getFullModelRange() }); diff --git a/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts b/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts index c3c33eca509..dadceb8254a 100644 --- a/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts +++ b/src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts @@ -67,7 +67,7 @@ suite('SmartSelect', () => { async function assertGetRangesToPosition(text: string[], lineNumber: number, column: number, ranges: Range[], selectLeadingAndTrailingWhitespace = true): Promise { const uri = URI.file('test.js'); const model = modelService.createModel(text.join('\n'), new StaticLanguageSelector(languageId), uri); - const [actual] = await provideSelectionRanges(providers, model, [new Position(lineNumber, column)], { selectLeadingAndTrailingWhitespace }, CancellationToken.None); + const [actual] = await provideSelectionRanges(providers, model, [new Position(lineNumber, column)], { selectLeadingAndTrailingWhitespace, selectSubwords: true }, CancellationToken.None); const actualStr = actual!.map(r => new Range(r.startLineNumber, r.startColumn, r.endLineNumber, r.endColumn).toString()); const desiredStr = ranges.reverse().map(r => String(r)); @@ -211,7 +211,7 @@ suite('SmartSelect', () => { async function assertRanges(provider: SelectionRangeProvider, value: string, ...expected: IRange[]): Promise { const index = value.indexOf('|'); - value = value.replace('|', ''); + value = value.replace('|', ''); // CodeQL [SM02383] js/incomplete-sanitization this is purpose only the first | character const model = modelService.createModel(value, new StaticLanguageSelector(languageId), URI.parse('fake:lang')); const pos = model.getPositionAt(index); @@ -294,6 +294,24 @@ suite('SmartSelect', () => { ); }); + test('in-word ranges with selectSubwords=false', async () => { + + await assertRanges(new WordSelectionRangeProvider(false), 'f|ooBar', + new Range(1, 1, 1, 7), + new Range(1, 1, 1, 7), + ); + + await assertRanges(new WordSelectionRangeProvider(false), 'f|oo_Ba', + new Range(1, 1, 1, 7), + new Range(1, 1, 1, 7), + ); + + await assertRanges(new WordSelectionRangeProvider(false), 'f|oo-Ba', + new Range(1, 1, 1, 7), + new Range(1, 1, 1, 7), + ); + }); + test('Default selection should select current word/hump first in camelCase #67493', async function () { await assertRanges(new WordSelectionRangeProvider(), 'Abs|tractSmartSelect', diff --git a/src/vs/editor/contrib/snippet/browser/snippetController2.ts b/src/vs/editor/contrib/snippet/browser/snippetController2.ts index 390ada85b06..7d7103cd477 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetController2.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetController2.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { DisposableStore } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; import { assertType } from 'vs/base/common/types'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorCommand, EditorContributionInstantiation, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; @@ -66,7 +66,7 @@ export class SnippetController2 implements IEditorContribution { private _modelVersionId: number = -1; private _currentChoice?: Choice; - private _choiceCompletionItemProvider?: CompletionItemProvider; + private _choiceCompletions?: { provider: CompletionItemProvider; enable(): void; disable(): void }; constructor( private readonly _editor: ICodeEditor, @@ -156,7 +156,8 @@ export class SnippetController2 implements IEditorContribution { // regster completion item provider when there is any choice element if (this._session?.hasChoice) { - this._choiceCompletionItemProvider = { + const provider: CompletionItemProvider = { + _debugDisplayName: 'snippetChoiceCompletions', provideCompletionItems: (model: ITextModel, position: Position) => { if (!this._session || model !== this._editor.getModel() || !Position.equals(this._editor.getPosition(), position)) { return undefined; @@ -185,14 +186,29 @@ export class SnippetController2 implements IEditorContribution { } }; - const registration = this._languageFeaturesService.completionProvider.register({ - language: this._editor.getModel().getLanguageId(), - pattern: this._editor.getModel().uri.fsPath, - scheme: this._editor.getModel().uri.scheme, - exclusive: true - }, this._choiceCompletionItemProvider); + const model = this._editor.getModel(); + + let registration: IDisposable = Disposable.None; + let isRegistered = false; + const disable = () => { + registration.dispose(); + isRegistered = false; + }; + + const enable = () => { + if (!isRegistered) { + registration = this._languageFeaturesService.completionProvider.register({ + language: model.getLanguageId(), + pattern: model.uri.fsPath, + scheme: model.uri.scheme, + exclusive: true + }, provider); + isRegistered = true; + } + }; this._snippetListener.add(registration); + this._choiceCompletions = { provider, enable, disable }; } this._updateState(); @@ -239,7 +255,8 @@ export class SnippetController2 implements IEditorContribution { } const { activeChoice } = this._session; - if (!activeChoice || !this._choiceCompletionItemProvider) { + if (!activeChoice || !this._choiceCompletions) { + this._choiceCompletions?.disable(); this._currentChoice = undefined; return; } @@ -247,9 +264,11 @@ export class SnippetController2 implements IEditorContribution { if (this._currentChoice !== activeChoice.choice) { this._currentChoice = activeChoice.choice; + this._choiceCompletions.enable(); + // trigger suggest with the special choice completion provider queueMicrotask(() => { - showSimpleSuggestions(this._editor, this._choiceCompletionItemProvider!); + showSimpleSuggestions(this._editor, this._choiceCompletions!.provider); }); } } diff --git a/src/vs/editor/contrib/snippet/browser/snippetVariables.ts b/src/vs/editor/contrib/snippet/browser/snippetVariables.ts index 1bb47245482..2b82fb2d417 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetVariables.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetVariables.ts @@ -30,6 +30,7 @@ export const KnownSnippetVariableNames = Object.freeze<{ [key: string]: true }>( 'CURRENT_MONTH_NAME': true, 'CURRENT_MONTH_NAME_SHORT': true, 'CURRENT_SECONDS_UNIX': true, + 'CURRENT_TIMEZONE_OFFSET': true, 'SELECTION': true, 'CLIPBOARD': true, 'TM_SELECTED_TEXT': true, @@ -292,6 +293,14 @@ export class TimeBasedVariableResolver implements VariableResolver { return TimeBasedVariableResolver.monthNamesShort[this._date.getMonth()]; } else if (name === 'CURRENT_SECONDS_UNIX') { return String(Math.floor(this._date.getTime() / 1000)); + } else if (name === 'CURRENT_TIMEZONE_OFFSET') { + const rawTimeOffset = this._date.getTimezoneOffset(); + const sign = rawTimeOffset > 0 ? '-' : '+'; + const hours = Math.trunc(Math.abs(rawTimeOffset / 60)); + const hoursString = (hours < 10 ? '0' + hours : hours); + const minutes = Math.abs(rawTimeOffset) - hours * 60; + const minutesString = (minutes < 10 ? '0' + minutes : minutes); + return sign + hoursString + ':' + minutesString; } return undefined; diff --git a/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts b/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts index 286f02e7d74..8ab633ed81a 100644 --- a/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts +++ b/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts @@ -306,6 +306,7 @@ suite('Snippet Variables Resolver', function () { assertVariableResolve3(resolver, 'CURRENT_MONTH_NAME'); assertVariableResolve3(resolver, 'CURRENT_MONTH_NAME_SHORT'); assertVariableResolve3(resolver, 'CURRENT_SECONDS_UNIX'); + assertVariableResolve3(resolver, 'CURRENT_TIMEZONE_OFFSET'); }); test('Time-based snippet variables resolve to the same values even as time progresses', async function () { @@ -322,6 +323,7 @@ suite('Snippet Variables Resolver', function () { $CURRENT_MONTH_NAME $CURRENT_MONTH_NAME_SHORT $CURRENT_SECONDS_UNIX + $CURRENT_TIMEZONE_OFFSET `; const clock = sinon.useFakeTimers(); diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScroll.css b/src/vs/editor/contrib/stickyScroll/browser/stickyScroll.css index 82f4fb28481..757fc92d81d 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScroll.css +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScroll.css @@ -35,7 +35,7 @@ .monaco-editor .sticky-widget { width: 100%; box-shadow: var(--vscode-scrollbar-shadow) 0 3px 2px -2px; - z-index: 11; + z-index: 4; background-color: var(--vscode-editorStickyScroll-background); } diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts index 7332eb58ad5..3d5b4942690 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.ts @@ -3,12 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { KeyCode } from 'vs/base/common/keyCodes'; +import { EditorAction2, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { localize } from 'vs/nls'; import { Categories } from 'vs/platform/action/common/actionCommonCategories'; import { Action2, MenuId } from 'vs/platform/actions/common/actions'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; +import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { StickyScrollController } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollController'; export class ToggleStickyScroll extends Action2 { @@ -40,3 +45,112 @@ export class ToggleStickyScroll extends Action2 { return configurationService.updateValue('editor.stickyScroll.enabled', newValue); } } + +const weight = KeybindingWeight.EditorContrib; + +export class FocusStickyScroll extends EditorAction2 { + + constructor() { + super({ + id: 'editor.action.focusStickyScroll', + title: { + value: localize('focusStickyScroll', "Focus Sticky Scroll"), + mnemonicTitle: localize({ key: 'mifocusStickyScroll', comment: ['&& denotes a mnemonic'] }, "&&Focus Sticky Scroll"), + original: 'Focus Sticky Scroll', + }, + precondition: ContextKeyExpr.and(ContextKeyExpr.has('config.editor.stickyScroll.enabled'), EditorContextKeys.stickyScrollVisible), + menu: [ + { id: MenuId.CommandPalette }, + ] + }); + } + + runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor) { + StickyScrollController.get(editor)?.focus(); + } +} + +export class SelectNextStickyScrollLine extends EditorAction2 { + constructor() { + super({ + id: 'editor.action.selectNextStickyScrollLine', + title: { + value: localize('selectNextStickyScrollLine.title', "Select next sticky scroll line"), + original: 'Select next sticky scroll line' + }, + precondition: EditorContextKeys.stickyScrollFocused.isEqualTo(true), + keybinding: { + weight, + primary: KeyCode.DownArrow + } + }); + } + + runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor) { + StickyScrollController.get(editor)?.focusNext(); + } +} + +export class SelectPreviousStickyScrollLine extends EditorAction2 { + constructor() { + super({ + id: 'editor.action.selectPreviousStickyScrollLine', + title: { + value: localize('selectPreviousStickyScrollLine.title', "Select previous sticky scroll line"), + original: 'Select previous sticky scroll line' + }, + precondition: EditorContextKeys.stickyScrollFocused.isEqualTo(true), + keybinding: { + weight, + primary: KeyCode.UpArrow + } + }); + } + + runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor) { + StickyScrollController.get(editor)?.focusPrevious(); + } +} + +export class GoToStickyScrollLine extends EditorAction2 { + constructor() { + super({ + id: 'editor.action.goToFocusedStickyScrollLine', + title: { + value: localize('goToFocusedStickyScrollLine.title', "Go to focused sticky scroll line"), + original: 'Go to focused sticky scroll line' + }, + precondition: EditorContextKeys.stickyScrollFocused.isEqualTo(true), + keybinding: { + weight, + primary: KeyCode.Enter + } + }); + } + + runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor) { + StickyScrollController.get(editor)?.goToFocused(); + } +} + +export class SelectEditor extends EditorAction2 { + + constructor() { + super({ + id: 'editor.action.selectEditor', + title: { + value: localize('selectEditor.title', "Select Editor"), + original: 'Select Editor' + }, + precondition: EditorContextKeys.stickyScrollFocused.isEqualTo(true), + keybinding: { + weight, + primary: KeyCode.Escape + } + }); + } + + runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor) { + StickyScrollController.get(editor)?.selectEditor(); + } +} diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts index e45781b33f8..e242c05227e 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts @@ -4,9 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { ToggleStickyScroll } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollActions'; +import { ToggleStickyScroll, FocusStickyScroll, SelectEditor, SelectPreviousStickyScrollLine, SelectNextStickyScrollLine, GoToStickyScrollLine } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollActions'; import { StickyScrollController } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollController'; import { registerAction2 } from 'vs/platform/actions/common/actions'; registerEditorContribution(StickyScrollController.ID, StickyScrollController, EditorContributionInstantiation.AfterFirstRender); registerAction2(ToggleStickyScroll); +registerAction2(FocusStickyScroll); +registerAction2(SelectPreviousStickyScrollLine); +registerAction2(SelectNextStickyScrollLine); +registerAction2(GoToStickyScrollLine); +registerAction2(SelectEditor); diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts index 26ff4c2c6ce..fb7adfb064a 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.ts @@ -3,63 +3,293 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { EditorOption, RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; import { StickyScrollWidget, StickyScrollWidgetState } from './stickyScrollWidget'; -import { StickyLineCandidateProvider, StickyRange } from './stickyScrollProvider'; +import { IStickyLineCandidateProvider, StickyLineCandidateProvider } from './stickyScrollProvider'; import { IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import * as dom from 'vs/base/browser/dom'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { MenuId } from 'vs/platform/actions/common/actions'; +import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; +import { ClickLinkGesture } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; +import { IRange, Range } from 'vs/editor/common/core/range'; +import { getDefinitionsAtPosition } from 'vs/editor/contrib/gotoSymbol/browser/goToSymbol'; +import { goToDefinitionWithLocation } from 'vs/editor/contrib/inlayHints/browser/inlayHintsLocations'; +import { IPosition, Position } from 'vs/editor/common/core/position'; +import { CancellationTokenSource } from 'vs/base/common/cancellation'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; +import * as dom from 'vs/base/browser/dom'; +import { StickyRange } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollElement'; -export class StickyScrollController extends Disposable implements IEditorContribution { +interface CustomMouseEvent { + detail: string; + element: HTMLElement; +} + +export interface IStickyScrollController { + get stickyScrollCandidateProvider(): IStickyLineCandidateProvider; + get stickyScrollWidgetState(): StickyScrollWidgetState; + focus(): void; + focusNext(): void; + focusPrevious(): void; + goToFocused(): void; + findScrollWidgetState(): StickyScrollWidgetState; + dispose(): void; + selectEditor(): void; +} + +export class StickyScrollController extends Disposable implements IEditorContribution, IStickyScrollController { static readonly ID = 'store.contrib.stickyScrollController'; private readonly _stickyScrollWidget: StickyScrollWidget; - private readonly _stickyLineCandidateProvider: StickyLineCandidateProvider; + private readonly _stickyLineCandidateProvider: IStickyLineCandidateProvider; private readonly _sessionStore: DisposableStore = new DisposableStore(); private _widgetState: StickyScrollWidgetState; private _maxStickyLines: number = Number.MAX_SAFE_INTEGER; + private _stickyRangeProjectedOnEditor: IRange | undefined; + private _candidateDefinitionsLength: number = -1; + + private _stickyScrollFocusedContextKey: IContextKey; + private _stickyScrollVisibleContextKey: IContextKey; + + private _stickyElements: HTMLCollection | undefined; + private _focusDisposableStore: DisposableStore | undefined; + private _focusedStickyElementIndex: number = -1; + private _enabled = false; + private _focused = false; + private _positionRevealed = false; + private _onMouseDown = false; + constructor( private readonly _editor: ICodeEditor, @IContextMenuService private readonly _contextMenuService: IContextMenuService, - @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, - @IInstantiationService instaService: IInstantiationService, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @IInstantiationService private readonly _instaService: IInstantiationService, + @ILanguageConfigurationService _languageConfigurationService: ILanguageConfigurationService, + @ILanguageFeatureDebounceService _languageFeatureDebounceService: ILanguageFeatureDebounceService, + @IContextKeyService private readonly _contextKeyService: IContextKeyService ) { super(); - - this._stickyScrollWidget = new StickyScrollWidget(this._editor, languageFeaturesService, instaService); - this._stickyLineCandidateProvider = new StickyLineCandidateProvider(this._editor, languageFeaturesService); - this._widgetState = new StickyScrollWidgetState([], 0); - + this._stickyScrollWidget = new StickyScrollWidget(this._editor); + this._stickyLineCandidateProvider = new StickyLineCandidateProvider(this._editor, _languageFeaturesService, _languageConfigurationService); this._register(this._stickyScrollWidget); this._register(this._stickyLineCandidateProvider); + + this._widgetState = new StickyScrollWidgetState([], 0); + this._readConfiguration(); this._register(this._editor.onDidChangeConfiguration(e => { if (e.hasChanged(EditorOption.stickyScroll)) { this._readConfiguration(); } })); - this._readConfiguration(); this._register(dom.addDisposableListener(this._stickyScrollWidget.getDomNode(), dom.EventType.CONTEXT_MENU, async (event: MouseEvent) => { this._onContextMenu(event); })); + this._stickyScrollFocusedContextKey = EditorContextKeys.stickyScrollFocused.bindTo(this._contextKeyService); + this._stickyScrollVisibleContextKey = EditorContextKeys.stickyScrollVisible.bindTo(this._contextKeyService); + const focusTracker = this._register(dom.trackFocus(this._stickyScrollWidget.getDomNode())); + this._register(focusTracker.onDidBlur(_ => { + const height = this._stickyScrollWidget.getDomNode().clientHeight; + // Suppose that the blurring is caused by scrolling, then keep the focus on the sticky scroll + // This is determined by the fact that the height of the widget has become zero and there has been no position revealing + if (this._positionRevealed === false && height === 0) { + this._focusedStickyElementIndex = -1; + this.focus(); + + } + // In all other casees, dispose the focus on the sticky scroll + else { + this._disposeFocusStickyScrollStore(); + } + })); + this._register(focusTracker.onDidFocus(_ => { + this.focus(); + })); + this._register(this._createClickLinkGesture()); + // Suppose that mouse down on the sticky scroll, then do not focus on the sticky scroll because this will be followed by the revealing of a position + this._register(dom.addDisposableListener(this._stickyScrollWidget.getDomNode(), dom.EventType.MOUSE_DOWN, (e) => { + this._onMouseDown = true; + })); } - get stickyScrollCandidateProvider() { + get stickyScrollCandidateProvider(): IStickyLineCandidateProvider { return this._stickyLineCandidateProvider; } - get stickyScrollWidgetState() { + get stickyScrollWidgetState(): StickyScrollWidgetState { return this._widgetState; } + public static get(editor: ICodeEditor): IStickyScrollController | null { + return editor.getContribution(StickyScrollController.ID); + } + + private _disposeFocusStickyScrollStore() { + this._stickyScrollFocusedContextKey.set(false); + this._focusDisposableStore?.dispose(); + this._focused = false; + this._positionRevealed = false; + this._onMouseDown = false; + } + + public focus(): void { + // If the mouse is down, do not focus on the sticky scroll + if (this._onMouseDown) { + this._onMouseDown = false; + this._editor.focus(); + return; + } + const focusState = this._stickyScrollFocusedContextKey.get(); + if (focusState === true) { + return; + } + this._focused = true; + this._focusDisposableStore = new DisposableStore(); + this._stickyScrollFocusedContextKey.set(true); + const rootNode = this._stickyScrollWidget.getDomNode(); + (rootNode.lastElementChild! as HTMLDivElement).focus(); + this._stickyElements = rootNode.children; + this._focusedStickyElementIndex = this._stickyScrollWidget.lineNumbers.length - 1; + } + + public focusNext(): void { + if (this._focusedStickyElementIndex < this._stickyElements!.length - 1) { + this._focusNav(true); + } + } + + public focusPrevious(): void { + if (this._focusedStickyElementIndex > 0) { + this._focusNav(false); + } + } + + public selectEditor(): void { + this._editor.focus(); + } + + // True is next, false is previous + private _focusNav(direction: boolean): void { + this._focusedStickyElementIndex = direction ? this._focusedStickyElementIndex + 1 : this._focusedStickyElementIndex - 1; + (this._stickyElements!.item(this._focusedStickyElementIndex) as HTMLDivElement).focus(); + } + + public goToFocused(): void { + const lineNumbers = this._stickyScrollWidget.lineNumbers; + this._disposeFocusStickyScrollStore(); + this._revealPosition({ lineNumber: lineNumbers[this._focusedStickyElementIndex], column: 1 }); + } + + private _revealPosition(position: IPosition): void { + this._positionRevealed = true; + this._editor.revealPosition(position); + this._editor.setSelection(Range.fromPositions(position)); + this._editor.focus(); + } + + private _createClickLinkGesture(): IDisposable { + + const linkGestureStore = new DisposableStore(); + const sessionStore = new DisposableStore(); + linkGestureStore.add(sessionStore); + const gesture = new ClickLinkGesture(this._editor, true); + linkGestureStore.add(gesture); + + linkGestureStore.add(gesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, _keyboardEvent]) => { + if (!this._editor.hasModel() || !mouseEvent.hasTriggerModifier) { + sessionStore.clear(); + return; + } + const targetMouseEvent = mouseEvent.target as unknown as CustomMouseEvent; + if (targetMouseEvent.detail === this._stickyScrollWidget.getId() + && targetMouseEvent.element.innerText === targetMouseEvent.element.innerHTML) { + + const text = targetMouseEvent.element.innerText; + if (this._stickyScrollWidget.hoverOnColumn === -1) { + return; + } + const lineNumber = this._stickyScrollWidget.hoverOnLine; + const column = this._stickyScrollWidget.hoverOnColumn; + + const stickyPositionProjectedOnEditor = new Range(lineNumber, column, lineNumber, column + text.length); + if (!stickyPositionProjectedOnEditor.equalsRange(this._stickyRangeProjectedOnEditor)) { + this._stickyRangeProjectedOnEditor = stickyPositionProjectedOnEditor; + sessionStore.clear(); + } else if (targetMouseEvent.element.style.textDecoration === 'underline') { + return; + } + + const cancellationToken = new CancellationTokenSource(); + sessionStore.add(toDisposable(() => cancellationToken.dispose(true))); + + let currentHTMLChild: HTMLElement; + + getDefinitionsAtPosition(this._languageFeaturesService.definitionProvider, this._editor.getModel(), new Position(lineNumber, column + 1), cancellationToken.token).then((candidateDefinitions => { + if (cancellationToken.token.isCancellationRequested) { + return; + } + if (candidateDefinitions.length !== 0) { + this._candidateDefinitionsLength = candidateDefinitions.length; + const childHTML: HTMLElement = targetMouseEvent.element; + if (currentHTMLChild !== childHTML) { + sessionStore.clear(); + currentHTMLChild = childHTML; + currentHTMLChild.style.textDecoration = 'underline'; + sessionStore.add(toDisposable(() => { + currentHTMLChild.style.textDecoration = 'none'; + })); + } else if (!currentHTMLChild) { + currentHTMLChild = childHTML; + currentHTMLChild.style.textDecoration = 'underline'; + sessionStore.add(toDisposable(() => { + currentHTMLChild.style.textDecoration = 'none'; + })); + } + } else { + sessionStore.clear(); + } + })); + } else { + sessionStore.clear(); + } + })); + linkGestureStore.add(gesture.onCancel(() => { + sessionStore.clear(); + })); + linkGestureStore.add(gesture.onExecute(async e => { + if ((e.target as unknown as CustomMouseEvent).detail !== this._stickyScrollWidget.getId()) { + return; + } + if (e.hasTriggerModifier) { + // Control click + if (this._candidateDefinitionsLength > 1) { + if (this._focused) { + this._disposeFocusStickyScrollStore(); + } + this._revealPosition({ lineNumber: this._stickyScrollWidget.hoverOnLine, column: 1 }); + } + this._instaService.invokeFunction(goToDefinitionWithLocation, e, this._editor as IActiveCodeEditor, { uri: this._editor.getModel()!.uri, range: this._stickyRangeProjectedOnEditor! }); + + } else if (!e.isRightClick) { + // Normal click + if (this._focused) { + this._disposeFocusStickyScrollStore(); + } + this._revealPosition({ lineNumber: this._stickyScrollWidget.hoverOnLine, column: this._stickyScrollWidget.hoverOnColumn }); + } + })); + return linkGestureStore; + } + private _onContextMenu(event: MouseEvent) { this._contextMenuService.showContextMenu({ menuId: MenuId.StickyScrollContext, @@ -69,20 +299,25 @@ export class StickyScrollController extends Disposable implements IEditorContrib private _readConfiguration() { const options = this._editor.getOption(EditorOption.stickyScroll); + if (options.enabled === false) { this._editor.removeOverlayWidget(this._stickyScrollWidget); this._sessionStore.clear(); + this._enabled = false; return; - } else { + } else if (options.enabled && !this._enabled) { + // When sticky scroll was just enabled, add the listeners on the sticky scroll this._editor.addOverlayWidget(this._stickyScrollWidget); this._sessionStore.add(this._editor.onDidScrollChange(() => this._renderStickyScroll())); this._sessionStore.add(this._editor.onDidLayoutChange(() => this._onDidResize())); this._sessionStore.add(this._editor.onDidChangeModelTokens((e) => this._onTokensChange(e))); this._sessionStore.add(this._stickyLineCandidateProvider.onDidChangeStickyScroll(() => this._renderStickyScroll())); - const lineNumberOption = this._editor.getOption(EditorOption.lineNumbers); - if (lineNumberOption.renderType === RenderLineNumbersType.Relative) { - this._sessionStore.add(this._editor.onDidChangeCursorPosition(() => this._renderStickyScroll())); - } + this._enabled = true; + } + + const lineNumberOption = this._editor.getOption(EditorOption.lineNumbers); + if (lineNumberOption.renderType === RenderLineNumbersType.Relative) { + this._sessionStore.add(this._editor.onDidChangeCursorPosition(() => this._renderStickyScroll())); } } @@ -108,8 +343,7 @@ export class StickyScrollController extends Disposable implements IEditorContrib const layoutInfo = this._editor.getLayoutInfo(); const width = layoutInfo.width - layoutInfo.minimap.minimapCanvasOuterWidth - layoutInfo.verticalScrollbarWidth; this._stickyScrollWidget.getDomNode().style.width = `${width}px`; - - // make sure sticky scroll doesn't take up more than 25% of the editor + // Make sure sticky scroll doesn't take up more than 25% of the editor const theoreticalLines = layoutInfo.height / this._editor.getOption(EditorOption.lineHeight); this._maxStickyLines = Math.round(theoreticalLines * .25); } @@ -121,12 +355,42 @@ export class StickyScrollController extends Disposable implements IEditorContrib const model = this._editor.getModel(); const stickyLineVersion = this._stickyLineCandidateProvider.getVersionId(); if (stickyLineVersion === undefined || stickyLineVersion === model.getVersionId()) { - this._widgetState = this.getScrollWidgetState(); - this._stickyScrollWidget.setState(this._widgetState); + this._widgetState = this.findScrollWidgetState(); + this._stickyScrollVisibleContextKey.set(!(this._widgetState.lineNumbers.length === 0)); + + if (!this._focused) { + this._stickyScrollWidget.setState(this._widgetState); + } else { + this._stickyElements = this._stickyScrollWidget.getDomNode().children; + // Suppose that previously the sticky scroll widget had height 0, then if there are visible lines, set the last line as focused + if (this._focusedStickyElementIndex === -1) { + this._stickyScrollWidget.setState(this._widgetState); + this._focusedStickyElementIndex = this._stickyElements.length - 1; + if (this._focusedStickyElementIndex !== -1) { + (this._stickyElements.item(this._focusedStickyElementIndex) as HTMLDivElement).focus(); + } + } else { + const focusedStickyElementLineNumber = this._stickyScrollWidget.lineNumbers[this._focusedStickyElementIndex]; + this._stickyScrollWidget.setState(this._widgetState); + // Suppose that after setting the state, there are no sticky lines, set the focused index to -1 + if (this._stickyElements.length === 0) { + this._focusedStickyElementIndex = -1; + } else { + const previousFocusedLineNumberExists = this._stickyScrollWidget.lineNumbers.includes(focusedStickyElementLineNumber); + + // If the line number is still there, do not change anything + // If the line number is not there, set the new focused line to be the last line + if (!previousFocusedLineNumberExists) { + this._focusedStickyElementIndex = this._stickyElements.length - 1; + } + (this._stickyElements.item(this._focusedStickyElementIndex) as HTMLDivElement).focus(); + } + } + } } } - getScrollWidgetState(): StickyScrollWidgetState { + findScrollWidgetState(): StickyScrollWidgetState { const lineHeight: number = this._editor.getOption(EditorOption.lineHeight); const maxNumberStickyLines = Math.min(this._maxStickyLines, this._editor.getOption(EditorOption.stickyScroll).maxLineCount); const scrollTop: number = this._editor.getScrollTop(); diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollElement.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollElement.ts new file mode 100644 index 00000000000..1bbf4f5e5bf --- /dev/null +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollElement.ts @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { URI } from 'vs/base/common/uri'; + +export class StickyRange { + constructor( + public readonly startLineNumber: number, + public readonly endLineNumber: number + ) { } +} + +export class StickyElement { + + constructor( + /** + * Range of line numbers spanned by the current scope + */ + public readonly range: StickyRange | undefined, + /** + * Must be sorted by start line number + */ + public readonly children: StickyElement[], + /** + * Parent sticky outline element + */ + public readonly parent: StickyElement | undefined + ) { + } +} + +export class StickyModel { + constructor( + readonly uri: URI, + readonly version: number, + readonly element: StickyElement | undefined, + readonly outlineProviderId: string | undefined + ) { } +} diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts new file mode 100644 index 00000000000..cf549710a75 --- /dev/null +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts @@ -0,0 +1,424 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { DisposableStore } from 'vs/base/common/lifecycle'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { OutlineElement, OutlineGroup, OutlineModel } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { CancelablePromise, createCancelablePromise, Delayer } from 'vs/base/common/async'; +import { FoldingController, RangesLimitReporter } from 'vs/editor/contrib/folding/browser/folding'; +import { ITextModel } from 'vs/editor/common/model'; +import { SyntaxRangeProvider } from 'vs/editor/contrib/folding/browser/syntaxRangeProvider'; +import { IndentRangeProvider } from 'vs/editor/contrib/folding/browser/indentRangeProvider'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { FoldingRegions } from 'vs/editor/contrib/folding/browser/foldingRanges'; +import { onUnexpectedError } from 'vs/base/common/errors'; +import { TextModel } from 'vs/editor/common/model/textModel'; +import { StickyElement, StickyModel, StickyRange } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollElement'; +import { Iterable } from 'vs/base/common/iterator'; +import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; + +enum ModelProvider { + OUTLINE_MODEL = 'outlineModel', + FOLDING_PROVIDER_MODEL = 'foldingProviderModel', + INDENTATION_MODEL = 'indentationModel' +} + +enum Status { + VALID, + INVALID, + CANCELED +} + +export interface IStickyModelProvider { + + /** + * Method which updates the sticky model + * @param textModel text-model of the editor + * @param textModelVersionId text-model version ID + * @param token cancellation token + * @returns the sticky model + */ + update(textModel: ITextModel, textModelVersionId: number, token: CancellationToken): Promise; +} + +export class StickyModelProvider implements IStickyModelProvider { + + private _modelProviders: IStickyModelCandidateProvider[] = []; + private _modelPromise: CancelablePromise | null = null; + private _updateScheduler: Delayer = new Delayer(300); + private readonly _store: DisposableStore; + + constructor( + private readonly _editor: ICodeEditor, + @ILanguageConfigurationService readonly _languageConfigurationService: ILanguageConfigurationService, + @ILanguageFeaturesService readonly _languageFeaturesService: ILanguageFeaturesService, + defaultModel: string) { + + const stickyModelFromCandidateOutlineProvider = new StickyModelFromCandidateOutlineProvider(_languageFeaturesService); + const stickyModelFromSyntaxFoldingProvider = new StickyModelFromCandidateSyntaxFoldingProvider(this._editor, _languageFeaturesService); + const stickyModelFromIndentationFoldingProvider = new StickyModelFromCandidateIndentationFoldingProvider(this._editor, _languageConfigurationService); + + switch (defaultModel) { + case ModelProvider.OUTLINE_MODEL: + this._modelProviders.push(stickyModelFromCandidateOutlineProvider); + this._modelProviders.push(stickyModelFromSyntaxFoldingProvider); + this._modelProviders.push(stickyModelFromIndentationFoldingProvider); + break; + case ModelProvider.FOLDING_PROVIDER_MODEL: + this._modelProviders.push(stickyModelFromSyntaxFoldingProvider); + this._modelProviders.push(stickyModelFromIndentationFoldingProvider); + break; + case ModelProvider.INDENTATION_MODEL: + this._modelProviders.push(stickyModelFromIndentationFoldingProvider); + break; + } + + this._store = new DisposableStore(); + } + + private _cancelModelPromise(): void { + if (this._modelPromise) { + this._modelPromise.cancel(); + this._modelPromise = null; + } + } + + public async update(textModel: ITextModel, textModelVersionId: number, token: CancellationToken): Promise { + + this._store.clear(); + this._store.add({ + dispose: () => { + this._cancelModelPromise(); + this._updateScheduler?.cancel(); + } + }); + this._cancelModelPromise(); + + return await this._updateScheduler.trigger(async () => { + + for (const modelProvider of this._modelProviders) { + const { statusPromise, modelPromise } = modelProvider.computeStickyModel( + textModel, + textModelVersionId, + token + ); + this._modelPromise = modelPromise; + const status = await statusPromise; + if (this._modelPromise !== modelPromise) { + return null; + } + switch (status) { + case Status.CANCELED: + this._store.clear(); + return null; + case Status.VALID: + return modelProvider.stickyModel; + } + } + return null; + }); + } +} + +interface IStickyModelCandidateProvider { + get stickyModel(): StickyModel | null; + + get provider(): LanguageFeatureRegistry | null; + + /** + * Method which computes the sticky model and returns a status to signal whether the sticky model has been successfully found + * @param textmodel text-model of the editor + * @param modelVersionId version ID of the text-model + * @param token cancellation token + * @returns a promise of a status indicating whether the sticky model has been successfully found as well as the model promise + */ + computeStickyModel(textmodel: ITextModel, modelVersionId: number, token: CancellationToken): { statusPromise: Promise | Status; modelPromise: CancelablePromise | null }; +} + +abstract class StickyModelCandidateProvider implements IStickyModelCandidateProvider { + + protected _stickyModel: StickyModel | null = null; + + constructor() { } + + get stickyModel(): StickyModel | null { + return this._stickyModel; + } + + private _invalid(): Status { + this._stickyModel = null; + return Status.INVALID; + } + + public abstract get provider(): LanguageFeatureRegistry | null; + + public computeStickyModel(textModel: ITextModel, modelVersionId: number, token: CancellationToken): { statusPromise: Promise | Status; modelPromise: CancelablePromise | null } { + if (token.isCancellationRequested || !this.isProviderValid(textModel)) { + return { statusPromise: this._invalid(), modelPromise: null }; + } + const providerModelPromise = createCancelablePromise(token => this.createModelFromProvider(textModel, modelVersionId, token)); + + return { + statusPromise: providerModelPromise.then(providerModel => { + if (!this.isModelValid(providerModel)) { + return this._invalid(); + + } + if (token.isCancellationRequested) { + return Status.CANCELED; + } + this._stickyModel = this.createStickyModel(textModel, modelVersionId, token, providerModel); + return Status.VALID; + }).then(undefined, (err) => { + onUnexpectedError(err); + return Status.CANCELED; + }), + modelPromise: providerModelPromise + }; + } + + /** + * Method which checks whether the model returned by the provider is valid and can be used to compute a sticky model. + * This method by default returns true. + * @param model model returned by the provider + * @returns boolean indicating whether the model is valid + */ + protected isModelValid(model: any): boolean { + return true; + } + + /** + * Method which checks whether the provider is valid before applying it to find the provider model. + * This method by default returns true. + * @param textModel text-model of the editor + * @returns boolean indicating whether the provider is valid + */ + protected isProviderValid(textModel: ITextModel): boolean { + return true; + } + + /** + * Abstract method which creates the model from the provider and returns the provider model + * @param textModel text-model of the editor + * @param textModelVersionId text-model version ID + * @param token cancellation token + * @returns the model returned by the provider + */ + protected abstract createModelFromProvider(textModel: ITextModel, textModelVersionId: number, token: CancellationToken): Promise; + + /** + * Abstract method which computes the sticky model from the model returned by the provider and returns the sticky model + * @param textModel text-model of the editor + * @param textModelVersionId text-model version ID + * @param token cancellation token + * @param model model returned by the provider + * @returns the sticky model + */ + protected abstract createStickyModel(textModel: ITextModel, textModelVersionId: number, token: CancellationToken, model: T): StickyModel; +} + +class StickyModelFromCandidateOutlineProvider extends StickyModelCandidateProvider { + + constructor(@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService) { + super(); + } + + public get provider(): LanguageFeatureRegistry | null { + return this._languageFeaturesService.documentSymbolProvider; + } + + protected createModelFromProvider(textModel: ITextModel, modelVersionId: number, token: CancellationToken): Promise { + return OutlineModel.create(this._languageFeaturesService.documentSymbolProvider, textModel, token); + } + + protected createStickyModel(textModel: TextModel, modelVersionId: number, token: CancellationToken, model: OutlineModel): StickyModel { + const { stickyOutlineElement, providerID } = this._stickyModelFromOutlineModel(model, this._stickyModel?.outlineProviderId); + return new StickyModel(textModel.uri, modelVersionId, stickyOutlineElement, providerID); + } + + protected override isModelValid(model: OutlineModel): boolean { + return model && model.children.size > 0; + } + + private _stickyModelFromOutlineModel(outlineModel: OutlineModel, preferredProvider: string | undefined): { stickyOutlineElement: StickyElement; providerID: string | undefined } { + + let outlineElements: Map; + // When several possible outline providers + if (Iterable.first(outlineModel.children.values()) instanceof OutlineGroup) { + const provider = Iterable.find(outlineModel.children.values(), outlineGroupOfModel => outlineGroupOfModel.id === preferredProvider); + if (provider) { + outlineElements = provider.children; + } else { + let tempID = ''; + let maxTotalSumOfRanges = -1; + let optimalOutlineGroup = undefined; + for (const [_key, outlineGroup] of outlineModel.children.entries()) { + const totalSumRanges = this._findSumOfRangesOfGroup(outlineGroup); + if (totalSumRanges > maxTotalSumOfRanges) { + optimalOutlineGroup = outlineGroup; + maxTotalSumOfRanges = totalSumRanges; + tempID = outlineGroup.id; + } + } + preferredProvider = tempID; + outlineElements = optimalOutlineGroup!.children; + } + } else { + outlineElements = outlineModel.children as Map; + } + const stickyChildren: StickyElement[] = []; + const outlineElementsArray = Array.from(outlineElements.values()).sort((element1, element2) => { + const range1: StickyRange = new StickyRange(element1.symbol.range.startLineNumber, element1.symbol.range.endLineNumber); + const range2: StickyRange = new StickyRange(element2.symbol.range.startLineNumber, element2.symbol.range.endLineNumber); + return this._comparator(range1, range2); + }); + for (const outlineElement of outlineElementsArray) { + stickyChildren.push(this._stickyModelFromOutlineElement(outlineElement, outlineElement.symbol.selectionRange.startLineNumber)); + } + const stickyOutlineElement = new StickyElement(undefined, stickyChildren, undefined); + + return { + stickyOutlineElement: stickyOutlineElement, + providerID: preferredProvider + }; + } + + private _stickyModelFromOutlineElement(outlineElement: OutlineElement, previousStartLine: number): StickyElement { + const children: StickyElement[] = []; + for (const child of outlineElement.children.values()) { + if (child.symbol.selectionRange.startLineNumber !== child.symbol.range.endLineNumber) { + if (child.symbol.selectionRange.startLineNumber !== previousStartLine) { + children.push(this._stickyModelFromOutlineElement(child, child.symbol.selectionRange.startLineNumber)); + } else { + for (const subchild of child.children.values()) { + children.push(this._stickyModelFromOutlineElement(subchild, child.symbol.selectionRange.startLineNumber)); + } + } + } + } + children.sort((child1, child2) => this._comparator(child1.range!, child2.range!)); + const range = new StickyRange(outlineElement.symbol.selectionRange.startLineNumber, outlineElement.symbol.range.endLineNumber); + return new StickyElement(range, children, undefined); + } + + private _comparator(range1: StickyRange, range2: StickyRange): number { + if (range1.startLineNumber !== range2.startLineNumber) { + return range1.startLineNumber - range2.startLineNumber; + } else { + return range2.endLineNumber - range1.endLineNumber; + } + } + + private _findSumOfRangesOfGroup(outline: OutlineGroup | OutlineElement): number { + let res = 0; + for (const child of outline.children.values()) { + res += this._findSumOfRangesOfGroup(child); + } + if (outline instanceof OutlineElement) { + return res + outline.symbol.range.endLineNumber - outline.symbol.selectionRange.startLineNumber; + } else { + return res; + } + } + +} + +abstract class StickyModelFromCandidateFoldingProvider extends StickyModelCandidateProvider { + + protected _foldingLimitReporter: RangesLimitReporter; + + constructor(editor: ICodeEditor) { + super(); + this._foldingLimitReporter = new RangesLimitReporter(editor); + } + + protected createStickyModel(textModel: ITextModel, modelVersionId: number, token: CancellationToken, model: FoldingRegions): StickyModel { + const foldingElement = this._fromFoldingRegions(model); + return new StickyModel(textModel.uri, modelVersionId, foldingElement, undefined); + } + + protected override isModelValid(model: FoldingRegions): boolean { + return model !== null; + } + + + private _fromFoldingRegions(foldingRegions: FoldingRegions): StickyElement { + const length = foldingRegions.length; + const orderedStickyElements: StickyElement[] = []; + + // The root sticky outline element + const stickyOutlineElement = new StickyElement( + undefined, + [], + undefined + ); + + for (let i = 0; i < length; i++) { + // Finding the parent index of the current range + const parentIndex = foldingRegions.getParentIndex(i); + + let parentNode; + if (parentIndex !== -1) { + // Access the reference of the parent node + parentNode = orderedStickyElements[parentIndex]; + } else { + // In that case the parent node is the root node + parentNode = stickyOutlineElement; + } + + const child = new StickyElement( + new StickyRange(foldingRegions.getStartLineNumber(i), foldingRegions.getEndLineNumber(i) + 1), + [], + parentNode + ); + parentNode.children.push(child); + orderedStickyElements.push(child); + } + return stickyOutlineElement; + } +} + +class StickyModelFromCandidateIndentationFoldingProvider extends StickyModelFromCandidateFoldingProvider { + + constructor( + editor: ICodeEditor, + @ILanguageConfigurationService private readonly _languageConfigurationService: ILanguageConfigurationService) { + super(editor); + } + + public get provider(): LanguageFeatureRegistry | null { + return null; + } + + protected createModelFromProvider(textModel: TextModel, modelVersionId: number, token: CancellationToken): Promise { + const provider = new IndentRangeProvider(textModel, this._languageConfigurationService, this._foldingLimitReporter); + return provider.compute(token); + } +} + +class StickyModelFromCandidateSyntaxFoldingProvider extends StickyModelFromCandidateFoldingProvider { + + constructor(editor: ICodeEditor, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService) { + super(editor); + } + + public get provider(): LanguageFeatureRegistry | null { + return this._languageFeaturesService.foldingRangeProvider; + } + + protected override isProviderValid(textModel: TextModel): boolean { + const selectedProviders = FoldingController.getFoldingRangeProviders(this._languageFeaturesService, textModel); + return selectedProviders.length > 0; + } + + protected createModelFromProvider(textModel: TextModel, modelVersionId: number, token: CancellationToken): Promise { + const selectedProviders = FoldingController.getFoldingRangeProviders(this._languageFeaturesService, textModel); + const provider = new SyntaxRangeProvider(textModel, selectedProviders, () => this.createModelFromProvider(textModel, modelVersionId, token), this._foldingLimitReporter, undefined); + return provider.compute(token); + } +} diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts index 5043d92b662..391ddd6c978 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts @@ -6,25 +6,16 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { OutlineModel, OutlineElement, OutlineGroup } from 'vs/editor/contrib/documentSymbols/browser/outlineModel'; import { CancellationToken, CancellationTokenSource, } from 'vs/base/common/cancellation'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOption, IEditorStickyScrollOptions } from 'vs/editor/common/config/editorOptions'; import { RunOnceScheduler } from 'vs/base/common/async'; import { Range } from 'vs/editor/common/core/range'; -import { Emitter } from 'vs/base/common/event'; import { binarySearch } from 'vs/base/common/arrays'; -import { Iterable } from 'vs/base/common/iterator'; -import { FoldingController } from 'vs/editor/contrib/folding/browser/folding'; -import { FoldingModel } from 'vs/editor/contrib/folding/browser/foldingModel'; -import { URI } from 'vs/base/common/uri'; import { isEqual } from 'vs/base/common/resources'; - -export class StickyRange { - constructor( - public readonly startLineNumber: number, - public readonly endLineNumber: number - ) { } -} +import { Event, Emitter } from 'vs/base/common/event'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { StickyModelProvider, IStickyModelProvider } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider'; +import { StickyElement, StickyModel, StickyRange } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollElement'; export class StickyLineCandidate { constructor( @@ -34,7 +25,17 @@ export class StickyLineCandidate { ) { } } -export class StickyLineCandidateProvider extends Disposable { +export interface IStickyLineCandidateProvider { + + dispose(): void; + getVersionId(): number | undefined; + update(): Promise; + getCandidateStickyLinesIntersecting(range: StickyRange): StickyLineCandidate[]; + onDidChangeStickyScroll: Event; + +} + +export class StickyLineCandidateProvider extends Disposable implements IStickyLineCandidateProvider { static readonly ID = 'store.contrib.stickyScrollController'; @@ -42,22 +43,24 @@ export class StickyLineCandidateProvider extends Disposable { public readonly onDidChangeStickyScroll = this._onDidChangeStickyScroll.event; private readonly _editor: ICodeEditor; - private readonly _languageFeaturesService: ILanguageFeaturesService; private readonly _updateSoon: RunOnceScheduler; + private readonly _sessionStore: DisposableStore; - private readonly _sessionStore: DisposableStore = new DisposableStore(); - private _cts: CancellationTokenSource | undefined; - - private _model: StickyOutlineModel | undefined; + private _options: Readonly> | null = null; + private _model: StickyModel | null = null; + private _cts: CancellationTokenSource | null = null; + private _stickyModelProvider: IStickyModelProvider | null = null; constructor( editor: ICodeEditor, - @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @ILanguageConfigurationService private readonly _languageConfigurationService: ILanguageConfigurationService, ) { super(); this._editor = editor; - this._languageFeaturesService = languageFeaturesService; + this._sessionStore = new DisposableStore(); this._updateSoon = this._register(new RunOnceScheduler(() => this.update(), 50)); + this._register(this._editor.onDidChangeConfiguration(e => { if (e.hasChanged(EditorOption.stickyScroll)) { this.readConfiguration(); @@ -72,74 +75,58 @@ export class StickyLineCandidateProvider extends Disposable { } private readConfiguration() { - const options = this._editor.getOption(EditorOption.stickyScroll); - if (options.enabled === false) { + + this._options = this._editor.getOption(EditorOption.stickyScroll); + if (!this._options.enabled) { this._sessionStore.clear(); return; - } else { - this._sessionStore.add(this._editor.onDidChangeModel(() => { - this.update(); - })); - this._sessionStore.add(this._editor.onDidChangeHiddenAreas(() => this.update())); - this._sessionStore.add(this._editor.onDidChangeModelContent(() => this._updateSoon.schedule())); - this._sessionStore.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(() => { - - this.update(); - })); - this.update(); } + + this._stickyModelProvider = new StickyModelProvider( + this._editor, + this._languageConfigurationService, + this._languageFeaturesService, + this._options.defaultModel + ); + + this._sessionStore.add(this._editor.onDidChangeModel(() => this.update())); + this._sessionStore.add(this._editor.onDidChangeHiddenAreas(() => this.update())); + this._sessionStore.add(this._editor.onDidChangeModelContent(() => this._updateSoon.schedule())); + this._sessionStore.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(() => this.update())); + this.update(); } - public getVersionId() { + public getVersionId(): number | undefined { return this._model?.version; } public async update(): Promise { this._cts?.dispose(true); this._cts = new CancellationTokenSource(); - await this.updateOutlineModel(this._cts.token); + await this.updateStickyModel(this._cts.token); this._onDidChangeStickyScroll.fire(); } - private async updateOutlineModel(token: CancellationToken): Promise { - if (!this._editor.hasModel()) { + private async updateStickyModel(token: CancellationToken): Promise { + + if (!this._editor.hasModel() || !this._stickyModelProvider) { return; } - const model = this._editor.getModel(); - const modelVersionId = model.getVersionId(); - const isDifferentModel = this._model ? !isEqual(this._model.uri, model.uri) : false; + const textModel = this._editor.getModel(); + const modelVersionId = textModel.getVersionId(); + const isDifferentModel = this._model ? !isEqual(this._model.uri, textModel.uri) : false; - // clear sticky scroll to not show stale data for too long + // Clear sticky scroll to not show stale data for too long const resetHandle = isDifferentModel ? setTimeout(() => { if (!token.isCancellationRequested) { - this._model = new StickyOutlineModel(model.uri, model.getVersionId(), undefined, undefined); + this._model = new StickyModel(textModel.uri, textModel.getVersionId(), undefined, undefined); this._onDidChangeStickyScroll.fire(); } }, 75) : undefined; - // get elements from outline or folding model - const outlineModel = await OutlineModel.create(this._languageFeaturesService.documentSymbolProvider, model, token); - if (token.isCancellationRequested) { - return; - } - if (outlineModel.children.size !== 0) { - const { stickyOutlineElement, providerID } = StickyOutlineElement.fromOutlineModel(outlineModel, this._model?.outlineProviderId); - this._model = new StickyOutlineModel(model.uri, modelVersionId, stickyOutlineElement, providerID); + this._model = await this._stickyModelProvider.update(textModel, modelVersionId, token); - } else { - const foldingController = FoldingController.get(this._editor); - const foldingModel = await foldingController?.getFoldingModel(); - if (token.isCancellationRequested) { - return; - } - if (foldingModel && foldingModel.regions.length !== 0) { - const foldingElement = StickyOutlineElement.fromFoldingModel(foldingModel); - this._model = new StickyOutlineModel(model.uri, modelVersionId, foldingElement, undefined); - } else { - this._model = undefined; - } - } clearTimeout(resetHandle); } @@ -152,12 +139,19 @@ export class StickyLineCandidateProvider extends Disposable { return index; } - public getCandidateStickyLinesIntersectingFromOutline(range: StickyRange, outlineModel: StickyOutlineElement, result: StickyLineCandidate[], depth: number, lastStartLineNumber: number): void { + public getCandidateStickyLinesIntersectingFromStickyModel( + range: StickyRange, + outlineModel: StickyElement, + result: StickyLineCandidate[], + depth: number, + lastStartLineNumber: number + ): void { if (outlineModel.children.length === 0) { return; } let lastLine = lastStartLineNumber; const childrenStartLines: number[] = []; + for (let i = 0; i < outlineModel.children.length; i++) { const child = outlineModel.children[i]; if (child.range) { @@ -166,6 +160,7 @@ export class StickyLineCandidateProvider extends Disposable { } const lowerBound = this.updateIndex(binarySearch(childrenStartLines, range.startLineNumber, (a: number, b: number) => { return a - b; })); const upperBound = this.updateIndex(binarySearch(childrenStartLines, range.startLineNumber + depth, (a: number, b: number) => { return a - b; })); + for (let i = lowerBound; i <= upperBound; i++) { const child = outlineModel.children[i]; if (!child) { @@ -177,10 +172,10 @@ export class StickyLineCandidateProvider extends Disposable { if (range.startLineNumber <= childEndLine + 1 && childStartLine - 1 <= range.endLineNumber && childStartLine !== lastLine) { lastLine = childStartLine; result.push(new StickyLineCandidate(childStartLine, childEndLine - 1, depth + 1)); - this.getCandidateStickyLinesIntersectingFromOutline(range, child, result, depth + 1, childStartLine); + this.getCandidateStickyLinesIntersectingFromStickyModel(range, child, result, depth + 1, childStartLine); } } else { - this.getCandidateStickyLinesIntersectingFromOutline(range, child, result, depth, lastStartLineNumber); + this.getCandidateStickyLinesIntersectingFromStickyModel(range, child, result, depth, lastStartLineNumber); } } } @@ -190,8 +185,9 @@ export class StickyLineCandidateProvider extends Disposable { return []; } let stickyLineCandidates: StickyLineCandidate[] = []; - this.getCandidateStickyLinesIntersectingFromOutline(range, this._model.element, stickyLineCandidates, 0, -1); + this.getCandidateStickyLinesIntersectingFromStickyModel(range, this._model.element, stickyLineCandidates, 0, -1); const hiddenRanges: Range[] | undefined = this._editor._getViewModel()?.getHiddenAreas(); + if (hiddenRanges) { for (const hiddenRange of hiddenRanges) { stickyLineCandidates = stickyLineCandidates.filter(stickyLine => !(stickyLine.startLineNumber >= hiddenRange.startLineNumber && stickyLine.endLineNumber <= hiddenRange.endLineNumber + 1)); @@ -200,145 +196,3 @@ export class StickyLineCandidateProvider extends Disposable { return stickyLineCandidates; } } - -class StickyOutlineElement { - - private static comparator(range1: StickyRange, range2: StickyRange): number { - if (range1.startLineNumber !== range2.startLineNumber) { - return range1.startLineNumber - range2.startLineNumber; - } else { - return range2.endLineNumber - range1.endLineNumber; - } - } - - public static fromOutlineElement(outlineElement: OutlineElement, previousStartLine: number): StickyOutlineElement { - const children: StickyOutlineElement[] = []; - for (const child of outlineElement.children.values()) { - if (child.symbol.selectionRange.startLineNumber !== child.symbol.range.endLineNumber) { - if (child.symbol.selectionRange.startLineNumber !== previousStartLine) { - children.push(StickyOutlineElement.fromOutlineElement(child, child.symbol.selectionRange.startLineNumber)); - } else { - for (const subchild of child.children.values()) { - children.push(StickyOutlineElement.fromOutlineElement(subchild, child.symbol.selectionRange.startLineNumber)); - } - } - } - } - children.sort((child1, child2) => this.comparator(child1.range!, child2.range!)); - const range = new StickyRange(outlineElement.symbol.selectionRange.startLineNumber, outlineElement.symbol.range.endLineNumber); - return new StickyOutlineElement(range, children, undefined); - } - - public static fromOutlineModel(outlineModel: OutlineModel, preferredProvider: string | undefined): { stickyOutlineElement: StickyOutlineElement; providerID: string | undefined } { - - let outlineElements: Map; - // When several possible outline providers - if (Iterable.first(outlineModel.children.values()) instanceof OutlineGroup) { - const provider = Iterable.find(outlineModel.children.values(), outlineGroupOfModel => outlineGroupOfModel.id === preferredProvider); - if (provider) { - outlineElements = provider.children; - } else { - let tempID = ''; - let maxTotalSumOfRanges = -1; - let optimalOutlineGroup = undefined; - for (const [_key, outlineGroup] of outlineModel.children.entries()) { - const totalSumRanges = StickyOutlineElement.findSumOfRangesOfGroup(outlineGroup); - if (totalSumRanges > maxTotalSumOfRanges) { - optimalOutlineGroup = outlineGroup; - maxTotalSumOfRanges = totalSumRanges; - tempID = outlineGroup.id; - } - } - preferredProvider = tempID; - outlineElements = optimalOutlineGroup!.children; - } - } else { - outlineElements = outlineModel.children as Map; - } - const stickyChildren: StickyOutlineElement[] = []; - const outlineElementsArray = Array.from(outlineElements.values()).sort((element1, element2) => { - const range1: StickyRange = new StickyRange(element1.symbol.range.startLineNumber, element1.symbol.range.endLineNumber); - const range2: StickyRange = new StickyRange(element2.symbol.range.startLineNumber, element2.symbol.range.endLineNumber); - return this.comparator(range1, range2); - }); - for (const outlineElement of outlineElementsArray) { - stickyChildren.push(StickyOutlineElement.fromOutlineElement(outlineElement, outlineElement.symbol.selectionRange.startLineNumber)); - } - const stickyOutlineElement = new StickyOutlineElement(undefined, stickyChildren, undefined); - - return { - stickyOutlineElement: stickyOutlineElement, - providerID: preferredProvider - }; - } - - private static findSumOfRangesOfGroup(outline: OutlineGroup | OutlineElement): number { - let res = 0; - for (const child of outline.children.values()) { - res += this.findSumOfRangesOfGroup(child); - } - if (outline instanceof OutlineElement) { - return res + outline.symbol.range.endLineNumber - outline.symbol.selectionRange.startLineNumber; - } else { - return res; - } - } - - public static fromFoldingModel(foldingModel: FoldingModel): StickyOutlineElement { - const regions = foldingModel.regions; - const length = regions.length; - let range: StickyRange | undefined; - const stackOfParents: StickyRange[] = []; - - const stickyOutlineElement = new StickyOutlineElement( - undefined, - [], - undefined - ); - let parentStickyOutlineElement = stickyOutlineElement; - - for (let i = 0; i < length; i++) { - range = new StickyRange(regions.getStartLineNumber(i), regions.getEndLineNumber(i) + 1); - while (stackOfParents.length !== 0 && (range.startLineNumber < stackOfParents[stackOfParents.length - 1].startLineNumber || range.endLineNumber > stackOfParents[stackOfParents.length - 1].endLineNumber)) { - stackOfParents.pop(); - if (parentStickyOutlineElement.parent !== undefined) { - parentStickyOutlineElement = parentStickyOutlineElement.parent; - } - } - const child = new StickyOutlineElement( - range, - [], - parentStickyOutlineElement - ); - parentStickyOutlineElement.children.push(child); - parentStickyOutlineElement = child; - stackOfParents.push(range); - } - return stickyOutlineElement; - } - - constructor( - /** - * Range of line numbers spanned by the current scope - */ - public readonly range: StickyRange | undefined, - /** - * Must be sorted by start line number - */ - public readonly children: StickyOutlineElement[], - /** - * Parent sticky outline element - */ - public readonly parent: StickyOutlineElement | undefined - ) { - } -} - -class StickyOutlineModel { - constructor( - readonly uri: URI, - readonly version: number, - readonly element: StickyOutlineElement | undefined, - readonly outlineProviderId: string | undefined - ) { } -} diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts index 0daf442c877..7b4a946f5f3 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts @@ -2,29 +2,19 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IActiveCodeEditor, ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import * as dom from 'vs/base/browser/dom'; -import { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; -import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; -import { RenderLineInput, renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; -import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { Position } from 'vs/editor/common/core/position'; -import { ClickLinkGesture } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; -import { getDefinitionsAtPosition } from 'vs/editor/contrib/gotoSymbol/browser/goToSymbol'; -import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { goToDefinitionWithLocation } from 'vs/editor/contrib/inlayHints/browser/inlayHintsLocations'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { IRange, Range } from 'vs/editor/common/core/range'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import 'vs/css!./stickyScroll'; -import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget'; -interface CustomMouseEvent { - detail: string; - element: HTMLElement; -} +import * as dom from 'vs/base/browser/dom'; +import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; +import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import 'vs/css!./stickyScroll'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; +import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget'; +import { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; +import { Position } from 'vs/editor/common/core/position'; +import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; +import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; +import { RenderLineInput, renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; export class StickyScrollWidgetState { constructor( @@ -33,7 +23,7 @@ export class StickyScrollWidgetState { ) { } } -const _ttPolicy = window.trustedTypes?.createPolicy('stickyScrollViewLayer', { createHTML: value => value }); +const _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value }); export class StickyScrollWidget extends Disposable implements IOverlayWidget { @@ -45,13 +35,9 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget { private _lastLineRelativePosition: number = 0; private _hoverOnLine: number = -1; private _hoverOnColumn: number = -1; - private _stickyRangeProjectedOnEditor: IRange | undefined; - private _candidateDefinitionsLength: number = -1; constructor( - private readonly _editor: ICodeEditor, - @ILanguageFeaturesService private readonly _languageFeatureService: ILanguageFeaturesService, - @IInstantiationService private readonly _instaService: IInstantiationService + private readonly _editor: ICodeEditor ) { super(); this._layoutInfo = this._editor.getLayoutInfo(); @@ -59,97 +45,14 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget { this._rootDomNode.className = 'sticky-widget'; this._rootDomNode.classList.toggle('peek', _editor instanceof EmbeddedCodeEditorWidget); this._rootDomNode.style.width = `${this._layoutInfo.width - this._layoutInfo.minimap.minimapCanvasOuterWidth - this._layoutInfo.verticalScrollbarWidth}px`; - - this._register(this._updateLinkGesture()); } - private _updateLinkGesture(): IDisposable { + get hoverOnLine(): number { + return this._hoverOnLine; + } - const linkGestureStore = new DisposableStore(); - const sessionStore = new DisposableStore(); - linkGestureStore.add(sessionStore); - const gesture = new ClickLinkGesture(this._editor, true); - linkGestureStore.add(gesture); - - linkGestureStore.add(gesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, _keyboardEvent]) => { - if (!this._editor.hasModel() || !mouseEvent.hasTriggerModifier) { - sessionStore.clear(); - return; - } - const targetMouseEvent = mouseEvent.target as unknown as CustomMouseEvent; - if (targetMouseEvent.detail === this.getId() && targetMouseEvent.element.innerText === targetMouseEvent.element.innerHTML) { - const text = targetMouseEvent.element.innerText; - if (this._hoverOnColumn === -1) { - return; - } - const lineNumber = this._hoverOnLine; - const column = this._hoverOnColumn; - - const stickyPositionProjectedOnEditor = new Range(lineNumber, column, lineNumber, column + text.length); - if (!stickyPositionProjectedOnEditor.equalsRange(this._stickyRangeProjectedOnEditor)) { - this._stickyRangeProjectedOnEditor = stickyPositionProjectedOnEditor; - sessionStore.clear(); - } else if (targetMouseEvent.element.style.textDecoration === 'underline') { - return; - } - - const cancellationToken = new CancellationTokenSource(); - sessionStore.add(toDisposable(() => cancellationToken.dispose(true))); - - let currentHTMLChild: HTMLElement; - - getDefinitionsAtPosition(this._languageFeatureService.definitionProvider, this._editor.getModel(), new Position(lineNumber, column + 1), cancellationToken.token).then((candidateDefinitions => { - if (cancellationToken.token.isCancellationRequested) { - return; - } - if (candidateDefinitions.length !== 0) { - this._candidateDefinitionsLength = candidateDefinitions.length; - const childHTML: HTMLElement = targetMouseEvent.element; - if (currentHTMLChild !== childHTML) { - sessionStore.clear(); - currentHTMLChild = childHTML; - currentHTMLChild.style.textDecoration = 'underline'; - sessionStore.add(toDisposable(() => { - currentHTMLChild.style.textDecoration = 'none'; - })); - } else if (!currentHTMLChild) { - currentHTMLChild = childHTML; - currentHTMLChild.style.textDecoration = 'underline'; - sessionStore.add(toDisposable(() => { - currentHTMLChild.style.textDecoration = 'none'; - })); - } - } else { - sessionStore.clear(); - } - })); - } else { - sessionStore.clear(); - } - })); - linkGestureStore.add(gesture.onCancel(() => { - sessionStore.clear(); - })); - linkGestureStore.add(gesture.onExecute(async e => { - if ((e.target as unknown as CustomMouseEvent).detail !== this.getId()) { - return; - } - if (e.hasTriggerModifier) { - // Control click - if (this._candidateDefinitionsLength > 1) { - this._editor.revealPosition({ lineNumber: this._hoverOnLine, column: 1 }); - } - this._instaService.invokeFunction(goToDefinitionWithLocation, e, this._editor as IActiveCodeEditor, { uri: this._editor.getModel()!.uri, range: this._stickyRangeProjectedOnEditor! }); - - } else if (!e.isRightClick) { - // Normal click - const position = { lineNumber: this._hoverOnLine, column: this._hoverOnColumn }; - this._editor.revealPosition(position); - this._editor.setSelection(Range.fromPositions(position)); - this._editor.focus(); - } - })); - return linkGestureStore; + get hoverOnColumn(): number { + return this._hoverOnColumn; } get lineNumbers(): number[] { @@ -165,16 +68,45 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget { } setState(state: StickyScrollWidgetState): void { + dom.clearNode(this._rootDomNode); this._disposableStore.clear(); this._lineNumbers.length = 0; - dom.clearNode(this._rootDomNode); + const editorLineHeight = this._editor.getOption(EditorOption.lineHeight); + const futureWidgetHeight = state.lineNumbers.length * editorLineHeight + state.lastLineRelativePosition; - this._lastLineRelativePosition = state.lastLineRelativePosition; - this._lineNumbers = state.lineNumbers; + if (futureWidgetHeight > 0) { + this._lastLineRelativePosition = state.lastLineRelativePosition; + this._lineNumbers = state.lineNumbers; + } else { + this._lastLineRelativePosition = 0; + this._lineNumbers = []; + } this._renderRootNode(); } - private _renderChildNode(index: number, line: number): HTMLElement { + private _renderRootNode(): void { + + if (!this._editor._getViewModel()) { + return; + } + for (const [index, line] of this._lineNumbers.entries()) { + const childNode = this._renderChildNode(index, line); + this._rootDomNode.appendChild(childNode); + } + + const editorLineHeight = this._editor.getOption(EditorOption.lineHeight); + const widgetHeight: number = this._lineNumbers.length * editorLineHeight + this._lastLineRelativePosition; + this._rootDomNode.style.display = widgetHeight > 0 ? 'block' : 'none'; + this._rootDomNode.style.height = widgetHeight.toString() + 'px'; + this._rootDomNode.setAttribute('role', 'list'); + const minimapSide = this._editor.getOption(EditorOption.minimap).side; + + if (minimapSide === 'left') { + this._rootDomNode.style.marginLeft = this._editor.getLayoutInfo().minimap.minimapCanvasOuterWidth + 'px'; + } + } + + private _renderChildNode(index: number, line: number): HTMLDivElement { const child = document.createElement('div'); const viewModel = this._editor._getViewModel(); @@ -249,6 +181,8 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget { child.appendChild(lineHTMLNode); child.className = 'sticky-line-root'; + child.setAttribute('role', 'listitem'); + child.tabIndex = 0; child.style.lineHeight = `${lineHeight}px`; child.style.width = `${width}px`; child.style.height = `${lineHeight}px`; @@ -261,10 +195,13 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget { child.style.top = this._lastLineRelativePosition + 'px'; } + // Each child has a listener which fires when the mouse hovers over the child this._disposableStore.add(dom.addDisposableListener(child, 'mouseover', (e) => { if (this._editor.hasModel()) { const mouseOverEvent = new StandardMouseEvent(e); const text = mouseOverEvent.target.innerText; + + // Line and column number of the hover needed for the control clicking feature this._hoverOnLine = line; // TODO: workaround to find the column index, perhaps need a more solid solution this._hoverOnColumn = this._editor.getModel().getLineContent(line).indexOf(text) + 1 || -1; @@ -274,23 +211,6 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget { return child; } - private _renderRootNode(): void { - if (!this._editor._getViewModel()) { - return; - } - for (const [index, line] of this._lineNumbers.entries()) { - this._rootDomNode.appendChild(this._renderChildNode(index, line)); - } - const editorLineHeight = this._editor.getOption(EditorOption.lineHeight); - const widgetHeight: number = this._lineNumbers.length * editorLineHeight + this._lastLineRelativePosition; - this._rootDomNode.style.display = widgetHeight > 0 ? 'block' : 'none'; - this._rootDomNode.style.height = widgetHeight.toString() + 'px'; - const minimapSide = this._editor.getOption(EditorOption.minimap).side; - if (minimapSide === 'left') { - this._rootDomNode.style.marginLeft = this._editor.getLayoutInfo().minimap.minimapCanvasOuterWidth + 'px'; - } - } - getId(): string { return 'editor.contrib.stickyScrollWidget'; } diff --git a/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts b/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts index 9e4e01fb994..909bddf9801 100644 --- a/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts +++ b/src/vs/editor/contrib/stickyScroll/test/browser/stickyScroll.test.ts @@ -15,13 +15,25 @@ import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { ILogService, NullLogService } from 'vs/platform/log/common/log'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { mock } from 'vs/base/test/common/mock'; +import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; +import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; +import { TestLanguageConfigurationService } from 'vs/editor/test/common/modes/testLanguageConfigurationService'; +import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; +import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; suite('Sticky Scroll Tests', () => { const serviceCollection = new ServiceCollection( [ILanguageFeaturesService, new LanguageFeaturesService()], [ILogService, new NullLogService()], - [IContextMenuService, new class extends mock() { }] + [IContextMenuService, new class extends mock() { }], + [ILanguageConfigurationService, new TestLanguageConfigurationService()], + [IEnvironmentService, new class extends mock() { + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }], + [ILanguageFeatureDebounceService, new SyncDescriptor(LanguageFeatureDebounceService)], ); const text = [ @@ -104,101 +116,124 @@ suite('Sticky Scroll Tests', () => { }; } - test('Testing the function getCandidateStickyLinesIntersecting', async () => { - const model = createTextModel(text); - await withAsyncTestCodeEditor(model, { serviceCollection }, async (editor, _viewModel, instantiationService) => { - const languageService = instantiationService.get(ILanguageFeaturesService); - languageService.documentSymbolProvider.register('*', documentSymbolProviderForTestModel()); - const provider: StickyLineCandidateProvider = new StickyLineCandidateProvider(editor, languageService); - await provider.update(); - assert.deepStrictEqual(provider.getCandidateStickyLinesIntersecting({ startLineNumber: 1, endLineNumber: 4 }), [new StickyLineCandidate(1, 2, 1)]); - assert.deepStrictEqual(provider.getCandidateStickyLinesIntersecting({ startLineNumber: 8, endLineNumber: 10 }), [new StickyLineCandidate(7, 11, 1), new StickyLineCandidate(9, 11, 2), new StickyLineCandidate(10, 10, 3)]); - assert.deepStrictEqual(provider.getCandidateStickyLinesIntersecting({ startLineNumber: 10, endLineNumber: 13 }), [new StickyLineCandidate(7, 11, 1), new StickyLineCandidate(9, 11, 2), new StickyLineCandidate(10, 10, 3)]); + test('Testing the function getCandidateStickyLinesIntersecting', () => { + return runWithFakedTimers({ useFakeTimers: true }, async () => { + const model = createTextModel(text); + await withAsyncTestCodeEditor(model, { + stickyScroll: { + enabled: true, + maxLineCount: 5, + defaultModel: 'outlineModel' + }, serviceCollection: serviceCollection + }, async (editor, _viewModel, instantiationService) => { + const languageService = instantiationService.get(ILanguageFeaturesService); + const languageConfigurationService = instantiationService.get(ILanguageConfigurationService); + languageService.documentSymbolProvider.register('*', documentSymbolProviderForTestModel()); + const provider: StickyLineCandidateProvider = new StickyLineCandidateProvider(editor, languageService, languageConfigurationService); + await provider.update(); + assert.deepStrictEqual(provider.getCandidateStickyLinesIntersecting({ startLineNumber: 1, endLineNumber: 4 }), [new StickyLineCandidate(1, 2, 1)]); + assert.deepStrictEqual(provider.getCandidateStickyLinesIntersecting({ startLineNumber: 8, endLineNumber: 10 }), [new StickyLineCandidate(7, 11, 1), new StickyLineCandidate(9, 11, 2), new StickyLineCandidate(10, 10, 3)]); + assert.deepStrictEqual(provider.getCandidateStickyLinesIntersecting({ startLineNumber: 10, endLineNumber: 13 }), [new StickyLineCandidate(7, 11, 1), new StickyLineCandidate(9, 11, 2), new StickyLineCandidate(10, 10, 3)]); - provider.dispose(); - model.dispose(); + provider.dispose(); + model.dispose(); + }); }); }); - test('issue #157180: Render the correct line corresponding to the scope definition', async () => { + test('issue #157180: Render the correct line corresponding to the scope definition', () => { + return runWithFakedTimers({ useFakeTimers: true }, async () => { + const model = createTextModel(text); + await withAsyncTestCodeEditor(model, { + stickyScroll: { + enabled: true, + maxLineCount: 5, + defaultModel: 'outlineModel' + }, serviceCollection + }, async (editor, _viewModel, instantiationService) => { - const model = createTextModel(text); - await withAsyncTestCodeEditor(model, { serviceCollection }, async (editor, _viewModel, instantiationService) => { + const stickyScrollController: StickyScrollController = editor.registerAndInstantiateContribution(StickyScrollController.ID, StickyScrollController); + const lineHeight: number = editor.getOption(EditorOption.lineHeight); + const languageService: ILanguageFeaturesService = instantiationService.get(ILanguageFeaturesService); + languageService.documentSymbolProvider.register('*', documentSymbolProviderForTestModel()); + await stickyScrollController.stickyScrollCandidateProvider.update(); + let state; - const stickyScrollController: StickyScrollController = editor.registerAndInstantiateContribution(StickyScrollController.ID, StickyScrollController); - const lineHeight: number = editor.getOption(EditorOption.lineHeight); - const languageService: ILanguageFeaturesService = instantiationService.get(ILanguageFeaturesService); - languageService.documentSymbolProvider.register('*', documentSymbolProviderForTestModel()); - await stickyScrollController.stickyScrollCandidateProvider.update(); - let state; + editor.setScrollTop(1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [1]); - editor.setScrollTop(1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [1]); + editor.setScrollTop(lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [1]); - editor.setScrollTop(lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [1]); + editor.setScrollTop(4 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, []); - editor.setScrollTop(4 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, []); + editor.setScrollTop(8 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [7, 9]); - editor.setScrollTop(8 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [7, 9]); + editor.setScrollTop(9 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [7, 9]); - editor.setScrollTop(9 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [7, 9]); + editor.setScrollTop(10 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [7]); - editor.setScrollTop(10 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [7]); - - stickyScrollController.dispose(); - stickyScrollController.stickyScrollCandidateProvider.dispose(); - model.dispose(); + stickyScrollController.dispose(); + stickyScrollController.stickyScrollCandidateProvider.dispose(); + model.dispose(); + }); }); }); - test('issue #156268 : Do not reveal sticky lines when they are in a folded region ', async () => { + test('issue #156268 : Do not reveal sticky lines when they are in a folded region ', () => { + return runWithFakedTimers({ useFakeTimers: true }, async () => { + const model = createTextModel(text); + await withAsyncTestCodeEditor(model, { + stickyScroll: { + enabled: true, + maxLineCount: 5, + defaultModel: 'outlineModel' + }, serviceCollection + }, async (editor, viewModel, instantiationService) => { - const model = createTextModel(text); - await withAsyncTestCodeEditor(model, { serviceCollection }, async (editor, viewModel, instantiationService) => { + const stickyScrollController: StickyScrollController = editor.registerAndInstantiateContribution(StickyScrollController.ID, StickyScrollController); + const lineHeight = editor.getOption(EditorOption.lineHeight); - const stickyScrollController: StickyScrollController = editor.registerAndInstantiateContribution(StickyScrollController.ID, StickyScrollController); - const lineHeight = editor.getOption(EditorOption.lineHeight); + const languageService = instantiationService.get(ILanguageFeaturesService); + languageService.documentSymbolProvider.register('*', documentSymbolProviderForTestModel()); + await stickyScrollController.stickyScrollCandidateProvider.update(); + editor.setHiddenAreas([{ startLineNumber: 2, endLineNumber: 2, startColumn: 1, endColumn: 1 }, { startLineNumber: 10, endLineNumber: 11, startColumn: 1, endColumn: 1 }]); + let state; - const languageService = instantiationService.get(ILanguageFeaturesService); - languageService.documentSymbolProvider.register('*', documentSymbolProviderForTestModel()); - await stickyScrollController.stickyScrollCandidateProvider.update(); - editor.setHiddenAreas([{ startLineNumber: 2, endLineNumber: 2, startColumn: 1, endColumn: 1 }, { startLineNumber: 10, endLineNumber: 11, startColumn: 1, endColumn: 1 }]); - let state; + editor.setScrollTop(1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [1]); - editor.setScrollTop(1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [1]); + editor.setScrollTop(lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, []); - editor.setScrollTop(lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, []); + editor.setScrollTop(6 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [7, 9]); - editor.setScrollTop(6 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [7, 9]); + editor.setScrollTop(7 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [7]); - editor.setScrollTop(7 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [7]); + editor.setScrollTop(10 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, []); - editor.setScrollTop(10 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, []); - - stickyScrollController.dispose(); - stickyScrollController.stickyScrollCandidateProvider.dispose(); - model.dispose(); + stickyScrollController.dispose(); + stickyScrollController.stickyScrollCandidateProvider.dispose(); + model.dispose(); + }); }); }); @@ -249,43 +284,50 @@ suite('Sticky Scroll Tests', () => { }; } - test('issue #159271 : render the correct widget state when the child scope starts on the same line as the parent scope', async () => { + test('issue #159271 : render the correct widget state when the child scope starts on the same line as the parent scope', () => { + return runWithFakedTimers({ useFakeTimers: true }, async () => { + const model = createTextModel(textWithScopesWithSameStartingLines); + await withAsyncTestCodeEditor(model, { + stickyScroll: { + enabled: true, + maxLineCount: 5, + defaultModel: 'outlineModel' + }, serviceCollection + }, async (editor, _viewModel, instantiationService) => { - const model = createTextModel(textWithScopesWithSameStartingLines); - await withAsyncTestCodeEditor(model, { serviceCollection }, async (editor, _viewModel, instantiationService) => { + const stickyScrollController: StickyScrollController = editor.registerAndInstantiateContribution(StickyScrollController.ID, StickyScrollController); + await stickyScrollController.stickyScrollCandidateProvider.update(); + const lineHeight = editor.getOption(EditorOption.lineHeight); - const stickyScrollController: StickyScrollController = editor.registerAndInstantiateContribution(StickyScrollController.ID, StickyScrollController); - await stickyScrollController.stickyScrollCandidateProvider.update(); - const lineHeight = editor.getOption(EditorOption.lineHeight); + const languageService = instantiationService.get(ILanguageFeaturesService); + languageService.documentSymbolProvider.register('*', documentSymbolProviderForSecondTestModel()); + await stickyScrollController.stickyScrollCandidateProvider.update(); + let state; - const languageService = instantiationService.get(ILanguageFeaturesService); - languageService.documentSymbolProvider.register('*', documentSymbolProviderForSecondTestModel()); - await stickyScrollController.stickyScrollCandidateProvider.update(); - let state; + editor.setScrollTop(1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [1, 2]); - editor.setScrollTop(1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [1, 2]); + editor.setScrollTop(lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [1, 2]); - editor.setScrollTop(lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [1, 2]); + editor.setScrollTop(2 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [1]); - editor.setScrollTop(2 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [1]); + editor.setScrollTop(3 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, [1]); - editor.setScrollTop(3 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, [1]); + editor.setScrollTop(4 * lineHeight + 1); + state = stickyScrollController.findScrollWidgetState(); + assert.deepStrictEqual(state.lineNumbers, []); - editor.setScrollTop(4 * lineHeight + 1); - state = stickyScrollController.getScrollWidgetState(); - assert.deepStrictEqual(state.lineNumbers, []); - - stickyScrollController.dispose(); - stickyScrollController.stickyScrollCandidateProvider.dispose(); - model.dispose(); + stickyScrollController.dispose(); + stickyScrollController.stickyScrollCandidateProvider.dispose(); + model.dispose(); + }); }); }); }); diff --git a/src/vs/editor/contrib/suggest/browser/media/suggest.css b/src/vs/editor/contrib/suggest/browser/media/suggest.css index de3fa2127f8..bac06376685 100644 --- a/src/vs/editor/contrib/suggest/browser/media/suggest.css +++ b/src/vs/editor/contrib/suggest/browser/media/suggest.css @@ -10,6 +10,7 @@ z-index: 40; display: flex; flex-direction: column; + border-radius: 3px; } .monaco-editor .suggest-widget.message { diff --git a/src/vs/editor/contrib/suggest/browser/suggest.ts b/src/vs/editor/contrib/suggest/browser/suggest.ts index 3409fa42392..9e8fbaee192 100644 --- a/src/vs/editor/contrib/suggest/browser/suggest.ts +++ b/src/vs/editor/contrib/suggest/browser/suggest.ts @@ -73,7 +73,7 @@ export class CompletionItem { readonly extensionId?: ExtensionIdentifier; // resolving - private _isResolved?: boolean; + private _resolveDuration?: number; private _resolveCache?: Promise; constructor( @@ -122,32 +122,37 @@ export class CompletionItem { // create the suggestion resolver if (typeof provider.resolveCompletionItem !== 'function') { this._resolveCache = Promise.resolve(); - this._isResolved = true; + this._resolveDuration = 0; } } // ---- resolving get isResolved(): boolean { - return !!this._isResolved; + return this._resolveDuration !== undefined; + } + + get resolveDuration(): number { + return this._resolveDuration !== undefined ? this._resolveDuration : -1; } async resolve(token: CancellationToken) { if (!this._resolveCache) { const sub = token.onCancellationRequested(() => { this._resolveCache = undefined; - this._isResolved = false; + this._resolveDuration = undefined; }); + const sw = new StopWatch(true); this._resolveCache = Promise.resolve(this.provider.resolveCompletionItem!(this.completion, token)).then(value => { Object.assign(this.completion, value); - this._isResolved = true; + this._resolveDuration = sw.elapsed(); sub.dispose(); }, err => { if (isCancellationError(err)) { // the IPC queue will reject the request with the // cancellation error -> reset cached this._resolveCache = undefined; - this._isResolved = false; + this._resolveDuration = undefined; } }); } @@ -213,7 +218,7 @@ export async function provideSuggestionItems( token: CancellationToken = CancellationToken.None ): Promise { - const sw = new StopWatch(true); + const sw = new StopWatch(); position = position.clone(); const word = model.getWordAtPosition(position); @@ -275,7 +280,7 @@ export async function provideSuggestionItems( if (options.providerFilter.size > 0 && !options.providerFilter.has(_snippetSuggestSupport)) { return; } - const sw = new StopWatch(true); + const sw = new StopWatch(); const list = await _snippetSuggestSupport.provideCompletionItems(model, position, context, token); onCompletionList(_snippetSuggestSupport, list, sw); })(); @@ -300,7 +305,7 @@ export async function provideSuggestionItems( return; } try { - const sw = new StopWatch(true); + const sw = new StopWatch(); const list = await provider.provideCompletionItems(model, position, context, token); didAddResult = onCompletionList(provider, list, sw) || didAddResult; } catch (err) { diff --git a/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts b/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts index 3df043694c8..2422c361a35 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestAlternatives.ts @@ -68,7 +68,7 @@ export class SuggestAlternatives { private static _moveIndex(fwd: boolean, model: CompletionModel, index: number): number { let newIndex = index; - while (true) { + for (let rounds = model.items.length; rounds > 0; rounds--) { newIndex = (newIndex + model.items.length + (fwd ? +1 : -1)) % model.items.length; if (newIndex === index) { break; diff --git a/src/vs/editor/contrib/suggest/browser/suggestController.ts b/src/vs/editor/contrib/suggest/browser/suggestController.ts index 452980643bd..ddd57946496 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestController.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestController.ts @@ -7,7 +7,7 @@ import { alert } from 'vs/base/browser/ui/aria/aria'; import { isNonEmptyArray } from 'vs/base/common/arrays'; import { IdleValue } from 'vs/base/common/async'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { onUnexpectedError } from 'vs/base/common/errors'; +import { onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors'; import { Event } from 'vs/base/common/event'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { KeyCodeChord } from 'vs/base/common/keybindings'; @@ -246,14 +246,9 @@ export class SuggestController implements IEditorContribution { let noFocus = false; if (e.triggerOptions.auto) { - // don't "focus" item when configured to do so or when in snippet mode (and configured to do so) + // don't "focus" item when configured to do const options = this.editor.getOption(EditorOption.suggest); - - if (options.snippetsPreventQuickSuggestions && SnippetController2.get(this.editor)?.isInSnippet()) { - // SPECIAL: in snippet mode, we never focus unless the user wants to - noFocus = true; - - } else if (options.selectionMode === 'never' || options.selectionMode === 'always') { + if (options.selectionMode === 'never' || options.selectionMode === 'always') { // simple: always or never noFocus = options.selectionMode === 'never'; @@ -337,8 +332,17 @@ export class SuggestController implements IEditorContribution { // keep item in memory this._memoryService.memorize(model, this.editor.getPosition(), item); + const isResolved = item.isResolved; + + // telemetry data points: duration of command execution, info about async additional edits (-1=n/a, -2=none, 1=success, 0=failed) + let _commandExectionDuration = -1; + let _additionalEditsAppliedAsync = -1; if (Array.isArray(item.completion.additionalTextEdits)) { + + // cancel -> stops all listening and closes widget + this.model.cancel(); + // sync additional edits const scrollState = StableEditorScrollState.capture(this.editor); this.editor.executeEdits( @@ -347,9 +351,9 @@ export class SuggestController implements IEditorContribution { ); scrollState.restoreRelativeVerticalPositionOfCursor(this.editor); - } else if (!item.isResolved) { + } else if (!isResolved) { // async additional edits - const sw = new StopWatch(true); + const sw = new StopWatch(); let position: IPosition | undefined; const docListener = model.onDidChangeContent(e => { @@ -379,7 +383,7 @@ export class SuggestController implements IEditorContribution { tasks.push(item.resolve(cts.token).then(() => { if (!item.completion.additionalTextEdits || cts.token.isCancellationRequested) { - return false; + return undefined; } if (position && item.completion.additionalTextEdits.some(edit => Position.isBefore(position!, Range.getStartPosition(edit.range)))) { return false; @@ -399,6 +403,8 @@ export class SuggestController implements IEditorContribution { return true; }).then(applied => { this._logService.trace('[suggest] async resolving of edits DONE (ms, applied?)', sw.elapsed(), applied); + _additionalEditsAppliedAsync = applied === true ? 1 : applied === false ? 0 : -2; + }).finally(() => { docListener.dispose(); typeListener.dispose(); })); @@ -432,7 +438,16 @@ export class SuggestController implements IEditorContribution { this.model.trigger({ auto: true, retrigger: true }); } else { // exec command, done - tasks.push(this._commandService.executeCommand(item.completion.command.id, ...(item.completion.command.arguments ? [...item.completion.command.arguments] : [])).catch(onUnexpectedError)); + const sw = new StopWatch(); + tasks.push(this._commandService.executeCommand(item.completion.command.id, ...(item.completion.command.arguments ? [...item.completion.command.arguments] : [])).catch(e => { + if (item.completion.extensionId) { + onUnexpectedExternalError(e); + } else { + onUnexpectedError(e); + } + }).finally(() => { + _commandExectionDuration = sw.elapsed(); + })); } } @@ -462,38 +477,53 @@ export class SuggestController implements IEditorContribution { // clear only now - after all tasks are done Promise.all(tasks).finally(() => { - this._reportSuggestionAcceptedTelemetry(item, model, event); + this._reportSuggestionAcceptedTelemetry(item, model, isResolved, _commandExectionDuration, _additionalEditsAppliedAsync); this.model.clear(); cts.dispose(); }); } - private _telemetryGate: number = 0; - private _reportSuggestionAcceptedTelemetry(item: CompletionItem, model: ITextModel, acceptedSuggestion: ISelectedSuggestion) { - if (this._telemetryGate++ % 100 !== 0) { + private _reportSuggestionAcceptedTelemetry(item: CompletionItem, model: ITextModel, itemResolved: boolean, commandExectionDuration: number, additionalEditsAppliedAsync: number) { + + if (Math.floor(Math.random() * 100) === 0) { + // throttle telemetry event because accepting completions happens a lot return; } - type AcceptedSuggestion = { providerId: string; fileExtension: string; languageId: string; basenameHash: string; kind: number }; + type AcceptedSuggestion = { + extensionId: string; providerId: string; + fileExtension: string; languageId: string; basenameHash: string; kind: number; + resolveInfo: number; resolveDuration: number; + commandDuration: number; + additionalEditsAsync: number; + }; type AcceptedSuggestionClassification = { owner: 'jrieken'; comment: 'Information accepting completion items'; + extensionId: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Extension contributing the completions item' }; providerId: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Provider of the completions item' }; basenameHash: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Hash of the basename of the file into which the completion was inserted' }; fileExtension: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'File extension of the file into which the completion was inserted' }; languageId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Language type of the file into which the completion was inserted' }; - kind: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The completion item kind' }; + kind: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'The completion item kind' }; + resolveInfo: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'If the item was inserted before resolving was done' }; + resolveDuration: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'How long resolving took to finish' }; + commandDuration: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'How long a completion item command took' }; + additionalEditsAsync: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Info about asynchronously applying additional edits' }; }; - // _debugDisplayName looks like `vscode.css-language-features(/-:)`, where the last bit is the trigger chars - // normalize it to just the extension ID and lowercase - const providerId = item.extensionId ? item.extensionId.value : (acceptedSuggestion.item.provider._debugDisplayName ?? 'unknown').split('(', 1)[0].toLowerCase(); + this._telemetryService.publicLog2('suggest.acceptedSuggestion', { - providerId, + extensionId: item.extensionId?.value ?? 'unknown', + providerId: item.provider._debugDisplayName ?? 'unknown', kind: item.completion.kind, basenameHash: hash(basename(model.uri)).toString(16), languageId: model.getLanguageId(), fileExtension: extname(model.uri), + resolveInfo: !item.provider.resolveCompletionItem ? -1 : itemResolved ? 1 : 0, + resolveDuration: item.resolveDuration, + commandDuration: commandExectionDuration, + additionalEditsAsync: additionalEditsAppliedAsync }); } diff --git a/src/vs/editor/contrib/suggest/browser/suggestModel.ts b/src/vs/editor/contrib/suggest/browser/suggestModel.ts index 58760d5a539..fd8d533f594 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestModel.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestModel.ts @@ -29,6 +29,9 @@ import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { FuzzyScoreOptions } from 'vs/base/common/filters'; import { assertType } from 'vs/base/common/types'; +import { InlineCompletionContextKeys } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys'; +import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; export interface ICancelEvent { readonly retrigger: boolean; @@ -71,7 +74,8 @@ export class LineContext { if (!word) { return false; } - if (word.endColumn !== pos.column) { + if (word.endColumn !== pos.column && + word.startColumn + 1 !== pos.column /* after typing a single character before a word */) { return false; } if (!isNaN(Number(word.word))) { @@ -101,25 +105,16 @@ export const enum State { Auto = 2 } -function isSuggestPreviewEnabled(editor: ICodeEditor): boolean { - return editor.getOption(EditorOption.suggest).preview; -} - function canShowQuickSuggest(editor: ICodeEditor, contextKeyService: IContextKeyService, configurationService: IConfigurationService): boolean { - if (!Boolean(contextKeyService.getContextKeyValue('inlineSuggestionVisible'))) { + if (!Boolean(contextKeyService.getContextKeyValue(InlineCompletionContextKeys.inlineSuggestionVisible.key))) { // Allow if there is no inline suggestion. return true; } - - const allowQuickSuggestions = configurationService.getValue('editor.inlineSuggest.allowQuickSuggestions', { overrideIdentifier: editor.getModel()?.getLanguageId(), resource: editor.getModel()?.uri }); - if (allowQuickSuggestions !== undefined) { - // Use setting if available. - return Boolean(allowQuickSuggestions); + const suppressSuggestions = contextKeyService.getContextKeyValue(InlineCompletionContextKeys.suppressSuggestions.key); + if (suppressSuggestions !== undefined) { + return !suppressSuggestions; } - - // Don't allow if inline suggestions are visible and no suggest preview is configured. - // TODO disabled for copilot - return false && isSuggestPreviewEnabled(editor); + return !editor.getOption(EditorOption.inlineSuggest).suppressSuggestions; } function canShowSuggestOnTriggerCharacters(editor: ICodeEditor, contextKeyService: IContextKeyService, configurationService: IConfigurationService): boolean { @@ -127,16 +122,11 @@ function canShowSuggestOnTriggerCharacters(editor: ICodeEditor, contextKeyServic // Allow if there is no inline suggestion. return true; } - - const allowQuickSuggestions = configurationService.getValue('editor.inlineSuggest.allowSuggestOnTriggerCharacters', { overrideIdentifier: editor.getModel()?.getLanguageId(), resource: editor.getModel()?.uri }); - if (allowQuickSuggestions !== undefined) { - // Use setting if available. - return Boolean(allowQuickSuggestions); + const suppressSuggestions = contextKeyService.getContextKeyValue(InlineCompletionContextKeys.suppressSuggestions.key); + if (suppressSuggestions !== undefined) { + return !suppressSuggestions; } - - // Don't allow if inline suggestions are visible and no suggest preview is configured. - // TODO disabled for copilot - return false && isSuggestPreviewEnabled(editor); + return !editor.getOption(EditorOption.inlineSuggest).suppressSuggestions; } export class SuggestModel implements IDisposable { @@ -169,6 +159,7 @@ export class SuggestModel implements IDisposable { @IContextKeyService private readonly _contextKeyService: IContextKeyService, @IConfigurationService private readonly _configurationService: IConfigurationService, @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, + @IEnvironmentService private readonly _envService: IEnvironmentService, ) { this._currentSelection = this._editor.getSelection() || new Selection(1, 1, 1, 1); @@ -390,6 +381,11 @@ export class SuggestModel implements IDisposable { return; } + if (this._editor.getOption(EditorOption.suggest).snippetsPreventQuickSuggestions && SnippetController2.get(this._editor)?.isInSnippet()) { + // no quick suggestion when in snippet mode + return; + } + this.cancel(); this._triggerQuickSuggest.cancelAndSet(() => { @@ -550,6 +546,15 @@ export class SuggestModel implements IDisposable { // finally report telemetry about durations this._reportDurationsTelemetry(completions.durations); + // report invalid completions by source + if (!this._envService.isBuilt || this._envService.isExtensionDevelopment) { + for (const item of completions.items) { + if (item.isInvalid) { + this._logService.warn(`[suggest] did IGNORE invalid completion item from ${item.provider._debugDisplayName}`, item.completion); + } + } + } + }).catch(onUnexpectedError); } diff --git a/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts b/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts index a9c013b4e7d..2cc955597b4 100644 --- a/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts @@ -24,6 +24,7 @@ export function createSuggestItem(label: string | languages.CompletionItemLabel, suggestions: [suggestion] }; const provider: languages.CompletionItemProvider = { + _debugDisplayName: 'test', provideCompletionItems(): any { return; } diff --git a/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts index 04987101122..1ff62f2cb35 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggest.test.ts @@ -24,6 +24,7 @@ suite('Suggest', function () { registry = new LanguageFeatureRegistry(); model = createTextModel('FOO\nbar\BAR\nfoo', undefined, undefined, URI.parse('foo:bar/path')); registration = registry.register({ pattern: 'bar/path', scheme: 'foo' }, { + _debugDisplayName: 'test', provideCompletionItems(_doc, pos) { return { incomplete: false, @@ -114,6 +115,7 @@ suite('Suggest', function () { const foo = new class implements CompletionItemProvider { + _debugDisplayName = 'test'; triggerCharacters = []; provideCompletionItems() { 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 fce75a30b85..f37f02ac646 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts @@ -31,6 +31,7 @@ import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtil import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; suite('SuggestController', function () { @@ -73,6 +74,10 @@ suite('SuggestController', function () { }], [ILabelService, new class extends mock() { }], [IWorkspaceContextService, new class extends mock() { }], + [IEnvironmentService, new class extends mock() { + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }], ); model = disposables.add(createTextModel('', undefined, undefined, URI.from({ scheme: 'test-ctrl', path: '/path.tst' }))); @@ -84,6 +89,7 @@ suite('SuggestController', function () { test('postfix completion reports incorrect position #86984', async function () { disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -120,6 +126,7 @@ suite('SuggestController', function () { test('use additionalTextEdits sync when possible', async function () { disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -161,6 +168,7 @@ suite('SuggestController', function () { let resolveCallCount = 0; disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -213,6 +221,7 @@ suite('SuggestController', function () { let resolveCallCount = 0; let resolve: Function = () => { }; disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -269,6 +278,7 @@ suite('SuggestController', function () { let resolveCallCount = 0; let resolve: Function = () => { }; disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -318,6 +328,7 @@ suite('SuggestController', function () { let resolveCallCount = 0; let resolve: Function = () => { }; disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -372,6 +383,7 @@ suite('SuggestController', function () { const resolve: Function[] = []; disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -429,6 +441,7 @@ suite('SuggestController', function () { disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -465,6 +478,7 @@ suite('SuggestController', function () { test('Pressing enter on autocomplete should always apply the selected dropdown completion, not a different, hidden one #161883', async function () { disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { const word = doc.getWordUntilPosition(pos); @@ -511,6 +525,7 @@ suite('SuggestController', function () { test('Fast autocomple typing selects the previous autocomplete suggestion, #71795', async function () { disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { const word = doc.getWordUntilPosition(pos); diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts index 55f00dce232..b8e16dc8ef3 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts @@ -44,6 +44,7 @@ suite('Suggest Inline Completions', function () { insta.invokeFunction(accessor => { accessor.get(ILanguageFeaturesService).completionProvider.register({ pattern: '*.bar', scheme: 'foo' }, new class implements CompletionItemProvider { + _debugDisplayName = 'test'; triggerCharacters?: string[] | undefined; diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts index 487fe210fea..7d2b9f51bb8 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts @@ -39,6 +39,7 @@ import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeatu import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { getSnippetSuggestSupport, setSnippetSuggestSupport } from 'vs/editor/contrib/suggest/browser/suggest'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; function createMockEditor(model: TextModel, languageFeaturesService: ILanguageFeaturesService): ITestCodeEditor { @@ -59,6 +60,10 @@ function createMockEditor(model: TextModel, languageFeaturesService: ILanguageFe }], [ILabelService, new class extends mock() { }], [IWorkspaceContextService, new class extends mock() { }], + [IEnvironmentService, new class extends mock() { + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }], ), }); editor.registerAndInstantiateContribution(SnippetController2.ID, SnippetController2); @@ -142,7 +147,7 @@ suite('SuggestModel - Context', function () { assertAutoTrigger(model, 3, true, 'end of word, Das|'); assertAutoTrigger(model, 4, false, 'no word Das |'); - assertAutoTrigger(model, 1, false, 'middle of word D|as'); + assertAutoTrigger(model, 1, true, 'typing a single character before a word: D|as'); assertAutoTrigger(model, 55, false, 'number, 1861|'); model.dispose(); }); @@ -157,7 +162,7 @@ suite('SuggestModel - Context', function () { assertAutoTrigger(model, 1, true, 'a| — should trigger at boundary between languages'); assertAutoTrigger(model, 5, false, 'a|a — should NOT trigger at start of word'); assertAutoTrigger(model, 6, true, 'aa|< — should trigger at end of word'); @@ -176,6 +181,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { } const alwaysEmptySupport: CompletionItemProvider = { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: false, @@ -185,6 +191,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { }; const alwaysSomethingSupport: CompletionItemProvider = { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: false, @@ -325,6 +332,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('#17400: Keep filtering suggestModel.ts after space', function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: false, @@ -375,6 +383,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('#21484: Trigger character always force a new completion session', function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: false, @@ -389,6 +398,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { })); disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', triggerCharacters: ['.'], provideCompletionItems(doc, pos): CompletionList { return { @@ -500,6 +510,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Incomplete suggestion results cause re-triggering when typing w/o further context, #28400 (1/2)', function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: true, @@ -537,6 +548,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Incomplete suggestion results cause re-triggering when typing w/o further context, #28400 (2/2)', function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: true, @@ -580,6 +592,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Trigger character is provided in suggest context', function () { let triggerCharacter = ''; disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', triggerCharacters: ['.'], provideCompletionItems(doc, pos, context): CompletionList { assert.strictEqual(context.triggerKind, CompletionTriggerKind.TriggerCharacter); @@ -613,6 +626,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Mac press and hold accent character insertion does not update suggestions, #35269', function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: true, @@ -685,6 +699,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Text changes for completion CodeAction are affected by the completion #39893', function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos): CompletionList { return { incomplete: true, @@ -706,7 +721,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { return withOracle(async (sugget, editor) => { class TestCtrl extends SuggestController { - override _insertSuggestion(item: ISelectedSuggestion, flags: number = 0) { + _insertSuggestion_publicForTest(item: ISelectedSuggestion, flags: number = 0) { super._insertSuggestion(item, flags); } } @@ -722,7 +737,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { const [first] = event.completionModel.items; assert.strictEqual(first.completion.label, 'bar'); - ctrl._insertSuggestion({ item: first, index: 0, model: event.completionModel }); + ctrl._insertSuggestion_publicForTest({ item: first, index: 0, model: event.completionModel }); }); assert.strictEqual( @@ -759,6 +774,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { let disposeB = 0; disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { incomplete: true, @@ -774,6 +790,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { } })); disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { incomplete: false, @@ -828,6 +845,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { let countB = 0; disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { countA += 1; return { @@ -842,6 +860,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { } })); disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { countB += 1; if (!doc.getWordUntilPosition(pos).word.startsWith('a')) { @@ -891,6 +910,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('registerCompletionItemProvider with letters as trigger characters block other completion items to show up #127815', async function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -903,6 +923,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { } })); disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', triggerCharacters: ['a', '.'], provideCompletionItems(doc, pos) { return { @@ -946,6 +967,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Unexpected suggest scoring #167242', async function () { disposables.add(registry.register('*', { // word-based + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { const word = doc.getWordUntilPosition(pos); return { @@ -960,6 +982,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { })); disposables.add(registry.register({ scheme: 'test' }, { // JSON-based + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { return { suggestions: [{ @@ -1003,6 +1026,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { const requestCounts = [0, 0]; disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', provideCompletionItems(doc, pos) { requestCounts[0] += 1; @@ -1022,6 +1046,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { } })); disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', triggerCharacters: ['2'], provideCompletionItems(doc, pos, ctx) { requestCounts[1] += 1; @@ -1072,6 +1097,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Set refilter-flag, keep triggerKind', function () { disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', triggerCharacters: ['.'], provideCompletionItems(doc, pos, ctx) { return { @@ -1127,6 +1153,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { test('Snippets gone from IntelliSense #173244', function () { const snippetProvider: CompletionItemProvider = { + _debugDisplayName: 'test', provideCompletionItems(doc, pos, ctx) { return { suggestions: [{ @@ -1147,6 +1174,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { })); disposables.add(registry.register({ scheme: 'test' }, { + _debugDisplayName: 'test', triggerCharacters: ['.'], provideCompletionItems(doc, pos, ctx) { return { diff --git a/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts b/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts index 4ab3f7e1ed4..72a287f12a0 100644 --- a/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts @@ -99,6 +99,7 @@ suite('suggest, word distance', function () { suggestions: [suggestion] }; const provider: languages.CompletionItemProvider = { + _debugDisplayName: 'test', provideCompletionItems(): any { return; } diff --git a/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.css b/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.css index 45205fea274..475006090b4 100644 --- a/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.css +++ b/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.css @@ -66,7 +66,7 @@ .monaco-editor .codicon.codicon-symbol-text, .monaco-workbench .codicon.codicon-symbol-text { color: var(--vscode-symbolIcon-textForeground); } .monaco-editor .codicon.codicon-symbol-type-parameter, -.monaco-workbench .codicon.codicon-symbol-type-parameter { color: var(--vscode-typeParameterForeground); } +.monaco-workbench .codicon.codicon-symbol-type-parameter { color: var(--vscode-symbolIcon-typeParameterForeground); } .monaco-editor .codicon.codicon-symbol-unit, .monaco-workbench .codicon.codicon-symbol-unit { color: var(--vscode-symbolIcon-unitForeground); } .monaco-editor .codicon.codicon-symbol-variable, diff --git a/src/vs/editor/contrib/tokenization/browser/tokenization.ts b/src/vs/editor/contrib/tokenization/browser/tokenization.ts index 8e673149542..800f950ad29 100644 --- a/src/vs/editor/contrib/tokenization/browser/tokenization.ts +++ b/src/vs/editor/contrib/tokenization/browser/tokenization.ts @@ -24,7 +24,7 @@ class ForceRetokenizeAction extends EditorAction { } const model = editor.getModel(); model.tokenization.resetTokenization(); - const sw = new StopWatch(true); + const sw = new StopWatch(); model.tokenization.forceTokenization(model.getLineCount()); sw.stop(); console.log(`tokenization took ${sw.elapsed()}`); diff --git a/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts b/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts index bf6d09d3b41..9b77b25b72e 100644 --- a/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts +++ b/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts @@ -9,7 +9,7 @@ import { Codicon } from 'vs/base/common/codicons'; import { MarkdownString } from 'vs/base/common/htmlContent'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import * as platform from 'vs/base/common/platform'; -import { InvisibleCharacters } from 'vs/base/common/strings'; +import { InvisibleCharacters, isBasicASCII } from 'vs/base/common/strings'; import 'vs/css!./unicodeHighlighter'; import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; @@ -444,14 +444,24 @@ export class UnicodeHighlighterHoverParticipant implements IEditorHoverParticipa let reason: string; switch (highlightInfo.reason.kind) { - case UnicodeHighlighterReasonKind.Ambiguous: - reason = nls.localize( - 'unicodeHighlight.characterIsAmbiguous', - 'The character {0} could be confused with the character {1}, which is more common in source code.', - codePointStr, - formatCodePointMarkdown(highlightInfo.reason.confusableWith.codePointAt(0)!) - ); + case UnicodeHighlighterReasonKind.Ambiguous: { + if (isBasicASCII(highlightInfo.reason.confusableWith)) { + reason = nls.localize( + 'unicodeHighlight.characterIsAmbiguousASCII', + 'The character {0} could be confused with the ASCII character {1}, which is more common in source code.', + codePointStr, + formatCodePointMarkdown(highlightInfo.reason.confusableWith.codePointAt(0)!) + ); + } else { + reason = nls.localize( + 'unicodeHighlight.characterIsAmbiguous', + 'The character {0} could be confused with the character {1}, which is more common in source code.', + codePointStr, + formatCodePointMarkdown(highlightInfo.reason.confusableWith.codePointAt(0)!) + ); + } break; + } case UnicodeHighlighterReasonKind.Invisible: reason = nls.localize( diff --git a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts index 4fb065c2823..a11868bc8cb 100644 --- a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts @@ -9,7 +9,7 @@ import { CancelablePromise, createCancelablePromise, first, timeout } from 'vs/b import { CancellationToken } from 'vs/base/common/cancellation'; import { onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/errors'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; @@ -29,6 +29,7 @@ import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { getHighlightDecorationOptions } from 'vs/editor/contrib/wordHighlighter/browser/highlightDecorations'; +import { Iterable } from 'vs/base/common/iterator'; const ctxHasWordHighlights = new RawContextKey('hasWordHighlights', false); @@ -192,9 +193,12 @@ class WordHighlighter { private readonly _hasWordHighlights: IContextKey; private _ignorePositionChangeEvent: boolean; - constructor(editor: IActiveCodeEditor, providers: LanguageFeatureRegistry, contextKeyService: IContextKeyService) { + private readonly linkedHighlighters: () => Iterable; + + constructor(editor: IActiveCodeEditor, providers: LanguageFeatureRegistry, linkedHighlighters: () => Iterable, contextKeyService: IContextKeyService) { this.editor = editor; this.providers = providers; + this.linkedHighlighters = linkedHighlighters; this._hasWordHighlights = ctxHasWordHighlights.bindTo(contextKeyService); this._ignorePositionChangeEvent = false; this.occurrencesHighlight = this.editor.getOption(EditorOption.occurrencesHighlight); @@ -245,6 +249,14 @@ class WordHighlighter { this._run(); } + public stop(): void { + if (!this.occurrencesHighlight) { + return; + } + + this._stopAll(); + } + private _getSortedHighlights(): Range[] { return ( this.decorations.getRanges() @@ -445,6 +457,15 @@ class WordHighlighter { this.decorations.set(decorations); this._hasWordHighlights.set(this.hasDecorations()); + + // update decorators of friends + for (const other of this.linkedHighlighters()) { + if (other?.editor.getModel() === this.editor.getModel()) { + other._stopAll(); + other.decorations.set(decorations); + other._hasWordHighlights.set(other.hasDecorations()); + } + } } public dispose(): void { @@ -453,7 +474,7 @@ class WordHighlighter { } } -class WordHighlighterContribution extends Disposable implements IEditorContribution { +export class WordHighlighterContribution extends Disposable implements IEditorContribution { public static readonly ID = 'editor.contrib.wordHighlighter'; @@ -462,13 +483,15 @@ class WordHighlighterContribution extends Disposable implements IEditorContribut } private wordHighlighter: WordHighlighter | null; + private linkedContributions: Set; constructor(editor: ICodeEditor, @IContextKeyService contextKeyService: IContextKeyService, @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService) { super(); this.wordHighlighter = null; + this.linkedContributions = new Set(); const createWordHighlighterIfPossible = () => { if (editor.hasModel()) { - this.wordHighlighter = new WordHighlighter(editor, languageFeaturesService.documentHighlightProvider, contextKeyService); + this.wordHighlighter = new WordHighlighter(editor, languageFeaturesService.documentHighlightProvider, () => Iterable.map(this.linkedContributions, c => c.wordHighlighter), contextKeyService); } }; this._register(editor.onDidChangeModel((e) => { @@ -502,6 +525,23 @@ class WordHighlighterContribution extends Disposable implements IEditorContribut } } + public stopHighlighting() { + this.wordHighlighter?.stop(); + } + + public linkWordHighlighters(editor: ICodeEditor): IDisposable { + const other = WordHighlighterContribution.get(editor); + if (!other) { + return Disposable.None; + } + this.linkedContributions.add(other); + other.linkedContributions.add(this); + return toDisposable(() => { + this.linkedContributions.delete(other); + other.linkedContributions.delete(this); + }); + } + public override dispose(): void { if (this.wordHighlighter) { this.wordHighlighter.dispose(); diff --git a/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts b/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts index cf0ab63f807..a003de17958 100644 --- a/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts +++ b/src/vs/editor/contrib/zoneWidget/browser/zoneWidget.ts @@ -28,6 +28,9 @@ export interface IOptions { frameColor?: Color; arrowColor?: Color; keepEditorSelection?: boolean; + allowUnlimitedHeight?: boolean; + ordinal?: number; + showInHiddenAreas?: boolean; } export interface IStyles { @@ -48,25 +51,31 @@ const defaultOptions: IOptions = { const WIDGET_ID = 'vs.editor.contrib.zoneWidget'; -export class ViewZoneDelegate implements IViewZone { +class ViewZoneDelegate implements IViewZone { domNode: HTMLElement; id: string = ''; // A valid zone id should be greater than 0 afterLineNumber: number; afterColumn: number; heightInLines: number; + readonly showInHiddenAreas: boolean | undefined; + readonly ordinal: number | undefined; private readonly _onDomNodeTop: (top: number) => void; private readonly _onComputedHeight: (height: number) => void; constructor(domNode: HTMLElement, afterLineNumber: number, afterColumn: number, heightInLines: number, onDomNodeTop: (top: number) => void, - onComputedHeight: (height: number) => void + onComputedHeight: (height: number) => void, + showInHiddenAreas: boolean | undefined, + ordinal: number | undefined ) { this.domNode = domNode; this.afterLineNumber = afterLineNumber; this.afterColumn = afterColumn; this.heightInLines = heightInLines; + this.showInHiddenAreas = showInHiddenAreas; + this.ordinal = ordinal; this._onDomNodeTop = onDomNodeTop; this._onComputedHeight = onComputedHeight; } @@ -261,7 +270,7 @@ export abstract class ZoneWidget implements IHorizontalSashLayoutProvider { } } - private _getWidth(info: EditorLayoutInfo): number { + protected _getWidth(info: EditorLayoutInfo): number { return info.width - info.minimap.minimapWidth - info.verticalScrollbarWidth; } @@ -298,6 +307,10 @@ export abstract class ZoneWidget implements IHorizontalSashLayoutProvider { return range.getStartPosition(); } + hasFocus() { + return this.domNode.contains(dom.getActiveElement()); + } + protected _isShowing: boolean = false; show(rangeOrPos: IRange | IPosition, heightInLines: number): void { @@ -322,6 +335,7 @@ export abstract class ZoneWidget implements IHorizontalSashLayoutProvider { this._overlayWidget = null; } this._arrow?.hide(); + this._positionMarkerId.clear(); } private _decoratingElementsHeight(): number { @@ -354,8 +368,10 @@ export abstract class ZoneWidget implements IHorizontalSashLayoutProvider { const lineHeight = this.editor.getOption(EditorOption.lineHeight); // adjust heightInLines to viewport - const maxHeightInLines = Math.max(12, (this.editor.getLayoutInfo().height / lineHeight) * 0.8); - heightInLines = Math.min(heightInLines, maxHeightInLines); + if (!this.options.allowUnlimitedHeight) { + const maxHeightInLines = Math.max(12, (this.editor.getLayoutInfo().height / lineHeight) * 0.8); + heightInLines = Math.min(heightInLines, maxHeightInLines); + } let arrowHeight = 0; let frameThickness = 0; @@ -388,7 +404,9 @@ export abstract class ZoneWidget implements IHorizontalSashLayoutProvider { position.column, heightInLines, (top: number) => this._onViewZoneTop(top), - (height: number) => this._onViewZoneHeight(height) + (height: number) => this._onViewZoneHeight(height), + this.options.showInHiddenAreas, + this.options.ordinal ); this._viewZone.id = accessor.addZone(this._viewZone); this._overlayWidget = new OverlayWidgetDelegate(WIDGET_ID + this._viewZone.id, this.domNode); @@ -418,7 +436,7 @@ export abstract class ZoneWidget implements IHorizontalSashLayoutProvider { const model = this.editor.getModel(); if (model) { const range = model.validateRange(new Range(where.startLineNumber, 1, where.endLineNumber + 1, 1)); - this.revealRange(range, range.endLineNumber === model.getLineCount()); + this.revealRange(range, range.startLineNumber === model.getLineCount()); } } diff --git a/src/vs/editor/editor.all.ts b/src/vs/editor/editor.all.ts index 38a7a98a345..71eedebd3b9 100644 --- a/src/vs/editor/editor.all.ts +++ b/src/vs/editor/editor.all.ts @@ -15,18 +15,20 @@ import 'vs/editor/contrib/clipboard/browser/clipboard'; import 'vs/editor/contrib/codeAction/browser/codeActionContributions'; import 'vs/editor/contrib/codelens/browser/codelensController'; import 'vs/editor/contrib/colorPicker/browser/colorContributions'; -import 'vs/editor/contrib/copyPaste/browser/copyPasteContribution'; +import 'vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions'; import 'vs/editor/contrib/comment/browser/comment'; import 'vs/editor/contrib/contextmenu/browser/contextmenu'; import 'vs/editor/contrib/cursorUndo/browser/cursorUndo'; import 'vs/editor/contrib/dnd/browser/dnd'; -import 'vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution'; +import 'vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution'; +import 'vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution'; import 'vs/editor/contrib/find/browser/findController'; import 'vs/editor/contrib/folding/browser/folding'; import 'vs/editor/contrib/fontZoom/browser/fontZoom'; import 'vs/editor/contrib/format/browser/formatActions'; import 'vs/editor/contrib/documentSymbols/browser/documentSymbols'; -import 'vs/editor/contrib/inlineCompletions/browser/ghostText.contribution'; +import 'vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution'; +import 'vs/editor/contrib/inlineProgress/browser/inlineProgress'; import 'vs/editor/contrib/gotoSymbol/browser/goToCommands'; import 'vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition'; import 'vs/editor/contrib/gotoError/browser/gotoError'; diff --git a/src/vs/editor/editor.main.ts b/src/vs/editor/editor.main.ts index 0dceb4a9e8a..23d547570e9 100644 --- a/src/vs/editor/editor.main.ts +++ b/src/vs/editor/editor.main.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import 'vs/editor/editor.all'; -import 'vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp'; import 'vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard'; import 'vs/editor/standalone/browser/inspectTokens/inspectTokens'; import 'vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess'; diff --git a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts deleted file mode 100644 index 0a4f69a2f8e..00000000000 --- a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts +++ /dev/null @@ -1,362 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./accessibilityHelp'; -import * as dom from 'vs/base/browser/dom'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer'; -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { Widget } from 'vs/base/browser/ui/widget'; -import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { Disposable } from 'vs/base/common/lifecycle'; -import * as platform from 'vs/base/common/platform'; -import * as strings from 'vs/base/common/strings'; -import { URI } from 'vs/base/common/uri'; -import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { Selection } from 'vs/editor/common/core/selection'; -import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { ToggleTabFocusModeAction } from 'vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode'; -import { IStandaloneEditorConstructionOptions } from 'vs/editor/standalone/browser/standaloneCodeEditor'; -import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { AccessibilityHelpNLS } from 'vs/editor/common/standaloneStrings'; -import { EditorOption } from 'vs/editor/common/config/editorOptions'; - -const CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE = new RawContextKey('accessibilityHelpWidgetVisible', false); - -class AccessibilityHelpController extends Disposable - implements IEditorContribution { - public static readonly ID = 'editor.contrib.accessibilityHelpController'; - - public static get(editor: ICodeEditor): AccessibilityHelpController | null { - return editor.getContribution( - AccessibilityHelpController.ID - ); - } - - private readonly _editor: ICodeEditor; - private readonly _widget: AccessibilityHelpWidget; - - constructor( - editor: ICodeEditor, - @IInstantiationService instantiationService: IInstantiationService - ) { - super(); - - this._editor = editor; - this._widget = this._register( - instantiationService.createInstance(AccessibilityHelpWidget, this._editor) - ); - } - - public show(): void { - this._widget.show(); - } - - public hide(): void { - this._widget.hide(); - } -} - - -function getSelectionLabel(selections: Selection[] | null, charactersSelected: number): string { - if (!selections || selections.length === 0) { - return AccessibilityHelpNLS.noSelection; - } - - if (selections.length === 1) { - if (charactersSelected) { - return strings.format(AccessibilityHelpNLS.singleSelectionRange, selections[0].positionLineNumber, selections[0].positionColumn, charactersSelected); - } - - return strings.format(AccessibilityHelpNLS.singleSelection, selections[0].positionLineNumber, selections[0].positionColumn); - } - - if (charactersSelected) { - return strings.format(AccessibilityHelpNLS.multiSelectionRange, selections.length, charactersSelected); - } - - if (selections.length > 0) { - return strings.format(AccessibilityHelpNLS.multiSelection, selections.length); - } - - return ''; -} - -class AccessibilityHelpWidget extends Widget implements IOverlayWidget { - private static readonly ID = 'editor.contrib.accessibilityHelpWidget'; - private static readonly WIDTH = 500; - private static readonly HEIGHT = 300; - - private readonly _editor: ICodeEditor; - private readonly _domNode: FastDomNode; - private readonly _contentDomNode: FastDomNode; - private _isVisible: boolean; - private readonly _isVisibleKey: IContextKey; - - constructor( - editor: ICodeEditor, - @IContextKeyService private readonly _contextKeyService: IContextKeyService, - @IKeybindingService private readonly _keybindingService: IKeybindingService, - @IOpenerService private readonly _openerService: IOpenerService - ) { - super(); - - this._editor = editor; - this._isVisibleKey = CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE.bindTo( - this._contextKeyService - ); - - this._domNode = createFastDomNode(document.createElement('div')); - this._domNode.setClassName('accessibilityHelpWidget'); - this._domNode.setDisplay('none'); - this._domNode.setAttribute('role', 'dialog'); - this._domNode.setAttribute('aria-hidden', 'true'); - - this._contentDomNode = createFastDomNode(document.createElement('div')); - this._contentDomNode.setAttribute('role', 'document'); - this._domNode.appendChild(this._contentDomNode); - - this._isVisible = false; - - this._register(this._editor.onDidLayoutChange(() => { - if (this._isVisible) { - this._layout(); - } - })); - - // Intentionally not configurable! - this._register(dom.addStandardDisposableListener(this._contentDomNode.domNode, 'keydown', (e) => { - if (!this._isVisible) { - return; - } - - if (e.equals(KeyMod.CtrlCmd | KeyCode.KeyE)) { - alert(AccessibilityHelpNLS.emergencyConfOn); - - this._editor.updateOptions({ - accessibilitySupport: 'on' - }); - - dom.clearNode(this._contentDomNode.domNode); - this._buildContent(); - this._contentDomNode.domNode.focus(); - - e.preventDefault(); - e.stopPropagation(); - } - - if (e.equals(KeyMod.CtrlCmd | KeyCode.KeyH)) { - alert(AccessibilityHelpNLS.openingDocs); - - let url = (this._editor.getRawOptions()).accessibilityHelpUrl; - if (typeof url === 'undefined') { - url = 'https://go.microsoft.com/fwlink/?linkid=852450'; - } - this._openerService.open(URI.parse(url)); - - e.preventDefault(); - e.stopPropagation(); - } - })); - - this.onblur(this._contentDomNode.domNode, () => { - this.hide(); - }); - - this._editor.addOverlayWidget(this); - } - - public override dispose(): void { - this._editor.removeOverlayWidget(this); - super.dispose(); - } - - public getId(): string { - return AccessibilityHelpWidget.ID; - } - - public getDomNode(): HTMLElement { - return this._domNode.domNode; - } - - public getPosition(): IOverlayWidgetPosition { - return { - preference: null - }; - } - - public show(): void { - if (this._isVisible) { - return; - } - this._isVisible = true; - this._isVisibleKey.set(true); - this._layout(); - this._domNode.setDisplay('block'); - this._domNode.setAttribute('aria-hidden', 'false'); - this._contentDomNode.domNode.tabIndex = 0; - this._buildContent(); - this._contentDomNode.domNode.focus(); - } - - private _descriptionForCommand(commandId: string, msg: string, noKbMsg: string): string { - const kb = this._keybindingService.lookupKeybinding(commandId); - if (kb) { - return strings.format(msg, kb.getAriaLabel()); - } - return strings.format(noKbMsg, commandId); - } - - private _buildContent() { - const options = this._editor.getOptions(); - - const selections = this._editor.getSelections(); - let charactersSelected = 0; - - if (selections) { - const model = this._editor.getModel(); - if (model) { - selections.forEach((selection) => { - charactersSelected += model.getValueLengthInRange(selection); - }); - } - } - - let text = getSelectionLabel(selections, charactersSelected); - - if (options.get(EditorOption.inDiffEditor)) { - if (options.get(EditorOption.readOnly)) { - text += AccessibilityHelpNLS.readonlyDiffEditor; - } else { - text += AccessibilityHelpNLS.editableDiffEditor; - } - } else { - if (options.get(EditorOption.readOnly)) { - text += AccessibilityHelpNLS.readonlyEditor; - } else { - text += AccessibilityHelpNLS.editableEditor; - } - } - - const turnOnMessage = ( - platform.isMacintosh - ? AccessibilityHelpNLS.changeConfigToOnMac - : AccessibilityHelpNLS.changeConfigToOnWinLinux - ); - switch (options.get(EditorOption.accessibilitySupport)) { - case AccessibilitySupport.Unknown: - text += '\n\n - ' + turnOnMessage; - break; - case AccessibilitySupport.Enabled: - text += '\n\n - ' + AccessibilityHelpNLS.auto_on; - break; - case AccessibilitySupport.Disabled: - text += '\n\n - ' + AccessibilityHelpNLS.auto_off; - text += ' ' + turnOnMessage; - break; - } - - - if (options.get(EditorOption.tabFocusMode)) { - text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOnMsg, AccessibilityHelpNLS.tabFocusModeOnMsgNoKb); - } else { - text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOffMsg, AccessibilityHelpNLS.tabFocusModeOffMsgNoKb); - } - - const openDocMessage = ( - platform.isMacintosh - ? AccessibilityHelpNLS.openDocMac - : AccessibilityHelpNLS.openDocWinLinux - ); - - text += '\n\n - ' + openDocMessage; - - text += '\n\n' + AccessibilityHelpNLS.outroMsg; - - this._contentDomNode.domNode.appendChild(renderFormattedText(text)); - // Per https://www.w3.org/TR/wai-aria/roles#document, Authors SHOULD provide a title or label for documents - this._contentDomNode.domNode.setAttribute('aria-label', text); - } - - public hide(): void { - if (!this._isVisible) { - return; - } - this._isVisible = false; - this._isVisibleKey.reset(); - this._domNode.setDisplay('none'); - this._domNode.setAttribute('aria-hidden', 'true'); - this._contentDomNode.domNode.tabIndex = -1; - dom.clearNode(this._contentDomNode.domNode); - - this._editor.focus(); - } - - private _layout(): void { - const editorLayout = this._editor.getLayoutInfo(); - - const w = Math.max(5, Math.min(AccessibilityHelpWidget.WIDTH, editorLayout.width - 40)); - const h = Math.max(5, Math.min(AccessibilityHelpWidget.HEIGHT, editorLayout.height - 40)); - - this._domNode.setWidth(w); - this._domNode.setHeight(h); - - const top = Math.round((editorLayout.height - h) / 2); - this._domNode.setTop(top); - - const left = Math.round((editorLayout.width - w) / 2); - this._domNode.setLeft(left); - } -} - -class ShowAccessibilityHelpAction extends EditorAction { - constructor() { - super({ - id: 'editor.action.showAccessibilityHelp', - label: AccessibilityHelpNLS.showAccessibilityHelpAction, - alias: 'Show Accessibility Help', - precondition: undefined, - kbOpts: { - primary: KeyMod.Alt | KeyCode.F1, - weight: KeybindingWeight.EditorContrib, - linux: { - primary: KeyMod.Alt | KeyMod.Shift | KeyCode.F1, - secondary: [KeyMod.Alt | KeyCode.F1] - } - } - }); - } - - public run(accessor: ServicesAccessor, editor: ICodeEditor): void { - const controller = AccessibilityHelpController.get(editor); - controller?.show(); - } -} - -registerEditorContribution(AccessibilityHelpController.ID, AccessibilityHelpController, EditorContributionInstantiation.Lazy); -registerEditorAction(ShowAccessibilityHelpAction); - -const AccessibilityHelpCommand = EditorCommand.bindToContribution(AccessibilityHelpController.get); - -registerEditorCommand( - new AccessibilityHelpCommand({ - id: 'closeAccessibilityHelp', - precondition: CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE, - handler: x => x.hide(), - kbOpts: { - weight: KeybindingWeight.EditorContrib + 100, - kbExpr: EditorContextKeys.focus, - primary: KeyCode.Escape, - secondary: [KeyMod.Shift | KeyCode.Escape] - } - }) -); diff --git a/src/vs/editor/standalone/browser/colorizer.ts b/src/vs/editor/standalone/browser/colorizer.ts index 2e38febe774..1562ff2cd1d 100644 --- a/src/vs/editor/standalone/browser/colorizer.ts +++ b/src/vs/editor/standalone/browser/colorizer.ts @@ -3,18 +3,19 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import * as strings from 'vs/base/common/strings'; -import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { ITextModel } from 'vs/editor/common/model'; +import { ColorId, FontStyle, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; import { ILanguageIdCodec, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; -import { FontStyle, ColorId, MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; import { ILanguageService } from 'vs/editor/common/languages/language'; +import { ITextModel } from 'vs/editor/common/model'; +import { IViewLineTokens, LineTokens } from 'vs/editor/common/tokens/lineTokens'; import { RenderLineInput, renderViewLine2 as renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer'; import { ViewLineRenderingData } from 'vs/editor/common/viewModel'; -import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; import { MonarchTokenizer } from 'vs/editor/standalone/common/monarch/monarchLexer'; +import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; -const ttPolicy = window.trustedTypes?.createPolicy('standaloneColorizer', { createHTML: value => value }); +const ttPolicy = createTrustedTypesPolicy('standaloneColorizer', { createHTML: value => value }); export interface IColorizerOptions { tabSize?: number; diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts index ae31c036579..5e87aa8f710 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts @@ -40,6 +40,14 @@ export class StandaloneCommandsQuickAccessProvider extends AbstractEditorCommand protected async getCommandPicks(): Promise> { return this.getCodeEditorCommandPicks(); } + + protected hasAdditionalCommandPicks(): boolean { + return false; + } + + protected async getAdditionalCommandPicks(): Promise { + return []; + } } export class GotoLineAction extends EditorAction { diff --git a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts index 7c3aeb8684e..4aa2558480f 100644 --- a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts +++ b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts @@ -12,7 +12,6 @@ import { IQuickInputService, IQuickInputButton, IQuickPickItem, IQuickPick, IInp import { CancellationToken } from 'vs/base/common/cancellation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { EditorScopedLayoutService } from 'vs/editor/standalone/browser/standaloneLayoutService'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { IQuickInputControllerHost, QuickInputController } from 'vs/platform/quickinput/browser/quickInput'; @@ -29,10 +28,9 @@ class EditorScopedQuickInputService extends QuickInputService { @IInstantiationService instantiationService: IInstantiationService, @IContextKeyService contextKeyService: IContextKeyService, @IThemeService themeService: IThemeService, - @IAccessibilityService accessibilityService: IAccessibilityService, @ICodeEditorService codeEditorService: ICodeEditorService ) { - super(instantiationService, contextKeyService, themeService, accessibilityService, new EditorScopedLayoutService(editor.getContainerDomNode(), codeEditorService)); + super(instantiationService, contextKeyService, themeService, new EditorScopedLayoutService(editor.getContainerDomNode(), codeEditorService)); // Use the passed in code editor as host for the quick input widget const contribution = QuickInputEditorContribution.get(editor); diff --git a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts index dfa8aa29f3f..43e1f1eef10 100644 --- a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts @@ -37,6 +37,7 @@ import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry' import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; +import { DiffEditorWidget2 } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2'; /** * Description of an action contribution @@ -327,7 +328,7 @@ export class StandaloneCodeEditor extends CodeEditorWidget implements IStandalon ); const contextMenuGroupId = _descriptor.contextMenuGroupId || null; const contextMenuOrder = _descriptor.contextMenuOrder || 0; - const run = (accessor?: ServicesAccessor, ...args: any[]): Promise => { + const run = (_accessor?: ServicesAccessor, ...args: any[]): Promise => { return Promise.resolve(_descriptor.run(this, ...args)); }; @@ -367,7 +368,7 @@ export class StandaloneCodeEditor extends CodeEditorWidget implements IStandalon label, label, precondition, - run, + (...args: unknown[]) => Promise.resolve(_descriptor.run(this, ...args)), this._contextKeyService ); @@ -470,7 +471,7 @@ export class StandaloneEditor extends StandaloneCodeEditor implements IStandalon super.updateOptions(newOptions); } - override _postDetachModelCleanup(detachedModel: ITextModel): void { + protected override _postDetachModelCleanup(detachedModel: ITextModel): void { super._postDetachModelCleanup(detachedModel); if (detachedModel && this._ownsModel) { detachedModel.dispose(); @@ -555,6 +556,89 @@ export class StandaloneDiffEditor extends DiffEditorWidget implements IStandalon } } +export class StandaloneDiffEditor2 extends DiffEditorWidget2 implements IStandaloneDiffEditor { + + private readonly _configurationService: IConfigurationService; + private readonly _standaloneThemeService: IStandaloneThemeService; + + constructor( + domElement: HTMLElement, + _options: Readonly | undefined, + @IInstantiationService instantiationService: IInstantiationService, + @IContextKeyService contextKeyService: IContextKeyService, + @ICodeEditorService codeEditorService: ICodeEditorService, + @IStandaloneThemeService themeService: IStandaloneThemeService, + @INotificationService notificationService: INotificationService, + @IConfigurationService configurationService: IConfigurationService, + @IContextMenuService contextMenuService: IContextMenuService, + @IEditorProgressService editorProgressService: IEditorProgressService, + @IClipboardService clipboardService: IClipboardService + ) { + const options = { ..._options }; + updateConfigurationService(configurationService, options, true); + const themeDomRegistration = (themeService).registerEditorContainer(domElement); + if (typeof options.theme === 'string') { + themeService.setTheme(options.theme); + } + if (typeof options.autoDetectHighContrast !== 'undefined') { + themeService.setAutoDetectHighContrast(Boolean(options.autoDetectHighContrast)); + } + + super( + domElement, + options, + {}, + contextKeyService, + instantiationService, + codeEditorService, + ); + + this._configurationService = configurationService; + this._standaloneThemeService = themeService; + + this._register(themeDomRegistration); + } + + public override dispose(): void { + super.dispose(); + } + + public override updateOptions(newOptions: Readonly): void { + updateConfigurationService(this._configurationService, newOptions, true); + if (typeof newOptions.theme === 'string') { + this._standaloneThemeService.setTheme(newOptions.theme); + } + if (typeof newOptions.autoDetectHighContrast !== 'undefined') { + this._standaloneThemeService.setAutoDetectHighContrast(Boolean(newOptions.autoDetectHighContrast)); + } + super.updateOptions(newOptions); + } + + protected override _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: Readonly): CodeEditorWidget { + return instantiationService.createInstance(StandaloneCodeEditor, container, options); + } + + public override getOriginalEditor(): IStandaloneCodeEditor { + return super.getOriginalEditor(); + } + + public override getModifiedEditor(): IStandaloneCodeEditor { + return super.getModifiedEditor(); + } + + public addCommand(keybinding: number, handler: ICommandHandler, context?: string): string | null { + return this.getModifiedEditor().addCommand(keybinding, handler, context); + } + + public createContextKey(key: string, defaultValue: T): IContextKey { + return this.getModifiedEditor().createContextKey(key, defaultValue); + } + + public addAction(descriptor: IActionDescriptor): IDisposable { + return this.getModifiedEditor().addAction(descriptor); + } +} + /** * @internal */ diff --git a/src/vs/editor/standalone/browser/standaloneEditor.ts b/src/vs/editor/standalone/browser/standaloneEditor.ts index 6027a2ac7a5..4ff53468f06 100644 --- a/src/vs/editor/standalone/browser/standaloneEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneEditor.ts @@ -23,7 +23,7 @@ import { IModelService } from 'vs/editor/common/services/model'; import { createWebWorker as actualCreateWebWorker, IWebWorkerOptions, MonacoWebWorker } from 'vs/editor/browser/services/webWorker'; import * as standaloneEnums from 'vs/editor/common/standalone/standaloneEnums'; import { Colorizer, IColorizerElementOptions, IColorizerOptions } from 'vs/editor/standalone/browser/colorizer'; -import { createTextModel, IActionDescriptor, IStandaloneCodeEditor, IStandaloneDiffEditor, IStandaloneDiffEditorConstructionOptions, IStandaloneEditorConstructionOptions, StandaloneDiffEditor, StandaloneEditor } from 'vs/editor/standalone/browser/standaloneCodeEditor'; +import { createTextModel, IActionDescriptor, IStandaloneCodeEditor, IStandaloneDiffEditor, IStandaloneDiffEditorConstructionOptions, IStandaloneEditorConstructionOptions, StandaloneDiffEditor, StandaloneDiffEditor2, StandaloneEditor } from 'vs/editor/standalone/browser/standaloneCodeEditor'; import { IEditorOverrideServices, StandaloneKeybindingService, StandaloneServices } from 'vs/editor/standalone/browser/standaloneServices'; import { StandaloneThemeService } from 'vs/editor/standalone/browser/standaloneThemeService'; import { IStandaloneThemeData, IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneTheme'; @@ -34,7 +34,13 @@ import { EditorCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensi import { IMenuItem, MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { LineRange, LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { LineRangeMapping, MovedText, RangeMapping, SimpleLineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { EditorZoom } from 'vs/editor/common/config/editorZoom'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { IRange } from 'vs/editor/common/core/range'; +import { IPosition } from 'vs/editor/common/core/position'; +import { ITextResourceEditorInput } from 'vs/platform/editor/common/editor'; /** * Create a new editor under `domElement`. @@ -92,6 +98,9 @@ export function getDiffEditors(): readonly IDiffEditor[] { */ export function createDiffEditor(domElement: HTMLElement, options?: IStandaloneDiffEditorConstructionOptions, override?: IEditorOverrideServices): IStandaloneDiffEditor { const instantiationService = StandaloneServices.initialize(override || {}); + if ((options?.experimental as any)?.useVersion2) { + return instantiationService.createInstance(StandaloneDiffEditor2, domElement, options); + } return instantiationService.createInstance(StandaloneDiffEditor, domElement, options); } @@ -431,6 +440,71 @@ export function registerCommand(id: string, handler: (accessor: any, ...args: an return CommandsRegistry.registerCommand({ id, handler }); } +export interface ILinkOpener { + open(resource: URI): boolean | Promise; +} + +/** + * Registers a handler that is called when a link is opened in any editor. The handler callback should return `true` if the link was handled and `false` otherwise. + * The handler that was registered last will be called first when a link is opened. + * + * Returns a disposable that can unregister the opener again. + */ +export function registerLinkOpener(opener: ILinkOpener): IDisposable { + const openerService = StandaloneServices.get(IOpenerService); + return openerService.registerOpener({ + async open(resource: string | URI) { + if (typeof resource === 'string') { + resource = URI.parse(resource); + } + return opener.open(resource); + } + }); +} + +/** + * Represents an object that can handle editor open operations (e.g. when "go to definition" is called + * with a resource other than the current model). + */ +export interface ICodeEditorOpener { + /** + * Callback that is invoked when a resource other than the current model should be opened (e.g. when "go to definition" is called). + * The callback should return `true` if the request was handled and `false` otherwise. + * @param source The code editor instance that initiated the request. + * @param resource The URI of the resource that should be opened. + * @param selectionOrPosition An optional position or selection inside the model corresponding to `resource` that can be used to set the cursor. + */ + openCodeEditor(source: ICodeEditor, resource: URI, selectionOrPosition?: IRange | IPosition): boolean | Promise; +} + +/** + * Registers a handler that is called when a resource other than the current model should be opened in the editor (e.g. "go to definition"). + * The handler callback should return `true` if the request was handled and `false` otherwise. + * + * Returns a disposable that can unregister the opener again. + * + * If no handler is registered the default behavior is to do nothing for models other than the currently attached one. + */ +export function registerEditorOpener(opener: ICodeEditorOpener): IDisposable { + const codeEditorService = StandaloneServices.get(ICodeEditorService); + return codeEditorService.registerCodeEditorOpenHandler(async (input: ITextResourceEditorInput, source: ICodeEditor | null, sideBySide?: boolean) => { + if (!source) { + return null; + } + const selection = input.options?.selection; + let selectionOrPosition: IRange | IPosition | undefined; + if (selection && typeof selection.endLineNumber === 'number' && typeof selection.endColumn === 'number') { + selectionOrPosition = selection; + } else if (selection) { + selectionOrPosition = { lineNumber: selection.startLineNumber, column: selection.startColumn }; + } + if (await opener.openCodeEditor(source, input.resource, selectionOrPosition)) { + return source; // return source editor to indicate that this handler has successfully handled the opening + } + return null; // fallback to other registered handlers + }); +} + /** * @internal */ @@ -473,6 +547,9 @@ export function createMonacoEditorAPI(): typeof monaco.editor { remeasureFonts: remeasureFonts, registerCommand: registerCommand, + registerLinkOpener: registerLinkOpener, + registerEditorOpener: registerEditorOpener, + // enums AccessibilitySupport: standaloneEnums.AccessibilitySupport, ContentWidgetPositionPreference: standaloneEnums.ContentWidgetPositionPreference, @@ -486,6 +563,7 @@ export function createMonacoEditorAPI(): typeof monaco.editor { MouseTargetType: standaloneEnums.MouseTargetType, OverlayWidgetPositionPreference: standaloneEnums.OverlayWidgetPositionPreference, OverviewRulerLane: standaloneEnums.OverviewRulerLane, + GlyphMarginLane: standaloneEnums.GlyphMarginLane, RenderLineNumbersType: standaloneEnums.RenderLineNumbersType, RenderMinimap: standaloneEnums.RenderMinimap, ScrollbarVisibility: standaloneEnums.ScrollbarVisibility, @@ -507,6 +585,9 @@ export function createMonacoEditorAPI(): typeof monaco.editor { LineRange: LineRange, LineRangeMapping: LineRangeMapping, RangeMapping: RangeMapping, + EditorZoom: EditorZoom, + MovedText: MovedText, + SimpleLineRangeMapping: SimpleLineRangeMapping, // vars EditorType: EditorType, diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index 898d17dbb63..78d683d2fe5 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -24,6 +24,7 @@ import { IMarkerData, IMarkerService } from 'vs/platform/markers/common/markers' import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { LanguageSelector } from 'vs/editor/common/languageSelector'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; /** * Register information about a new language. @@ -98,7 +99,7 @@ export function setLanguageConfiguration(languageId: string, configuration: Lang /** * @internal */ -export class EncodedTokenizationSupportAdapter implements languages.ITokenizationSupport { +export class EncodedTokenizationSupportAdapter implements languages.ITokenizationSupport, IDisposable { private readonly _languageId: string; private readonly _actual: EncodedTokensProvider; @@ -108,6 +109,10 @@ export class EncodedTokenizationSupportAdapter implements languages.ITokenizatio this._actual = actual; } + dispose(): void { + // NOOP + } + public getInitialState(): languages.IState { return this._actual.getInitialState(); } @@ -128,7 +133,7 @@ export class EncodedTokenizationSupportAdapter implements languages.ITokenizatio /** * @internal */ -export class TokenizationSupportAdapter implements languages.ITokenizationSupport { +export class TokenizationSupportAdapter implements languages.ITokenizationSupport, IDisposable { constructor( private readonly _languageId: string, @@ -138,6 +143,10 @@ export class TokenizationSupportAdapter implements languages.ITokenizationSuppor ) { } + dispose(): void { + // NOOP + } + public getInitialState(): languages.IState { return this._actual.getInitialState(); } @@ -193,7 +202,7 @@ export class TokenizationSupportAdapter implements languages.ITokenizationSuppor let previousStartIndex: number = 0; for (let i = 0, len = tokens.length; i < len; i++) { const t = tokens[i]; - const metadata = tokenTheme.match(languageId, t.scopes); + const metadata = tokenTheme.match(languageId, t.scopes) | MetadataConsts.BALANCED_BRACKETS_MASK; if (resultLen > 0 && result[resultLen - 1] === metadata) { // same metadata continue; @@ -384,18 +393,16 @@ function createTokenizationSupportAdapter(languageId: string, provider: TokensPr * with a tokens provider set using `registerDocumentSemanticTokensProvider` or `registerDocumentRangeSemanticTokensProvider`. */ export function registerTokensProviderFactory(languageId: string, factory: TokensProviderFactory): IDisposable { - const adaptedFactory: languages.ITokenizationSupportFactory = { - createTokenizationSupport: async (): Promise => { - const result = await Promise.resolve(factory.create()); - if (!result) { - return null; - } - if (isATokensProvider(result)) { - return createTokenizationSupportAdapter(languageId, result); - } - return new MonarchTokenizer(StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService), languageId, compile(languageId, result), StandaloneServices.get(IConfigurationService)); + const adaptedFactory = new languages.LazyTokenizationSupport(async () => { + const result = await Promise.resolve(factory.create()); + if (!result) { + return null; } - }; + if (isATokensProvider(result)) { + return createTokenizationSupportAdapter(languageId, result); + } + return new MonarchTokenizer(StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService), languageId, compile(languageId, result), StandaloneServices.get(IConfigurationService)); + }); return languages.TokenizationRegistry.registerFactory(languageId, adaptedFactory); } @@ -784,5 +791,6 @@ export function createMonacoLanguagesAPI(): typeof monaco.languages { // classes FoldingRangeKind: languages.FoldingRangeKind, + SelectedSuggestionInfo: languages.SelectedSuggestionInfo, }; } diff --git a/src/vs/editor/standalone/browser/standaloneServices.ts b/src/vs/editor/standalone/browser/standaloneServices.ts index 63648f50d06..cc2ede5219c 100644 --- a/src/vs/editor/standalone/browser/standaloneServices.ts +++ b/src/vs/editor/standalone/browser/standaloneServices.ts @@ -44,11 +44,10 @@ import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayo import { ILabelService, ResourceLabelFormatter, IFormatterChangeEvent, Verbosity } from 'vs/platform/label/common/label'; import { INotification, INotificationHandle, INotificationService, IPromptChoice, IPromptOptions, NoOpNotification, IStatusMessageOptions } from 'vs/platform/notification/common/notification'; import { IProgressRunner, IEditorProgressService, IProgressService, IProgress, IProgressCompositeOptions, IProgressDialogOptions, IProgressNotificationOptions, IProgressOptions, IProgressStep, IProgressWindowOptions } from 'vs/platform/progress/common/progress'; -import { ITelemetryInfo, ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; +import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, IWorkspace, IWorkspaceContextService, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, IWorkspaceFoldersWillChangeEvent, WorkbenchState, WorkspaceFolder, STANDALONE_EDITOR_WORKSPACE_ID } from 'vs/platform/workspace/common/workspace'; import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; import { StandaloneServicesNLS } from 'vs/editor/common/standaloneStrings'; -import { ClassifiedEvent, StrictPropertyCheck, OmitMetadata, IGDPRProperty } from 'vs/platform/telemetry/common/gdprTypings'; import { basename } from 'vs/base/common/resources'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { ConsoleLogger, ILogService } from 'vs/platform/log/common/log'; @@ -88,10 +87,11 @@ import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { IStorageService, InMemoryStorageService } from 'vs/platform/storage/common/storage'; import { DefaultConfiguration } from 'vs/platform/configuration/common/configurations'; import { WorkspaceEdit } from 'vs/editor/common/languages'; -import { AudioCue, IAudioCueService, Sound } from 'vs/platform/audioCues/browser/audioCueService'; +import { AudioCue, AudioCueGroupId, IAudioCueService, Sound } from 'vs/platform/audioCues/browser/audioCueService'; import { LogService } from 'vs/platform/log/common/logService'; import { getEditorFeatures } from 'vs/editor/common/editorFeatures'; import { onUnexpectedError } from 'vs/base/common/errors'; +import { ExtensionKind, IEnvironmentService, IExtensionHostDebugParams } from 'vs/platform/environment/common/environment'; class SimpleModel implements IResolvedTextEditorModel { @@ -202,6 +202,39 @@ class StandaloneProgressService implements IProgressService { } } +class StandaloneEnvironmentService implements IEnvironmentService { + + declare readonly _serviceBrand: undefined; + + readonly stateResource: URI = URI.from({ scheme: 'monaco', authority: 'stateResource' }); + readonly userRoamingDataHome: URI = URI.from({ scheme: 'monaco', authority: 'userRoamingDataHome' }); + readonly keyboardLayoutResource: URI = URI.from({ scheme: 'monaco', authority: 'keyboardLayoutResource' }); + readonly argvResource: URI = URI.from({ scheme: 'monaco', authority: 'argvResource' }); + readonly untitledWorkspacesHome: URI = URI.from({ scheme: 'monaco', authority: 'untitledWorkspacesHome' }); + readonly workspaceStorageHome: URI = URI.from({ scheme: 'monaco', authority: 'workspaceStorageHome' }); + readonly localHistoryHome: URI = URI.from({ scheme: 'monaco', authority: 'localHistoryHome' }); + readonly cacheHome: URI = URI.from({ scheme: 'monaco', authority: 'cacheHome' }); + readonly userDataSyncHome: URI = URI.from({ scheme: 'monaco', authority: 'userDataSyncHome' }); + readonly sync: 'on' | 'off' | undefined = undefined; + readonly continueOn?: string | undefined = undefined; + readonly editSessionId?: string | undefined = undefined; + readonly debugExtensionHost: IExtensionHostDebugParams = { port: null, break: false }; + readonly isExtensionDevelopment: boolean = false; + readonly disableExtensions: boolean | string[] = false; + readonly enableExtensions?: readonly string[] | undefined = undefined; + readonly extensionDevelopmentLocationURI?: URI[] | undefined = undefined; + readonly extensionDevelopmentKind?: ExtensionKind[] | undefined = undefined; + readonly extensionTestsLocationURI?: URI | undefined = undefined; + readonly logsHome: URI = URI.from({ scheme: 'monaco', authority: 'logsHome' }); + readonly logLevel?: string | undefined = undefined; + readonly extensionLogLevel?: [string, string][] | undefined = undefined; + readonly verbose: boolean = false; + readonly isBuilt: boolean = false; + readonly disableTelemetry: boolean = false; + readonly serviceMachineIdResource: URI = URI.from({ scheme: 'monaco', authority: 'serviceMachineIdResource' }); + readonly policyFile?: URI | undefined = undefined; +} + class StandaloneDialogService implements IDialogService { _serviceBrand: undefined; @@ -684,6 +717,11 @@ class StandaloneResourceConfigurationService implements ITextResourceConfigurati }); } + inspect(resource: URI | undefined, position: IPosition | null, section: string): IConfigurationValue> { + const language = resource ? this.getLanguage(resource, position) : undefined; + return this.configurationService.inspect(section, { resource, overrideIdentifier: language }); + } + private getLanguage(resource: URI, position: IPosition | null): string | null { const model = this.modelService.getModel(resource); if (model) { @@ -717,35 +755,17 @@ class StandaloneResourcePropertiesService implements ITextResourcePropertiesServ class StandaloneTelemetryService implements ITelemetryService { declare readonly _serviceBrand: undefined; - - public telemetryLevel = TelemetryLevel.NONE; - public sendErrorTelemetry = false; - - public setEnabled(value: boolean): void { - } - - public setExperimentProperty(name: string, value: string): void { - } - - public publicLog(eventName: string, data?: any): Promise { - return Promise.resolve(undefined); - } - - publicLog2> = never, T extends IGDPRProperty = never>(eventName: string, data?: StrictPropertyCheck) { - return this.publicLog(eventName, data as any); - } - - public publicLogError(eventName: string, data?: any): Promise { - return Promise.resolve(undefined); - } - - publicLogError2> = never, T extends IGDPRProperty = never>(eventName: string, data?: StrictPropertyCheck) { - return this.publicLogError(eventName, data as any); - } - - public getTelemetryInfo(): Promise { - throw new Error(`Not available`); - } + readonly telemetryLevel = TelemetryLevel.NONE; + readonly sessionId = 'someValue.sessionId'; + readonly machineId = 'someValue.machineId'; + readonly firstSessionDate = 'someValue.firstSessionDate'; + readonly sendErrorTelemetry = false; + setEnabled(): void { } + setExperimentProperty(): void { } + publicLog() { } + publicLog2() { } + publicLogError() { } + publicLogError2() { } } class StandaloneWorkspaceContextService implements IWorkspaceContextService { @@ -1035,6 +1055,11 @@ class StandaloneAudioService implements IAudioCueService { async playSound(cue: Sound, allowManyInParallel?: boolean | undefined): Promise { } + playAudioCueLoop(cue: AudioCue): IDisposable { + return toDisposable(() => { }); + } + playRandomAudioCue(groupId: AudioCueGroupId, allowManyInParallel?: boolean): void { + } } export interface IEditorOverrideServices { @@ -1048,6 +1073,7 @@ registerSingleton(IWorkspaceContextService, StandaloneWorkspaceContextService, I registerSingleton(ILabelService, StandaloneUriLabelService, InstantiationType.Eager); registerSingleton(ITelemetryService, StandaloneTelemetryService, InstantiationType.Eager); registerSingleton(IDialogService, StandaloneDialogService, InstantiationType.Eager); +registerSingleton(IEnvironmentService, StandaloneEnvironmentService, InstantiationType.Eager); registerSingleton(INotificationService, StandaloneNotificationService, InstantiationType.Eager); registerSingleton(IMarkerService, MarkerService, InstantiationType.Eager); registerSingleton(ILanguageService, StandaloneLanguageService, InstantiationType.Eager); diff --git a/src/vs/editor/standalone/browser/standaloneThemeService.ts b/src/vs/editor/standalone/browser/standaloneThemeService.ts index 669791cecee..ec49af70ece 100644 --- a/src/vs/editor/standalone/browser/standaloneThemeService.ts +++ b/src/vs/editor/standalone/browser/standaloneThemeService.ts @@ -274,18 +274,20 @@ export class StandaloneThemeService extends Disposable implements IStandaloneThe private _registerRegularEditorContainer(): IDisposable { if (!this._globalStyleElement) { - this._globalStyleElement = dom.createStyleSheet(); - this._globalStyleElement.className = 'monaco-colors'; - this._globalStyleElement.textContent = this._allCSS; + this._globalStyleElement = dom.createStyleSheet(undefined, style => { + style.className = 'monaco-colors'; + style.textContent = this._allCSS; + }); this._styleElements.push(this._globalStyleElement); } return Disposable.None; } private _registerShadowDomContainer(domNode: HTMLElement): IDisposable { - const styleElement = dom.createStyleSheet(domNode); - styleElement.className = 'monaco-colors'; - styleElement.textContent = this._allCSS; + const styleElement = dom.createStyleSheet(domNode, style => { + style.className = 'monaco-colors'; + style.textContent = this._allCSS; + }); this._styleElements.push(styleElement); return { dispose: () => { diff --git a/src/vs/editor/standalone/common/monarch/monarchLexer.ts b/src/vs/editor/standalone/common/monarch/monarchLexer.ts index e434e40917f..922e6c6e251 100644 --- a/src/vs/editor/standalone/common/monarch/monarchLexer.ts +++ b/src/vs/editor/standalone/common/monarch/monarchLexer.ts @@ -387,7 +387,7 @@ class MonarchModernTokensCollector implements IMonarchTokensCollector { export type ILoadStatus = { loaded: true } | { loaded: false; promise: Promise }; -export class MonarchTokenizer implements languages.ITokenizationSupport { +export class MonarchTokenizer implements languages.ITokenizationSupport, IDisposable { private readonly _languageService: ILanguageService; private readonly _standaloneThemeService: IStandaloneThemeService; @@ -422,7 +422,7 @@ export class MonarchTokenizer implements languages.ITokenizationSupport { } if (isOneOfMyEmbeddedModes) { emitting = true; - languages.TokenizationRegistry.fire([this._languageId]); + languages.TokenizationRegistry.handleChange([this._languageId]); emitting = false; } }); @@ -883,6 +883,7 @@ export class MonarchTokenizer implements languages.ITokenizationSupport { if (languageId !== this._languageId) { // Fire language loading event + this._languageService.requestBasicLanguageFeatures(languageId); languages.TokenizationRegistry.getOrCreate(languageId); this._embeddedLanguages[languageId] = true; } diff --git a/src/vs/editor/standalone/common/themes.ts b/src/vs/editor/standalone/common/themes.ts index e283e315d2c..e5f9b91bf22 100644 --- a/src/vs/editor/standalone/common/themes.ts +++ b/src/vs/editor/standalone/common/themes.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { editorActiveIndentGuides, editorIndentGuides } from 'vs/editor/common/core/editorColorRegistry'; +import { editorActiveIndentGuide1, editorIndentGuide1 } from 'vs/editor/common/core/editorColorRegistry'; import { IStandaloneThemeData } from 'vs/editor/standalone/common/standaloneTheme'; import { editorBackground, editorForeground, editorInactiveSelection, editorSelectionHighlight } from 'vs/platform/theme/common/colorRegistry'; @@ -71,8 +71,8 @@ export const vs: IStandaloneThemeData = { [editorBackground]: '#FFFFFE', [editorForeground]: '#000000', [editorInactiveSelection]: '#E5EBF1', - [editorIndentGuides]: '#D3D3D3', - [editorActiveIndentGuides]: '#939393', + [editorIndentGuide1]: '#D3D3D3', + [editorActiveIndentGuide1]: '#939393', [editorSelectionHighlight]: '#ADD6FF4D' } }; @@ -142,8 +142,8 @@ export const vs_dark: IStandaloneThemeData = { [editorBackground]: '#1E1E1E', [editorForeground]: '#D4D4D4', [editorInactiveSelection]: '#3A3D41', - [editorIndentGuides]: '#404040', - [editorActiveIndentGuides]: '#707070', + [editorIndentGuide1]: '#404040', + [editorActiveIndentGuide1]: '#707070', [editorSelectionHighlight]: '#ADD6FF26' } }; @@ -204,8 +204,8 @@ export const hc_black: IStandaloneThemeData = { colors: { [editorBackground]: '#000000', [editorForeground]: '#FFFFFF', - [editorIndentGuides]: '#FFFFFF', - [editorActiveIndentGuides]: '#FFFFFF', + [editorIndentGuide1]: '#FFFFFF', + [editorActiveIndentGuide1]: '#FFFFFF', } }; /* -------------------------------- End hc-black theme -------------------------------- */ @@ -263,8 +263,8 @@ export const hc_light: IStandaloneThemeData = { colors: { [editorBackground]: '#FFFFFF', [editorForeground]: '#292929', - [editorIndentGuides]: '#292929', - [editorActiveIndentGuides]: '#292929', + [editorIndentGuide1]: '#292929', + [editorActiveIndentGuide1]: '#292929', } }; /* -------------------------------- End hc-light theme -------------------------------- */ diff --git a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts index dbb0ee675a8..b4a255004f6 100644 --- a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts +++ b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts @@ -160,8 +160,8 @@ suite('TokenizationSupport2Adapter', () => { new Token(0, 'bar', languageId), ], [ - 0, (0 << MetadataConsts.FOREGROUND_OFFSET), - 0, (1 << MetadataConsts.FOREGROUND_OFFSET) + 0, (0 << MetadataConsts.FOREGROUND_OFFSET) | MetadataConsts.BALANCED_BRACKETS_MASK, + 0, (1 << MetadataConsts.FOREGROUND_OFFSET) | MetadataConsts.BALANCED_BRACKETS_MASK ] ); }); @@ -179,9 +179,9 @@ suite('TokenizationSupport2Adapter', () => { new Token(5, 'foo', languageId), ], [ - 0, (0 << MetadataConsts.FOREGROUND_OFFSET), - 5, (1 << MetadataConsts.FOREGROUND_OFFSET), - 5, (2 << MetadataConsts.FOREGROUND_OFFSET) + 0, (0 << MetadataConsts.FOREGROUND_OFFSET) | MetadataConsts.BALANCED_BRACKETS_MASK, + 5, (1 << MetadataConsts.FOREGROUND_OFFSET) | MetadataConsts.BALANCED_BRACKETS_MASK, + 5, (2 << MetadataConsts.FOREGROUND_OFFSET) | MetadataConsts.BALANCED_BRACKETS_MASK ] ); }); diff --git a/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts b/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts index b8c1d0d4592..87882eeb24b 100644 --- a/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts +++ b/src/vs/editor/test/browser/config/editorLayoutProvider.test.ts @@ -96,6 +96,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { typicalHalfwidthCharacterWidth: input.typicalHalfwidthCharacterWidth, maxDigitWidth: input.maxDigitWidth, pixelRatio: input.pixelRatio, + glyphMarginDecorationLaneCount: 1, }); assert.deepStrictEqual(actual, expected); } @@ -127,6 +128,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -195,6 +197,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -263,6 +266,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -331,6 +335,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -399,6 +404,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -467,6 +473,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 50, @@ -535,6 +542,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 50, @@ -603,6 +611,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 60, @@ -671,6 +680,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 30, @@ -739,6 +749,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 30, @@ -807,6 +818,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -875,6 +887,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -943,6 +956,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -1011,6 +1025,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 55, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 55, lineNumbersWidth: 0, @@ -1081,6 +1096,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -1151,6 +1167,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -1221,6 +1238,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -1291,6 +1309,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 0, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 0, lineNumbersWidth: 0, @@ -1359,6 +1378,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { glyphMarginLeft: 0, glyphMarginWidth: 30, + glyphMarginDecorationLaneCount: 1, lineNumbersLeft: 30, lineNumbersWidth: 36, diff --git a/src/vs/editor/test/browser/controller/cursor.integrationTest.ts b/src/vs/editor/test/browser/controller/cursor.integrationTest.ts new file mode 100644 index 00000000000..6373a6fd603 --- /dev/null +++ b/src/vs/editor/test/browser/controller/cursor.integrationTest.ts @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { Selection } from 'vs/editor/common/core/selection'; +import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; + +suite('Editor Controller', () => { + + test('issue #23913: Greater than 1000+ multi cursor typing replacement text appears inverted, lines begin to drop off selection', function () { + this.timeout(10000); + const LINE_CNT = 2000; + + const text: string[] = []; + for (let i = 0; i < LINE_CNT; i++) { + text[i] = 'asd'; + } + + withTestCodeEditor(text, {}, (editor, viewModel) => { + const model = editor.getModel(); + + const selections: Selection[] = []; + for (let i = 0; i < LINE_CNT; i++) { + selections[i] = new Selection(i + 1, 1, i + 1, 1); + } + viewModel.setSelections('test', selections); + + viewModel.type('n', 'keyboard'); + viewModel.type('n', 'keyboard'); + + for (let i = 0; i < LINE_CNT; i++) { + assert.strictEqual(model.getLineContent(i + 1), 'nnasd', 'line #' + (i + 1)); + } + + assert.strictEqual(viewModel.getSelections().length, LINE_CNT); + assert.strictEqual(viewModel.getSelections()[LINE_CNT - 1].startLineNumber, LINE_CNT); + }); + }); +}); diff --git a/src/vs/editor/test/browser/controller/cursor.test.ts b/src/vs/editor/test/browser/controller/cursor.test.ts index f9894dde21d..5254ef1add9 100644 --- a/src/vs/editor/test/browser/controller/cursor.test.ts +++ b/src/vs/editor/test/browser/controller/cursor.test.ts @@ -2436,36 +2436,6 @@ suite('Editor Controller', () => { }); }); - test('issue #23913: Greater than 1000+ multi cursor typing replacement text appears inverted, lines begin to drop off selection', function () { - this.timeout(10000); - const LINE_CNT = 2000; - - const text: string[] = []; - for (let i = 0; i < LINE_CNT; i++) { - text[i] = 'asd'; - } - usingCursor({ - text: text - }, (editor, model, viewModel) => { - - const selections: Selection[] = []; - for (let i = 0; i < LINE_CNT; i++) { - selections[i] = new Selection(i + 1, 1, i + 1, 1); - } - viewModel.setSelections('test', selections); - - viewModel.type('n', 'keyboard'); - viewModel.type('n', 'keyboard'); - - for (let i = 0; i < LINE_CNT; i++) { - assert.strictEqual(model.getLineContent(i + 1), 'nnasd', 'line #' + (i + 1)); - } - - assert.strictEqual(viewModel.getSelections().length, LINE_CNT); - assert.strictEqual(viewModel.getSelections()[LINE_CNT - 1].startLineNumber, LINE_CNT); - }); - }); - test('issue #23983: Calling model.setEOL does not reset cursor position', () => { usingCursor({ text: [ diff --git a/src/vs/editor/test/browser/controller/imeTester.ts b/src/vs/editor/test/browser/controller/imeTester.ts index bf85dd9c5bf..b44da204b52 100644 --- a/src/vs/editor/test/browser/controller/imeTester.ts +++ b/src/vs/editor/test/browser/controller/imeTester.ts @@ -121,7 +121,12 @@ function doCreateTest(description: string, inputStr: string, expectedStr: string } }; - const handler = new TextAreaInput(textAreaInputHost, new TextAreaWrapper(input), platform.OS, browser); + const handler = new TextAreaInput(textAreaInputHost, new TextAreaWrapper(input), platform.OS, { + isAndroid: browser.isAndroid, + isFirefox: browser.isFirefox, + isChrome: browser.isChrome, + isSafari: browser.isSafari, + }); const output = document.createElement('pre'); output.className = 'output'; diff --git a/src/vs/editor/test/browser/testCodeEditor.ts b/src/vs/editor/test/browser/testCodeEditor.ts index b9f488595a2..957920ebe67 100644 --- a/src/vs/editor/test/browser/testCodeEditor.ts +++ b/src/vs/editor/test/browser/testCodeEditor.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { mock } from 'vs/base/test/common/mock'; import { EditorConfiguration, IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; @@ -39,6 +40,7 @@ import { TestConfigurationService } from 'vs/platform/configuration/test/common/ import { IContextKeyService, IContextKeyServiceTarget } from 'vs/platform/contextkey/common/contextkey'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { BrandedService, IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; @@ -191,6 +193,11 @@ export function createCodeEditorServices(disposables: DisposableStore, services: define(IContextKeyService, MockContextKeyService); define(ICommandService, TestCommandService); define(ITelemetryService, NullTelemetryServiceShape); + define(IEnvironmentService, class extends mock() { + declare readonly _serviceBrand: undefined; + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }); define(ILanguageFeatureDebounceService, LanguageFeatureDebounceService); define(ILanguageFeaturesService, LanguageFeaturesService); diff --git a/src/vs/editor/test/browser/viewModel/testViewModel.ts b/src/vs/editor/test/browser/viewModel/testViewModel.ts index 28fb4ac5e19..4933ac1a998 100644 --- a/src/vs/editor/test/browser/viewModel/testViewModel.ts +++ b/src/vs/editor/test/browser/viewModel/testViewModel.ts @@ -18,7 +18,10 @@ export function testViewModel(text: string[], options: IEditorOptions, callback: const configuration = new TestConfiguration(options); const model = createTextModel(text.join('\n')); const monospaceLineBreaksComputerFactory = MonospaceLineBreaksComputerFactory.create(configuration.options); - const viewModel = new ViewModel(EDITOR_ID, configuration, model, monospaceLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, null!, new TestLanguageConfigurationService(), new TestThemeService()); + const viewModel = new ViewModel(EDITOR_ID, configuration, model, monospaceLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, null!, new TestLanguageConfigurationService(), new TestThemeService(), { + setVisibleLines(visibleLines, stabilized) { + }, + }); callback(viewModel, model); diff --git a/src/vs/editor/test/browser/widget/diffEditorWidget2.test.ts b/src/vs/editor/test/browser/widget/diffEditorWidget2.test.ts new file mode 100644 index 00000000000..85c9043e060 --- /dev/null +++ b/src/vs/editor/test/browser/widget/diffEditorWidget2.test.ts @@ -0,0 +1,54 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import assert = require('assert'); +import { UnchangedRegion } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorViewModel'; +import { LineRange } from 'vs/editor/common/core/lineRange'; +import { LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; + +suite('DiffEditorWidget2', () => { + suite('UnchangedRegion', () => { + function serialize(regions: UnchangedRegion[]): unknown { + return regions.map(r => `${r.originalRange} - ${r.modifiedRange}`); + } + + test('Everything changed', () => { + assert.deepStrictEqual(serialize(UnchangedRegion.fromDiffs( + [new LineRangeMapping(new LineRange(1, 10), new LineRange(1, 10), [])], + 10, + 10, + )), []); + }); + + test('Nothing changed', () => { + assert.deepStrictEqual(serialize(UnchangedRegion.fromDiffs( + [], + 10, + 10, + )), [ + "[1,11) - [1,11)" + ]); + }); + + test('Change in the middle', () => { + assert.deepStrictEqual(serialize(UnchangedRegion.fromDiffs( + [new LineRangeMapping(new LineRange(50, 60), new LineRange(50, 60), [])], + 100, + 100, + )), ([ + '[1,47) - [1,47)', + '[63,101) - [63,101)' + ])); + }); + + test('Change at the end', () => { + assert.deepStrictEqual(serialize(UnchangedRegion.fromDiffs( + [new LineRangeMapping(new LineRange(99, 100), new LineRange(100, 100), [])], + 100, + 100, + )), (["[1,96) - [1,96)"])); + }); + }); +}); diff --git a/src/vs/editor/test/common/diff/standardLinesDiffCompute.test.ts b/src/vs/editor/test/common/diff/standardLinesDiffCompute.test.ts deleted file mode 100644 index c2f6e8afe6e..00000000000 --- a/src/vs/editor/test/common/diff/standardLinesDiffCompute.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as assert from 'assert'; -import { Range } from 'vs/editor/common/core/range'; -import { LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; -import { lineRangeMappingFromRangeMappings, StandardLinesDiffComputer } from 'vs/editor/common/diff/standardLinesDiffComputer'; - -suite('standardLinesDiffCompute', () => { - test('1', () => { - assert.deepStrictEqual( - toJson( - lineRangeMappingFromRangeMappings([ - new RangeMapping(r([1, 1, 1, 1]), r([1, 1, 1, 2])), - ]) - ), - (["{[1,2)->[1,2)}"]) - ); - }); - - test('2', () => { - assert.deepStrictEqual( - toJson( - lineRangeMappingFromRangeMappings([ - new RangeMapping(r([1, 1, 1, 2]), r([1, 1, 1, 1])), - ]) - ), - (["{[1,2)->[1,2)}"]) - ); - }); - - test('3', () => { - assert.deepStrictEqual( - toJson( - lineRangeMappingFromRangeMappings([ - new RangeMapping(r([1, 1, 2, 1]), r([1, 1, 1, 1])), - ]) - ), - (["{[1,2)->[1,1)}"]) - ); - }); - - test('4', () => { - assert.deepStrictEqual( - toJson( - lineRangeMappingFromRangeMappings([ - new RangeMapping(r([1, 1, 1, 1]), r([1, 1, 2, 1])), - ]) - ), - (["{[1,1)->[1,2)}"]) - ); - }); - - test('Suboptimal Diff (needs improving)', () => { - const c = new StandardLinesDiffComputer(); - - const lines1 = - ` - FirstKeyword = BreakKeyword, - LastKeyword = StringKeyword, - FirstFutureReservedWord = ImplementsKeyword, - LastFutureReservedWord = YieldKeyword - } -`.split('\n'); - - const lines2 = - ` - FirstKeyword = BreakKeyword, - LastKeyword = StringKeyword, - FirstFutureReservedWord = ImplementsKeyword, - LastFutureReservedWord = YieldKeyword, - FirstTypeNode = TypeReference, - LastTypeNode = ArrayType - } -`.split('\n'); - - const diff = c.computeDiff(lines1, lines2, { maxComputationTimeMs: 1000, ignoreTrimWhitespace: false }); - - // TODO this diff should only have one inner, not two. - assert.deepStrictEqual( - toJsonWithDetails(diff.changes), - [ - { - main: "{[5,6)->[5,8)}", - inner: [ - "{[5,41 -> 5,41]->[5,41 -> 7,28]}" - ] - } - ] - ); - }); -}); - -function r(values: [startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number]): Range { - return new Range(values[0], values[1], values[2], values[3]); -} - -function toJson(mappings: LineRangeMapping[]): unknown { - return mappings.map(m => m.toString()); -} - -function toJsonWithDetails(mappings: LineRangeMapping[]): unknown { - return mappings.map(m => { - return { main: m.toString(), inner: m.innerChanges?.map(c => c.toString()) }; - }); -} diff --git a/src/vs/editor/test/common/model/intervalTree.test.ts b/src/vs/editor/test/common/model/intervalTree.test.ts index aec5992f06b..bb94b0db456 100644 --- a/src/vs/editor/test/common/model/intervalTree.test.ts +++ b/src/vs/editor/test/common/model/intervalTree.test.ts @@ -17,7 +17,7 @@ const MAX_INSERTS = 30; const MIN_CHANGE_CNT = 10; const MAX_CHANGE_CNT = 20; -suite('IntervalTree', () => { +suite('IntervalTree 1', () => { class Interval { _intervalBrand: void = undefined; @@ -108,7 +108,7 @@ suite('IntervalTree', () => { this._oracle.insert(this._oracleNodes[op.id]!); } else { - const actualNodes = this._tree.intervalSearch(op.begin, op.end, 0, false, 0); + const actualNodes = this._tree.intervalSearch(op.begin, op.end, 0, false, 0, false); const actual = actualNodes.map(n => new Interval(n.cachedAbsoluteStart, n.cachedAbsoluteEnd)); const expected = this._oracle.search(new Interval(op.begin, op.end)); assert.deepStrictEqual(actual, expected); @@ -498,7 +498,7 @@ suite('IntervalTree', () => { const T = createCormenTree(); function assertIntervalSearch(start: number, end: number, expected: [number, number][]): void { - const actualNodes = T.intervalSearch(start, end, 0, false, 0); + const actualNodes = T.intervalSearch(start, end, 0, false, 0, false); const actual = actualNodes.map((n) => <[number, number]>[n.cachedAbsoluteStart, n.cachedAbsoluteEnd]); assert.deepStrictEqual(actual, expected); } @@ -554,7 +554,7 @@ suite('IntervalTree', () => { }); }); -suite('IntervalTree', () => { +suite('IntervalTree 2', () => { function assertNodeAcceptEdit(msg: string, nodeStart: number, nodeEnd: number, nodeStickiness: TrackedRangeStickiness, start: number, end: number, textLength: number, forceMoveMarkers: boolean, expectedNodeStart: number, expectedNodeEnd: number): void { const node = new IntervalNode('', nodeStart, nodeEnd); setNodeStickiness(node, nodeStickiness); diff --git a/src/vs/editor/test/common/model/model.line.test.ts b/src/vs/editor/test/common/model/model.line.test.ts index 208092f62e8..d011ee22f05 100644 --- a/src/vs/editor/test/common/model/model.line.test.ts +++ b/src/vs/editor/test/common/model/model.line.test.ts @@ -10,6 +10,9 @@ import { computeIndentLevel } from 'vs/editor/common/model/utils'; import { MetadataConsts } from 'vs/editor/common/encodedTokenAttributes'; import { TestLineToken, TestLineTokenFactory } from 'vs/editor/test/common/core/testLineToken'; import { createTextModel } from 'vs/editor/test/common/testTextModel'; +import { ITokenizationSupport, TokenizationRegistry, IState, IBackgroundTokenizationStore, EncodedTokenizationResult, TokenizationResult, IBackgroundTokenizer } from 'vs/editor/common/languages'; +import { ITextModel } from 'vs/editor/common/model'; +import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; interface ILineEdit { startColumn: number; @@ -93,6 +96,56 @@ class TestToken { } } +class ManualTokenizationSupport implements ITokenizationSupport { + private readonly tokens = new Map(); + private readonly stores = new Set(); + + public setLineTokens(lineNumber: number, tokens: Uint32Array): void { + const b = new ContiguousMultilineTokensBuilder(); + b.add(lineNumber, tokens); + for (const s of this.stores) { + s.setTokens(b.finalize()); + } + } + + getInitialState(): IState { + return new LineState(1); + } + + tokenize(line: string, hasEOL: boolean, state: IState): TokenizationResult { + throw new Error(); + } + + tokenizeEncoded(line: string, hasEOL: boolean, state: IState): EncodedTokenizationResult { + const s = state as LineState; + return new EncodedTokenizationResult(this.tokens.get(s.lineNumber)!, new LineState(s.lineNumber + 1)); + } + + /** + * Can be/return undefined if default background tokenization should be used. + */ + createBackgroundTokenizer?(textModel: ITextModel, store: IBackgroundTokenizationStore): IBackgroundTokenizer | undefined { + this.stores.add(store); + return { + dispose: () => { + this.stores.delete(store); + }, + requestTokens(startLineNumber, endLineNumberExclusive) { + }, + }; + } +} + +class LineState implements IState { + constructor(public readonly lineNumber: number) { } + clone(): IState { + return this; + } + equals(other: IState): boolean { + return (other as LineState).lineNumber === this.lineNumber; + } +} + suite('ModelLinesTokens', () => { interface IBufferLineState { @@ -107,13 +160,18 @@ suite('ModelLinesTokens', () => { function testApplyEdits(initial: IBufferLineState[], edits: IEdit[], expected: IBufferLineState[]): void { const initialText = initial.map(el => el.text).join('\n'); + + const s = new ManualTokenizationSupport(); + const d = TokenizationRegistry.register('test', s); + const model = createTextModel(initialText, 'test'); + model.onBeforeAttached(); for (let lineIndex = 0; lineIndex < initial.length; lineIndex++) { const lineTokens = initial[lineIndex].tokens; const lineTextLength = model.getLineMaxColumn(lineIndex + 1) - 1; const tokens = TestToken.toTokens(lineTokens); LineTokens.convertToEndOffset(tokens, lineTextLength); - model.setLineTokens(lineIndex + 1, tokens); + s.setLineTokens(lineIndex + 1, tokens); } model.applyEdits(edits.map((ed) => ({ @@ -131,6 +189,7 @@ suite('ModelLinesTokens', () => { } model.dispose(); + d.dispose(); } test('single delete 1', () => { @@ -445,17 +504,20 @@ suite('ModelLinesTokens', () => { } test('insertion on empty line', () => { + const s = new ManualTokenizationSupport(); + const d = TokenizationRegistry.register('test', s); + const model = createTextModel('some text', 'test'); const tokens = TestToken.toTokens([new TestToken(0, 1)]); LineTokens.convertToEndOffset(tokens, model.getLineMaxColumn(1) - 1); - model.setLineTokens(1, tokens); + s.setLineTokens(1, tokens); model.applyEdits([{ range: new Range(1, 1, 1, 10), text: '' }]); - model.setLineTokens(1, new Uint32Array(0)); + s.setLineTokens(1, new Uint32Array(0)); model.applyEdits([{ range: new Range(1, 1, 1, 1), @@ -466,6 +528,7 @@ suite('ModelLinesTokens', () => { assertLineTokens(actualTokens, [new TestToken(0, 1)]); model.dispose(); + d.dispose(); }); test('updates tokens on insertion 1', () => { diff --git a/src/vs/editor/test/common/model/model.modes.test.ts b/src/vs/editor/test/common/model/model.modes.test.ts index c6287828d6d..dfefb300423 100644 --- a/src/vs/editor/test/common/model/model.modes.test.ts +++ b/src/vs/editor/test/common/model/model.modes.test.ts @@ -19,9 +19,10 @@ suite('Editor Model - Model Modes 1', () => { let calledFor: string[] = []; - function checkAndClear(arr: string[]) { - assert.deepStrictEqual(calledFor, arr); + function getAndClear(): string[] { + const result = calledFor; calledFor = []; + return result; } const tokenizationSupport: languages.ITokenizationSupport = { @@ -57,98 +58,98 @@ suite('Editor Model - Model Modes 1', () => { test('model calls syntax highlighter 1', () => { thisModel.tokenization.forceTokenization(1); - checkAndClear(['1']); + assert.deepStrictEqual(getAndClear(), ['1']); }); test('model calls syntax highlighter 2', () => { thisModel.tokenization.forceTokenization(2); - checkAndClear(['1', '2']); + assert.deepStrictEqual(getAndClear(), ['1', '2']); thisModel.tokenization.forceTokenization(2); - checkAndClear([]); + assert.deepStrictEqual(getAndClear(), []); }); test('model caches states', () => { thisModel.tokenization.forceTokenization(1); - checkAndClear(['1']); + assert.deepStrictEqual(getAndClear(), ['1']); thisModel.tokenization.forceTokenization(2); - checkAndClear(['2']); + assert.deepStrictEqual(getAndClear(), ['2']); thisModel.tokenization.forceTokenization(3); - checkAndClear(['3']); + assert.deepStrictEqual(getAndClear(), ['3']); thisModel.tokenization.forceTokenization(4); - checkAndClear(['4']); + assert.deepStrictEqual(getAndClear(), ['4']); thisModel.tokenization.forceTokenization(5); - checkAndClear(['5']); + assert.deepStrictEqual(getAndClear(), ['5']); thisModel.tokenization.forceTokenization(5); - checkAndClear([]); + assert.deepStrictEqual(getAndClear(), []); }); test('model invalidates states for one line insert', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['1', '2', '3', '4', '5']); + assert.deepStrictEqual(getAndClear(), ['1', '2', '3', '4', '5']); thisModel.applyEdits([EditOperation.insert(new Position(1, 1), '-')]); thisModel.tokenization.forceTokenization(5); - checkAndClear(['-']); + assert.deepStrictEqual(getAndClear(), ['-']); thisModel.tokenization.forceTokenization(5); - checkAndClear([]); + assert.deepStrictEqual(getAndClear(), []); }); test('model invalidates states for many lines insert', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['1', '2', '3', '4', '5']); + assert.deepStrictEqual(getAndClear(), ['1', '2', '3', '4', '5']); thisModel.applyEdits([EditOperation.insert(new Position(1, 1), '0\n-\n+')]); assert.strictEqual(thisModel.getLineCount(), 7); thisModel.tokenization.forceTokenization(7); - checkAndClear(['0', '-', '+']); + assert.deepStrictEqual(getAndClear(), ['0', '-', '+']); thisModel.tokenization.forceTokenization(7); - checkAndClear([]); + assert.deepStrictEqual(getAndClear(), []); }); test('model invalidates states for one new line', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['1', '2', '3', '4', '5']); + assert.deepStrictEqual(getAndClear(), ['1', '2', '3', '4', '5']); thisModel.applyEdits([EditOperation.insert(new Position(1, 2), '\n')]); thisModel.applyEdits([EditOperation.insert(new Position(2, 1), 'a')]); thisModel.tokenization.forceTokenization(6); - checkAndClear(['1', 'a']); + assert.deepStrictEqual(getAndClear(), ['1', 'a']); }); test('model invalidates states for one line delete', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['1', '2', '3', '4', '5']); + assert.deepStrictEqual(getAndClear(), ['1', '2', '3', '4', '5']); thisModel.applyEdits([EditOperation.insert(new Position(1, 2), '-')]); thisModel.tokenization.forceTokenization(5); - checkAndClear(['1']); + assert.deepStrictEqual(getAndClear(), ['1']); thisModel.applyEdits([EditOperation.delete(new Range(1, 1, 1, 2))]); thisModel.tokenization.forceTokenization(5); - checkAndClear(['-']); + assert.deepStrictEqual(getAndClear(), ['-']); thisModel.tokenization.forceTokenization(5); - checkAndClear([]); + assert.deepStrictEqual(getAndClear(), []); }); test('model invalidates states for many lines delete', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['1', '2', '3', '4', '5']); + assert.deepStrictEqual(getAndClear(), ['1', '2', '3', '4', '5']); thisModel.applyEdits([EditOperation.delete(new Range(1, 1, 3, 1))]); thisModel.tokenization.forceTokenization(3); - checkAndClear(['3']); + assert.deepStrictEqual(getAndClear(), ['3']); thisModel.tokenization.forceTokenization(3); - checkAndClear([]); + assert.deepStrictEqual(getAndClear(), []); }); }); @@ -172,9 +173,10 @@ suite('Editor Model - Model Modes 2', () => { let calledFor: string[] = []; - function checkAndClear(arr: string[]): void { - assert.deepStrictEqual(calledFor, arr); + function getAndClear(): string[] { + const actual = calledFor; calledFor = []; + return actual; } const tokenizationSupport: languages.ITokenizationSupport = { @@ -209,54 +211,54 @@ suite('Editor Model - Model Modes 2', () => { test('getTokensForInvalidLines one text insert', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); + assert.deepStrictEqual(getAndClear(), ['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); thisModel.applyEdits([EditOperation.insert(new Position(1, 6), '-')]); thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1-', 'Line2']); + assert.deepStrictEqual(getAndClear(), ['Line1-', 'Line2']); }); test('getTokensForInvalidLines two text insert', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); + assert.deepStrictEqual(getAndClear(), ['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); thisModel.applyEdits([ EditOperation.insert(new Position(1, 6), '-'), EditOperation.insert(new Position(3, 6), '-') ]); thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1-', 'Line2', 'Line3-', 'Line4']); + assert.deepStrictEqual(getAndClear(), ['Line1-', 'Line2', 'Line3-', 'Line4']); }); test('getTokensForInvalidLines one multi-line text insert, one small text insert', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); + assert.deepStrictEqual(getAndClear(), ['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); thisModel.applyEdits([EditOperation.insert(new Position(1, 6), '\nNew line\nAnother new line')]); thisModel.applyEdits([EditOperation.insert(new Position(5, 6), '-')]); thisModel.tokenization.forceTokenization(7); - checkAndClear(['Line1', 'New line', 'Another new line', 'Line2', 'Line3-', 'Line4']); + assert.deepStrictEqual(getAndClear(), ['Line1', 'New line', 'Another new line', 'Line2', 'Line3-', 'Line4']); }); test('getTokensForInvalidLines one delete text', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); + assert.deepStrictEqual(getAndClear(), ['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); thisModel.applyEdits([EditOperation.delete(new Range(1, 1, 1, 5))]); thisModel.tokenization.forceTokenization(5); - checkAndClear(['1', 'Line2']); + assert.deepStrictEqual(getAndClear(), ['1', 'Line2']); }); test('getTokensForInvalidLines one line delete text', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); + assert.deepStrictEqual(getAndClear(), ['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); thisModel.applyEdits([EditOperation.delete(new Range(1, 1, 2, 1))]); thisModel.tokenization.forceTokenization(4); - checkAndClear(['Line2']); + assert.deepStrictEqual(getAndClear(), ['Line2']); }); test('getTokensForInvalidLines multiple lines delete text', () => { thisModel.tokenization.forceTokenization(5); - checkAndClear(['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); + assert.deepStrictEqual(getAndClear(), ['Line1', 'Line2', 'Line3', 'Line4', 'Line5']); thisModel.applyEdits([EditOperation.delete(new Range(1, 1, 3, 3))]); thisModel.tokenization.forceTokenization(3); - checkAndClear(['ne3', 'Line4']); + assert.deepStrictEqual(getAndClear(), ['ne3', 'Line4']); }); }); diff --git a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts index d6382e4e7ac..f1d41730546 100644 --- a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts +++ b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts @@ -1595,6 +1595,12 @@ suite('buffer api', () => { assert(!a.equal(d)); }); + test('equal with more chunks', () => { + const a = createTextBuffer(['ab', 'cd', 'e']); + const b = createTextBuffer(['ab', 'c', 'de']); + assert(a.equal(b)); + }); + test('equal 2, empty buffer', () => { const a = createTextBuffer(['']); const b = createTextBuffer(['']); diff --git a/src/vs/editor/test/common/model/textModelTokens.test.ts b/src/vs/editor/test/common/model/textModelTokens.test.ts new file mode 100644 index 00000000000..3bcabeba1e0 --- /dev/null +++ b/src/vs/editor/test/common/model/textModelTokens.test.ts @@ -0,0 +1,96 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { OffsetRange } from 'vs/editor/common/core/offsetRange'; +import { RangePriorityQueueImpl } from 'vs/editor/common/model/textModelTokens'; + +suite('RangePriorityQueueImpl', () => { + + test('addRange', () => { + const ranges: OffsetRange[] = []; + + OffsetRange.addRange(new OffsetRange(0, 2), ranges); + OffsetRange.addRange(new OffsetRange(10, 13), ranges); + OffsetRange.addRange(new OffsetRange(20, 24), ranges); + + assert.deepStrictEqual( + ranges.map(r => r.toString()), + (['[0, 2)', '[10, 13)', '[20, 24)']) + ); + + OffsetRange.addRange(new OffsetRange(2, 10), ranges); + + assert.deepStrictEqual( + ranges.map(r => r.toString()), + (['[0, 13)', '[20, 24)']) + ); + + OffsetRange.addRange(new OffsetRange(14, 19), ranges); + + assert.deepStrictEqual( + ranges.map(r => r.toString()), + (['[0, 13)', '[14, 19)', '[20, 24)']) + ); + + OffsetRange.addRange(new OffsetRange(10, 22), ranges); + + assert.deepStrictEqual( + ranges.map(r => r.toString()), + (['[0, 24)']) + ); + + OffsetRange.addRange(new OffsetRange(-1, 29), ranges); + + assert.deepStrictEqual( + ranges.map(r => r.toString()), + (['[-1, 29)']) + ); + + OffsetRange.addRange(new OffsetRange(-10, -5), ranges); + + assert.deepStrictEqual( + ranges.map(r => r.toString()), + (['[-10, -5)', '[-1, 29)']) + ); + }); + + test('addRangeAndResize', () => { + const queue = new RangePriorityQueueImpl(); + + queue.addRange(new OffsetRange(0, 20)); + queue.addRange(new OffsetRange(100, 120)); + queue.addRange(new OffsetRange(200, 220)); + + // disjoint + queue.addRangeAndResize(new OffsetRange(25, 27), 0); + + assert.deepStrictEqual( + queue.getRanges().map(r => r.toString()), + (['[0, 20)', '[98, 118)', '[198, 218)']) + ); + + queue.addRangeAndResize(new OffsetRange(19, 20), 0); + + assert.deepStrictEqual( + queue.getRanges().map(r => r.toString()), + (['[0, 19)', '[97, 117)', '[197, 217)']) + ); + + queue.addRangeAndResize(new OffsetRange(19, 97), 0); + + assert.deepStrictEqual( + queue.getRanges().map(r => r.toString()), + (['[0, 39)', '[119, 139)']) + ); + + queue.addRangeAndResize(new OffsetRange(-1000, 1000), 0); + + assert.deepStrictEqual( + queue.getRanges().map(r => r.toString()), + ([]) + ); + }); +}); diff --git a/src/vs/editor/test/common/model/tokensStore.test.ts b/src/vs/editor/test/common/model/tokensStore.test.ts index 417ebdecc37..114996c3ff2 100644 --- a/src/vs/editor/test/common/model/tokensStore.test.ts +++ b/src/vs/editor/test/common/model/tokensStore.test.ts @@ -99,8 +99,6 @@ suite('TokensStore', () => { return result; } - // function extractState - function testTokensAdjustment(rawInitialState: string[], edits: ISingleEditOperation[], rawFinalState: string[]) { const initialState = parseTokensState(rawInitialState); const model = createTextModel(initialState.text); @@ -175,6 +173,38 @@ suite('TokensStore', () => { ); }); + test('issue #179268: a complex edit', () => { + testTokensAdjustment( + [ + `|export| |'interior_material_selector.dart'|;`, + `|export| |'mileage_selector.dart'|;`, + `|export| |'owners_selector.dart'|;`, + `|export| |'price_selector.dart'|;`, + `|export| |'seat_count_selector.dart'|;`, + `|export| |'year_selector.dart'|;`, + `|export| |'winter_options_selector.dart'|;|export| |'camera_selector.dart'|;` + ], + [ + { range: new Range(1, 9, 1, 9), text: `camera_selector.dart';\nexport '` }, + { range: new Range(6, 9, 7, 9), text: `` }, + { range: new Range(7, 39, 7, 39), text: `\n` }, + { range: new Range(7, 47, 7, 48), text: `ye` }, + { range: new Range(7, 49, 7, 51), text: `` }, + { range: new Range(7, 52, 7, 53), text: `` }, + ], + [ + `|export| |'|camera_selector.dart';`, + `export 'interior_material_selector.dart';`, + `|export| |'mileage_selector.dart'|;`, + `|export| |'owners_selector.dart'|;`, + `|export| |'price_selector.dart'|;`, + `|export| |'seat_count_selector.dart'|;`, + `|export| |'||winter_options_selector.dart'|;`, + `|export| |'year_selector.dart'|;` + ] + ); + }); + test('issue #91936: Semantic token color highlighting fails on line with selected text', () => { const model = createTextModel(' else if ($s = 08) then \'\\b\''); model.tokenization.setSemanticTokens([ diff --git a/src/vs/editor/test/common/services/editorSimpleWorker.test.ts b/src/vs/editor/test/common/services/editorSimpleWorker.test.ts index d47496fad22..f2cb9374f87 100644 --- a/src/vs/editor/test/common/services/editorSimpleWorker.test.ts +++ b/src/vs/editor/test/common/services/editorSimpleWorker.test.ts @@ -4,7 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { Range } from 'vs/editor/common/core/range'; +import { Position } from 'vs/editor/common/core/position'; +import { Range, IRange } from 'vs/editor/common/core/range'; +import { TextEdit } from 'vs/editor/common/languages'; import { EditorSimpleWorker, ICommonModel } from 'vs/editor/common/services/editorSimpleWorker'; import { IEditorWorkerHost } from 'vs/editor/common/services/editorWorkerHost'; @@ -88,7 +90,7 @@ suite('EditorSimpleWorker', () => { test('MoreMinimal', () => { - return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: 'This is line One', range: new Range(1, 1, 1, 17) }]).then(edits => { + return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: 'This is line One', range: new Range(1, 1, 1, 17) }], false).then(edits => { assert.strictEqual(edits.length, 1); const [first] = edits; assert.strictEqual(first.text, 'O'); @@ -104,7 +106,7 @@ suite('EditorSimpleWorker', () => { '}' ], '\n'); - return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: '{\r\n\t"a":1\r\n}', range: new Range(1, 1, 3, 2) }]).then(edits => { + return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: '{\r\n\t"a":1\r\n}', range: new Range(1, 1, 3, 2) }], false).then(edits => { assert.strictEqual(edits.length, 0); }); }); @@ -117,7 +119,7 @@ suite('EditorSimpleWorker', () => { '}' ], '\n'); - return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: '{\r\n\t"b":1\r\n}', range: new Range(1, 1, 3, 2) }]).then(edits => { + return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: '{\r\n\t"b":1\r\n}', range: new Range(1, 1, 3, 2) }], false).then(edits => { assert.strictEqual(edits.length, 1); const [first] = edits; assert.strictEqual(first.text, 'b'); @@ -125,7 +127,7 @@ suite('EditorSimpleWorker', () => { }); }); - test('MoreMinimal, issue #15385 newline changes and other', function () { + test('MoreMinimal, issue #15385 newline changes and other 2/2', function () { const model = worker.addModel([ 'package main', // 1 @@ -133,7 +135,7 @@ suite('EditorSimpleWorker', () => { '}' // 3 ]); - return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: '\n', range: new Range(3, 2, 4, 1000) }]).then(edits => { + return worker.computeMoreMinimalEdits(model.uri.toString(), [{ text: '\n', range: new Range(3, 2, 4, 1000) }], false).then(edits => { assert.strictEqual(edits.length, 1); const [first] = edits; assert.strictEqual(first.text, '\n'); @@ -141,6 +143,81 @@ suite('EditorSimpleWorker', () => { }); }); + async function testEdits(lines: string[], edits: TextEdit[]): Promise { + const model = worker.addModel(lines); + + const smallerEdits = await worker.computeHumanReadableDiff( + model.uri.toString(), + edits, + { ignoreTrimWhitespace: false, maxComputationTimeMs: 0, computeMoves: false } + ); + + const t1 = applyEdits(model.getValue(), edits); + const t2 = applyEdits(model.getValue(), smallerEdits); + assert.deepStrictEqual(t1, t2); + + return smallerEdits.map(e => ({ range: Range.lift(e.range).toString(), text: e.text })); + } + + + test('computeHumanReadableDiff 1', async () => { + assert.deepStrictEqual( + await testEdits( + [ + 'function test() {}' + ], + [{ + text: "\n/** Some Comment */\n", + range: new Range(1, 1, 1, 1) + }]), + ([{ range: "[1,1 -> 1,1]", text: "\n/** Some Comment */\n" }]) + ); + }); + + test('computeHumanReadableDiff 2', async () => { + assert.deepStrictEqual( + await testEdits( + [ + 'function test() {}' + ], + [{ + text: 'function test(myParam: number) { console.log(myParam); }', + range: new Range(1, 1, 1, Number.MAX_SAFE_INTEGER) + }]), + ([{ range: '[1,15 -> 1,15]', text: 'myParam: number' }, { range: '[1,18 -> 1,18]', text: ' console.log(myParam); ' }]) + ); + }); + + test('computeHumanReadableDiff 3', async () => { + assert.deepStrictEqual( + await testEdits( + [ + '', + '', + '', + '' + ], + [{ + text: 'function test(myParam: number) { console.log(myParam); }\n\n', + range: new Range(2, 1, 3, 20) + }]), + ([{ range: '[2,1 -> 2,1]', text: 'function test(myParam: number) { console.log(myParam); }\n' }]) + ); + }); + + test('computeHumanReadableDiff 4', async () => { + assert.deepStrictEqual( + await testEdits( + [ + 'function algorithm() {}', + ], + [{ + text: 'function alm() {}', + range: new Range(1, 1, 1, Number.MAX_SAFE_INTEGER) + }]), + ([{ range: "[1,10 -> 1,19]", text: "alm" }]) + ); + }); test('ICommonModel#getValueInRange, issue #17424', function () { @@ -189,3 +266,43 @@ suite('EditorSimpleWorker', () => { assert.deepStrictEqual(words, ['one', 'line', 'two', 'line', 'past', 'empty', 'single', 'and', 'now', 'we', 'are', 'done']); }); }); + +function applyEdits(text: string, edits: { range: IRange; text: string }[]): string { + const transformer = new PositionOffsetTransformer(text); + const offsetEdits = edits.map(e => { + const range = Range.lift(e.range); + return ({ + startOffset: transformer.getOffset(range.getStartPosition()), + endOffset: transformer.getOffset(range.getEndPosition()), + text: e.text + }); + }); + + offsetEdits.sort((a, b) => b.startOffset - a.startOffset); + + for (const edit of offsetEdits) { + text = text.substring(0, edit.startOffset) + edit.text + text.substring(edit.endOffset); + } + + return text; +} + +class PositionOffsetTransformer { + private readonly lineStartOffsetByLineIdx: number[]; + + constructor(text: string) { + this.lineStartOffsetByLineIdx = []; + this.lineStartOffsetByLineIdx.push(0); + for (let i = 0; i < text.length; i++) { + if (text.charAt(i) === '\n') { + this.lineStartOffsetByLineIdx.push(i + 1); + } + } + this.lineStartOffsetByLineIdx.push(text.length + 1); + } + + getOffset(position: Position): number { + const nextLineOffset = this.lineStartOffsetByLineIdx[position.lineNumber]; + return Math.min(this.lineStartOffsetByLineIdx[position.lineNumber - 1] + position.column - 1, nextLineOffset - 1); + } +} diff --git a/src/vs/editor/test/common/services/testEditorWorkerService.ts b/src/vs/editor/test/common/services/testEditorWorkerService.ts index a0fb8772d7f..640a3e4b596 100644 --- a/src/vs/editor/test/common/services/testEditorWorkerService.ts +++ b/src/vs/editor/test/common/services/testEditorWorkerService.ts @@ -20,6 +20,7 @@ export class TestEditorWorkerService implements IEditorWorkerService { canComputeDirtyDiff(original: URI, modified: URI): boolean { return false; } async computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise { return null; } async computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise { return undefined; } + async computeHumanReadableDiff(resource: URI, edits: TextEdit[] | null | undefined): Promise { return undefined; } canComputeWordRanges(resource: URI): boolean { return false; } async computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return null; } canNavigateValueSet(resource: URI): boolean { return false; } diff --git a/src/vs/editor/test/common/testTextModel.ts b/src/vs/editor/test/common/testTextModel.ts index f513fa490ca..cdab452aa9c 100644 --- a/src/vs/editor/test/common/testTextModel.ts +++ b/src/vs/editor/test/common/testTextModel.ts @@ -32,6 +32,8 @@ import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry' import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { mock } from 'vs/base/test/common/mock'; class TestTextModel extends TextModel { public registerDisposable(disposable: IDisposable): void { @@ -96,6 +98,10 @@ export function createModelServices(disposables: DisposableStore, services: Serv [ITextResourcePropertiesService, TestTextResourcePropertiesService], [IThemeService, TestThemeService], [ILogService, NullLogService], + [IEnvironmentService, new class extends mock() { + override isBuilt: boolean = true; + override isExtensionDevelopment: boolean = false; + }], [ILanguageFeatureDebounceService, LanguageFeatureDebounceService], [ILanguageFeaturesService, LanguageFeaturesService], [IModelService, ModelService], diff --git a/src/vs/editor/test/node/diffing/diffing.test.ts b/src/vs/editor/test/node/diffing/diffingFixture.test.ts similarity index 67% rename from src/vs/editor/test/node/diffing/diffing.test.ts rename to src/vs/editor/test/node/diffing/diffingFixture.test.ts index eafdd623421..a66961863a3 100644 --- a/src/vs/editor/test/node/diffing/diffing.test.ts +++ b/src/vs/editor/test/node/diffing/diffingFixture.test.ts @@ -4,45 +4,68 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { readdirSync, readFileSync, existsSync, writeFileSync, rmSync } from 'fs'; +import { existsSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'fs'; import { join, resolve } from 'path'; +import { setUnexpectedErrorHandler } from 'vs/base/common/errors'; import { FileAccess } from 'vs/base/common/network'; +import { LineRangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; import { SmartLinesDiffComputer } from 'vs/editor/common/diff/smartLinesDiffComputer'; import { StandardLinesDiffComputer } from 'vs/editor/common/diff/standardLinesDiffComputer'; suite('diff fixtures', () => { + setup(() => { + setUnexpectedErrorHandler(e => { + throw e; + }); + }); + + const fixturesOutDir = FileAccess.asFileUri('vs/editor/test/node/diffing/fixtures').fsPath; // We want the dir in src, so we can directly update the source files if they disagree and create invalid files to capture the previous state. // This makes it very easy to update the fixtures. const fixturesSrcDir = resolve(fixturesOutDir).replaceAll('\\', '/').replace('/out/vs/editor/', '/src/vs/editor/'); const folders = readdirSync(fixturesSrcDir); - function runTest(folder: string, diffingAlgoName: 'smart' | 'experimental') { + function runTest(folder: string, diffingAlgoName: 'legacy' | 'advanced') { const folderPath = join(fixturesSrcDir, folder); const files = readdirSync(folderPath); const firstFileName = files.find(f => f.startsWith('1.'))!; const secondFileName = files.find(f => f.startsWith('2.'))!; - const firstContentLines = readFileSync(join(folderPath, firstFileName), 'utf8').split(/\r\n|\r|\n/); - const secondContentLines = readFileSync(join(folderPath, secondFileName), 'utf8').split(/\r\n|\r|\n/); + const firstContent = readFileSync(join(folderPath, firstFileName), 'utf8').replaceAll('\r\n', '\n').replaceAll('\r', '\n'); + const firstContentLines = firstContent.split(/\n/); + const secondContent = readFileSync(join(folderPath, secondFileName), 'utf8').replaceAll('\r\n', '\n').replaceAll('\r', '\n'); + const secondContentLines = secondContent.split(/\n/); - const diffingAlgo = diffingAlgoName === 'smart' ? new SmartLinesDiffComputer() : new StandardLinesDiffComputer(); + const diffingAlgo = diffingAlgoName === 'legacy' ? new SmartLinesDiffComputer() : new StandardLinesDiffComputer(); - const diff = diffingAlgo.computeDiff(firstContentLines, secondContentLines, { ignoreTrimWhitespace: false, maxComputationTimeMs: Number.MAX_SAFE_INTEGER }); + const diff = diffingAlgo.computeDiff(firstContentLines, secondContentLines, { ignoreTrimWhitespace: false, maxComputationTimeMs: Number.MAX_SAFE_INTEGER, computeMoves: false }); - const actualDiffingResult: DiffingResult = { - originalFileName: `./${firstFileName}`, - modifiedFileName: `./${secondFileName}`, - diffs: diff.changes.map(c => ({ + function getDiffs(changes: readonly LineRangeMapping[]): IDetailedDiff[] { + return changes.map(c => ({ originalRange: c.originalRange.toString(), modifiedRange: c.modifiedRange.toString(), innerChanges: c.innerChanges?.map(c => ({ originalRange: c.originalRange.toString(), modifiedRange: c.modifiedRange.toString(), })) || null + })); + } + + const actualDiffingResult: DiffingResult = { + original: { content: firstContent, fileName: `./${firstFileName}` }, + modified: { content: secondContent, fileName: `./${secondFileName}` }, + diffs: getDiffs(diff.changes), + moves: diff.moves.map(v => ({ + originalRange: v.lineRangeMapping.originalRange.toString(), + modifiedRange: v.lineRangeMapping.modifiedRange.toString(), + changes: getDiffs(v.changes), })) }; + if (actualDiffingResult.moves?.length === 0) { + delete actualDiffingResult.moves; + } const expectedFilePath = join(folderPath, `${diffingAlgoName}.expected.diff.json`); const invalidFilePath = join(folderPath, `${diffingAlgoName}.invalid.diff.json`); @@ -88,8 +111,12 @@ suite('diff fixtures', () => { } } + test(`test`, () => { + runTest('issue-185779', 'advanced'); + }); + for (const folder of folders) { - for (const diffingAlgoName of ['smart', 'experimental'] as const) { + for (const diffingAlgoName of ['legacy', 'advanced'] as const) { test(`${folder}-${diffingAlgoName}`, () => { runTest(folder, diffingAlgoName); }); @@ -98,10 +125,11 @@ suite('diff fixtures', () => { }); interface DiffingResult { - originalFileName: string; - modifiedFileName: string; + original: { content: string; fileName: string }; + modified: { content: string; fileName: string }; diffs: IDetailedDiff[]; + moves?: IMoveInfo[]; } interface IDetailedDiff { @@ -114,3 +142,10 @@ interface IDiff { originalRange: string; // [1,18 -> 1,19] modifiedRange: string; // [1,18 -> 1,19] } + +interface IMoveInfo { + originalRange: string; // [startLineNumber, endLineNumberExclusive) + modifiedRange: string; // [startLineNumber, endLineNumberExclusive) + + changes?: IDetailedDiff[]; +} diff --git a/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/advanced.expected.diff.json new file mode 100644 index 00000000000..18845aa6ccd --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/advanced.expected.diff.json @@ -0,0 +1,132 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CompareResult } from 'vs/base/common/arrays';\nimport { autorun, derived } from 'vs/base/common/observable';\nimport { IModelDeltaDecoration, MinimapPosition, OverviewRulerLane } from 'vs/editor/common/model';\nimport { localize } from 'vs/nls';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';\nimport { applyObservableDecorations, join } from 'vs/workbench/contrib/mergeEditor/browser/utils';\nimport { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { CodeEditorView } from './codeEditorView';\n\nexport class ResultCodeEditorView extends CodeEditorView {\n\tprivate readonly decorations = derived('result.decorations', reader => {\n\t\tconst viewModel = this.viewModel.read(reader);\n\t\tif (!viewModel) {\n\t\t\treturn [];\n\t\t}\n\t\tconst model = viewModel.model;\n\t\tconst result = new Array();\n\n\t\tconst baseRangeWithStoreAndTouchingDiffs = join(\n\t\t\tmodel.modifiedBaseRanges.read(reader),\n\t\t\tmodel.resultDiffs.read(reader),\n\t\t\t(baseRange, diff) => baseRange.baseRange.touches(diff.inputRange)\n\t\t\t\t? CompareResult.neitherLessOrGreaterThan\n\t\t\t\t: LineRange.compareByStart(\n\t\t\t\t\tbaseRange.baseRange,\n\t\t\t\t\tdiff.inputRange\n\t\t\t\t)\n\t\t);\n\n\t\tconst activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader);\n\n\t\tfor (const m of baseRangeWithStoreAndTouchingDiffs) {\n\t\t\tconst modifiedBaseRange = m.left;\n\n\t\t\tif (modifiedBaseRange) {\n\t\t\t\tconst range = model.getRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRange();\n\t\t\t\tif (range) {\n\t\t\t\t\tconst blockClassNames = ['merge-editor-block'];\n\t\t\t\t\tconst isHandled = model.isHandled(modifiedBaseRange).read(reader);\n\t\t\t\t\tif (isHandled) {\n\t\t\t\t\t\tblockClassNames.push('handled');\n\t\t\t\t\t}\n\t\t\t\t\tif (modifiedBaseRange === activeModifiedBaseRange) {\n\t\t\t\t\t\tblockClassNames.push('focused');\n\t\t\t\t\t}\n\t\t\t\t\tblockClassNames.push('result');\n\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\trange,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t\tblockClassName: blockClassNames.join(' '),\n\t\t\t\t\t\t\tdescription: 'Result Diff',\n\t\t\t\t\t\t\tminimap: {\n\t\t\t\t\t\t\t\tposition: MinimapPosition.Gutter,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toverviewRuler: {\n\t\t\t\t\t\t\t\tposition: OverviewRulerLane.Center,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const diff of m.rights) {\n\t\t\t\tconst range = diff.outputRange.toInclusiveRange();\n\t\t\t\tif (range) {\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\trange,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tclassName: `merge-editor-diff result`,\n\t\t\t\t\t\t\tdescription: 'Merge Editor',\n\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (diff.rangeMappings) {\n\t\t\t\t\tfor (const d of diff.rangeMappings) {\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\trange: d.outputRange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tclassName: `merge-editor-diff-word result`,\n\t\t\t\t\t\t\t\tdescription: 'Merge Editor'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t});\n\n\tconstructor(\n\t\t@IInstantiationService instantiationService: IInstantiationService\n\t) {\n\t\tsuper(instantiationService);\n\n\t\tthis._register(applyObservableDecorations(this.editor, this.decorations));\n\n\n\t\tthis._register(autorun('update remainingConflicts label', reader => {\n\t\t\tconst model = this.model.read(reader);\n\t\t\tif (!model) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst count = model.unhandledConflictsCount.read(reader);\n\n\t\t\tthis.htmlElements.detail.innerText = count === 1\n\t\t\t\t? localize(\n\t\t\t\t\t'mergeEditor.remainingConflicts',\n\t\t\t\t\t'{0} Conflict Remaining',\n\t\t\t\t\tcount\n\t\t\t\t)\n\t\t\t\t: localize(\n\t\t\t\t\t'mergeEditor.remainingConflict',\n\t\t\t\t\t'{0} Conflicts Remaining ',\n\t\t\t\t\tcount\n\t\t\t\t);\n\n\t\t}));\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CompareResult } from 'vs/base/common/arrays';\nimport { autorun, derived } from 'vs/base/common/observable';\nimport { IModelDeltaDecoration, MinimapPosition, OverviewRulerLane } from 'vs/editor/common/model';\nimport { localize } from 'vs/nls';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';\nimport { applyObservableDecorations, join } from 'vs/workbench/contrib/mergeEditor/browser/utils';\nimport { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { CodeEditorView } from './codeEditorView';\n\nexport class ResultCodeEditorView extends CodeEditorView {\n\tprivate readonly decorations = derived('result.decorations', reader => {\n\t\tconst viewModel = this.viewModel.read(reader);\n\t\tif (!viewModel) {\n\t\t\treturn [];\n\t\t}\n\t\tconst model = viewModel.model;\n\t\tconst result = new Array();\n\n\t\tconst baseRangeWithStoreAndTouchingDiffs = join(\n\t\t\tmodel.modifiedBaseRanges.read(reader),\n\t\t\tmodel.resultDiffs.read(reader),\n\t\t\t(baseRange, diff) => baseRange.baseRange.touches(diff.inputRange)\n\t\t\t\t? CompareResult.neitherLessOrGreaterThan\n\t\t\t\t: LineRange.compareByStart(\n\t\t\t\t\tbaseRange.baseRange,\n\t\t\t\t\tdiff.inputRange\n\t\t\t\t)\n\t\t);\n\n\t\tconst activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader);\n\n\t\tfor (const m of baseRangeWithStoreAndTouchingDiffs) {\n\t\t\tconst modifiedBaseRange = m.left;\n\n\t\t\tif (modifiedBaseRange) {\n\t\t\t\tconst range = model.getRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRange();\n\t\t\t\tif (range) {\n\t\t\t\t\tconst blockClassNames = ['merge-editor-block'];\n\t\t\t\t\tconst isHandled = model.isHandled(modifiedBaseRange).read(reader);\n\t\t\t\t\tif (isHandled) {\n\t\t\t\t\t\tblockClassNames.push('handled');\n\t\t\t\t\t}\n\t\t\t\t\tif (modifiedBaseRange === activeModifiedBaseRange) {\n\t\t\t\t\t\tblockClassNames.push('focused');\n\t\t\t\t\t}\n\t\t\t\t\tblockClassNames.push('result');\n\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\trange,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t\tblockClassName: blockClassNames.join(' '),\n\t\t\t\t\t\t\tdescription: 'Result Diff',\n\t\t\t\t\t\t\tminimap: {\n\t\t\t\t\t\t\t\tposition: MinimapPosition.Gutter,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toverviewRuler: {\n\t\t\t\t\t\t\t\tposition: OverviewRulerLane.Center,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tif (!modifiedBaseRange || modifiedBaseRange.isConflicting) {\n\t\t\t\tfor (const diff of m.rights) {\n\t\t\t\t\tconst range = diff.outputRange.toInclusiveRange();\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tclassName: `merge-editor-diff result`,\n\t\t\t\t\t\t\t\tdescription: 'Merge Editor',\n\t\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (diff.rangeMappings) {\n\t\t\t\t\t\tfor (const d of diff.rangeMappings) {\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\trange: d.outputRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tclassName: `merge-editor-diff-word result`,\n\t\t\t\t\t\t\t\t\tdescription: 'Merge Editor'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t});\n\n\tconstructor(\n\t\t@IInstantiationService instantiationService: IInstantiationService\n\t) {\n\t\tsuper(instantiationService);\n\n\t\tthis._register(applyObservableDecorations(this.editor, this.decorations));\n\n\n\t\tthis._register(autorun('update remainingConflicts label', reader => {\n\t\t\tconst model = this.model.read(reader);\n\t\t\tif (!model) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst count = model.unhandledConflictsCount.read(reader);\n\n\t\t\tthis.htmlElements.detail.innerText = count === 1\n\t\t\t\t? localize(\n\t\t\t\t\t'mergeEditor.remainingConflicts',\n\t\t\t\t\t'{0} Conflict Remaining',\n\t\t\t\t\tcount\n\t\t\t\t)\n\t\t\t\t: localize(\n\t\t\t\t\t'mergeEditor.remainingConflict',\n\t\t\t\t\t'{0} Conflicts Remaining ',\n\t\t\t\t\tcount\n\t\t\t\t);\n\n\t\t}));\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[73,85)", + "modifiedRange": "[73,87)", + "innerChanges": [ + { + "originalRange": "[73,1 -> 73,1]", + "modifiedRange": "[73,1 -> 75,1]" + }, + { + "originalRange": "[73,1 -> 73,1]", + "modifiedRange": "[75,1 -> 75,2]" + }, + { + "originalRange": "[74,1 -> 74,1]", + "modifiedRange": "[76,1 -> 76,2]" + }, + { + "originalRange": "[75,1 -> 75,1]", + "modifiedRange": "[77,1 -> 77,2]" + }, + { + "originalRange": "[76,1 -> 76,1]", + "modifiedRange": "[78,1 -> 78,2]" + }, + { + "originalRange": "[77,1 -> 77,1]", + "modifiedRange": "[79,1 -> 79,2]" + }, + { + "originalRange": "[78,1 -> 78,1]", + "modifiedRange": "[80,1 -> 80,2]" + }, + { + "originalRange": "[79,1 -> 79,1]", + "modifiedRange": "[81,1 -> 81,2]" + }, + { + "originalRange": "[80,1 -> 80,1]", + "modifiedRange": "[82,1 -> 82,2]" + }, + { + "originalRange": "[81,1 -> 81,1]", + "modifiedRange": "[83,1 -> 83,2]" + }, + { + "originalRange": "[82,1 -> 82,1]", + "modifiedRange": "[84,1 -> 84,2]" + }, + { + "originalRange": "[83,1 -> 83,1]", + "modifiedRange": "[85,1 -> 85,2]" + }, + { + "originalRange": "[84,1 -> 84,1]", + "modifiedRange": "[86,1 -> 86,2]" + } + ] + }, + { + "originalRange": "[86,99)", + "modifiedRange": "[88,102)", + "innerChanges": [ + { + "originalRange": "[86,1 -> 86,1]", + "modifiedRange": "[88,1 -> 88,2]" + }, + { + "originalRange": "[87,1 -> 87,1]", + "modifiedRange": "[89,1 -> 89,2]" + }, + { + "originalRange": "[88,1 -> 88,1]", + "modifiedRange": "[90,1 -> 90,2]" + }, + { + "originalRange": "[89,1 -> 89,1]", + "modifiedRange": "[91,1 -> 91,2]" + }, + { + "originalRange": "[90,1 -> 90,1]", + "modifiedRange": "[92,1 -> 92,2]" + }, + { + "originalRange": "[91,1 -> 91,1]", + "modifiedRange": "[93,1 -> 93,2]" + }, + { + "originalRange": "[92,1 -> 92,1]", + "modifiedRange": "[94,1 -> 94,2]" + }, + { + "originalRange": "[93,1 -> 93,1]", + "modifiedRange": "[95,1 -> 95,2]" + }, + { + "originalRange": "[94,1 -> 94,1]", + "modifiedRange": "[96,1 -> 96,2]" + }, + { + "originalRange": "[95,1 -> 95,1]", + "modifiedRange": "[97,1 -> 97,2]" + }, + { + "originalRange": "[96,1 -> 96,1]", + "modifiedRange": "[98,1 -> 98,2]" + }, + { + "originalRange": "[97,1 -> 97,1]", + "modifiedRange": "[99,1 -> 99,2]" + }, + { + "originalRange": "[98,1 -> 98,1]", + "modifiedRange": "[100,1 -> 100,2]" + }, + { + "originalRange": "[99,1 -> 99,1]", + "modifiedRange": "[101,1 -> 102,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/experimental.expected.diff.json deleted file mode 100644 index c1238378e94..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/experimental.expected.diff.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[73,85)", - "modifiedRange": "[73,87)", - "innerChanges": [ - { - "originalRange": "[73,1 -> 73,1]", - "modifiedRange": "[73,1 -> 75,1]" - }, - { - "originalRange": "[73,1 -> 73,1]", - "modifiedRange": "[75,1 -> 75,2]" - }, - { - "originalRange": "[74,1 -> 74,1]", - "modifiedRange": "[76,1 -> 76,2]" - }, - { - "originalRange": "[75,1 -> 75,1]", - "modifiedRange": "[77,1 -> 77,2]" - }, - { - "originalRange": "[76,1 -> 76,1]", - "modifiedRange": "[78,1 -> 78,2]" - }, - { - "originalRange": "[77,1 -> 77,1]", - "modifiedRange": "[79,1 -> 79,2]" - }, - { - "originalRange": "[78,1 -> 78,1]", - "modifiedRange": "[80,1 -> 80,2]" - }, - { - "originalRange": "[79,1 -> 79,1]", - "modifiedRange": "[81,1 -> 81,2]" - }, - { - "originalRange": "[80,1 -> 80,1]", - "modifiedRange": "[82,1 -> 82,2]" - }, - { - "originalRange": "[81,1 -> 81,1]", - "modifiedRange": "[83,1 -> 83,2]" - }, - { - "originalRange": "[82,1 -> 82,1]", - "modifiedRange": "[84,1 -> 84,2]" - }, - { - "originalRange": "[83,1 -> 83,1]", - "modifiedRange": "[85,1 -> 85,2]" - }, - { - "originalRange": "[84,1 -> 84,1]", - "modifiedRange": "[86,1 -> 86,2]" - } - ] - }, - { - "originalRange": "[86,99)", - "modifiedRange": "[88,102)", - "innerChanges": [ - { - "originalRange": "[86,1 -> 86,1]", - "modifiedRange": "[88,1 -> 88,2]" - }, - { - "originalRange": "[87,1 -> 87,1]", - "modifiedRange": "[89,1 -> 89,2]" - }, - { - "originalRange": "[88,1 -> 88,1]", - "modifiedRange": "[90,1 -> 90,2]" - }, - { - "originalRange": "[89,1 -> 89,1]", - "modifiedRange": "[91,1 -> 91,2]" - }, - { - "originalRange": "[90,1 -> 90,1]", - "modifiedRange": "[92,1 -> 92,2]" - }, - { - "originalRange": "[91,1 -> 91,1]", - "modifiedRange": "[93,1 -> 93,2]" - }, - { - "originalRange": "[92,1 -> 92,1]", - "modifiedRange": "[94,1 -> 94,2]" - }, - { - "originalRange": "[93,1 -> 93,1]", - "modifiedRange": "[95,1 -> 95,2]" - }, - { - "originalRange": "[94,1 -> 94,1]", - "modifiedRange": "[96,1 -> 96,2]" - }, - { - "originalRange": "[95,1 -> 95,1]", - "modifiedRange": "[97,1 -> 97,2]" - }, - { - "originalRange": "[96,1 -> 96,1]", - "modifiedRange": "[98,1 -> 98,2]" - }, - { - "originalRange": "[97,1 -> 97,1]", - "modifiedRange": "[99,1 -> 99,2]" - }, - { - "originalRange": "[98,1 -> 98,1]", - "modifiedRange": "[100,1 -> 100,2]" - }, - { - "originalRange": "[99,1 -> 99,1]", - "modifiedRange": "[101,1 -> 102,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/legacy.expected.diff.json new file mode 100644 index 00000000000..79632981113 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CompareResult } from 'vs/base/common/arrays';\nimport { autorun, derived } from 'vs/base/common/observable';\nimport { IModelDeltaDecoration, MinimapPosition, OverviewRulerLane } from 'vs/editor/common/model';\nimport { localize } from 'vs/nls';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';\nimport { applyObservableDecorations, join } from 'vs/workbench/contrib/mergeEditor/browser/utils';\nimport { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { CodeEditorView } from './codeEditorView';\n\nexport class ResultCodeEditorView extends CodeEditorView {\n\tprivate readonly decorations = derived('result.decorations', reader => {\n\t\tconst viewModel = this.viewModel.read(reader);\n\t\tif (!viewModel) {\n\t\t\treturn [];\n\t\t}\n\t\tconst model = viewModel.model;\n\t\tconst result = new Array();\n\n\t\tconst baseRangeWithStoreAndTouchingDiffs = join(\n\t\t\tmodel.modifiedBaseRanges.read(reader),\n\t\t\tmodel.resultDiffs.read(reader),\n\t\t\t(baseRange, diff) => baseRange.baseRange.touches(diff.inputRange)\n\t\t\t\t? CompareResult.neitherLessOrGreaterThan\n\t\t\t\t: LineRange.compareByStart(\n\t\t\t\t\tbaseRange.baseRange,\n\t\t\t\t\tdiff.inputRange\n\t\t\t\t)\n\t\t);\n\n\t\tconst activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader);\n\n\t\tfor (const m of baseRangeWithStoreAndTouchingDiffs) {\n\t\t\tconst modifiedBaseRange = m.left;\n\n\t\t\tif (modifiedBaseRange) {\n\t\t\t\tconst range = model.getRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRange();\n\t\t\t\tif (range) {\n\t\t\t\t\tconst blockClassNames = ['merge-editor-block'];\n\t\t\t\t\tconst isHandled = model.isHandled(modifiedBaseRange).read(reader);\n\t\t\t\t\tif (isHandled) {\n\t\t\t\t\t\tblockClassNames.push('handled');\n\t\t\t\t\t}\n\t\t\t\t\tif (modifiedBaseRange === activeModifiedBaseRange) {\n\t\t\t\t\t\tblockClassNames.push('focused');\n\t\t\t\t\t}\n\t\t\t\t\tblockClassNames.push('result');\n\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\trange,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t\tblockClassName: blockClassNames.join(' '),\n\t\t\t\t\t\t\tdescription: 'Result Diff',\n\t\t\t\t\t\t\tminimap: {\n\t\t\t\t\t\t\t\tposition: MinimapPosition.Gutter,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toverviewRuler: {\n\t\t\t\t\t\t\t\tposition: OverviewRulerLane.Center,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const diff of m.rights) {\n\t\t\t\tconst range = diff.outputRange.toInclusiveRange();\n\t\t\t\tif (range) {\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\trange,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tclassName: `merge-editor-diff result`,\n\t\t\t\t\t\t\tdescription: 'Merge Editor',\n\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (diff.rangeMappings) {\n\t\t\t\t\tfor (const d of diff.rangeMappings) {\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\trange: d.outputRange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tclassName: `merge-editor-diff-word result`,\n\t\t\t\t\t\t\t\tdescription: 'Merge Editor'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t});\n\n\tconstructor(\n\t\t@IInstantiationService instantiationService: IInstantiationService\n\t) {\n\t\tsuper(instantiationService);\n\n\t\tthis._register(applyObservableDecorations(this.editor, this.decorations));\n\n\n\t\tthis._register(autorun('update remainingConflicts label', reader => {\n\t\t\tconst model = this.model.read(reader);\n\t\t\tif (!model) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst count = model.unhandledConflictsCount.read(reader);\n\n\t\t\tthis.htmlElements.detail.innerText = count === 1\n\t\t\t\t? localize(\n\t\t\t\t\t'mergeEditor.remainingConflicts',\n\t\t\t\t\t'{0} Conflict Remaining',\n\t\t\t\t\tcount\n\t\t\t\t)\n\t\t\t\t: localize(\n\t\t\t\t\t'mergeEditor.remainingConflict',\n\t\t\t\t\t'{0} Conflicts Remaining ',\n\t\t\t\t\tcount\n\t\t\t\t);\n\n\t\t}));\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CompareResult } from 'vs/base/common/arrays';\nimport { autorun, derived } from 'vs/base/common/observable';\nimport { IModelDeltaDecoration, MinimapPosition, OverviewRulerLane } from 'vs/editor/common/model';\nimport { localize } from 'vs/nls';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';\nimport { applyObservableDecorations, join } from 'vs/workbench/contrib/mergeEditor/browser/utils';\nimport { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { CodeEditorView } from './codeEditorView';\n\nexport class ResultCodeEditorView extends CodeEditorView {\n\tprivate readonly decorations = derived('result.decorations', reader => {\n\t\tconst viewModel = this.viewModel.read(reader);\n\t\tif (!viewModel) {\n\t\t\treturn [];\n\t\t}\n\t\tconst model = viewModel.model;\n\t\tconst result = new Array();\n\n\t\tconst baseRangeWithStoreAndTouchingDiffs = join(\n\t\t\tmodel.modifiedBaseRanges.read(reader),\n\t\t\tmodel.resultDiffs.read(reader),\n\t\t\t(baseRange, diff) => baseRange.baseRange.touches(diff.inputRange)\n\t\t\t\t? CompareResult.neitherLessOrGreaterThan\n\t\t\t\t: LineRange.compareByStart(\n\t\t\t\t\tbaseRange.baseRange,\n\t\t\t\t\tdiff.inputRange\n\t\t\t\t)\n\t\t);\n\n\t\tconst activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader);\n\n\t\tfor (const m of baseRangeWithStoreAndTouchingDiffs) {\n\t\t\tconst modifiedBaseRange = m.left;\n\n\t\t\tif (modifiedBaseRange) {\n\t\t\t\tconst range = model.getRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRange();\n\t\t\t\tif (range) {\n\t\t\t\t\tconst blockClassNames = ['merge-editor-block'];\n\t\t\t\t\tconst isHandled = model.isHandled(modifiedBaseRange).read(reader);\n\t\t\t\t\tif (isHandled) {\n\t\t\t\t\t\tblockClassNames.push('handled');\n\t\t\t\t\t}\n\t\t\t\t\tif (modifiedBaseRange === activeModifiedBaseRange) {\n\t\t\t\t\t\tblockClassNames.push('focused');\n\t\t\t\t\t}\n\t\t\t\t\tblockClassNames.push('result');\n\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\trange,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t\tblockClassName: blockClassNames.join(' '),\n\t\t\t\t\t\t\tdescription: 'Result Diff',\n\t\t\t\t\t\t\tminimap: {\n\t\t\t\t\t\t\t\tposition: MinimapPosition.Gutter,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toverviewRuler: {\n\t\t\t\t\t\t\t\tposition: OverviewRulerLane.Center,\n\t\t\t\t\t\t\t\tcolor: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tif (!modifiedBaseRange || modifiedBaseRange.isConflicting) {\n\t\t\t\tfor (const diff of m.rights) {\n\t\t\t\t\tconst range = diff.outputRange.toInclusiveRange();\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tclassName: `merge-editor-diff result`,\n\t\t\t\t\t\t\t\tdescription: 'Merge Editor',\n\t\t\t\t\t\t\t\tisWholeLine: true,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (diff.rangeMappings) {\n\t\t\t\t\t\tfor (const d of diff.rangeMappings) {\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\trange: d.outputRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tclassName: `merge-editor-diff-word result`,\n\t\t\t\t\t\t\t\t\tdescription: 'Merge Editor'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t});\n\n\tconstructor(\n\t\t@IInstantiationService instantiationService: IInstantiationService\n\t) {\n\t\tsuper(instantiationService);\n\n\t\tthis._register(applyObservableDecorations(this.editor, this.decorations));\n\n\n\t\tthis._register(autorun('update remainingConflicts label', reader => {\n\t\t\tconst model = this.model.read(reader);\n\t\t\tif (!model) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst count = model.unhandledConflictsCount.read(reader);\n\n\t\t\tthis.htmlElements.detail.innerText = count === 1\n\t\t\t\t? localize(\n\t\t\t\t\t'mergeEditor.remainingConflicts',\n\t\t\t\t\t'{0} Conflict Remaining',\n\t\t\t\t\tcount\n\t\t\t\t)\n\t\t\t\t: localize(\n\t\t\t\t\t'mergeEditor.remainingConflict',\n\t\t\t\t\t'{0} Conflicts Remaining ',\n\t\t\t\t\tcount\n\t\t\t\t);\n\n\t\t}));\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[73,85)", + "modifiedRange": "[73,87)", + "innerChanges": null + }, + { + "originalRange": "[86,95)", + "modifiedRange": "[88,98)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/smart.expected.diff.json deleted file mode 100644 index 17dd9daa899..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/bracket-aligning/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[73,85)", - "modifiedRange": "[73,87)", - "innerChanges": null - }, - { - "originalRange": "[86,95)", - "modifiedRange": "[88,98)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/class-replacement/1.tst b/src/vs/editor/test/node/diffing/fixtures/class-replacement/1.tst new file mode 100644 index 00000000000..0a33e795f61 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/class-replacement/1.tst @@ -0,0 +1,92 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as arrays from 'vs/base/common/arrays'; +import { IdleDeadline, runWhenIdle } from 'vs/base/common/async'; +import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; +import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { setTimeout0 } from 'vs/base/common/platform'; +import { StopWatch } from 'vs/base/common/stopwatch'; +import { countEOL } from 'vs/editor/common/core/eolCounter'; +import { Position } from 'vs/editor/common/core/position'; +import { IRange } from 'vs/editor/common/core/range'; +import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; +import { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; +import { ITextModel } from 'vs/editor/common/model'; +import { TextModel } from 'vs/editor/common/model/textModel'; +import { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart'; +import { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents'; +import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; +import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; + +const enum Constants { + CHEAP_TOKENIZATION_LENGTH_LIMIT = 2048 +} + +/** + * An array that avoids being sparse by always + * filling up unused indices with a default value. + */ +export class ContiguousGrowingArray { + + private _store: T[] = []; + + constructor( + private readonly _default: T + ) { } + + public get(index: number): T { + if (index < this._store.length) { + return this._store[index]; + } + return this._default; + } + + public set(index: number, value: T): void { + while (index >= this._store.length) { + this._store[this._store.length] = this._default; + } + this._store[index] = value; + } + + // TODO have `replace` instead of `delete` and `insert` + public delete(deleteIndex: number, deleteCount: number): void { + if (deleteCount === 0 || deleteIndex >= this._store.length) { + return; + } + this._store.splice(deleteIndex, deleteCount); + } + + public insert(insertIndex: number, insertCount: number): void { + if (insertCount === 0 || insertIndex >= this._store.length) { + return; + } + const arr: T[] = []; + for (let i = 0; i < insertCount; i++) { + arr[i] = this._default; + } + this._store = arrays.arrayInsert(this._store, insertIndex, arr); + } +} + +/** + * Stores the states at the start of each line and keeps track of which lines + * must be re-tokenized. Also uses state equality to quickly validate lines + * that don't need to be re-tokenized. + * + * For example, when typing on a line, the line gets marked as needing to be tokenized. + * Once the line is tokenized, the end state is checked for equality against the begin + * state of the next line. If the states are equal, tokenization doesn't need to run + * again over the rest of the file. If the states are not equal, the next line gets marked + * as needing to be tokenized. + */ +export class TokenizationStateStore { + requestTokens(startLineNumber: number, endLineNumberExclusive: number): void { + for (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) { + this._stateStore.markMustBeTokenized(lineNumber - 1); + } + } +} diff --git a/src/vs/editor/test/node/diffing/fixtures/class-replacement/2.tst b/src/vs/editor/test/node/diffing/fixtures/class-replacement/2.tst new file mode 100644 index 00000000000..7dce96cdbae --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/class-replacement/2.tst @@ -0,0 +1,60 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as arrays from 'vs/base/common/arrays'; +import { IdleDeadline, runWhenIdle } from 'vs/base/common/async'; +import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; +import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { setTimeout0 } from 'vs/base/common/platform'; +import { StopWatch } from 'vs/base/common/stopwatch'; +import { countEOL } from 'vs/editor/common/core/eolCounter'; +import { Position } from 'vs/editor/common/core/position'; +import { IRange } from 'vs/editor/common/core/range'; +import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; +import { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; +import { ITextModel } from 'vs/editor/common/model'; +import { TextModel } from 'vs/editor/common/model/textModel'; +import { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart'; +import { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents'; +import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; +import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; + +const enum Constants { + CHEAP_TOKENIZATION_LENGTH_LIMIT = 2048 +} + +export class TokenizationStateStore2 { + public invalidateEndState(lineNumber: number): void; + + public getEndState(lineNumber: number): IState; + + public setEndState(lineNumber: number, state: IState): boolean { } + + public getFirstInvalidEndStateLineNumber(): number | undefined { + } + + public applyEdits(range: IRange, eolCount: number): void { + } +} + +/** + * Stores the states at the start of each line and keeps track of which lines + * must be re-tokenized. Also uses state equality to quickly validate lines + * that don't need to be re-tokenized. + * + * For example, when typing on a line, the line gets marked as needing to be tokenized. + * Once the line is tokenized, the end state is checked for equality against the begin + * state of the next line. If the states are equal, tokenization doesn't need to run + * again over the rest of the file. If the states are not equal, the next line gets marked + * as needing to be tokenized. + */ +export class TokenizationStateStore { + requestTokens(startLineNumber: number, endLineNumberExclusive: number): void { + for (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) { + this._stateStore.markMustBeTokenized(lineNumber - 1); + } + } +} diff --git a/src/vs/editor/test/node/diffing/fixtures/class-replacement/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/class-replacement/advanced.expected.diff.json new file mode 100644 index 00000000000..c6bc1333002 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/class-replacement/advanced.expected.diff.json @@ -0,0 +1,78 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 2048\n}\n\n/**\n * An array that avoids being sparse by always\n * filling up unused indices with a default value.\n */\nexport class ContiguousGrowingArray {\n\n\tprivate _store: T[] = [];\n\n\tconstructor(\n\t\tprivate readonly _default: T\n\t) { }\n\n\tpublic get(index: number): T {\n\t\tif (index < this._store.length) {\n\t\t\treturn this._store[index];\n\t\t}\n\t\treturn this._default;\n\t}\n\n\tpublic set(index: number, value: T): void {\n\t\twhile (index >= this._store.length) {\n\t\t\tthis._store[this._store.length] = this._default;\n\t\t}\n\t\tthis._store[index] = value;\n\t}\n\n\t// TODO have `replace` instead of `delete` and `insert`\n\tpublic delete(deleteIndex: number, deleteCount: number): void {\n\t\tif (deleteCount === 0 || deleteIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tthis._store.splice(deleteIndex, deleteCount);\n\t}\n\n\tpublic insert(insertIndex: number, insertCount: number): void {\n\t\tif (insertCount === 0 || insertIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst arr: T[] = [];\n\t\tfor (let i = 0; i < insertCount; i++) {\n\t\t\tarr[i] = this._default;\n\t\t}\n\t\tthis._store = arrays.arrayInsert(this._store, insertIndex, arr);\n\t}\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 2048\n}\n\nexport class TokenizationStateStore2 {\n\tpublic invalidateEndState(lineNumber: number): void;\n\n\tpublic getEndState(lineNumber: number): IState;\n\n\tpublic setEndState(lineNumber: number, state: IState): boolean { }\n\n\tpublic getFirstInvalidEndStateLineNumber(): number | undefined {\n\t}\n\n\tpublic applyEdits(range: IRange, eolCount: number): void {\n\t}\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[29,34)", + "modifiedRange": "[29,31)", + "innerChanges": [ + { + "originalRange": "[29,1 -> 33,1]", + "modifiedRange": "[29,1 -> 29,1]" + }, + { + "originalRange": "[33,14 -> 33,41]", + "modifiedRange": "[29,14 -> 30,54]" + } + ] + }, + { + "originalRange": "[35,36)", + "modifiedRange": "[32,33)", + "innerChanges": [ + { + "originalRange": "[35,2 -> 35,26]", + "modifiedRange": "[32,2 -> 32,48]" + } + ] + }, + { + "originalRange": "[37,40)", + "modifiedRange": "[34,35)", + "innerChanges": [ + { + "originalRange": "[37,2 -> 39,3]", + "modifiedRange": "[34,2 -> 34,64]" + } + ] + }, + { + "originalRange": "[41,46)", + "modifiedRange": "[36,37)", + "innerChanges": [ + { + "originalRange": "[41,9 -> 41,18]", + "modifiedRange": "[36,9 -> 36,44]" + }, + { + "originalRange": "[41,26 -> 42,34]", + "modifiedRange": "[36,52 -> 36,64]" + }, + { + "originalRange": "[43,1 -> 46,1]", + "modifiedRange": "[37,1 -> 37,1]" + } + ] + }, + { + "originalRange": "[48,72)", + "modifiedRange": "[39,40)", + "innerChanges": [ + { + "originalRange": "[48,9 -> 63,48]", + "modifiedRange": "[39,9 -> 39,43]" + }, + { + "originalRange": "[64,1 -> 72,1]", + "modifiedRange": "[40,1 -> 40,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/class-replacement/advanced.human.diff.json b/src/vs/editor/test/node/diffing/fixtures/class-replacement/advanced.human.diff.json new file mode 100644 index 00000000000..9faf4e61a98 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/class-replacement/advanced.human.diff.json @@ -0,0 +1,16 @@ +{ + "originalFileName": "./1.tst", + "modifiedFileName": "./2.tst", + "diffs": [ + { + "originalRange": "[29,74)", + "modifiedRange": "[29,42)", + "innerChanges": [ + { + "originalRange": "[29,1 -> 74,1]", + "modifiedRange": "[29,1 -> 42,1]" + } + ] + } + ] +} diff --git a/src/vs/editor/test/node/diffing/fixtures/class-replacement/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/class-replacement/legacy.expected.diff.json new file mode 100644 index 00000000000..ec12e5d7a02 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/class-replacement/legacy.expected.diff.json @@ -0,0 +1,73 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 2048\n}\n\n/**\n * An array that avoids being sparse by always\n * filling up unused indices with a default value.\n */\nexport class ContiguousGrowingArray {\n\n\tprivate _store: T[] = [];\n\n\tconstructor(\n\t\tprivate readonly _default: T\n\t) { }\n\n\tpublic get(index: number): T {\n\t\tif (index < this._store.length) {\n\t\t\treturn this._store[index];\n\t\t}\n\t\treturn this._default;\n\t}\n\n\tpublic set(index: number, value: T): void {\n\t\twhile (index >= this._store.length) {\n\t\t\tthis._store[this._store.length] = this._default;\n\t\t}\n\t\tthis._store[index] = value;\n\t}\n\n\t// TODO have `replace` instead of `delete` and `insert`\n\tpublic delete(deleteIndex: number, deleteCount: number): void {\n\t\tif (deleteCount === 0 || deleteIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tthis._store.splice(deleteIndex, deleteCount);\n\t}\n\n\tpublic insert(insertIndex: number, insertCount: number): void {\n\t\tif (insertCount === 0 || insertIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst arr: T[] = [];\n\t\tfor (let i = 0; i < insertCount; i++) {\n\t\t\tarr[i] = this._default;\n\t\t}\n\t\tthis._store = arrays.arrayInsert(this._store, insertIndex, arr);\n\t}\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 2048\n}\n\nexport class TokenizationStateStore2 {\n\tpublic invalidateEndState(lineNumber: number): void;\n\n\tpublic getEndState(lineNumber: number): IState;\n\n\tpublic setEndState(lineNumber: number, state: IState): boolean { }\n\n\tpublic getFirstInvalidEndStateLineNumber(): number | undefined {\n\t}\n\n\tpublic applyEdits(range: IRange, eolCount: number): void {\n\t}\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[29,34)", + "modifiedRange": "[29,31)", + "innerChanges": [ + { + "originalRange": "[29,1 -> 33,41]", + "modifiedRange": "[29,1 -> 30,54]" + } + ] + }, + { + "originalRange": "[35,36)", + "modifiedRange": "[32,33)", + "innerChanges": [ + { + "originalRange": "[35,3 -> 35,6]", + "modifiedRange": "[32,3 -> 32,17]" + }, + { + "originalRange": "[35,9 -> 35,26]", + "modifiedRange": "[32,20 -> 32,48]" + } + ] + }, + { + "originalRange": "[37,40)", + "modifiedRange": "[34,35)", + "innerChanges": [ + { + "originalRange": "[37,2 -> 38,7]", + "modifiedRange": "[34,2 -> 34,43]" + }, + { + "originalRange": "[38,10 -> 39,3]", + "modifiedRange": "[34,46 -> 34,64]" + } + ] + }, + { + "originalRange": "[41,46)", + "modifiedRange": "[36,37)", + "innerChanges": [ + { + "originalRange": "[41,12 -> 41,21]", + "modifiedRange": "[36,12 -> 36,37]" + }, + { + "originalRange": "[41,26 -> 41,26]", + "modifiedRange": "[36,42 -> 36,43]" + }, + { + "originalRange": "[41,29 -> 45,24]", + "modifiedRange": "[36,46 -> 36,66]" + } + ] + }, + { + "originalRange": "[48,72)", + "modifiedRange": "[39,40)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/deletion/1.tst b/src/vs/editor/test/node/diffing/fixtures/deletion/1.tst new file mode 100644 index 00000000000..67dec2f85b3 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/deletion/1.tst @@ -0,0 +1,29 @@ +import { Link, List, Separator, Stack } from '@fluentui/react'; +import { View } from '../../layout/layout'; + +export const OtherToolsView = () => { + return ( + + + + { + if (!item?.name) { + return + } + return
{item!.name}
+ }} + > +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/deletion/2.tst b/src/vs/editor/test/node/diffing/fixtures/deletion/2.tst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/vs/editor/test/node/diffing/fixtures/deletion/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/deletion/advanced.expected.diff.json new file mode 100644 index 00000000000..77b3553a99c --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/deletion/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "import { Link, List, Separator, Stack } from '@fluentui/react';\nimport { View } from '../../layout/layout';\n\nexport const OtherToolsView = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tif (!item?.name) {\n\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn
{item!.name}
\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,30)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,1 -> 29,64]", + "modifiedRange": "[1,1 -> 1,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/deletion/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/deletion/legacy.expected.diff.json new file mode 100644 index 00000000000..c114d7e583e --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/deletion/legacy.expected.diff.json @@ -0,0 +1,17 @@ +{ + "original": { + "content": "import { Link, List, Separator, Stack } from '@fluentui/react';\nimport { View } from '../../layout/layout';\n\nexport const OtherToolsView = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tif (!item?.name) {\n\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn
{item!.name}
\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,30)", + "modifiedRange": "[1,2)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/difficult-move/1.js b/src/vs/editor/test/node/diffing/fixtures/difficult-move/1.js new file mode 100644 index 00000000000..1435eb7b5f0 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/difficult-move/1.js @@ -0,0 +1,464 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +const gulp = require('gulp'); +const path = require('path'); +const es = require('event-stream'); +const util = require('./lib/util'); +const { getVersion } = require('./lib/getVersion'); +const task = require('./lib/task'); +const optimize = require('./lib/optimize'); +const product = require('../product.json'); +const rename = require('gulp-rename'); +const replace = require('gulp-replace'); +const filter = require('gulp-filter'); +const { getProductionDependencies } = require('./lib/dependencies'); +const vfs = require('vinyl-fs'); +const packageJson = require('../package.json'); +const flatmap = require('gulp-flatmap'); +const gunzip = require('gulp-gunzip'); +const File = require('vinyl'); +const fs = require('fs'); +const glob = require('glob'); +const { compileBuildTask } = require('./gulpfile.compile'); +const { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions'); +const { vscodeWebEntryPoints, vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web'); +const cp = require('child_process'); +const log = require('fancy-log'); + +const REPO_ROOT = path.dirname(__dirname); +const commit = getVersion(REPO_ROOT); +const BUILD_ROOT = path.dirname(REPO_ROOT); +const REMOTE_FOLDER = path.join(REPO_ROOT, 'remote'); + +// Targets + +const BUILD_TARGETS = [ + { platform: 'win32', arch: 'ia32' }, + { platform: 'win32', arch: 'x64' }, + { platform: 'darwin', arch: 'x64' }, + { platform: 'darwin', arch: 'arm64' }, + { platform: 'linux', arch: 'x64' }, + { platform: 'linux', arch: 'armhf' }, + { platform: 'linux', arch: 'arm64' }, + { platform: 'alpine', arch: 'arm64' }, + // legacy: we use to ship only one alpine so it was put in the arch, but now we ship + // multiple alpine images and moved to a better model (alpine as the platform) + { platform: 'linux', arch: 'alpine' }, +]; + +const serverResources = [ + + // Bootstrap + 'out-build/bootstrap.js', + 'out-build/bootstrap-fork.js', + 'out-build/bootstrap-amd.js', + 'out-build/bootstrap-node.js', + + // Performance + 'out-build/vs/base/common/performance.js', + + // Watcher + 'out-build/vs/platform/files/**/*.exe', + 'out-build/vs/platform/files/**/*.md', + + // Process monitor + 'out-build/vs/base/node/cpuUsage.sh', + 'out-build/vs/base/node/ps.sh', + + // Terminal shell integration + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish', + + '!**/test/**' +]; + +const serverWithWebResources = [ + + // Include all of server... + ...serverResources, + + // ...and all of web + ...vscodeWebResourceIncludes +]; + +const serverEntryPoints = [ + { + name: 'vs/server/node/server.main', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/server/node/server.cli', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/workbench/api/node/extensionHostProcess', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/platform/files/node/watcher/watcherMain', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/platform/terminal/node/ptyHostMain', + exclude: ['vs/css', 'vs/nls'] + } +]; + +const serverWithWebEntryPoints = [ + + // Include all of server + ...serverEntryPoints, + + // Include workbench web + ...vscodeWebEntryPoints +]; + +function getNodeVersion() { + const yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8'); + const nodeVersion = /^target "(.*)"$/m.exec(yarnrc)[1]; + const internalNodeVersion = /^ms_build_id "(.*)"$/m.exec(yarnrc)[1]; + return { nodeVersion, internalNodeVersion }; +} + +function getNodeChecksum(nodeVersion, platform, arch) { + let expectedName; + switch (platform) { + case 'win32': + expectedName = `win-${arch}/node.exe`; + break; + + case 'darwin': + case 'linux': + expectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`; + break; + + case 'alpine': + expectedName = `${platform}-${arch}/node`; + break; + } + + const nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8'); + for (const line of nodeJsChecksums.split('\n')) { + const [checksum, name] = line.split(/\s+/); + if (name === expectedName) { + return checksum; + } + } + return undefined; +} + +const { nodeVersion, internalNodeVersion } = getNodeVersion(); + +BUILD_TARGETS.forEach(({ platform, arch }) => { + gulp.task(task.define(`node-${platform}-${arch}`, () => { + const nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`); + + if (!fs.existsSync(nodePath)) { + util.rimraf(nodePath); + + return nodejs(platform, arch) + .pipe(vfs.dest(nodePath)); + } + + return Promise.resolve(null); + })); +}); + +const defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`); + +if (defaultNodeTask) { + gulp.task(task.define('node', defaultNodeTask)); +} + +function nodejs(platform, arch) { + const { fetchUrls, fetchGithub } = require('./lib/fetch'); + const untar = require('gulp-untar'); + const crypto = require('crypto'); + + if (arch === 'ia32') { + arch = 'x86'; + } else if (arch === 'armhf') { + arch = 'armv7l'; + } else if (arch === 'alpine') { + platform = 'alpine'; + arch = 'x64'; + } + + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`); + + const checksumSha256 = getNodeChecksum(nodeVersion, platform, arch); + + if (checksumSha256) { + log(`Using SHA256 checksum for checking integrity: ${checksumSha256}`); + } else { + log.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`); + } + + switch (platform) { + case 'win32': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `win-${arch}-node.exe`, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 })) + .pipe(rename('node.exe')); + case 'darwin': + case 'linux': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 }) + ).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) + .pipe(rename('node')); + case 'alpine': { + const imageName = arch === 'arm64' ? 'arm64v8/node' : 'node'; + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`); + const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' }); + if (checksumSha256) { + const actualSHA256Checksum = crypto.createHash('sha256').update(contents).digest('hex'); + if (actualSHA256Checksum !== checksumSha256) { + throw new Error(`Checksum mismatch for node.js from docker image (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`); + } + } + return es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]); + } + } +} + +function packageTask(type, platform, arch, sourceFolderName, destinationFolderName) { + const destination = path.join(BUILD_ROOT, destinationFolderName); + + return () => { + const json = require('gulp-json-editor'); + + const src = gulp.src(sourceFolderName + '/**', { base: '.' }) + .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); })) + .pipe(util.setExecutableBit(['**/*.sh'])) + .pipe(filter(['**', '!**/*.js.map'])); + + const workspaceExtensionPoints = ['debuggers', 'jsonValidation']; + const isUIExtension = (manifest) => { + switch (manifest.extensionKind) { + case 'ui': return true; + case 'workspace': return false; + default: { + if (manifest.main) { + return false; + } + if (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) { + return false; + } + // Default is UI Extension + return true; + } + } + }; + const localWorkspaceExtensions = glob.sync('extensions/*/package.json') + .filter((extensionPath) => { + if (type === 'reh-web') { + return true; // web: ship all extensions for now + } + + // Skip shipping UI extensions because the client side will have them anyways + // and they'd just increase the download without being used + const manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString()); + return !isUIExtension(manifest); + }).map((extensionPath) => path.basename(path.dirname(extensionPath))) + .filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions + const marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions + .filter(entry => !entry.platforms || new Set(entry.platforms).has(platform)) + .filter(entry => !entry.clientOnly) + .map(entry => entry.name); + const extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions] + .map(name => `.build/extensions/${name}/**`); + + const extensions = gulp.src(extensionPaths, { base: '.build', dot: true }); + const extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true }); + const sources = es.merge(src, extensions, extensionsCommonDependencies) + .pipe(filter(['**', '!**/*.js.map'], { dot: true })); + + let version = packageJson.version; + const quality = product.quality; + + if (quality && quality !== 'stable') { + version += '-' + quality; + } + + const name = product.nameShort; + const packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' }) + .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined })); + + const date = new Date().toISOString(); + + const productJsonStream = gulp.src(['product.json'], { base: '.' }) + .pipe(json({ commit, date, version })); + + const license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true }); + + const jsFilter = util.filter(data => !data.isDirectory() && /\.js$/.test(data.path)); + + const productionDependencies = getProductionDependencies(REMOTE_FOLDER); + const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat(); + const deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true }) + // filter out unnecessary files, no source maps in server build + .pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map'])) + .pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore'))) + .pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`))) + .pipe(jsFilter) + .pipe(util.stripSourceMappingURL()) + .pipe(jsFilter.restore); + + const nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`; + const node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true }); + + let web = []; + if (type === 'reh-web') { + web = [ + 'resources/server/favicon.ico', + 'resources/server/code-192.png', + 'resources/server/code-512.png', + 'resources/server/manifest.json' + ].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource))); + } + + const all = es.merge( + packageJsonStream, + productJsonStream, + license, + sources, + deps, + node, + ...web + ); + + let result = all + .pipe(util.skipDirectories()) + .pipe(util.fixWin32DirectoryPermissions()); + + if (platform === 'win32') { + result = es.merge(result, + gulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)), + gulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/helpers/browser.cmd`)), + gulp.src('resources/server/bin/code-server.cmd', { base: '.' }) + .pipe(rename(`bin/${product.serverApplicationName}.cmd`)), + ); + } else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') { + result = es.merge(result, + gulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/remote-cli/${product.applicationName}`)) + .pipe(util.setExecutableBit()), + gulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/helpers/browser.sh`)) + .pipe(util.setExecutableBit()), + gulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' }) + .pipe(rename(`bin/${product.serverApplicationName}`)) + .pipe(util.setExecutableBit()) + ); + } + + return result.pipe(vfs.dest(destination)); + }; +} + +/** + * @param {object} product The parsed product.json file contents + */ +function tweakProductForServerWeb(product) { + const result = { ...product }; + delete result.webEndpointUrlTemplate; + return result; +} + +['reh', 'reh-web'].forEach(type => { + const optimizeTask = task.define(`optimize-vscode-${type}`, task.series( + util.rimraf(`out-vscode-${type}`), + optimize.optimizeTask( + { + out: `out-vscode-${type}`, + amd: { + src: 'out-build', + entryPoints: (type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints).flat(), + otherSources: [], + resources: type === 'reh' ? serverResources : serverWithWebResources, + loaderConfig: optimize.loaderConfig(), + inlineAmdImages: true, + bundleInfo: undefined, + fileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product) + }, + commonJS: { + src: 'out-build', + entryPoints: [ + 'out-build/server-main.js', + 'out-build/server-cli.js' + ], + platform: 'node', + external: [ + 'minimist', + // TODO: we cannot inline `product.json` because + // it is being changed during build time at a later + // point in time (such as `checksums`) + '../product.json', + '../package.json' + ] + } + } + ) + )); + + const minifyTask = task.define(`minify-vscode-${type}`, task.series( + optimizeTask, + util.rimraf(`out-vscode-${type}-min`), + optimize.minifyTask(`out-vscode-${type}`, `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`) + )); + gulp.task(minifyTask); + + BUILD_TARGETS.forEach(buildTarget => { + const dashed = (str) => (str ? `-${str}` : ``); + const platform = buildTarget.platform; + const arch = buildTarget.arch; + + ['', 'min'].forEach(minified => { + const sourceFolderName = `out-vscode-${type}${dashed(minified)}`; + const destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`; + + const serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series( + gulp.task(`node-${platform}-${arch}`), + util.rimraf(path.join(BUILD_ROOT, destinationFolderName)), + packageTask(type, platform, arch, sourceFolderName, destinationFolderName) + )); + gulp.task(serverTaskCI); + + const serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series( + compileBuildTask, + compileExtensionsBuildTask, + compileExtensionMediaBuildTask, + minified ? minifyTask : optimizeTask, + serverTaskCI + )); + gulp.task(serverTask); + }); + }); +}); diff --git a/src/vs/editor/test/node/diffing/fixtures/difficult-move/2.js b/src/vs/editor/test/node/diffing/fixtures/difficult-move/2.js new file mode 100644 index 00000000000..a235f55c79e --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/difficult-move/2.js @@ -0,0 +1,464 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +const gulp = require('gulp'); +const path = require('path'); +const es = require('event-stream'); +const util = require('./lib/util'); +const { getVersion } = require('./lib/getVersion'); +const task = require('./lib/task'); +const optimize = require('./lib/optimize'); +const product = require('../product.json'); +const rename = require('gulp-rename'); +const replace = require('gulp-replace'); +const filter = require('gulp-filter'); +const { getProductionDependencies } = require('./lib/dependencies'); +const vfs = require('vinyl-fs'); +const packageJson = require('../package.json'); +const flatmap = require('gulp-flatmap'); +const gunzip = require('gulp-gunzip'); +const File = require('vinyl'); +const fs = require('fs'); +const glob = require('glob'); +const { compileBuildTask } = require('./gulpfile.compile'); +const { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions'); +const { vscodeWebEntryPoints, vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web'); +const cp = require('child_process'); +const log = require('fancy-log'); + +const REPO_ROOT = path.dirname(__dirname); +const commit = getVersion(REPO_ROOT); +const BUILD_ROOT = path.dirname(REPO_ROOT); +const REMOTE_FOLDER = path.join(REPO_ROOT, 'remote'); + +// Targets + +const BUILD_TARGETS = [ + { platform: 'win32', arch: 'ia32' }, + { platform: 'win32', arch: 'x64' }, + { platform: 'darwin', arch: 'x64' }, + { platform: 'darwin', arch: 'arm64' }, + { platform: 'linux', arch: 'x64' }, + { platform: 'linux', arch: 'armhf' }, + { platform: 'linux', arch: 'arm64' }, + { platform: 'alpine', arch: 'arm64' }, + // legacy: we use to ship only one alpine so it was put in the arch, but now we ship + // multiple alpine images and moved to a better model (alpine as the platform) + { platform: 'linux', arch: 'alpine' }, +]; + +const serverResources = [ + + // Bootstrap + 'out-build/bootstrap.js', + 'out-build/bootstrap-fork.js', + 'out-build/bootstrap-amd.js', + 'out-build/bootstrap-node.js', + + // Performance + 'out-build/vs/base/common/performance.js', + + // Watcher + 'out-build/vs/platform/files/**/*.exe', + 'out-build/vs/platform/files/**/*.md', + + // Process monitor + 'out-build/vs/base/node/cpuUsage.sh', + 'out-build/vs/base/node/ps.sh', + + // Terminal shell integration + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh', + 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish', + + '!**/test/**' +]; + +const serverWithWebResources = [ + + // Include all of server... + ...serverResources, + + // ...and all of web + ...vscodeWebResourceIncludes +]; + +const serverEntryPoints = [ + { + name: 'vs/server/node/server.main', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/server/node/server.cli', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/workbench/api/node/extensionHostProcess', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/platform/files/node/watcher/watcherMain', + exclude: ['vs/css', 'vs/nls'] + }, + { + name: 'vs/platform/terminal/node/ptyHostMain', + exclude: ['vs/css', 'vs/nls'] + } +]; + +const serverWithWebEntryPoints = [ + + // Include all of server + ...serverEntryPoints, + + // Include workbench web + ...vscodeWebEntryPoints +]; + +function getNodeVersion() { + const yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8'); + const nodeVersion = /^target "(.*)"$/m.exec(yarnrc)[1]; + const internalNodeVersion = /^ms_build_id "(.*)"$/m.exec(yarnrc)[1]; + return { nodeVersion, internalNodeVersion }; +} + +function getNodeChecksum(nodeVersion, platform, arch) { + let expectedName; + switch (platform) { + case 'win32': + expectedName = `win-${arch}/node.exe`; + break; + + case 'darwin': + case 'alpine': + case 'linux': + expectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`; + break; + } + + const nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8'); + for (const line of nodeJsChecksums.split('\n')) { + const [checksum, name] = line.split(/\s+/); + if (name === expectedName) { + return checksum; + } + } + return undefined; +} + +function extractAlpinefromDocker(nodeVersion, platform, arch) { + const imageName = arch === 'arm64' ? 'arm64v8/node' : 'node'; + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`); + const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' }); + return es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]); +} + +const { nodeVersion, internalNodeVersion } = getNodeVersion(); + +BUILD_TARGETS.forEach(({ platform, arch }) => { + gulp.task(task.define(`node-${platform}-${arch}`, () => { + const nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`); + + if (!fs.existsSync(nodePath)) { + util.rimraf(nodePath); + + return nodejs(platform, arch) + .pipe(vfs.dest(nodePath)); + } + + return Promise.resolve(null); + })); +}); + +const defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`); + +if (defaultNodeTask) { + gulp.task(task.define('node', defaultNodeTask)); +} + +function nodejs(platform, arch) { + const { fetchUrls, fetchGithub } = require('./lib/fetch'); + const untar = require('gulp-untar'); + const crypto = require('crypto'); + + if (arch === 'ia32') { + arch = 'x86'; + } else if (arch === 'armhf') { + arch = 'armv7l'; + } else if (arch === 'alpine') { + platform = 'alpine'; + arch = 'x64'; + } + + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`); + + const checksumSha256 = getNodeChecksum(nodeVersion, platform, arch); + + if (checksumSha256) { + log(`Using SHA256 checksum for checking integrity: ${checksumSha256}`); + } else { + log.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`); + } + + switch (platform) { + case 'win32': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `win-${arch}-node.exe`, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 })) + .pipe(rename('node.exe')); + case 'darwin': + case 'linux': + return (product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) : + fetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 }) + ).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) + .pipe(rename('node')); + case 'alpine': + return product.nodejsRepository !== 'https://nodejs.org' ? + fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) + .pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) + .pipe(rename('node')) + : extractAlpinefromDocker(nodeVersion, platform, arch); + } +} + +function packageTask(type, platform, arch, sourceFolderName, destinationFolderName) { + const destination = path.join(BUILD_ROOT, destinationFolderName); + + return () => { + const json = require('gulp-json-editor'); + + const src = gulp.src(sourceFolderName + '/**', { base: '.' }) + .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); })) + .pipe(util.setExecutableBit(['**/*.sh'])) + .pipe(filter(['**', '!**/*.js.map'])); + + const workspaceExtensionPoints = ['debuggers', 'jsonValidation']; + const isUIExtension = (manifest) => { + switch (manifest.extensionKind) { + case 'ui': return true; + case 'workspace': return false; + default: { + if (manifest.main) { + return false; + } + if (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) { + return false; + } + // Default is UI Extension + return true; + } + } + }; + const localWorkspaceExtensions = glob.sync('extensions/*/package.json') + .filter((extensionPath) => { + if (type === 'reh-web') { + return true; // web: ship all extensions for now + } + + // Skip shipping UI extensions because the client side will have them anyways + // and they'd just increase the download without being used + const manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString()); + return !isUIExtension(manifest); + }).map((extensionPath) => path.basename(path.dirname(extensionPath))) + .filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions + const marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions + .filter(entry => !entry.platforms || new Set(entry.platforms).has(platform)) + .filter(entry => !entry.clientOnly) + .map(entry => entry.name); + const extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions] + .map(name => `.build/extensions/${name}/**`); + + const extensions = gulp.src(extensionPaths, { base: '.build', dot: true }); + const extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true }); + const sources = es.merge(src, extensions, extensionsCommonDependencies) + .pipe(filter(['**', '!**/*.js.map'], { dot: true })); + + let version = packageJson.version; + const quality = product.quality; + + if (quality && quality !== 'stable') { + version += '-' + quality; + } + + const name = product.nameShort; + const packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' }) + .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined })); + + const date = new Date().toISOString(); + + const productJsonStream = gulp.src(['product.json'], { base: '.' }) + .pipe(json({ commit, date, version })); + + const license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true }); + + const jsFilter = util.filter(data => !data.isDirectory() && /\.js$/.test(data.path)); + + const productionDependencies = getProductionDependencies(REMOTE_FOLDER); + const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat(); + const deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true }) + // filter out unnecessary files, no source maps in server build + .pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map'])) + .pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore'))) + .pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`))) + .pipe(jsFilter) + .pipe(util.stripSourceMappingURL()) + .pipe(jsFilter.restore); + + const nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`; + const node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true }); + + let web = []; + if (type === 'reh-web') { + web = [ + 'resources/server/favicon.ico', + 'resources/server/code-192.png', + 'resources/server/code-512.png', + 'resources/server/manifest.json' + ].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource))); + } + + const all = es.merge( + packageJsonStream, + productJsonStream, + license, + sources, + deps, + node, + ...web + ); + + let result = all + .pipe(util.skipDirectories()) + .pipe(util.fixWin32DirectoryPermissions()); + + if (platform === 'win32') { + result = es.merge(result, + gulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)), + gulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/helpers/browser.cmd`)), + gulp.src('resources/server/bin/code-server.cmd', { base: '.' }) + .pipe(rename(`bin/${product.serverApplicationName}.cmd`)), + ); + } else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') { + result = es.merge(result, + gulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/remote-cli/${product.applicationName}`)) + .pipe(util.setExecutableBit()), + gulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' }) + .pipe(replace('@@VERSION@@', version)) + .pipe(replace('@@COMMIT@@', commit)) + .pipe(replace('@@APPNAME@@', product.applicationName)) + .pipe(rename(`bin/helpers/browser.sh`)) + .pipe(util.setExecutableBit()), + gulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' }) + .pipe(rename(`bin/${product.serverApplicationName}`)) + .pipe(util.setExecutableBit()) + ); + } + + return result.pipe(vfs.dest(destination)); + }; +} + +/** + * @param {object} product The parsed product.json file contents + */ +function tweakProductForServerWeb(product) { + const result = { ...product }; + delete result.webEndpointUrlTemplate; + return result; +} + +['reh', 'reh-web'].forEach(type => { + const optimizeTask = task.define(`optimize-vscode-${type}`, task.series( + util.rimraf(`out-vscode-${type}`), + optimize.optimizeTask( + { + out: `out-vscode-${type}`, + amd: { + src: 'out-build', + entryPoints: (type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints).flat(), + otherSources: [], + resources: type === 'reh' ? serverResources : serverWithWebResources, + loaderConfig: optimize.loaderConfig(), + inlineAmdImages: true, + bundleInfo: undefined, + fileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product) + }, + commonJS: { + src: 'out-build', + entryPoints: [ + 'out-build/server-main.js', + 'out-build/server-cli.js' + ], + platform: 'node', + external: [ + 'minimist', + // TODO: we cannot inline `product.json` because + // it is being changed during build time at a later + // point in time (such as `checksums`) + '../product.json', + '../package.json' + ] + } + } + ) + )); + + const minifyTask = task.define(`minify-vscode-${type}`, task.series( + optimizeTask, + util.rimraf(`out-vscode-${type}-min`), + optimize.minifyTask(`out-vscode-${type}`, `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`) + )); + gulp.task(minifyTask); + + BUILD_TARGETS.forEach(buildTarget => { + const dashed = (str) => (str ? `-${str}` : ``); + const platform = buildTarget.platform; + const arch = buildTarget.arch; + + ['', 'min'].forEach(minified => { + const sourceFolderName = `out-vscode-${type}${dashed(minified)}`; + const destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`; + + const serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series( + gulp.task(`node-${platform}-${arch}`), + util.rimraf(path.join(BUILD_ROOT, destinationFolderName)), + packageTask(type, platform, arch, sourceFolderName, destinationFolderName) + )); + gulp.task(serverTaskCI); + + const serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series( + compileBuildTask, + compileExtensionsBuildTask, + compileExtensionMediaBuildTask, + minified ? minifyTask : optimizeTask, + serverTaskCI + )); + gulp.task(serverTask); + }); + }); +}); diff --git a/src/vs/editor/test/node/diffing/fixtures/difficult-move/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/difficult-move/advanced.expected.diff.json new file mode 100644 index 00000000000..6d0a4cf9977 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/difficult-move/advanced.expected.diff.json @@ -0,0 +1,104 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst es = require('event-stream');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst optimize = require('./lib/optimize');\nconst product = require('../product.json');\nconst rename = require('gulp-rename');\nconst replace = require('gulp-replace');\nconst filter = require('gulp-filter');\nconst { getProductionDependencies } = require('./lib/dependencies');\nconst vfs = require('vinyl-fs');\nconst packageJson = require('../package.json');\nconst flatmap = require('gulp-flatmap');\nconst gunzip = require('gulp-gunzip');\nconst File = require('vinyl');\nconst fs = require('fs');\nconst glob = require('glob');\nconst { compileBuildTask } = require('./gulpfile.compile');\nconst { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions');\nconst { vscodeWebEntryPoints, vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web');\nconst cp = require('child_process');\nconst log = require('fancy-log');\n\nconst REPO_ROOT = path.dirname(__dirname);\nconst commit = getVersion(REPO_ROOT);\nconst BUILD_ROOT = path.dirname(REPO_ROOT);\nconst REMOTE_FOLDER = path.join(REPO_ROOT, 'remote');\n\n// Targets\n\nconst BUILD_TARGETS = [\n\t{ platform: 'win32', arch: 'ia32' },\n\t{ platform: 'win32', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'arm64' },\n\t{ platform: 'linux', arch: 'x64' },\n\t{ platform: 'linux', arch: 'armhf' },\n\t{ platform: 'linux', arch: 'arm64' },\n\t{ platform: 'alpine', arch: 'arm64' },\n\t// legacy: we use to ship only one alpine so it was put in the arch, but now we ship\n\t// multiple alpine images and moved to a better model (alpine as the platform)\n\t{ platform: 'linux', arch: 'alpine' },\n];\n\nconst serverResources = [\n\n\t// Bootstrap\n\t'out-build/bootstrap.js',\n\t'out-build/bootstrap-fork.js',\n\t'out-build/bootstrap-amd.js',\n\t'out-build/bootstrap-node.js',\n\n\t// Performance\n\t'out-build/vs/base/common/performance.js',\n\n\t// Watcher\n\t'out-build/vs/platform/files/**/*.exe',\n\t'out-build/vs/platform/files/**/*.md',\n\n\t// Process monitor\n\t'out-build/vs/base/node/cpuUsage.sh',\n\t'out-build/vs/base/node/ps.sh',\n\n\t// Terminal shell integration\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish',\n\n\t'!**/test/**'\n];\n\nconst serverWithWebResources = [\n\n\t// Include all of server...\n\t...serverResources,\n\n\t// ...and all of web\n\t...vscodeWebResourceIncludes\n];\n\nconst serverEntryPoints = [\n\t{\n\t\tname: 'vs/server/node/server.main',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/server/node/server.cli',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/workbench/api/node/extensionHostProcess',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/files/node/watcher/watcherMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/terminal/node/ptyHostMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t}\n];\n\nconst serverWithWebEntryPoints = [\n\n\t// Include all of server\n\t...serverEntryPoints,\n\n\t// Include workbench web\n\t...vscodeWebEntryPoints\n];\n\nfunction getNodeVersion() {\n\tconst yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8');\n\tconst nodeVersion = /^target \"(.*)\"$/m.exec(yarnrc)[1];\n\tconst internalNodeVersion = /^ms_build_id \"(.*)\"$/m.exec(yarnrc)[1];\n\treturn { nodeVersion, internalNodeVersion };\n}\n\nfunction getNodeChecksum(nodeVersion, platform, arch) {\n\tlet expectedName;\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\texpectedName = `win-${arch}/node.exe`;\n\t\t\tbreak;\n\n\t\tcase 'darwin':\n\t\tcase 'linux':\n\t\t\texpectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`;\n\t\t\tbreak;\n\n\t\tcase 'alpine':\n\t\t\texpectedName = `${platform}-${arch}/node`;\n\t\t\tbreak;\n\t}\n\n\tconst nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8');\n\tfor (const line of nodeJsChecksums.split('\\n')) {\n\t\tconst [checksum, name] = line.split(/\\s+/);\n\t\tif (name === expectedName) {\n\t\t\treturn checksum;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst { nodeVersion, internalNodeVersion } = getNodeVersion();\n\nBUILD_TARGETS.forEach(({ platform, arch }) => {\n\tgulp.task(task.define(`node-${platform}-${arch}`, () => {\n\t\tconst nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`);\n\n\t\tif (!fs.existsSync(nodePath)) {\n\t\t\tutil.rimraf(nodePath);\n\n\t\t\treturn nodejs(platform, arch)\n\t\t\t\t.pipe(vfs.dest(nodePath));\n\t\t}\n\n\t\treturn Promise.resolve(null);\n\t}));\n});\n\nconst defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`);\n\nif (defaultNodeTask) {\n\tgulp.task(task.define('node', defaultNodeTask));\n}\n\nfunction nodejs(platform, arch) {\n\tconst { fetchUrls, fetchGithub } = require('./lib/fetch');\n\tconst untar = require('gulp-untar');\n\tconst crypto = require('crypto');\n\n\tif (arch === 'ia32') {\n\t\tarch = 'x86';\n\t} else if (arch === 'armhf') {\n\t\tarch = 'armv7l';\n\t} else if (arch === 'alpine') {\n\t\tplatform = 'alpine';\n\t\tarch = 'x64';\n\t}\n\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`);\n\n\tconst checksumSha256 = getNodeChecksum(nodeVersion, platform, arch);\n\n\tif (checksumSha256) {\n\t\tlog(`Using SHA256 checksum for checking integrity: ${checksumSha256}`);\n\t} else {\n\t\tlog.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`);\n\t}\n\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `win-${arch}-node.exe`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 }))\n\t\t\t\t.pipe(rename('node.exe'));\n\t\tcase 'darwin':\n\t\tcase 'linux':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 })\n\t\t\t).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t.pipe(rename('node'));\n\t\tcase 'alpine': {\n\t\t\tconst imageName = arch === 'arm64' ? 'arm64v8/node' : 'node';\n\t\t\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`);\n\t\t\tconst contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \\`which node\\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' });\n\t\t\tif (checksumSha256) {\n\t\t\t\tconst actualSHA256Checksum = crypto.createHash('sha256').update(contents).digest('hex');\n\t\t\t\tif (actualSHA256Checksum !== checksumSha256) {\n\t\t\t\t\tthrow new Error(`Checksum mismatch for node.js from docker image (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]);\n\t\t}\n\t}\n}\n\nfunction packageTask(type, platform, arch, sourceFolderName, destinationFolderName) {\n\tconst destination = path.join(BUILD_ROOT, destinationFolderName);\n\n\treturn () => {\n\t\tconst json = require('gulp-json-editor');\n\n\t\tconst src = gulp.src(sourceFolderName + '/**', { base: '.' })\n\t\t\t.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))\n\t\t\t.pipe(util.setExecutableBit(['**/*.sh']))\n\t\t\t.pipe(filter(['**', '!**/*.js.map']));\n\n\t\tconst workspaceExtensionPoints = ['debuggers', 'jsonValidation'];\n\t\tconst isUIExtension = (manifest) => {\n\t\t\tswitch (manifest.extensionKind) {\n\t\t\t\tcase 'ui': return true;\n\t\t\t\tcase 'workspace': return false;\n\t\t\t\tdefault: {\n\t\t\t\t\tif (manifest.main) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Default is UI Extension\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst localWorkspaceExtensions = glob.sync('extensions/*/package.json')\n\t\t\t.filter((extensionPath) => {\n\t\t\t\tif (type === 'reh-web') {\n\t\t\t\t\treturn true; // web: ship all extensions for now\n\t\t\t\t}\n\n\t\t\t\t// Skip shipping UI extensions because the client side will have them anyways\n\t\t\t\t// and they'd just increase the download without being used\n\t\t\t\tconst manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString());\n\t\t\t\treturn !isUIExtension(manifest);\n\t\t\t}).map((extensionPath) => path.basename(path.dirname(extensionPath)))\n\t\t\t.filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions\n\t\tconst marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions\n\t\t\t.filter(entry => !entry.platforms || new Set(entry.platforms).has(platform))\n\t\t\t.filter(entry => !entry.clientOnly)\n\t\t\t.map(entry => entry.name);\n\t\tconst extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions]\n\t\t\t.map(name => `.build/extensions/${name}/**`);\n\n\t\tconst extensions = gulp.src(extensionPaths, { base: '.build', dot: true });\n\t\tconst extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true });\n\t\tconst sources = es.merge(src, extensions, extensionsCommonDependencies)\n\t\t\t.pipe(filter(['**', '!**/*.js.map'], { dot: true }));\n\n\t\tlet version = packageJson.version;\n\t\tconst quality = product.quality;\n\n\t\tif (quality && quality !== 'stable') {\n\t\t\tversion += '-' + quality;\n\t\t}\n\n\t\tconst name = product.nameShort;\n\t\tconst packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' })\n\t\t\t.pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined }));\n\n\t\tconst date = new Date().toISOString();\n\n\t\tconst productJsonStream = gulp.src(['product.json'], { base: '.' })\n\t\t\t.pipe(json({ commit, date, version }));\n\n\t\tconst license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true });\n\n\t\tconst jsFilter = util.filter(data => !data.isDirectory() && /\\.js$/.test(data.path));\n\n\t\tconst productionDependencies = getProductionDependencies(REMOTE_FOLDER);\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();\n\t\tconst deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })\n\t\t\t// filter out unnecessary files, no source maps in server build\n\t\t\t.pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))\n\t\t\t.pipe(jsFilter)\n\t\t\t.pipe(util.stripSourceMappingURL())\n\t\t\t.pipe(jsFilter.restore);\n\n\t\tconst nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`;\n\t\tconst node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true });\n\n\t\tlet web = [];\n\t\tif (type === 'reh-web') {\n\t\t\tweb = [\n\t\t\t\t'resources/server/favicon.ico',\n\t\t\t\t'resources/server/code-192.png',\n\t\t\t\t'resources/server/code-512.png',\n\t\t\t\t'resources/server/manifest.json'\n\t\t\t].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource)));\n\t\t}\n\n\t\tconst all = es.merge(\n\t\t\tpackageJsonStream,\n\t\t\tproductJsonStream,\n\t\t\tlicense,\n\t\t\tsources,\n\t\t\tdeps,\n\t\t\tnode,\n\t\t\t...web\n\t\t);\n\n\t\tlet result = all\n\t\t\t.pipe(util.skipDirectories())\n\t\t\t.pipe(util.fixWin32DirectoryPermissions());\n\n\t\tif (platform === 'win32') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/code-server.cmd', { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}.cmd`)),\n\t\t\t);\n\t\t} else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.sh`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit())\n\t\t\t);\n\t\t}\n\n\t\treturn result.pipe(vfs.dest(destination));\n\t};\n}\n\n/**\n * @param {object} product The parsed product.json file contents\n */\nfunction tweakProductForServerWeb(product) {\n\tconst result = { ...product };\n\tdelete result.webEndpointUrlTemplate;\n\treturn result;\n}\n\n['reh', 'reh-web'].forEach(type => {\n\tconst optimizeTask = task.define(`optimize-vscode-${type}`, task.series(\n\t\tutil.rimraf(`out-vscode-${type}`),\n\t\toptimize.optimizeTask(\n\t\t\t{\n\t\t\t\tout: `out-vscode-${type}`,\n\t\t\t\tamd: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: (type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints).flat(),\n\t\t\t\t\totherSources: [],\n\t\t\t\t\tresources: type === 'reh' ? serverResources : serverWithWebResources,\n\t\t\t\t\tloaderConfig: optimize.loaderConfig(),\n\t\t\t\t\tinlineAmdImages: true,\n\t\t\t\t\tbundleInfo: undefined,\n\t\t\t\t\tfileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product)\n\t\t\t\t},\n\t\t\t\tcommonJS: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: [\n\t\t\t\t\t\t'out-build/server-main.js',\n\t\t\t\t\t\t'out-build/server-cli.js'\n\t\t\t\t\t],\n\t\t\t\t\tplatform: 'node',\n\t\t\t\t\texternal: [\n\t\t\t\t\t\t'minimist',\n\t\t\t\t\t\t// TODO: we cannot inline `product.json` because\n\t\t\t\t\t\t// it is being changed during build time at a later\n\t\t\t\t\t\t// point in time (such as `checksums`)\n\t\t\t\t\t\t'../product.json',\n\t\t\t\t\t\t'../package.json'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t));\n\n\tconst minifyTask = task.define(`minify-vscode-${type}`, task.series(\n\t\toptimizeTask,\n\t\tutil.rimraf(`out-vscode-${type}-min`),\n\t\toptimize.minifyTask(`out-vscode-${type}`, `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`)\n\t));\n\tgulp.task(minifyTask);\n\n\tBUILD_TARGETS.forEach(buildTarget => {\n\t\tconst dashed = (str) => (str ? `-${str}` : ``);\n\t\tconst platform = buildTarget.platform;\n\t\tconst arch = buildTarget.arch;\n\n\t\t['', 'min'].forEach(minified => {\n\t\t\tconst sourceFolderName = `out-vscode-${type}${dashed(minified)}`;\n\t\t\tconst destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`;\n\n\t\t\tconst serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series(\n\t\t\t\tgulp.task(`node-${platform}-${arch}`),\n\t\t\t\tutil.rimraf(path.join(BUILD_ROOT, destinationFolderName)),\n\t\t\t\tpackageTask(type, platform, arch, sourceFolderName, destinationFolderName)\n\t\t\t));\n\t\t\tgulp.task(serverTaskCI);\n\n\t\t\tconst serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series(\n\t\t\t\tcompileBuildTask,\n\t\t\t\tcompileExtensionsBuildTask,\n\t\t\t\tcompileExtensionMediaBuildTask,\n\t\t\t\tminified ? minifyTask : optimizeTask,\n\t\t\t\tserverTaskCI\n\t\t\t));\n\t\t\tgulp.task(serverTask);\n\t\t});\n\t});\n});\n", + "fileName": "./1.js" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst es = require('event-stream');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst optimize = require('./lib/optimize');\nconst product = require('../product.json');\nconst rename = require('gulp-rename');\nconst replace = require('gulp-replace');\nconst filter = require('gulp-filter');\nconst { getProductionDependencies } = require('./lib/dependencies');\nconst vfs = require('vinyl-fs');\nconst packageJson = require('../package.json');\nconst flatmap = require('gulp-flatmap');\nconst gunzip = require('gulp-gunzip');\nconst File = require('vinyl');\nconst fs = require('fs');\nconst glob = require('glob');\nconst { compileBuildTask } = require('./gulpfile.compile');\nconst { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions');\nconst { vscodeWebEntryPoints, vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web');\nconst cp = require('child_process');\nconst log = require('fancy-log');\n\nconst REPO_ROOT = path.dirname(__dirname);\nconst commit = getVersion(REPO_ROOT);\nconst BUILD_ROOT = path.dirname(REPO_ROOT);\nconst REMOTE_FOLDER = path.join(REPO_ROOT, 'remote');\n\n// Targets\n\nconst BUILD_TARGETS = [\n\t{ platform: 'win32', arch: 'ia32' },\n\t{ platform: 'win32', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'arm64' },\n\t{ platform: 'linux', arch: 'x64' },\n\t{ platform: 'linux', arch: 'armhf' },\n\t{ platform: 'linux', arch: 'arm64' },\n\t{ platform: 'alpine', arch: 'arm64' },\n\t// legacy: we use to ship only one alpine so it was put in the arch, but now we ship\n\t// multiple alpine images and moved to a better model (alpine as the platform)\n\t{ platform: 'linux', arch: 'alpine' },\n];\n\nconst serverResources = [\n\n\t// Bootstrap\n\t'out-build/bootstrap.js',\n\t'out-build/bootstrap-fork.js',\n\t'out-build/bootstrap-amd.js',\n\t'out-build/bootstrap-node.js',\n\n\t// Performance\n\t'out-build/vs/base/common/performance.js',\n\n\t// Watcher\n\t'out-build/vs/platform/files/**/*.exe',\n\t'out-build/vs/platform/files/**/*.md',\n\n\t// Process monitor\n\t'out-build/vs/base/node/cpuUsage.sh',\n\t'out-build/vs/base/node/ps.sh',\n\n\t// Terminal shell integration\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish',\n\n\t'!**/test/**'\n];\n\nconst serverWithWebResources = [\n\n\t// Include all of server...\n\t...serverResources,\n\n\t// ...and all of web\n\t...vscodeWebResourceIncludes\n];\n\nconst serverEntryPoints = [\n\t{\n\t\tname: 'vs/server/node/server.main',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/server/node/server.cli',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/workbench/api/node/extensionHostProcess',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/files/node/watcher/watcherMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/terminal/node/ptyHostMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t}\n];\n\nconst serverWithWebEntryPoints = [\n\n\t// Include all of server\n\t...serverEntryPoints,\n\n\t// Include workbench web\n\t...vscodeWebEntryPoints\n];\n\nfunction getNodeVersion() {\n\tconst yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8');\n\tconst nodeVersion = /^target \"(.*)\"$/m.exec(yarnrc)[1];\n\tconst internalNodeVersion = /^ms_build_id \"(.*)\"$/m.exec(yarnrc)[1];\n\treturn { nodeVersion, internalNodeVersion };\n}\n\nfunction getNodeChecksum(nodeVersion, platform, arch) {\n\tlet expectedName;\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\texpectedName = `win-${arch}/node.exe`;\n\t\t\tbreak;\n\n\t\tcase 'darwin':\n\t\tcase 'alpine':\n\t\tcase 'linux':\n\t\t\texpectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`;\n\t\t\tbreak;\n\t}\n\n\tconst nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8');\n\tfor (const line of nodeJsChecksums.split('\\n')) {\n\t\tconst [checksum, name] = line.split(/\\s+/);\n\t\tif (name === expectedName) {\n\t\t\treturn checksum;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction extractAlpinefromDocker(nodeVersion, platform, arch) {\n\tconst imageName = arch === 'arm64' ? 'arm64v8/node' : 'node';\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`);\n\tconst contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \\`which node\\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' });\n\treturn es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]);\n}\n\nconst { nodeVersion, internalNodeVersion } = getNodeVersion();\n\nBUILD_TARGETS.forEach(({ platform, arch }) => {\n\tgulp.task(task.define(`node-${platform}-${arch}`, () => {\n\t\tconst nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`);\n\n\t\tif (!fs.existsSync(nodePath)) {\n\t\t\tutil.rimraf(nodePath);\n\n\t\t\treturn nodejs(platform, arch)\n\t\t\t\t.pipe(vfs.dest(nodePath));\n\t\t}\n\n\t\treturn Promise.resolve(null);\n\t}));\n});\n\nconst defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`);\n\nif (defaultNodeTask) {\n\tgulp.task(task.define('node', defaultNodeTask));\n}\n\nfunction nodejs(platform, arch) {\n\tconst { fetchUrls, fetchGithub } = require('./lib/fetch');\n\tconst untar = require('gulp-untar');\n\tconst crypto = require('crypto');\n\n\tif (arch === 'ia32') {\n\t\tarch = 'x86';\n\t} else if (arch === 'armhf') {\n\t\tarch = 'armv7l';\n\t} else if (arch === 'alpine') {\n\t\tplatform = 'alpine';\n\t\tarch = 'x64';\n\t}\n\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`);\n\n\tconst checksumSha256 = getNodeChecksum(nodeVersion, platform, arch);\n\n\tif (checksumSha256) {\n\t\tlog(`Using SHA256 checksum for checking integrity: ${checksumSha256}`);\n\t} else {\n\t\tlog.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`);\n\t}\n\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `win-${arch}-node.exe`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 }))\n\t\t\t\t.pipe(rename('node.exe'));\n\t\tcase 'darwin':\n\t\tcase 'linux':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 })\n\t\t\t).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t.pipe(rename('node'));\n\t\tcase 'alpine':\n\t\t\treturn product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 })\n\t\t\t\t\t.pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t\t.pipe(rename('node'))\n\t\t\t\t: extractAlpinefromDocker(nodeVersion, platform, arch);\n\t}\n}\n\nfunction packageTask(type, platform, arch, sourceFolderName, destinationFolderName) {\n\tconst destination = path.join(BUILD_ROOT, destinationFolderName);\n\n\treturn () => {\n\t\tconst json = require('gulp-json-editor');\n\n\t\tconst src = gulp.src(sourceFolderName + '/**', { base: '.' })\n\t\t\t.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))\n\t\t\t.pipe(util.setExecutableBit(['**/*.sh']))\n\t\t\t.pipe(filter(['**', '!**/*.js.map']));\n\n\t\tconst workspaceExtensionPoints = ['debuggers', 'jsonValidation'];\n\t\tconst isUIExtension = (manifest) => {\n\t\t\tswitch (manifest.extensionKind) {\n\t\t\t\tcase 'ui': return true;\n\t\t\t\tcase 'workspace': return false;\n\t\t\t\tdefault: {\n\t\t\t\t\tif (manifest.main) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Default is UI Extension\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst localWorkspaceExtensions = glob.sync('extensions/*/package.json')\n\t\t\t.filter((extensionPath) => {\n\t\t\t\tif (type === 'reh-web') {\n\t\t\t\t\treturn true; // web: ship all extensions for now\n\t\t\t\t}\n\n\t\t\t\t// Skip shipping UI extensions because the client side will have them anyways\n\t\t\t\t// and they'd just increase the download without being used\n\t\t\t\tconst manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString());\n\t\t\t\treturn !isUIExtension(manifest);\n\t\t\t}).map((extensionPath) => path.basename(path.dirname(extensionPath)))\n\t\t\t.filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions\n\t\tconst marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions\n\t\t\t.filter(entry => !entry.platforms || new Set(entry.platforms).has(platform))\n\t\t\t.filter(entry => !entry.clientOnly)\n\t\t\t.map(entry => entry.name);\n\t\tconst extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions]\n\t\t\t.map(name => `.build/extensions/${name}/**`);\n\n\t\tconst extensions = gulp.src(extensionPaths, { base: '.build', dot: true });\n\t\tconst extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true });\n\t\tconst sources = es.merge(src, extensions, extensionsCommonDependencies)\n\t\t\t.pipe(filter(['**', '!**/*.js.map'], { dot: true }));\n\n\t\tlet version = packageJson.version;\n\t\tconst quality = product.quality;\n\n\t\tif (quality && quality !== 'stable') {\n\t\t\tversion += '-' + quality;\n\t\t}\n\n\t\tconst name = product.nameShort;\n\t\tconst packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' })\n\t\t\t.pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined }));\n\n\t\tconst date = new Date().toISOString();\n\n\t\tconst productJsonStream = gulp.src(['product.json'], { base: '.' })\n\t\t\t.pipe(json({ commit, date, version }));\n\n\t\tconst license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true });\n\n\t\tconst jsFilter = util.filter(data => !data.isDirectory() && /\\.js$/.test(data.path));\n\n\t\tconst productionDependencies = getProductionDependencies(REMOTE_FOLDER);\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();\n\t\tconst deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })\n\t\t\t// filter out unnecessary files, no source maps in server build\n\t\t\t.pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))\n\t\t\t.pipe(jsFilter)\n\t\t\t.pipe(util.stripSourceMappingURL())\n\t\t\t.pipe(jsFilter.restore);\n\n\t\tconst nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`;\n\t\tconst node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true });\n\n\t\tlet web = [];\n\t\tif (type === 'reh-web') {\n\t\t\tweb = [\n\t\t\t\t'resources/server/favicon.ico',\n\t\t\t\t'resources/server/code-192.png',\n\t\t\t\t'resources/server/code-512.png',\n\t\t\t\t'resources/server/manifest.json'\n\t\t\t].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource)));\n\t\t}\n\n\t\tconst all = es.merge(\n\t\t\tpackageJsonStream,\n\t\t\tproductJsonStream,\n\t\t\tlicense,\n\t\t\tsources,\n\t\t\tdeps,\n\t\t\tnode,\n\t\t\t...web\n\t\t);\n\n\t\tlet result = all\n\t\t\t.pipe(util.skipDirectories())\n\t\t\t.pipe(util.fixWin32DirectoryPermissions());\n\n\t\tif (platform === 'win32') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/code-server.cmd', { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}.cmd`)),\n\t\t\t);\n\t\t} else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.sh`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit())\n\t\t\t);\n\t\t}\n\n\t\treturn result.pipe(vfs.dest(destination));\n\t};\n}\n\n/**\n * @param {object} product The parsed product.json file contents\n */\nfunction tweakProductForServerWeb(product) {\n\tconst result = { ...product };\n\tdelete result.webEndpointUrlTemplate;\n\treturn result;\n}\n\n['reh', 'reh-web'].forEach(type => {\n\tconst optimizeTask = task.define(`optimize-vscode-${type}`, task.series(\n\t\tutil.rimraf(`out-vscode-${type}`),\n\t\toptimize.optimizeTask(\n\t\t\t{\n\t\t\t\tout: `out-vscode-${type}`,\n\t\t\t\tamd: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: (type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints).flat(),\n\t\t\t\t\totherSources: [],\n\t\t\t\t\tresources: type === 'reh' ? serverResources : serverWithWebResources,\n\t\t\t\t\tloaderConfig: optimize.loaderConfig(),\n\t\t\t\t\tinlineAmdImages: true,\n\t\t\t\t\tbundleInfo: undefined,\n\t\t\t\t\tfileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product)\n\t\t\t\t},\n\t\t\t\tcommonJS: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: [\n\t\t\t\t\t\t'out-build/server-main.js',\n\t\t\t\t\t\t'out-build/server-cli.js'\n\t\t\t\t\t],\n\t\t\t\t\tplatform: 'node',\n\t\t\t\t\texternal: [\n\t\t\t\t\t\t'minimist',\n\t\t\t\t\t\t// TODO: we cannot inline `product.json` because\n\t\t\t\t\t\t// it is being changed during build time at a later\n\t\t\t\t\t\t// point in time (such as `checksums`)\n\t\t\t\t\t\t'../product.json',\n\t\t\t\t\t\t'../package.json'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t));\n\n\tconst minifyTask = task.define(`minify-vscode-${type}`, task.series(\n\t\toptimizeTask,\n\t\tutil.rimraf(`out-vscode-${type}-min`),\n\t\toptimize.minifyTask(`out-vscode-${type}`, `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`)\n\t));\n\tgulp.task(minifyTask);\n\n\tBUILD_TARGETS.forEach(buildTarget => {\n\t\tconst dashed = (str) => (str ? `-${str}` : ``);\n\t\tconst platform = buildTarget.platform;\n\t\tconst arch = buildTarget.arch;\n\n\t\t['', 'min'].forEach(minified => {\n\t\t\tconst sourceFolderName = `out-vscode-${type}${dashed(minified)}`;\n\t\t\tconst destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`;\n\n\t\t\tconst serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series(\n\t\t\t\tgulp.task(`node-${platform}-${arch}`),\n\t\t\t\tutil.rimraf(path.join(BUILD_ROOT, destinationFolderName)),\n\t\t\t\tpackageTask(type, platform, arch, sourceFolderName, destinationFolderName)\n\t\t\t));\n\t\t\tgulp.task(serverTaskCI);\n\n\t\t\tconst serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series(\n\t\t\t\tcompileBuildTask,\n\t\t\t\tcompileExtensionsBuildTask,\n\t\t\t\tcompileExtensionMediaBuildTask,\n\t\t\t\tminified ? minifyTask : optimizeTask,\n\t\t\t\tserverTaskCI\n\t\t\t));\n\t\t\tgulp.task(serverTask);\n\t\t});\n\t});\n});\n", + "fileName": "./2.js" + }, + "diffs": [ + { + "originalRange": "[141,141)", + "modifiedRange": "[141,142)", + "innerChanges": [ + { + "originalRange": "[141,1 -> 141,1]", + "modifiedRange": "[141,1 -> 142,1]" + } + ] + }, + { + "originalRange": "[144,148)", + "modifiedRange": "[145,145)", + "innerChanges": [ + { + "originalRange": "[144,1 -> 148,1]", + "modifiedRange": "[145,1 -> 145,1]" + } + ] + }, + { + "originalRange": "[159,159)", + "modifiedRange": "[156,163)", + "innerChanges": [ + { + "originalRange": "[159,1 -> 159,1]", + "modifiedRange": "[156,1 -> 163,1]" + } + ] + }, + { + "originalRange": "[222,234)", + "modifiedRange": "[226,234)", + "innerChanges": [ + { + "originalRange": "[222,17 -> 222,19]", + "modifiedRange": "[226,17 -> 226,17]" + }, + { + "originalRange": "[223,4 -> 223,28]", + "modifiedRange": "[227,4 -> 227,37]" + }, + { + "originalRange": "[223,32 -> 223,49]", + "modifiedRange": "[227,41 -> 227,48]" + }, + { + "originalRange": "[223,54 -> 223,65]", + "modifiedRange": "[227,53 -> 227,62]" + }, + { + "originalRange": "[224,4 -> 224,29]", + "modifiedRange": "[228,4 -> 228,55]" + }, + { + "originalRange": "[224,43 -> 225,63]", + "modifiedRange": "[228,69 -> 228,108]" + }, + { + "originalRange": "[225,78 -> 226,8]", + "modifiedRange": "[228,123 -> 228,152]" + }, + { + "originalRange": "[226,22 -> 226,25]", + "modifiedRange": "[228,166 -> 228,169]" + }, + { + "originalRange": "[227,5 -> 227,93]", + "modifiedRange": "[229,5 -> 229,67]" + }, + { + "originalRange": "[228,5 -> 228,51]", + "modifiedRange": "[230,5 -> 230,30]" + }, + { + "originalRange": "[229,6 -> 229,143]", + "modifiedRange": "[231,6 -> 231,40]" + }, + { + "originalRange": "[230,5 -> 232,42]", + "modifiedRange": "[232,5 -> 232,19]" + }, + { + "originalRange": "[232,48 -> 232,98]", + "modifiedRange": "[232,25 -> 233,58]" + }, + { + "originalRange": "[233,1 -> 234,1]", + "modifiedRange": "[234,1 -> 234,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/difficult-move/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/difficult-move/legacy.expected.diff.json new file mode 100644 index 00000000000..54e5d6610b0 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/difficult-move/legacy.expected.diff.json @@ -0,0 +1,101 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst es = require('event-stream');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst optimize = require('./lib/optimize');\nconst product = require('../product.json');\nconst rename = require('gulp-rename');\nconst replace = require('gulp-replace');\nconst filter = require('gulp-filter');\nconst { getProductionDependencies } = require('./lib/dependencies');\nconst vfs = require('vinyl-fs');\nconst packageJson = require('../package.json');\nconst flatmap = require('gulp-flatmap');\nconst gunzip = require('gulp-gunzip');\nconst File = require('vinyl');\nconst fs = require('fs');\nconst glob = require('glob');\nconst { compileBuildTask } = require('./gulpfile.compile');\nconst { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions');\nconst { vscodeWebEntryPoints, vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web');\nconst cp = require('child_process');\nconst log = require('fancy-log');\n\nconst REPO_ROOT = path.dirname(__dirname);\nconst commit = getVersion(REPO_ROOT);\nconst BUILD_ROOT = path.dirname(REPO_ROOT);\nconst REMOTE_FOLDER = path.join(REPO_ROOT, 'remote');\n\n// Targets\n\nconst BUILD_TARGETS = [\n\t{ platform: 'win32', arch: 'ia32' },\n\t{ platform: 'win32', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'arm64' },\n\t{ platform: 'linux', arch: 'x64' },\n\t{ platform: 'linux', arch: 'armhf' },\n\t{ platform: 'linux', arch: 'arm64' },\n\t{ platform: 'alpine', arch: 'arm64' },\n\t// legacy: we use to ship only one alpine so it was put in the arch, but now we ship\n\t// multiple alpine images and moved to a better model (alpine as the platform)\n\t{ platform: 'linux', arch: 'alpine' },\n];\n\nconst serverResources = [\n\n\t// Bootstrap\n\t'out-build/bootstrap.js',\n\t'out-build/bootstrap-fork.js',\n\t'out-build/bootstrap-amd.js',\n\t'out-build/bootstrap-node.js',\n\n\t// Performance\n\t'out-build/vs/base/common/performance.js',\n\n\t// Watcher\n\t'out-build/vs/platform/files/**/*.exe',\n\t'out-build/vs/platform/files/**/*.md',\n\n\t// Process monitor\n\t'out-build/vs/base/node/cpuUsage.sh',\n\t'out-build/vs/base/node/ps.sh',\n\n\t// Terminal shell integration\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish',\n\n\t'!**/test/**'\n];\n\nconst serverWithWebResources = [\n\n\t// Include all of server...\n\t...serverResources,\n\n\t// ...and all of web\n\t...vscodeWebResourceIncludes\n];\n\nconst serverEntryPoints = [\n\t{\n\t\tname: 'vs/server/node/server.main',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/server/node/server.cli',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/workbench/api/node/extensionHostProcess',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/files/node/watcher/watcherMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/terminal/node/ptyHostMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t}\n];\n\nconst serverWithWebEntryPoints = [\n\n\t// Include all of server\n\t...serverEntryPoints,\n\n\t// Include workbench web\n\t...vscodeWebEntryPoints\n];\n\nfunction getNodeVersion() {\n\tconst yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8');\n\tconst nodeVersion = /^target \"(.*)\"$/m.exec(yarnrc)[1];\n\tconst internalNodeVersion = /^ms_build_id \"(.*)\"$/m.exec(yarnrc)[1];\n\treturn { nodeVersion, internalNodeVersion };\n}\n\nfunction getNodeChecksum(nodeVersion, platform, arch) {\n\tlet expectedName;\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\texpectedName = `win-${arch}/node.exe`;\n\t\t\tbreak;\n\n\t\tcase 'darwin':\n\t\tcase 'linux':\n\t\t\texpectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`;\n\t\t\tbreak;\n\n\t\tcase 'alpine':\n\t\t\texpectedName = `${platform}-${arch}/node`;\n\t\t\tbreak;\n\t}\n\n\tconst nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8');\n\tfor (const line of nodeJsChecksums.split('\\n')) {\n\t\tconst [checksum, name] = line.split(/\\s+/);\n\t\tif (name === expectedName) {\n\t\t\treturn checksum;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst { nodeVersion, internalNodeVersion } = getNodeVersion();\n\nBUILD_TARGETS.forEach(({ platform, arch }) => {\n\tgulp.task(task.define(`node-${platform}-${arch}`, () => {\n\t\tconst nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`);\n\n\t\tif (!fs.existsSync(nodePath)) {\n\t\t\tutil.rimraf(nodePath);\n\n\t\t\treturn nodejs(platform, arch)\n\t\t\t\t.pipe(vfs.dest(nodePath));\n\t\t}\n\n\t\treturn Promise.resolve(null);\n\t}));\n});\n\nconst defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`);\n\nif (defaultNodeTask) {\n\tgulp.task(task.define('node', defaultNodeTask));\n}\n\nfunction nodejs(platform, arch) {\n\tconst { fetchUrls, fetchGithub } = require('./lib/fetch');\n\tconst untar = require('gulp-untar');\n\tconst crypto = require('crypto');\n\n\tif (arch === 'ia32') {\n\t\tarch = 'x86';\n\t} else if (arch === 'armhf') {\n\t\tarch = 'armv7l';\n\t} else if (arch === 'alpine') {\n\t\tplatform = 'alpine';\n\t\tarch = 'x64';\n\t}\n\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`);\n\n\tconst checksumSha256 = getNodeChecksum(nodeVersion, platform, arch);\n\n\tif (checksumSha256) {\n\t\tlog(`Using SHA256 checksum for checking integrity: ${checksumSha256}`);\n\t} else {\n\t\tlog.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`);\n\t}\n\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `win-${arch}-node.exe`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 }))\n\t\t\t\t.pipe(rename('node.exe'));\n\t\tcase 'darwin':\n\t\tcase 'linux':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 })\n\t\t\t).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t.pipe(rename('node'));\n\t\tcase 'alpine': {\n\t\t\tconst imageName = arch === 'arm64' ? 'arm64v8/node' : 'node';\n\t\t\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`);\n\t\t\tconst contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \\`which node\\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' });\n\t\t\tif (checksumSha256) {\n\t\t\t\tconst actualSHA256Checksum = crypto.createHash('sha256').update(contents).digest('hex');\n\t\t\t\tif (actualSHA256Checksum !== checksumSha256) {\n\t\t\t\t\tthrow new Error(`Checksum mismatch for node.js from docker image (expected ${options.checksumSha256}, actual ${actualSHA256Checksum}))`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]);\n\t\t}\n\t}\n}\n\nfunction packageTask(type, platform, arch, sourceFolderName, destinationFolderName) {\n\tconst destination = path.join(BUILD_ROOT, destinationFolderName);\n\n\treturn () => {\n\t\tconst json = require('gulp-json-editor');\n\n\t\tconst src = gulp.src(sourceFolderName + '/**', { base: '.' })\n\t\t\t.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))\n\t\t\t.pipe(util.setExecutableBit(['**/*.sh']))\n\t\t\t.pipe(filter(['**', '!**/*.js.map']));\n\n\t\tconst workspaceExtensionPoints = ['debuggers', 'jsonValidation'];\n\t\tconst isUIExtension = (manifest) => {\n\t\t\tswitch (manifest.extensionKind) {\n\t\t\t\tcase 'ui': return true;\n\t\t\t\tcase 'workspace': return false;\n\t\t\t\tdefault: {\n\t\t\t\t\tif (manifest.main) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Default is UI Extension\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst localWorkspaceExtensions = glob.sync('extensions/*/package.json')\n\t\t\t.filter((extensionPath) => {\n\t\t\t\tif (type === 'reh-web') {\n\t\t\t\t\treturn true; // web: ship all extensions for now\n\t\t\t\t}\n\n\t\t\t\t// Skip shipping UI extensions because the client side will have them anyways\n\t\t\t\t// and they'd just increase the download without being used\n\t\t\t\tconst manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString());\n\t\t\t\treturn !isUIExtension(manifest);\n\t\t\t}).map((extensionPath) => path.basename(path.dirname(extensionPath)))\n\t\t\t.filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions\n\t\tconst marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions\n\t\t\t.filter(entry => !entry.platforms || new Set(entry.platforms).has(platform))\n\t\t\t.filter(entry => !entry.clientOnly)\n\t\t\t.map(entry => entry.name);\n\t\tconst extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions]\n\t\t\t.map(name => `.build/extensions/${name}/**`);\n\n\t\tconst extensions = gulp.src(extensionPaths, { base: '.build', dot: true });\n\t\tconst extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true });\n\t\tconst sources = es.merge(src, extensions, extensionsCommonDependencies)\n\t\t\t.pipe(filter(['**', '!**/*.js.map'], { dot: true }));\n\n\t\tlet version = packageJson.version;\n\t\tconst quality = product.quality;\n\n\t\tif (quality && quality !== 'stable') {\n\t\t\tversion += '-' + quality;\n\t\t}\n\n\t\tconst name = product.nameShort;\n\t\tconst packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' })\n\t\t\t.pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined }));\n\n\t\tconst date = new Date().toISOString();\n\n\t\tconst productJsonStream = gulp.src(['product.json'], { base: '.' })\n\t\t\t.pipe(json({ commit, date, version }));\n\n\t\tconst license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true });\n\n\t\tconst jsFilter = util.filter(data => !data.isDirectory() && /\\.js$/.test(data.path));\n\n\t\tconst productionDependencies = getProductionDependencies(REMOTE_FOLDER);\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();\n\t\tconst deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })\n\t\t\t// filter out unnecessary files, no source maps in server build\n\t\t\t.pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))\n\t\t\t.pipe(jsFilter)\n\t\t\t.pipe(util.stripSourceMappingURL())\n\t\t\t.pipe(jsFilter.restore);\n\n\t\tconst nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`;\n\t\tconst node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true });\n\n\t\tlet web = [];\n\t\tif (type === 'reh-web') {\n\t\t\tweb = [\n\t\t\t\t'resources/server/favicon.ico',\n\t\t\t\t'resources/server/code-192.png',\n\t\t\t\t'resources/server/code-512.png',\n\t\t\t\t'resources/server/manifest.json'\n\t\t\t].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource)));\n\t\t}\n\n\t\tconst all = es.merge(\n\t\t\tpackageJsonStream,\n\t\t\tproductJsonStream,\n\t\t\tlicense,\n\t\t\tsources,\n\t\t\tdeps,\n\t\t\tnode,\n\t\t\t...web\n\t\t);\n\n\t\tlet result = all\n\t\t\t.pipe(util.skipDirectories())\n\t\t\t.pipe(util.fixWin32DirectoryPermissions());\n\n\t\tif (platform === 'win32') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/code-server.cmd', { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}.cmd`)),\n\t\t\t);\n\t\t} else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.sh`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit())\n\t\t\t);\n\t\t}\n\n\t\treturn result.pipe(vfs.dest(destination));\n\t};\n}\n\n/**\n * @param {object} product The parsed product.json file contents\n */\nfunction tweakProductForServerWeb(product) {\n\tconst result = { ...product };\n\tdelete result.webEndpointUrlTemplate;\n\treturn result;\n}\n\n['reh', 'reh-web'].forEach(type => {\n\tconst optimizeTask = task.define(`optimize-vscode-${type}`, task.series(\n\t\tutil.rimraf(`out-vscode-${type}`),\n\t\toptimize.optimizeTask(\n\t\t\t{\n\t\t\t\tout: `out-vscode-${type}`,\n\t\t\t\tamd: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: (type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints).flat(),\n\t\t\t\t\totherSources: [],\n\t\t\t\t\tresources: type === 'reh' ? serverResources : serverWithWebResources,\n\t\t\t\t\tloaderConfig: optimize.loaderConfig(),\n\t\t\t\t\tinlineAmdImages: true,\n\t\t\t\t\tbundleInfo: undefined,\n\t\t\t\t\tfileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product)\n\t\t\t\t},\n\t\t\t\tcommonJS: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: [\n\t\t\t\t\t\t'out-build/server-main.js',\n\t\t\t\t\t\t'out-build/server-cli.js'\n\t\t\t\t\t],\n\t\t\t\t\tplatform: 'node',\n\t\t\t\t\texternal: [\n\t\t\t\t\t\t'minimist',\n\t\t\t\t\t\t// TODO: we cannot inline `product.json` because\n\t\t\t\t\t\t// it is being changed during build time at a later\n\t\t\t\t\t\t// point in time (such as `checksums`)\n\t\t\t\t\t\t'../product.json',\n\t\t\t\t\t\t'../package.json'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t));\n\n\tconst minifyTask = task.define(`minify-vscode-${type}`, task.series(\n\t\toptimizeTask,\n\t\tutil.rimraf(`out-vscode-${type}-min`),\n\t\toptimize.minifyTask(`out-vscode-${type}`, `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`)\n\t));\n\tgulp.task(minifyTask);\n\n\tBUILD_TARGETS.forEach(buildTarget => {\n\t\tconst dashed = (str) => (str ? `-${str}` : ``);\n\t\tconst platform = buildTarget.platform;\n\t\tconst arch = buildTarget.arch;\n\n\t\t['', 'min'].forEach(minified => {\n\t\t\tconst sourceFolderName = `out-vscode-${type}${dashed(minified)}`;\n\t\t\tconst destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`;\n\n\t\t\tconst serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series(\n\t\t\t\tgulp.task(`node-${platform}-${arch}`),\n\t\t\t\tutil.rimraf(path.join(BUILD_ROOT, destinationFolderName)),\n\t\t\t\tpackageTask(type, platform, arch, sourceFolderName, destinationFolderName)\n\t\t\t));\n\t\t\tgulp.task(serverTaskCI);\n\n\t\t\tconst serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series(\n\t\t\t\tcompileBuildTask,\n\t\t\t\tcompileExtensionsBuildTask,\n\t\t\t\tcompileExtensionMediaBuildTask,\n\t\t\t\tminified ? minifyTask : optimizeTask,\n\t\t\t\tserverTaskCI\n\t\t\t));\n\t\t\tgulp.task(serverTask);\n\t\t});\n\t});\n});\n", + "fileName": "./1.js" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nconst gulp = require('gulp');\nconst path = require('path');\nconst es = require('event-stream');\nconst util = require('./lib/util');\nconst { getVersion } = require('./lib/getVersion');\nconst task = require('./lib/task');\nconst optimize = require('./lib/optimize');\nconst product = require('../product.json');\nconst rename = require('gulp-rename');\nconst replace = require('gulp-replace');\nconst filter = require('gulp-filter');\nconst { getProductionDependencies } = require('./lib/dependencies');\nconst vfs = require('vinyl-fs');\nconst packageJson = require('../package.json');\nconst flatmap = require('gulp-flatmap');\nconst gunzip = require('gulp-gunzip');\nconst File = require('vinyl');\nconst fs = require('fs');\nconst glob = require('glob');\nconst { compileBuildTask } = require('./gulpfile.compile');\nconst { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions');\nconst { vscodeWebEntryPoints, vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } = require('./gulpfile.vscode.web');\nconst cp = require('child_process');\nconst log = require('fancy-log');\n\nconst REPO_ROOT = path.dirname(__dirname);\nconst commit = getVersion(REPO_ROOT);\nconst BUILD_ROOT = path.dirname(REPO_ROOT);\nconst REMOTE_FOLDER = path.join(REPO_ROOT, 'remote');\n\n// Targets\n\nconst BUILD_TARGETS = [\n\t{ platform: 'win32', arch: 'ia32' },\n\t{ platform: 'win32', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'x64' },\n\t{ platform: 'darwin', arch: 'arm64' },\n\t{ platform: 'linux', arch: 'x64' },\n\t{ platform: 'linux', arch: 'armhf' },\n\t{ platform: 'linux', arch: 'arm64' },\n\t{ platform: 'alpine', arch: 'arm64' },\n\t// legacy: we use to ship only one alpine so it was put in the arch, but now we ship\n\t// multiple alpine images and moved to a better model (alpine as the platform)\n\t{ platform: 'linux', arch: 'alpine' },\n];\n\nconst serverResources = [\n\n\t// Bootstrap\n\t'out-build/bootstrap.js',\n\t'out-build/bootstrap-fork.js',\n\t'out-build/bootstrap-amd.js',\n\t'out-build/bootstrap-node.js',\n\n\t// Performance\n\t'out-build/vs/base/common/performance.js',\n\n\t// Watcher\n\t'out-build/vs/platform/files/**/*.exe',\n\t'out-build/vs/platform/files/**/*.md',\n\n\t// Process monitor\n\t'out-build/vs/base/node/cpuUsage.sh',\n\t'out-build/vs/base/node/ps.sh',\n\n\t// Terminal shell integration\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh',\n\t'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish',\n\n\t'!**/test/**'\n];\n\nconst serverWithWebResources = [\n\n\t// Include all of server...\n\t...serverResources,\n\n\t// ...and all of web\n\t...vscodeWebResourceIncludes\n];\n\nconst serverEntryPoints = [\n\t{\n\t\tname: 'vs/server/node/server.main',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/server/node/server.cli',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/workbench/api/node/extensionHostProcess',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/files/node/watcher/watcherMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t},\n\t{\n\t\tname: 'vs/platform/terminal/node/ptyHostMain',\n\t\texclude: ['vs/css', 'vs/nls']\n\t}\n];\n\nconst serverWithWebEntryPoints = [\n\n\t// Include all of server\n\t...serverEntryPoints,\n\n\t// Include workbench web\n\t...vscodeWebEntryPoints\n];\n\nfunction getNodeVersion() {\n\tconst yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8');\n\tconst nodeVersion = /^target \"(.*)\"$/m.exec(yarnrc)[1];\n\tconst internalNodeVersion = /^ms_build_id \"(.*)\"$/m.exec(yarnrc)[1];\n\treturn { nodeVersion, internalNodeVersion };\n}\n\nfunction getNodeChecksum(nodeVersion, platform, arch) {\n\tlet expectedName;\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\texpectedName = `win-${arch}/node.exe`;\n\t\t\tbreak;\n\n\t\tcase 'darwin':\n\t\tcase 'alpine':\n\t\tcase 'linux':\n\t\t\texpectedName = `node-v${nodeVersion}-${platform}-${arch}.tar.gz`;\n\t\t\tbreak;\n\t}\n\n\tconst nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8');\n\tfor (const line of nodeJsChecksums.split('\\n')) {\n\t\tconst [checksum, name] = line.split(/\\s+/);\n\t\tif (name === expectedName) {\n\t\t\treturn checksum;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction extractAlpinefromDocker(nodeVersion, platform, arch) {\n\tconst imageName = arch === 'arm64' ? 'arm64v8/node' : 'node';\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`);\n\tconst contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \\`which node\\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' });\n\treturn es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]);\n}\n\nconst { nodeVersion, internalNodeVersion } = getNodeVersion();\n\nBUILD_TARGETS.forEach(({ platform, arch }) => {\n\tgulp.task(task.define(`node-${platform}-${arch}`, () => {\n\t\tconst nodePath = path.join('.build', 'node', `v${nodeVersion}`, `${platform}-${arch}`);\n\n\t\tif (!fs.existsSync(nodePath)) {\n\t\t\tutil.rimraf(nodePath);\n\n\t\t\treturn nodejs(platform, arch)\n\t\t\t\t.pipe(vfs.dest(nodePath));\n\t\t}\n\n\t\treturn Promise.resolve(null);\n\t}));\n});\n\nconst defaultNodeTask = gulp.task(`node-${process.platform}-${process.arch}`);\n\nif (defaultNodeTask) {\n\tgulp.task(task.define('node', defaultNodeTask));\n}\n\nfunction nodejs(platform, arch) {\n\tconst { fetchUrls, fetchGithub } = require('./lib/fetch');\n\tconst untar = require('gulp-untar');\n\tconst crypto = require('crypto');\n\n\tif (arch === 'ia32') {\n\t\tarch = 'x86';\n\t} else if (arch === 'armhf') {\n\t\tarch = 'armv7l';\n\t} else if (arch === 'alpine') {\n\t\tplatform = 'alpine';\n\t\tarch = 'x64';\n\t}\n\n\tlog(`Downloading node.js ${nodeVersion} ${platform} ${arch} from ${product.nodejsRepository}...`);\n\n\tconst checksumSha256 = getNodeChecksum(nodeVersion, platform, arch);\n\n\tif (checksumSha256) {\n\t\tlog(`Using SHA256 checksum for checking integrity: ${checksumSha256}`);\n\t} else {\n\t\tlog.warn(`Unable to verify integrity of downloaded node.js binary because no SHA256 checksum was found!`);\n\t}\n\n\tswitch (platform) {\n\t\tcase 'win32':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `win-${arch}-node.exe`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/win-${arch}/node.exe`, { base: 'https://nodejs.org', checksumSha256 }))\n\t\t\t\t.pipe(rename('node.exe'));\n\t\tcase 'darwin':\n\t\tcase 'linux':\n\t\t\treturn (product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 }) :\n\t\t\t\tfetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 })\n\t\t\t).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t.pipe(rename('node'));\n\t\tcase 'alpine':\n\t\t\treturn product.nodejsRepository !== 'https://nodejs.org' ?\n\t\t\t\tfetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: `node-v${nodeVersion}-${platform}-${arch}.tar.gz`, checksumSha256 })\n\t\t\t\t\t.pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))\n\t\t\t\t\t.pipe(filter('**/node'))\n\t\t\t\t\t.pipe(util.setExecutableBit('**'))\n\t\t\t\t\t.pipe(rename('node'))\n\t\t\t\t: extractAlpinefromDocker(nodeVersion, platform, arch);\n\t}\n}\n\nfunction packageTask(type, platform, arch, sourceFolderName, destinationFolderName) {\n\tconst destination = path.join(BUILD_ROOT, destinationFolderName);\n\n\treturn () => {\n\t\tconst json = require('gulp-json-editor');\n\n\t\tconst src = gulp.src(sourceFolderName + '/**', { base: '.' })\n\t\t\t.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))\n\t\t\t.pipe(util.setExecutableBit(['**/*.sh']))\n\t\t\t.pipe(filter(['**', '!**/*.js.map']));\n\n\t\tconst workspaceExtensionPoints = ['debuggers', 'jsonValidation'];\n\t\tconst isUIExtension = (manifest) => {\n\t\t\tswitch (manifest.extensionKind) {\n\t\t\t\tcase 'ui': return true;\n\t\t\t\tcase 'workspace': return false;\n\t\t\t\tdefault: {\n\t\t\t\t\tif (manifest.main) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (manifest.contributes && Object.keys(manifest.contributes).some(key => workspaceExtensionPoints.indexOf(key) !== -1)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Default is UI Extension\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst localWorkspaceExtensions = glob.sync('extensions/*/package.json')\n\t\t\t.filter((extensionPath) => {\n\t\t\t\tif (type === 'reh-web') {\n\t\t\t\t\treturn true; // web: ship all extensions for now\n\t\t\t\t}\n\n\t\t\t\t// Skip shipping UI extensions because the client side will have them anyways\n\t\t\t\t// and they'd just increase the download without being used\n\t\t\t\tconst manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString());\n\t\t\t\treturn !isUIExtension(manifest);\n\t\t\t}).map((extensionPath) => path.basename(path.dirname(extensionPath)))\n\t\t\t.filter(name => name !== 'vscode-api-tests' && name !== 'vscode-test-resolver'); // Do not ship the test extensions\n\t\tconst marketplaceExtensions = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'product.json'), 'utf8')).builtInExtensions\n\t\t\t.filter(entry => !entry.platforms || new Set(entry.platforms).has(platform))\n\t\t\t.filter(entry => !entry.clientOnly)\n\t\t\t.map(entry => entry.name);\n\t\tconst extensionPaths = [...localWorkspaceExtensions, ...marketplaceExtensions]\n\t\t\t.map(name => `.build/extensions/${name}/**`);\n\n\t\tconst extensions = gulp.src(extensionPaths, { base: '.build', dot: true });\n\t\tconst extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true });\n\t\tconst sources = es.merge(src, extensions, extensionsCommonDependencies)\n\t\t\t.pipe(filter(['**', '!**/*.js.map'], { dot: true }));\n\n\t\tlet version = packageJson.version;\n\t\tconst quality = product.quality;\n\n\t\tif (quality && quality !== 'stable') {\n\t\t\tversion += '-' + quality;\n\t\t}\n\n\t\tconst name = product.nameShort;\n\t\tconst packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' })\n\t\t\t.pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined }));\n\n\t\tconst date = new Date().toISOString();\n\n\t\tconst productJsonStream = gulp.src(['product.json'], { base: '.' })\n\t\t\t.pipe(json({ commit, date, version }));\n\n\t\tconst license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true });\n\n\t\tconst jsFilter = util.filter(data => !data.isDirectory() && /\\.js$/.test(data.path));\n\n\t\tconst productionDependencies = getProductionDependencies(REMOTE_FOLDER);\n\t\tconst dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();\n\t\tconst deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })\n\t\t\t// filter out unnecessary files, no source maps in server build\n\t\t\t.pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))\n\t\t\t.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))\n\t\t\t.pipe(jsFilter)\n\t\t\t.pipe(util.stripSourceMappingURL())\n\t\t\t.pipe(jsFilter.restore);\n\n\t\tconst nodePath = `.build/node/v${nodeVersion}/${platform}-${arch}`;\n\t\tconst node = gulp.src(`${nodePath}/**`, { base: nodePath, dot: true });\n\n\t\tlet web = [];\n\t\tif (type === 'reh-web') {\n\t\t\tweb = [\n\t\t\t\t'resources/server/favicon.ico',\n\t\t\t\t'resources/server/code-192.png',\n\t\t\t\t'resources/server/code-512.png',\n\t\t\t\t'resources/server/manifest.json'\n\t\t\t].map(resource => gulp.src(resource, { base: '.' }).pipe(rename(resource)));\n\t\t}\n\n\t\tconst all = es.merge(\n\t\t\tpackageJsonStream,\n\t\t\tproductJsonStream,\n\t\t\tlicense,\n\t\t\tsources,\n\t\t\tdeps,\n\t\t\tnode,\n\t\t\t...web\n\t\t);\n\n\t\tlet result = all\n\t\t\t.pipe(util.skipDirectories())\n\t\t\t.pipe(util.fixWin32DirectoryPermissions());\n\n\t\tif (platform === 'win32') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src('resources/server/bin/remote-cli/code.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/helpers/browser.cmd', { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.cmd`)),\n\t\t\t\tgulp.src('resources/server/bin/code-server.cmd', { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}.cmd`)),\n\t\t\t);\n\t\t} else if (platform === 'linux' || platform === 'alpine' || platform === 'darwin') {\n\t\t\tresult = es.merge(result,\n\t\t\t\tgulp.src(`resources/server/bin/remote-cli/${platform === 'darwin' ? 'code-darwin.sh' : 'code-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/remote-cli/${product.applicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/helpers/${platform === 'darwin' ? 'browser-darwin.sh' : 'browser-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(replace('@@VERSION@@', version))\n\t\t\t\t\t.pipe(replace('@@COMMIT@@', commit))\n\t\t\t\t\t.pipe(replace('@@APPNAME@@', product.applicationName))\n\t\t\t\t\t.pipe(rename(`bin/helpers/browser.sh`))\n\t\t\t\t\t.pipe(util.setExecutableBit()),\n\t\t\t\tgulp.src(`resources/server/bin/${platform === 'darwin' ? 'code-server-darwin.sh' : 'code-server-linux.sh'}`, { base: '.' })\n\t\t\t\t\t.pipe(rename(`bin/${product.serverApplicationName}`))\n\t\t\t\t\t.pipe(util.setExecutableBit())\n\t\t\t);\n\t\t}\n\n\t\treturn result.pipe(vfs.dest(destination));\n\t};\n}\n\n/**\n * @param {object} product The parsed product.json file contents\n */\nfunction tweakProductForServerWeb(product) {\n\tconst result = { ...product };\n\tdelete result.webEndpointUrlTemplate;\n\treturn result;\n}\n\n['reh', 'reh-web'].forEach(type => {\n\tconst optimizeTask = task.define(`optimize-vscode-${type}`, task.series(\n\t\tutil.rimraf(`out-vscode-${type}`),\n\t\toptimize.optimizeTask(\n\t\t\t{\n\t\t\t\tout: `out-vscode-${type}`,\n\t\t\t\tamd: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: (type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints).flat(),\n\t\t\t\t\totherSources: [],\n\t\t\t\t\tresources: type === 'reh' ? serverResources : serverWithWebResources,\n\t\t\t\t\tloaderConfig: optimize.loaderConfig(),\n\t\t\t\t\tinlineAmdImages: true,\n\t\t\t\t\tbundleInfo: undefined,\n\t\t\t\t\tfileContentMapper: createVSCodeWebFileContentMapper('.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product)\n\t\t\t\t},\n\t\t\t\tcommonJS: {\n\t\t\t\t\tsrc: 'out-build',\n\t\t\t\t\tentryPoints: [\n\t\t\t\t\t\t'out-build/server-main.js',\n\t\t\t\t\t\t'out-build/server-cli.js'\n\t\t\t\t\t],\n\t\t\t\t\tplatform: 'node',\n\t\t\t\t\texternal: [\n\t\t\t\t\t\t'minimist',\n\t\t\t\t\t\t// TODO: we cannot inline `product.json` because\n\t\t\t\t\t\t// it is being changed during build time at a later\n\t\t\t\t\t\t// point in time (such as `checksums`)\n\t\t\t\t\t\t'../product.json',\n\t\t\t\t\t\t'../package.json'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t));\n\n\tconst minifyTask = task.define(`minify-vscode-${type}`, task.series(\n\t\toptimizeTask,\n\t\tutil.rimraf(`out-vscode-${type}-min`),\n\t\toptimize.minifyTask(`out-vscode-${type}`, `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`)\n\t));\n\tgulp.task(minifyTask);\n\n\tBUILD_TARGETS.forEach(buildTarget => {\n\t\tconst dashed = (str) => (str ? `-${str}` : ``);\n\t\tconst platform = buildTarget.platform;\n\t\tconst arch = buildTarget.arch;\n\n\t\t['', 'min'].forEach(minified => {\n\t\t\tconst sourceFolderName = `out-vscode-${type}${dashed(minified)}`;\n\t\t\tconst destinationFolderName = `vscode-${type}${dashed(platform)}${dashed(arch)}`;\n\n\t\t\tconst serverTaskCI = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series(\n\t\t\t\tgulp.task(`node-${platform}-${arch}`),\n\t\t\t\tutil.rimraf(path.join(BUILD_ROOT, destinationFolderName)),\n\t\t\t\tpackageTask(type, platform, arch, sourceFolderName, destinationFolderName)\n\t\t\t));\n\t\t\tgulp.task(serverTaskCI);\n\n\t\t\tconst serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series(\n\t\t\t\tcompileBuildTask,\n\t\t\t\tcompileExtensionsBuildTask,\n\t\t\t\tcompileExtensionMediaBuildTask,\n\t\t\t\tminified ? minifyTask : optimizeTask,\n\t\t\t\tserverTaskCI\n\t\t\t));\n\t\t\tgulp.task(serverTask);\n\t\t});\n\t});\n});\n", + "fileName": "./2.js" + }, + "diffs": [ + { + "originalRange": "[141,141)", + "modifiedRange": "[141,142)", + "innerChanges": null + }, + { + "originalRange": "[144,148)", + "modifiedRange": "[145,145)", + "innerChanges": null + }, + { + "originalRange": "[160,160)", + "modifiedRange": "[157,164)", + "innerChanges": null + }, + { + "originalRange": "[222,234)", + "modifiedRange": "[226,234)", + "innerChanges": [ + { + "originalRange": "[222,17 -> 222,19]", + "modifiedRange": "[226,17 -> 226,17]" + }, + { + "originalRange": "[223,4 -> 223,28]", + "modifiedRange": "[227,4 -> 227,37]" + }, + { + "originalRange": "[223,32 -> 223,49]", + "modifiedRange": "[227,41 -> 227,48]" + }, + { + "originalRange": "[223,54 -> 223,65]", + "modifiedRange": "[227,53 -> 227,62]" + }, + { + "originalRange": "[224,4 -> 224,21]", + "modifiedRange": "[228,4 -> 228,25]" + }, + { + "originalRange": "[224,25 -> 224,29]", + "modifiedRange": "[228,29 -> 228,55]" + }, + { + "originalRange": "[224,43 -> 225,63]", + "modifiedRange": "[228,69 -> 228,108]" + }, + { + "originalRange": "[225,78 -> 226,8]", + "modifiedRange": "[228,123 -> 228,152]" + }, + { + "originalRange": "[226,22 -> 226,25]", + "modifiedRange": "[228,166 -> 228,169]" + }, + { + "originalRange": "[227,5 -> 227,30]", + "modifiedRange": "[229,5 -> 229,25]" + }, + { + "originalRange": "[227,33 -> 227,42]", + "modifiedRange": "[229,28 -> 229,32]" + }, + { + "originalRange": "[227,45 -> 227,93]", + "modifiedRange": "[229,35 -> 229,67]" + }, + { + "originalRange": "[228,5 -> 228,51]", + "modifiedRange": "[230,5 -> 230,30]" + }, + { + "originalRange": "[229,6 -> 230,6]", + "modifiedRange": "[231,6 -> 231,40]" + }, + { + "originalRange": "[231,4 -> 232,42]", + "modifiedRange": "[232,4 -> 232,19]" + }, + { + "originalRange": "[232,48 -> 232,69]", + "modifiedRange": "[232,25 -> 233,32]" + }, + { + "originalRange": "[232,72 -> 233,4]", + "modifiedRange": "[233,35 -> 233,60]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/equals/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/equals/advanced.expected.diff.json new file mode 100644 index 00000000000..5b8da09f932 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/equals/advanced.expected.diff.json @@ -0,0 +1,11 @@ +{ + "original": { + "content": "hello\nworld", + "fileName": "./1.txt" + }, + "modified": { + "content": "hello\nworld", + "fileName": "./2.txt" + }, + "diffs": [] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/equals/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/equals/experimental.expected.diff.json deleted file mode 100644 index a4f5476baf2..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/equals/experimental.expected.diff.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", - "diffs": [] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/equals/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/equals/legacy.expected.diff.json new file mode 100644 index 00000000000..5b8da09f932 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/equals/legacy.expected.diff.json @@ -0,0 +1,11 @@ +{ + "original": { + "content": "hello\nworld", + "fileName": "./1.txt" + }, + "modified": { + "content": "hello\nworld", + "fileName": "./2.txt" + }, + "diffs": [] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/equals/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/equals/smart.expected.diff.json deleted file mode 100644 index a4f5476baf2..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/equals/smart.expected.diff.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", - "diffs": [] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/advanced.expected.diff.json similarity index 51% rename from src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/experimental.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/advanced.expected.diff.json index 52c3f93400f..ed6c0fe7ff1 100644 --- a/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/advanced.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", + "original": { + "content": "\nconsole.log(1)\nconsole.log(2)\nconsole.log(3)\nconsole.log(4)\nconsole.log(5)\nconsole.log(6)\nconsole.log(7)\n", + "fileName": "./1.txt" + }, + "modified": { + "content": "console.log(1);\nconsole.log(2);\nconsole.log(3);\nconsole.log(4);\n\nconsole.log(5);\nconsole.log(6);\nconsole.log(7);\n\n", + "fileName": "./2.txt" + }, "diffs": [ { "originalRange": "[1,1)", diff --git a/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/legacy.expected.diff.json new file mode 100644 index 00000000000..f30b581bd3f --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "\nconsole.log(1)\nconsole.log(2)\nconsole.log(3)\nconsole.log(4)\nconsole.log(5)\nconsole.log(6)\nconsole.log(7)\n", + "fileName": "./1.txt" + }, + "modified": { + "content": "console.log(1);\nconsole.log(2);\nconsole.log(3);\nconsole.log(4);\n\nconsole.log(5);\nconsole.log(6);\nconsole.log(7);\n\n", + "fileName": "./2.txt" + }, + "diffs": [ + { + "originalRange": "[1,1)", + "modifiedRange": "[1,9)", + "innerChanges": null + }, + { + "originalRange": "[2,9)", + "modifiedRange": "[10,10)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/smart.expected.diff.json deleted file mode 100644 index 3a2b5cf1e02..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", - "diffs": [ - { - "originalRange": "[1,1)", - "modifiedRange": "[1,9)", - "innerChanges": null - }, - { - "originalRange": "[2,9)", - "modifiedRange": "[10,10)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/indentation/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/indentation/advanced.expected.diff.json new file mode 100644 index 00000000000..2e7031437fa --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/indentation/advanced.expected.diff.json @@ -0,0 +1,88 @@ +{ + "original": { + "content": "export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): LineRangeMapping[] {\n\tconst changes: LineRangeMapping[] = [];\n\tfor (const g of group(\n\t\talignments,\n\t\t(a1, a2) =>\n\t\t\t(a2.originalRange.startLineNumber - (a1.originalRange.endLineNumber - (a1.originalRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t\t\t|| (a2.modifiedRange.startLineNumber - (a1.modifiedRange.endLineNumber - (a1.modifiedRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t)) {\n\t\tconst first = g[0];\n\t\tconst last = g[g.length - 1];\n\n\t\tchanges.push(new LineRangeMapping(\n\t\t\tnew LineRange(\n\t\t\t\tfirst.originalRange.startLineNumber,\n\t\t\t\tlast.originalRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t),\n\t\t\tnew LineRange(\n\t\t\t\tfirst.modifiedRange.startLineNumber,\n\t\t\t\tlast.modifiedRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t),\n\t\t\tg\n\t\t));\n\t}\n\n\tassertFn(() => {\n\t\treturn checkAdjacentItems(changes,\n\t\t\t(m1, m2) => m2.originalRange.startLineNumber - m1.originalRange.endLineNumberExclusive === m2.modifiedRange.startLineNumber - m1.modifiedRange.endLineNumberExclusive &&\n\t\t\t\t// There has to be an unchanged line in between (otherwise both diffs should have been joined)\n\t\t\t\tm1.originalRange.endLineNumberExclusive < m2.originalRange.startLineNumber &&\n\t\t\t\tm1.modifiedRange.endLineNumberExclusive < m2.modifiedRange.startLineNumber,\n\t\t);\n\t});\n\n\n\treturn changes;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): LineRangeMapping[] {\n\tconst changes: LineRangeMapping[] = [];\n\tfor (const g of group(\n\t\talignments,\n\t\t(a1, a2) =>\n\t\t\t(a2.originalRange.startLineNumber - (a1.originalRange.endLineNumber - (a1.originalRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t\t\t|| (a2.modifiedRange.startLineNumber - (a1.modifiedRange.endLineNumber - (a1.modifiedRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t)) {\n\t\tif (true) {\n\t\t\tconst first = g[0];\n\t\t\tconst last = g[g.length - 1];\n\n\t\t\tchanges.push(new LineRangeMapping(\n\t\t\t\tnew LineRange(\n\t\t\t\t\tfirst.originalRange.startLineNumber,\n\t\t\t\t\tlast.originalRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t\t),\n\t\t\t\tnew LineRange(\n\t\t\t\t\tfirst.modifiedRange.startLineNumber,\n\t\t\t\t\tlast.modifiedRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t\t),\n\t\t\t\tg\n\t\t\t));\n\t\t}\n\t}\n\n\tassertFn(() => {\n\t\treturn checkAdjacentItems(changes,\n\t\t\t(m1, m2) => m2.originalRange.startLineNumber - m1.originalRange.endLineNumberExclusive === m2.modifiedRange.startLineNumber - m1.modifiedRange.endLineNumberExclusive &&\n\t\t\t\t// There has to be an unchanged line in between (otherwise both diffs should have been joined)\n\t\t\t\tm1.originalRange.endLineNumberExclusive < m2.originalRange.startLineNumber &&\n\t\t\t\tm1.modifiedRange.endLineNumberExclusive < m2.modifiedRange.startLineNumber,\n\t\t);\n\t});\n\n\n\treturn changes;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,11)", + "modifiedRange": "[9,12)", + "innerChanges": [ + { + "originalRange": "[9,1 -> 9,1]", + "modifiedRange": "[9,1 -> 10,1]" + }, + { + "originalRange": "[9,1 -> 9,1]", + "modifiedRange": "[10,1 -> 10,2]" + }, + { + "originalRange": "[10,1 -> 10,1]", + "modifiedRange": "[11,1 -> 11,2]" + } + ] + }, + { + "originalRange": "[12,24)", + "modifiedRange": "[13,26)", + "innerChanges": [ + { + "originalRange": "[12,1 -> 12,1]", + "modifiedRange": "[13,1 -> 13,2]" + }, + { + "originalRange": "[13,1 -> 13,1]", + "modifiedRange": "[14,1 -> 14,2]" + }, + { + "originalRange": "[14,1 -> 14,1]", + "modifiedRange": "[15,1 -> 15,2]" + }, + { + "originalRange": "[15,1 -> 15,1]", + "modifiedRange": "[16,1 -> 16,2]" + }, + { + "originalRange": "[16,1 -> 16,1]", + "modifiedRange": "[17,1 -> 17,2]" + }, + { + "originalRange": "[17,1 -> 17,1]", + "modifiedRange": "[18,1 -> 18,2]" + }, + { + "originalRange": "[18,1 -> 18,1]", + "modifiedRange": "[19,1 -> 19,2]" + }, + { + "originalRange": "[19,1 -> 19,1]", + "modifiedRange": "[20,1 -> 20,2]" + }, + { + "originalRange": "[20,1 -> 20,1]", + "modifiedRange": "[21,1 -> 21,2]" + }, + { + "originalRange": "[21,1 -> 21,1]", + "modifiedRange": "[22,1 -> 22,2]" + }, + { + "originalRange": "[22,1 -> 22,1]", + "modifiedRange": "[23,1 -> 23,2]" + }, + { + "originalRange": "[23,1 -> 23,1]", + "modifiedRange": "[24,1 -> 24,2]" + }, + { + "originalRange": "[24,1 -> 24,1]", + "modifiedRange": "[25,1 -> 26,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/indentation/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/indentation/experimental.expected.diff.json deleted file mode 100644 index 9eea9d215ec..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/indentation/experimental.expected.diff.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,11)", - "modifiedRange": "[9,12)", - "innerChanges": [ - { - "originalRange": "[9,1 -> 9,1]", - "modifiedRange": "[9,1 -> 10,1]" - }, - { - "originalRange": "[9,1 -> 9,1]", - "modifiedRange": "[10,1 -> 10,2]" - }, - { - "originalRange": "[10,1 -> 10,1]", - "modifiedRange": "[11,1 -> 11,2]" - } - ] - }, - { - "originalRange": "[12,24)", - "modifiedRange": "[13,26)", - "innerChanges": [ - { - "originalRange": "[12,1 -> 12,1]", - "modifiedRange": "[13,1 -> 13,2]" - }, - { - "originalRange": "[13,1 -> 13,1]", - "modifiedRange": "[14,1 -> 14,2]" - }, - { - "originalRange": "[14,1 -> 14,1]", - "modifiedRange": "[15,1 -> 15,2]" - }, - { - "originalRange": "[15,1 -> 15,1]", - "modifiedRange": "[16,1 -> 16,2]" - }, - { - "originalRange": "[16,1 -> 16,1]", - "modifiedRange": "[17,1 -> 17,2]" - }, - { - "originalRange": "[17,1 -> 17,1]", - "modifiedRange": "[18,1 -> 18,2]" - }, - { - "originalRange": "[18,1 -> 18,1]", - "modifiedRange": "[19,1 -> 19,2]" - }, - { - "originalRange": "[19,1 -> 19,1]", - "modifiedRange": "[20,1 -> 20,2]" - }, - { - "originalRange": "[20,1 -> 20,1]", - "modifiedRange": "[21,1 -> 21,2]" - }, - { - "originalRange": "[21,1 -> 21,1]", - "modifiedRange": "[22,1 -> 22,2]" - }, - { - "originalRange": "[22,1 -> 22,1]", - "modifiedRange": "[23,1 -> 23,2]" - }, - { - "originalRange": "[23,1 -> 23,1]", - "modifiedRange": "[24,1 -> 24,2]" - }, - { - "originalRange": "[24,1 -> 24,1]", - "modifiedRange": "[25,1 -> 26,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/indentation/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/indentation/legacy.expected.diff.json new file mode 100644 index 00000000000..06d9414be5c --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/indentation/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): LineRangeMapping[] {\n\tconst changes: LineRangeMapping[] = [];\n\tfor (const g of group(\n\t\talignments,\n\t\t(a1, a2) =>\n\t\t\t(a2.originalRange.startLineNumber - (a1.originalRange.endLineNumber - (a1.originalRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t\t\t|| (a2.modifiedRange.startLineNumber - (a1.modifiedRange.endLineNumber - (a1.modifiedRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t)) {\n\t\tconst first = g[0];\n\t\tconst last = g[g.length - 1];\n\n\t\tchanges.push(new LineRangeMapping(\n\t\t\tnew LineRange(\n\t\t\t\tfirst.originalRange.startLineNumber,\n\t\t\t\tlast.originalRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t),\n\t\t\tnew LineRange(\n\t\t\t\tfirst.modifiedRange.startLineNumber,\n\t\t\t\tlast.modifiedRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t),\n\t\t\tg\n\t\t));\n\t}\n\n\tassertFn(() => {\n\t\treturn checkAdjacentItems(changes,\n\t\t\t(m1, m2) => m2.originalRange.startLineNumber - m1.originalRange.endLineNumberExclusive === m2.modifiedRange.startLineNumber - m1.modifiedRange.endLineNumberExclusive &&\n\t\t\t\t// There has to be an unchanged line in between (otherwise both diffs should have been joined)\n\t\t\t\tm1.originalRange.endLineNumberExclusive < m2.originalRange.startLineNumber &&\n\t\t\t\tm1.modifiedRange.endLineNumberExclusive < m2.modifiedRange.startLineNumber,\n\t\t);\n\t});\n\n\n\treturn changes;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): LineRangeMapping[] {\n\tconst changes: LineRangeMapping[] = [];\n\tfor (const g of group(\n\t\talignments,\n\t\t(a1, a2) =>\n\t\t\t(a2.originalRange.startLineNumber - (a1.originalRange.endLineNumber - (a1.originalRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t\t\t|| (a2.modifiedRange.startLineNumber - (a1.modifiedRange.endLineNumber - (a1.modifiedRange.endColumn > 1 ? 0 : 1)) <= 1)\n\t)) {\n\t\tif (true) {\n\t\t\tconst first = g[0];\n\t\t\tconst last = g[g.length - 1];\n\n\t\t\tchanges.push(new LineRangeMapping(\n\t\t\t\tnew LineRange(\n\t\t\t\t\tfirst.originalRange.startLineNumber,\n\t\t\t\t\tlast.originalRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t\t),\n\t\t\t\tnew LineRange(\n\t\t\t\t\tfirst.modifiedRange.startLineNumber,\n\t\t\t\t\tlast.modifiedRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)\n\t\t\t\t),\n\t\t\t\tg\n\t\t\t));\n\t\t}\n\t}\n\n\tassertFn(() => {\n\t\treturn checkAdjacentItems(changes,\n\t\t\t(m1, m2) => m2.originalRange.startLineNumber - m1.originalRange.endLineNumberExclusive === m2.modifiedRange.startLineNumber - m1.modifiedRange.endLineNumberExclusive &&\n\t\t\t\t// There has to be an unchanged line in between (otherwise both diffs should have been joined)\n\t\t\t\tm1.originalRange.endLineNumberExclusive < m2.originalRange.startLineNumber &&\n\t\t\t\tm1.modifiedRange.endLineNumberExclusive < m2.modifiedRange.startLineNumber,\n\t\t);\n\t});\n\n\n\treturn changes;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,11)", + "modifiedRange": "[9,12)", + "innerChanges": null + }, + { + "originalRange": "[12,23)", + "modifiedRange": "[13,25)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/indentation/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/indentation/smart.expected.diff.json deleted file mode 100644 index 1673eac315e..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/indentation/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,11)", - "modifiedRange": "[9,12)", - "innerChanges": null - }, - { - "originalRange": "[12,23)", - "modifiedRange": "[13,25)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/advanced.expected.diff.json similarity index 61% rename from src/vs/editor/test/node/diffing/fixtures/intra-block-align/smart.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/intra-block-align/advanced.expected.diff.json index 7ac4028731d..84c7fde1881 100644 --- a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/smart.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/advanced.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", + "original": { + "content": "console.log(1);\nconsole.log(2);\nconsole.log(3);\nconsole.log(4);\n", + "fileName": "./1.txt" + }, + "modified": { + "content": "console.log(1)\nconsole.log(2)\nconsole.log(4)\n", + "fileName": "./2.txt" + }, "diffs": [ { "originalRange": "[1,5)", diff --git a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/legacy.expected.diff.json similarity index 61% rename from src/vs/editor/test/node/diffing/fixtures/intra-block-align/experimental.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/intra-block-align/legacy.expected.diff.json index 7ac4028731d..84c7fde1881 100644 --- a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/legacy.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", + "original": { + "content": "console.log(1);\nconsole.log(2);\nconsole.log(3);\nconsole.log(4);\n", + "fileName": "./1.txt" + }, + "modified": { + "content": "console.log(1)\nconsole.log(2)\nconsole.log(4)\n", + "fileName": "./2.txt" + }, "diffs": [ { "originalRange": "[1,5)", diff --git a/src/vs/editor/test/node/diffing/fixtures/issue-185779/1.txt b/src/vs/editor/test/node/diffing/fixtures/issue-185779/1.txt new file mode 100644 index 00000000000..e1ee6f98d0d --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/issue-185779/1.txt @@ -0,0 +1,39 @@ + + private doAddView(view: IView, size: number | Sizing, index = this.viewItems.length, skipLayout?: boolean): void { + if (this.state !== State.Idle) { + throw new Error('Cant modify splitview'); + } + + this.state = State.Busy; + + // Add view + const container = $('.split-view-view'); + + if (index === this.viewItems.length) { + this.viewContainer.appendChild(container); + } else { + this.viewContainer.insertBefore(container, this.viewContainer.children.item(index)); + } + + const onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size)); + const containerDisposable = toDisposable(() => this.viewContainer.removeChild(container)); + const disposable = combinedDisposable(onChangeDisposable, containerDisposable); + + let viewSize: ViewItemSize; + + if (typeof size === 'number') { + viewSize = size; + } else if (size.type === 'split') { + viewSize = this.getViewSize(size.index) / 2; + } else if (size.type === 'invisible') { + viewSize = { cachedVisibleSize: size.cachedVisibleSize }; + } else { + viewSize = view.minimumSize; + } + + const item = this.orientation === Orientation.VERTICAL + ? new VerticalViewItem(container, view, viewSize, disposable) + : new HorizontalViewItem(container, view, viewSize, disposable); + + this.viewItems.splice(index, 0, item); + diff --git a/src/vs/editor/test/node/diffing/fixtures/issue-185779/2.txt b/src/vs/editor/test/node/diffing/fixtures/issue-185779/2.txt new file mode 100644 index 00000000000..37213c20877 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/issue-185779/2.txt @@ -0,0 +1,49 @@ + + private doAddView(view: IView, size: number | Sizing, index = this.viewItems.length, skipLayout?: boolean): void { + if (this.state !== State.Idle) { + throw new Error('Cant modify splitview'); + } + + this.state = State.Busy; + + // Add view + const container = $('.split-view-view'); + + if (index === this.viewItems.length) { + this.viewContainer.appendChild(container); + } else { + this.viewContainer.insertBefore(container, this.viewContainer.children.item(index)); + } + + const onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size)); + const containerDisposable = toDisposable(() => this.viewContainer.removeChild(container)); + const disposable = combinedDisposable(onChangeDisposable, containerDisposable); + + let viewSize: ViewItemSize; + + if (typeof size === 'number') { + viewSize = size; + } else { + if (size.type === 'auto') { + if (this.areViewsDistributed()) { + size = { type: 'distribute' }; + } else { + size = { type: 'split', index: size.index }; + } + } + + if (size.type === 'split') { + viewSize = this.getViewSize(size.index) / 2; + } else if (size.type === 'invisible') { + viewSize = { cachedVisibleSize: size.cachedVisibleSize }; + } else { + viewSize = view.minimumSize; + } + } + + const item = this.orientation === Orientation.VERTICAL + ? new VerticalViewItem(container, view, viewSize, disposable) + : new HorizontalViewItem(container, view, viewSize, disposable); + + this.viewItems.splice(index, 0, item); + diff --git a/src/vs/editor/test/node/diffing/fixtures/issue-185779/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/issue-185779/advanced.expected.diff.json new file mode 100644 index 00000000000..d3a24ad44f2 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/issue-185779/advanced.expected.diff.json @@ -0,0 +1,50 @@ +{ + "original": { + "content": "\n\tprivate doAddView(view: IView, size: number | Sizing, index = this.viewItems.length, skipLayout?: boolean): void {\n\t\tif (this.state !== State.Idle) {\n\t\t\tthrow new Error('Cant modify splitview');\n\t\t}\n\n\t\tthis.state = State.Busy;\n\n\t\t// Add view\n\t\tconst container = $('.split-view-view');\n\n\t\tif (index === this.viewItems.length) {\n\t\t\tthis.viewContainer.appendChild(container);\n\t\t} else {\n\t\t\tthis.viewContainer.insertBefore(container, this.viewContainer.children.item(index));\n\t\t}\n\n\t\tconst onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size));\n\t\tconst containerDisposable = toDisposable(() => this.viewContainer.removeChild(container));\n\t\tconst disposable = combinedDisposable(onChangeDisposable, containerDisposable);\n\n\t\tlet viewSize: ViewItemSize;\n\n\t\tif (typeof size === 'number') {\n\t\t\tviewSize = size;\n\t\t} else if (size.type === 'split') {\n\t\t\tviewSize = this.getViewSize(size.index) / 2;\n\t\t} else if (size.type === 'invisible') {\n\t\t\tviewSize = { cachedVisibleSize: size.cachedVisibleSize };\n\t\t} else {\n\t\t\tviewSize = view.minimumSize;\n\t\t}\n\n\t\tconst item = this.orientation === Orientation.VERTICAL\n\t\t\t? new VerticalViewItem(container, view, viewSize, disposable)\n\t\t\t: new HorizontalViewItem(container, view, viewSize, disposable);\n\n\t\tthis.viewItems.splice(index, 0, item);\n\n", + "fileName": "./1.txt" + }, + "modified": { + "content": "\n\tprivate doAddView(view: IView, size: number | Sizing, index = this.viewItems.length, skipLayout?: boolean): void {\n\t\tif (this.state !== State.Idle) {\n\t\t\tthrow new Error('Cant modify splitview');\n\t\t}\n\n\t\tthis.state = State.Busy;\n\n\t\t// Add view\n\t\tconst container = $('.split-view-view');\n\n\t\tif (index === this.viewItems.length) {\n\t\t\tthis.viewContainer.appendChild(container);\n\t\t} else {\n\t\t\tthis.viewContainer.insertBefore(container, this.viewContainer.children.item(index));\n\t\t}\n\n\t\tconst onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size));\n\t\tconst containerDisposable = toDisposable(() => this.viewContainer.removeChild(container));\n\t\tconst disposable = combinedDisposable(onChangeDisposable, containerDisposable);\n\n\t\tlet viewSize: ViewItemSize;\n\n\t\tif (typeof size === 'number') {\n\t\t\tviewSize = size;\n\t\t} else {\n\t\t\tif (size.type === 'auto') {\n\t\t\t\tif (this.areViewsDistributed()) {\n\t\t\t\t\tsize = { type: 'distribute' };\n\t\t\t\t} else {\n\t\t\t\t\tsize = { type: 'split', index: size.index };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (size.type === 'split') {\n\t\t\t\tviewSize = this.getViewSize(size.index) / 2;\n\t\t\t} else if (size.type === 'invisible') {\n\t\t\t\tviewSize = { cachedVisibleSize: size.cachedVisibleSize };\n\t\t\t} else {\n\t\t\t\tviewSize = view.minimumSize;\n\t\t\t}\n\t\t}\n\n\t\tconst item = this.orientation === Orientation.VERTICAL\n\t\t\t? new VerticalViewItem(container, view, viewSize, disposable)\n\t\t\t: new HorizontalViewItem(container, view, viewSize, disposable);\n\n\t\tthis.viewItems.splice(index, 0, item);\n\n", + "fileName": "./2.txt" + }, + "diffs": [ + { + "originalRange": "[26,33)", + "modifiedRange": "[26,43)", + "innerChanges": [ + { + "originalRange": "[26,10 -> 26,10]", + "modifiedRange": "[26,10 -> 35,4]" + }, + { + "originalRange": "[27,1 -> 27,1]", + "modifiedRange": "[36,1 -> 36,2]" + }, + { + "originalRange": "[28,1 -> 28,1]", + "modifiedRange": "[37,1 -> 37,2]" + }, + { + "originalRange": "[29,1 -> 29,1]", + "modifiedRange": "[38,1 -> 38,2]" + }, + { + "originalRange": "[30,1 -> 30,1]", + "modifiedRange": "[39,1 -> 39,2]" + }, + { + "originalRange": "[31,1 -> 31,1]", + "modifiedRange": "[40,1 -> 40,2]" + }, + { + "originalRange": "[32,1 -> 32,1]", + "modifiedRange": "[41,1 -> 41,2]" + }, + { + "originalRange": "[33,1 -> 33,1]", + "modifiedRange": "[42,1 -> 43,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/issue-185779/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/issue-185779/legacy.expected.diff.json new file mode 100644 index 00000000000..f651499af43 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/issue-185779/legacy.expected.diff.json @@ -0,0 +1,17 @@ +{ + "original": { + "content": "\n\tprivate doAddView(view: IView, size: number | Sizing, index = this.viewItems.length, skipLayout?: boolean): void {\n\t\tif (this.state !== State.Idle) {\n\t\t\tthrow new Error('Cant modify splitview');\n\t\t}\n\n\t\tthis.state = State.Busy;\n\n\t\t// Add view\n\t\tconst container = $('.split-view-view');\n\n\t\tif (index === this.viewItems.length) {\n\t\t\tthis.viewContainer.appendChild(container);\n\t\t} else {\n\t\t\tthis.viewContainer.insertBefore(container, this.viewContainer.children.item(index));\n\t\t}\n\n\t\tconst onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size));\n\t\tconst containerDisposable = toDisposable(() => this.viewContainer.removeChild(container));\n\t\tconst disposable = combinedDisposable(onChangeDisposable, containerDisposable);\n\n\t\tlet viewSize: ViewItemSize;\n\n\t\tif (typeof size === 'number') {\n\t\t\tviewSize = size;\n\t\t} else if (size.type === 'split') {\n\t\t\tviewSize = this.getViewSize(size.index) / 2;\n\t\t} else if (size.type === 'invisible') {\n\t\t\tviewSize = { cachedVisibleSize: size.cachedVisibleSize };\n\t\t} else {\n\t\t\tviewSize = view.minimumSize;\n\t\t}\n\n\t\tconst item = this.orientation === Orientation.VERTICAL\n\t\t\t? new VerticalViewItem(container, view, viewSize, disposable)\n\t\t\t: new HorizontalViewItem(container, view, viewSize, disposable);\n\n\t\tthis.viewItems.splice(index, 0, item);\n\n", + "fileName": "./1.txt" + }, + "modified": { + "content": "\n\tprivate doAddView(view: IView, size: number | Sizing, index = this.viewItems.length, skipLayout?: boolean): void {\n\t\tif (this.state !== State.Idle) {\n\t\t\tthrow new Error('Cant modify splitview');\n\t\t}\n\n\t\tthis.state = State.Busy;\n\n\t\t// Add view\n\t\tconst container = $('.split-view-view');\n\n\t\tif (index === this.viewItems.length) {\n\t\t\tthis.viewContainer.appendChild(container);\n\t\t} else {\n\t\t\tthis.viewContainer.insertBefore(container, this.viewContainer.children.item(index));\n\t\t}\n\n\t\tconst onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size));\n\t\tconst containerDisposable = toDisposable(() => this.viewContainer.removeChild(container));\n\t\tconst disposable = combinedDisposable(onChangeDisposable, containerDisposable);\n\n\t\tlet viewSize: ViewItemSize;\n\n\t\tif (typeof size === 'number') {\n\t\t\tviewSize = size;\n\t\t} else {\n\t\t\tif (size.type === 'auto') {\n\t\t\t\tif (this.areViewsDistributed()) {\n\t\t\t\t\tsize = { type: 'distribute' };\n\t\t\t\t} else {\n\t\t\t\t\tsize = { type: 'split', index: size.index };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (size.type === 'split') {\n\t\t\t\tviewSize = this.getViewSize(size.index) / 2;\n\t\t\t} else if (size.type === 'invisible') {\n\t\t\t\tviewSize = { cachedVisibleSize: size.cachedVisibleSize };\n\t\t\t} else {\n\t\t\t\tviewSize = view.minimumSize;\n\t\t\t}\n\t\t}\n\n\t\tconst item = this.orientation === Orientation.VERTICAL\n\t\t\t? new VerticalViewItem(container, view, viewSize, disposable)\n\t\t\t: new HorizontalViewItem(container, view, viewSize, disposable);\n\n\t\tthis.viewItems.splice(index, 0, item);\n\n", + "fileName": "./2.txt" + }, + "diffs": [ + { + "originalRange": "[26,32)", + "modifiedRange": "[26,42)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/json-brackets/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/json-brackets/advanced.expected.diff.json new file mode 100644 index 00000000000..17ca1b5e92a --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/json-brackets/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "{\n\t\"editor\": [\n\t\t{\n\t\t\t\"name\": \"vs/platform\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor/contrib\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/base\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t}\n\t],\n\t\"workbench\": [\n\t\t{\n\t\t\t\"name\": \"vs/code\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/api/common\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/cli\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/callHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/typeHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeActions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/comments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/debug\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/emmet\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/experiments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalTerminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/feedback\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/html\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/issue\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/inlayHints\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/interactive\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageStatus\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/keybindings\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/markers\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/mergeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localization\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/logs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/output\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/performance\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/preferences\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/notebook\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/quickaccess\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/relauncher\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/sash\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/scm\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/searchEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/snippets\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/format\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tags\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/surveys\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tasks\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/testing\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/terminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/trust\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/update\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/url\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/watermark\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webview\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webviewPanel\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspace\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/customEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalUriOpener\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeGettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeOverlay\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomePage\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeViews\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeWalkthrough\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/outline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageDetection\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/audioCues\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/deprecatedExtensionMigrator\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/offline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/actions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authToken\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/backup\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/clipboard\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/commands\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configuration\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configurationResolver\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionManagement\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/history\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/log\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/integrity\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/keybinding\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/lifecycle\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/language\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/progress\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textfile\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textMate\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workingCopy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/decorations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/label\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/preferences\",\n\t\t\t\"project\": \"vscode-preferences\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/notification\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/timeline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localHistory\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authentication\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionRecommendations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/gettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/host\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t}\n\t]\n}\n", + "fileName": "./1.json" + }, + "modified": { + "content": "{\n\t\"editor\": [\n\t\t{\n\t\t\t\"name\": \"vs/platform\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor/contrib\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/base\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t}\n\t],\n\t\"workbench\": [\n\t\t{\n\t\t\t\"name\": \"vs/code\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/api/common\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/cli\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/callHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/typeHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeActions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/comments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/debug\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/emmet\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/experiments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalTerminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/feedback\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/html\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/issue\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/inlayHints\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/interactive\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageStatus\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/keybindings\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/markers\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/mergeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localization\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/logs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/output\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/performance\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/preferences\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/notebook\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/quickaccess\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/relauncher\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/sash\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/scm\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/searchEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/snippets\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/format\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tags\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/surveys\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tasks\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/testing\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/terminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/trust\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/update\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/url\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/watermark\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webview\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webviewPanel\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspace\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/customEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalUriOpener\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeGettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeOverlay\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomePage\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeViews\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeWalkthrough\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/outline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageDetection\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/audioCues\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/deprecatedExtensionMigrator\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bracketPairColorizer2Telemetry\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/offline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/actions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authToken\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/backup\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/clipboard\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/commands\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configuration\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configurationResolver\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionManagement\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/history\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/log\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/integrity\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/keybinding\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/lifecycle\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/language\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/progress\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textfile\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textMate\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workingCopy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/decorations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/label\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/preferences\",\n\t\t\t\"project\": \"vscode-preferences\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/notification\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/timeline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localHistory\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authentication\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionRecommendations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/gettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/host\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t}\n\t]\n}\n", + "fileName": "./2.json" + }, + "diffs": [ + { + "originalRange": "[301,301)", + "modifiedRange": "[301,305)", + "innerChanges": [ + { + "originalRange": "[301,1 -> 301,1]", + "modifiedRange": "[301,1 -> 305,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/json-brackets/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/json-brackets/experimental.expected.diff.json deleted file mode 100644 index 7e258364cfc..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/json-brackets/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.json", - "modifiedFileName": "./2.json", - "diffs": [ - { - "originalRange": "[301,301)", - "modifiedRange": "[301,305)", - "innerChanges": [ - { - "originalRange": "[301,1 -> 301,1]", - "modifiedRange": "[301,1 -> 305,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/json-brackets/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/json-brackets/legacy.expected.diff.json new file mode 100644 index 00000000000..128567c85ec --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/json-brackets/legacy.expected.diff.json @@ -0,0 +1,17 @@ +{ + "original": { + "content": "{\n\t\"editor\": [\n\t\t{\n\t\t\t\"name\": \"vs/platform\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor/contrib\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/base\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t}\n\t],\n\t\"workbench\": [\n\t\t{\n\t\t\t\"name\": \"vs/code\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/api/common\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/cli\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/callHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/typeHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeActions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/comments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/debug\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/emmet\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/experiments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalTerminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/feedback\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/html\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/issue\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/inlayHints\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/interactive\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageStatus\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/keybindings\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/markers\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/mergeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localization\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/logs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/output\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/performance\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/preferences\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/notebook\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/quickaccess\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/relauncher\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/sash\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/scm\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/searchEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/snippets\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/format\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tags\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/surveys\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tasks\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/testing\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/terminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/trust\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/update\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/url\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/watermark\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webview\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webviewPanel\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspace\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/customEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalUriOpener\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeGettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeOverlay\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomePage\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeViews\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeWalkthrough\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/outline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageDetection\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/audioCues\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/deprecatedExtensionMigrator\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/offline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/actions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authToken\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/backup\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/clipboard\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/commands\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configuration\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configurationResolver\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionManagement\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/history\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/log\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/integrity\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/keybinding\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/lifecycle\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/language\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/progress\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textfile\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textMate\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workingCopy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/decorations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/label\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/preferences\",\n\t\t\t\"project\": \"vscode-preferences\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/notification\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/timeline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localHistory\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authentication\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionRecommendations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/gettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/host\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t}\n\t]\n}\n", + "fileName": "./1.json" + }, + "modified": { + "content": "{\n\t\"editor\": [\n\t\t{\n\t\t\t\"name\": \"vs/platform\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor/contrib\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/editor\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/base\",\n\t\t\t\"project\": \"vscode-editor\"\n\t\t}\n\t],\n\t\"workbench\": [\n\t\t{\n\t\t\t\"name\": \"vs/code\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/api/common\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/cli\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/callHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/typeHierarchy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/codeActions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/comments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/debug\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/emmet\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/experiments\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalTerminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/feedback\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/html\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/issue\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/inlayHints\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/interactive\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageStatus\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/keybindings\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/markers\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/mergeEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localization\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/logs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/output\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/performance\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/preferences\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/notebook\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/quickaccess\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/relauncher\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/sash\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/scm\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/searchEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/snippets\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/format\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tags\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/surveys\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/tasks\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/testing\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/terminal\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/trust\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/update\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/url\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/watermark\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webview\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/webviewPanel\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspace\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/customEditor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/externalUriOpener\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeGettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeOverlay\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomePage\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeViews\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/welcomeWalkthrough\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/outline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/languageDetection\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/audioCues\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/deprecatedExtensionMigrator\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/bracketPairColorizer2Telemetry\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/offline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/actions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authToken\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/backup\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/bulkEdit\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/clipboard\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/commands\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configuration\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/configurationResolver\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/dialogs\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editor\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionManagement\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/files\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/history\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/log\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/integrity\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/keybinding\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/lifecycle\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/language\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/progress\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/remote\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/search\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textfile\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/themes\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/textMate\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workingCopy\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/workspaces\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/decorations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/label\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/preferences\",\n\t\t\t\"project\": \"vscode-preferences\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/notification\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userData\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataSync\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/editSessions\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/views\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/timeline\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/localHistory\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/authentication\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/extensionRecommendations\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/gettingStarted\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/host\",\n\t\t\t\"project\": \"vscode-workbench\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/contrib/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"vs/workbench/services/userDataProfile\",\n\t\t\t\"project\": \"vscode-profiles\"\n\t\t}\n\t]\n}\n", + "fileName": "./2.json" + }, + "diffs": [ + { + "originalRange": "[302,302)", + "modifiedRange": "[302,306)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/json-brackets/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/json-brackets/smart.expected.diff.json deleted file mode 100644 index 93b4f55206e..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/json-brackets/smart.expected.diff.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "originalFileName": "./1.json", - "modifiedFileName": "./2.json", - "diffs": [ - { - "originalRange": "[302,302)", - "modifiedRange": "[302,306)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/advanced.expected.diff.json similarity index 56% rename from src/vs/editor/test/node/diffing/fixtures/just-whitespace/experimental.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/just-whitespace/advanced.expected.diff.json index cf6f3ec5f25..a24c28bdcfa 100644 --- a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/advanced.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.js", - "modifiedFileName": "./2.js", + "original": { + "content": "console.log('foo'); ", + "fileName": "./1.js" + }, + "modified": { + "content": "console.log('foo');", + "fileName": "./2.js" + }, "diffs": [ { "originalRange": "[1,2)", diff --git a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/legacy.expected.diff.json similarity index 56% rename from src/vs/editor/test/node/diffing/fixtures/just-whitespace/smart.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/just-whitespace/legacy.expected.diff.json index cf6f3ec5f25..a24c28bdcfa 100644 --- a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/smart.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/legacy.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.js", - "modifiedFileName": "./2.js", + "original": { + "content": "console.log('foo'); ", + "fileName": "./1.js" + }, + "modified": { + "content": "console.log('foo');", + "fileName": "./2.js" + }, "diffs": [ { "originalRange": "[1,2)", 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 new file mode 100644 index 00000000000..8bc08d08086 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json @@ -0,0 +1,68 @@ +{ + "original": { + "content": "class Test {\n public getDecorationsViewportData(viewRange: Range): IDecorationsViewportData {\n\t\treturn null!;\n\t}\n\n\tpublic getInlineDecorationsOnLine(lineNumber: number): InlineDecoration[] {\n\t\tconst range = new Range(lineNumber, this._linesCollection.getViewLineMinColumn(lineNumber), lineNumber, this._linesCollection.getViewLineMaxColumn(lineNumber));\n\t\treturn this._getDecorationsInRange(range).inlineDecorations[0];\n\t}\n\n\tprivate _getDecorationsInRange(viewRange: Range): IDecorationsViewportData {\n\t\tconst modelDecorations = this._linesCollection.getDecorationsInRange(viewRange, this.editorId, filterValidationDecorations(this.configuration.options));\n\t\tconst startLineNumber = viewRange.startLineNumber;\n\t\tconst endLineNumber = viewRange.endLineNumber;\n\n\t\tconst decorationsInViewport: ViewModelDecoration[] = [];\n\t\tlet decorationsInViewportLen = 0;\n\t\tconst inlineDecorations: InlineDecoration[][] = [];\n\t\tfor (let j = startLineNumber; j <= endLineNumber; j++) {\n\t\t\tinlineDecorations[j - startLineNumber] = [];\n\t\t}\n\n\t\tfor (let i = 0, len = modelDecorations.length; i < len; i++) {\n\t\t\tconst modelDecoration = modelDecorations[i];\n\t\t\tconst decorationOptions = modelDecoration.options;\n\n\t\t\tif (!isModelDecorationVisible(this.model, modelDecoration)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n\t\t\tconst viewRange = viewModelDecoration.range;\n\n\t\t\tdecorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n\n\t\t\tif (decorationOptions.inlineClassName) {\n\t\t\t\tconst inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? InlineDecorationType.RegularAffectingLetterSpacing : InlineDecorationType.Regular);\n\t\t\t\tconst intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n\t\t\t\tconst intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\n\t\t\t\tfor (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\n\t\t\t\t\tinlineDecorations[j - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.beforeContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn),\n\t\t\t\t\t\tdecorationOptions.beforeContentClassName,\n\t\t\t\t\t\tInlineDecorationType.Before\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.afterContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn),\n\t\t\t\t\t\tdecorationOptions.afterContentClassName,\n\t\t\t\t\t\tInlineDecorationType.After\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdecorations: decorationsInViewport,\n\t\t\tinlineDecorations: inlineDecorations\n\t\t};\n\t}\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Test {\n public getDecorationsViewportData(viewRange: Range): IDecorationsViewportData {\n\t\treturn null!;\n\t}\n\n\tprivate _getDecorationsViewportData(viewportRange: Range, onlyMinimapDecorations: boolean): IDecorationsViewportData {\n\t\tconst modelDecorations = this._linesCollection.getDecorationsInRange(viewportRange, this.editorId, filterValidationDecorations(this.configuration.options), onlyMinimapDecorations);\n\n\t\tconst startLineNumber = viewportRange.startLineNumber;\n\t\tconst endLineNumber = viewportRange.endLineNumber;\n\n\t\tconst decorationsInViewport: ViewModelDecoration[] = [];\n\t\tlet decorationsInViewportLen = 0;\n\t\tconst inlineDecorations: InlineDecoration[][] = [];\n\t\tfor (let j = startLineNumber; j <= endLineNumber; j++) {\n\t\t\tinlineDecorations[j - startLineNumber] = [];\n\t\t}\n\n\t\tfor (let i = 0, len = modelDecorations.length; i < len; i++) {\n\t\t\tconst modelDecoration = modelDecorations[i];\n\t\t\tconst decorationOptions = modelDecoration.options;\n\n\t\t\tif (!isModelDecorationVisible(this.model, modelDecoration)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n\t\t\tconst viewRange = viewModelDecoration.range;\n\n\t\t\tdecorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n\n\t\t\tif (decorationOptions.inlineClassName) {\n\t\t\t\tconst inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? InlineDecorationType.RegularAffectingLetterSpacing : InlineDecorationType.Regular);\n\t\t\t\tconst intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n\t\t\t\tconst intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\n\t\t\t\tfor (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\n\t\t\t\t\tinlineDecorations[j - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.beforeContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn),\n\t\t\t\t\t\tdecorationOptions.beforeContentClassName,\n\t\t\t\t\t\tInlineDecorationType.Before\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.afterContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn),\n\t\t\t\t\t\tdecorationOptions.afterContentClassName,\n\t\t\t\t\t\tInlineDecorationType.After\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdecorations: decorationsInViewport,\n\t\t\tinlineDecorations: inlineDecorations\n\t\t};\n\t}\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[6,10)", + "modifiedRange": "[6,8)", + "innerChanges": [ + { + "originalRange": "[6,2 -> 6,9]", + "modifiedRange": "[6,2 -> 6,11]" + }, + { + "originalRange": "[6,12 -> 6,18]", + "modifiedRange": "[6,14 -> 6,14]" + }, + { + "originalRange": "[6,29 -> 6,54]", + "modifiedRange": "[6,25 -> 6,91]" + }, + { + "originalRange": "[6,57 -> 6,75]", + "modifiedRange": "[6,94 -> 6,118]" + }, + { + "originalRange": "[7,9 -> 7,38]", + "modifiedRange": "[7,9 -> 7,27]" + }, + { + "originalRange": "[7,61 -> 7,105]", + "modifiedRange": "[7,50 -> 7,85]" + }, + { + "originalRange": "[7,112 -> 8,10]", + "modifiedRange": "[7,92 -> 7,130]" + }, + { + "originalRange": "[8,15 -> 10,1]", + "modifiedRange": "[7,135 -> 8,1]" + } + ] + }, + { + "originalRange": "[11,15)", + "modifiedRange": "[9,11)", + "innerChanges": [ + { + "originalRange": "[11,1 -> 13,1]", + "modifiedRange": "[9,1 -> 9,1]" + }, + { + "originalRange": "[13,31 -> 13,31]", + "modifiedRange": "[9,31 -> 9,35]" + }, + { + "originalRange": "[14,29 -> 14,29]", + "modifiedRange": "[10,29 -> 10,33]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/experimental.expected.diff.json deleted file mode 100644 index f79a1b00f3a..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/method-splitting/experimental.expected.diff.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[6,10)", - "modifiedRange": "[6,8)", - "innerChanges": [ - { - "originalRange": "[6,3 -> 6,9]", - "modifiedRange": "[6,3 -> 6,11]" - }, - { - "originalRange": "[6,12 -> 6,18]", - "modifiedRange": "[6,14 -> 6,14]" - }, - { - "originalRange": "[6,29 -> 6,54]", - "modifiedRange": "[6,25 -> 6,91]" - }, - { - "originalRange": "[6,58 -> 6,63]", - "modifiedRange": "[6,95 -> 6,95]" - }, - { - "originalRange": "[6,73 -> 6,75]", - "modifiedRange": "[6,105 -> 6,118]" - }, - { - "originalRange": "[7,9 -> 7,38]", - "modifiedRange": "[7,9 -> 7,27]" - }, - { - "originalRange": "[7,64 -> 7,105]", - "modifiedRange": "[7,53 -> 7,85]" - }, - { - "originalRange": "[7,112 -> 8,11]", - "modifiedRange": "[7,92 -> 7,131]" - }, - { - "originalRange": "[8,15 -> 8,23]", - "modifiedRange": "[7,135 -> 7,142]" - }, - { - "originalRange": "[8,29 -> 8,51]", - "modifiedRange": "[7,148 -> 7,170]" - }, - { - "originalRange": "[8,62 -> 10,1]", - "modifiedRange": "[7,181 -> 8,1]" - } - ] - }, - { - "originalRange": "[11,15)", - "modifiedRange": "[9,11)", - "innerChanges": [ - { - "originalRange": "[11,1 -> 13,1]", - "modifiedRange": "[9,1 -> 9,1]" - }, - { - "originalRange": "[13,31 -> 13,31]", - "modifiedRange": "[9,31 -> 9,35]" - }, - { - "originalRange": "[14,29 -> 14,29]", - "modifiedRange": "[10,29 -> 10,33]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/legacy.expected.diff.json new file mode 100644 index 00000000000..e1f4edb8a10 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/method-splitting/legacy.expected.diff.json @@ -0,0 +1,84 @@ +{ + "original": { + "content": "class Test {\n public getDecorationsViewportData(viewRange: Range): IDecorationsViewportData {\n\t\treturn null!;\n\t}\n\n\tpublic getInlineDecorationsOnLine(lineNumber: number): InlineDecoration[] {\n\t\tconst range = new Range(lineNumber, this._linesCollection.getViewLineMinColumn(lineNumber), lineNumber, this._linesCollection.getViewLineMaxColumn(lineNumber));\n\t\treturn this._getDecorationsInRange(range).inlineDecorations[0];\n\t}\n\n\tprivate _getDecorationsInRange(viewRange: Range): IDecorationsViewportData {\n\t\tconst modelDecorations = this._linesCollection.getDecorationsInRange(viewRange, this.editorId, filterValidationDecorations(this.configuration.options));\n\t\tconst startLineNumber = viewRange.startLineNumber;\n\t\tconst endLineNumber = viewRange.endLineNumber;\n\n\t\tconst decorationsInViewport: ViewModelDecoration[] = [];\n\t\tlet decorationsInViewportLen = 0;\n\t\tconst inlineDecorations: InlineDecoration[][] = [];\n\t\tfor (let j = startLineNumber; j <= endLineNumber; j++) {\n\t\t\tinlineDecorations[j - startLineNumber] = [];\n\t\t}\n\n\t\tfor (let i = 0, len = modelDecorations.length; i < len; i++) {\n\t\t\tconst modelDecoration = modelDecorations[i];\n\t\t\tconst decorationOptions = modelDecoration.options;\n\n\t\t\tif (!isModelDecorationVisible(this.model, modelDecoration)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n\t\t\tconst viewRange = viewModelDecoration.range;\n\n\t\t\tdecorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n\n\t\t\tif (decorationOptions.inlineClassName) {\n\t\t\t\tconst inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? InlineDecorationType.RegularAffectingLetterSpacing : InlineDecorationType.Regular);\n\t\t\t\tconst intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n\t\t\t\tconst intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\n\t\t\t\tfor (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\n\t\t\t\t\tinlineDecorations[j - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.beforeContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn),\n\t\t\t\t\t\tdecorationOptions.beforeContentClassName,\n\t\t\t\t\t\tInlineDecorationType.Before\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.afterContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn),\n\t\t\t\t\t\tdecorationOptions.afterContentClassName,\n\t\t\t\t\t\tInlineDecorationType.After\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdecorations: decorationsInViewport,\n\t\t\tinlineDecorations: inlineDecorations\n\t\t};\n\t}\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Test {\n public getDecorationsViewportData(viewRange: Range): IDecorationsViewportData {\n\t\treturn null!;\n\t}\n\n\tprivate _getDecorationsViewportData(viewportRange: Range, onlyMinimapDecorations: boolean): IDecorationsViewportData {\n\t\tconst modelDecorations = this._linesCollection.getDecorationsInRange(viewportRange, this.editorId, filterValidationDecorations(this.configuration.options), onlyMinimapDecorations);\n\n\t\tconst startLineNumber = viewportRange.startLineNumber;\n\t\tconst endLineNumber = viewportRange.endLineNumber;\n\n\t\tconst decorationsInViewport: ViewModelDecoration[] = [];\n\t\tlet decorationsInViewportLen = 0;\n\t\tconst inlineDecorations: InlineDecoration[][] = [];\n\t\tfor (let j = startLineNumber; j <= endLineNumber; j++) {\n\t\t\tinlineDecorations[j - startLineNumber] = [];\n\t\t}\n\n\t\tfor (let i = 0, len = modelDecorations.length; i < len; i++) {\n\t\t\tconst modelDecoration = modelDecorations[i];\n\t\t\tconst decorationOptions = modelDecoration.options;\n\n\t\t\tif (!isModelDecorationVisible(this.model, modelDecoration)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n\t\t\tconst viewRange = viewModelDecoration.range;\n\n\t\t\tdecorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n\n\t\t\tif (decorationOptions.inlineClassName) {\n\t\t\t\tconst inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? InlineDecorationType.RegularAffectingLetterSpacing : InlineDecorationType.Regular);\n\t\t\t\tconst intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n\t\t\t\tconst intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\n\t\t\t\tfor (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\n\t\t\t\t\tinlineDecorations[j - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.beforeContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn),\n\t\t\t\t\t\tdecorationOptions.beforeContentClassName,\n\t\t\t\t\t\tInlineDecorationType.Before\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (decorationOptions.afterContentClassName) {\n\t\t\t\tif (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\n\t\t\t\t\tconst inlineDecoration = new InlineDecoration(\n\t\t\t\t\t\tnew Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn),\n\t\t\t\t\t\tdecorationOptions.afterContentClassName,\n\t\t\t\t\t\tInlineDecorationType.After\n\t\t\t\t\t);\n\t\t\t\t\tinlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdecorations: decorationsInViewport,\n\t\t\tinlineDecorations: inlineDecorations\n\t\t};\n\t}\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[6,10)", + "modifiedRange": "[6,8)", + "innerChanges": [ + { + "originalRange": "[6,3 -> 6,9]", + "modifiedRange": "[6,3 -> 6,11]" + }, + { + "originalRange": "[6,12 -> 6,18]", + "modifiedRange": "[6,14 -> 6,14]" + }, + { + "originalRange": "[6,29 -> 6,54]", + "modifiedRange": "[6,25 -> 6,91]" + }, + { + "originalRange": "[6,58 -> 6,63]", + "modifiedRange": "[6,95 -> 6,95]" + }, + { + "originalRange": "[6,73 -> 6,75]", + "modifiedRange": "[6,105 -> 6,118]" + }, + { + "originalRange": "[7,9 -> 7,38]", + "modifiedRange": "[7,9 -> 7,27]" + }, + { + "originalRange": "[7,64 -> 7,105]", + "modifiedRange": "[7,53 -> 7,85]" + }, + { + "originalRange": "[7,112 -> 7,124]", + "modifiedRange": "[7,92 -> 7,114]" + }, + { + "originalRange": "[7,128 -> 8,10]", + "modifiedRange": "[7,118 -> 7,130]" + }, + { + "originalRange": "[8,15 -> 8,23]", + "modifiedRange": "[7,135 -> 7,142]" + }, + { + "originalRange": "[8,29 -> 8,51]", + "modifiedRange": "[7,148 -> 7,170]" + }, + { + "originalRange": "[8,62 -> 9,3]", + "modifiedRange": "[7,181 -> 7,183]" + } + ] + }, + { + "originalRange": "[11,15)", + "modifiedRange": "[9,11)", + "innerChanges": [ + { + "originalRange": "[11,1 -> 13,1]", + "modifiedRange": "[9,1 -> 9,1]" + }, + { + "originalRange": "[13,31 -> 13,31]", + "modifiedRange": "[9,31 -> 9,35]" + }, + { + "originalRange": "[14,29 -> 14,29]", + "modifiedRange": "[10,29 -> 10,33]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/smart.expected.diff.json deleted file mode 100644 index d0b4abc03ed..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/method-splitting/smart.expected.diff.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[6,10)", - "modifiedRange": "[6,8)", - "innerChanges": [ - { - "originalRange": "[6,3 -> 6,9]", - "modifiedRange": "[6,3 -> 6,11]" - }, - { - "originalRange": "[6,12 -> 6,18]", - "modifiedRange": "[6,14 -> 6,14]" - }, - { - "originalRange": "[6,29 -> 6,54]", - "modifiedRange": "[6,25 -> 6,91]" - }, - { - "originalRange": "[6,58 -> 6,63]", - "modifiedRange": "[6,95 -> 6,95]" - }, - { - "originalRange": "[6,73 -> 6,75]", - "modifiedRange": "[6,105 -> 6,118]" - }, - { - "originalRange": "[7,9 -> 7,38]", - "modifiedRange": "[7,9 -> 7,27]" - }, - { - "originalRange": "[7,64 -> 7,105]", - "modifiedRange": "[7,53 -> 7,85]" - }, - { - "originalRange": "[7,112 -> 7,124]", - "modifiedRange": "[7,92 -> 7,114]" - }, - { - "originalRange": "[7,128 -> 8,10]", - "modifiedRange": "[7,118 -> 7,130]" - }, - { - "originalRange": "[8,15 -> 8,23]", - "modifiedRange": "[7,135 -> 7,142]" - }, - { - "originalRange": "[8,29 -> 8,51]", - "modifiedRange": "[7,148 -> 7,170]" - }, - { - "originalRange": "[8,62 -> 9,3]", - "modifiedRange": "[7,181 -> 7,183]" - } - ] - }, - { - "originalRange": "[11,15)", - "modifiedRange": "[9,11)", - "innerChanges": [ - { - "originalRange": "[11,1 -> 13,1]", - "modifiedRange": "[9,1 -> 9,1]" - }, - { - "originalRange": "[13,31 -> 13,31]", - "modifiedRange": "[9,31 -> 9,35]" - }, - { - "originalRange": "[14,29 -> 14,29]", - "modifiedRange": "[10,29 -> 10,33]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/advanced.expected.diff.json new file mode 100644 index 00000000000..e66bd17ab11 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/advanced.expected.diff.json @@ -0,0 +1,32 @@ +{ + "original": { + "content": "import * as path from 'path';\nimport { Command } from 'vscode';\nimport * as nls from 'vscode-nls';\n\n\"()()()()()()()()()()()()()\"", + "fileName": "./1.tst" + }, + "modified": { + "content": "import * as path from 'path';\nimport { Command, commands } from 'vscode';\nimport * as nls from 'vscode-nls';\n\n\"Gallicum()est()divisa()in()partres()tres()quarum()unam()est()()()()()()()()()()()()\"", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,3)", + "modifiedRange": "[2,3)", + "innerChanges": [ + { + "originalRange": "[2,17 -> 2,17]", + "modifiedRange": "[2,17 -> 2,27]" + } + ] + }, + { + "originalRange": "[5,6)", + "modifiedRange": "[5,6)", + "innerChanges": [ + { + "originalRange": "[5,2 -> 5,4]", + "modifiedRange": "[5,2 -> 5,61]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/experimental.expected.diff.json deleted file mode 100644 index 430db713be3..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/experimental.expected.diff.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,17 -> 2,17]", - "modifiedRange": "[2,17 -> 2,27]" - } - ] - }, - { - "originalRange": "[5,6)", - "modifiedRange": "[5,6)", - "innerChanges": [ - { - "originalRange": "[5,2 -> 5,4]", - "modifiedRange": "[5,2 -> 5,61]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/legacy.expected.diff.json new file mode 100644 index 00000000000..e66bd17ab11 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/legacy.expected.diff.json @@ -0,0 +1,32 @@ +{ + "original": { + "content": "import * as path from 'path';\nimport { Command } from 'vscode';\nimport * as nls from 'vscode-nls';\n\n\"()()()()()()()()()()()()()\"", + "fileName": "./1.tst" + }, + "modified": { + "content": "import * as path from 'path';\nimport { Command, commands } from 'vscode';\nimport * as nls from 'vscode-nls';\n\n\"Gallicum()est()divisa()in()partres()tres()quarum()unam()est()()()()()()()()()()()()\"", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,3)", + "modifiedRange": "[2,3)", + "innerChanges": [ + { + "originalRange": "[2,17 -> 2,17]", + "modifiedRange": "[2,17 -> 2,27]" + } + ] + }, + { + "originalRange": "[5,6)", + "modifiedRange": "[5,6)", + "innerChanges": [ + { + "originalRange": "[5,2 -> 5,4]", + "modifiedRange": "[5,2 -> 5,61]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/smart.expected.diff.json deleted file mode 100644 index 430db713be3..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/smart.expected.diff.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,17 -> 2,17]", - "modifiedRange": "[2,17 -> 2,27]" - } - ] - }, - { - "originalRange": "[5,6)", - "modifiedRange": "[5,6)", - "innerChanges": [ - { - "originalRange": "[5,2 -> 5,4]", - "modifiedRange": "[5,2 -> 5,61]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/move-1/1.tst b/src/vs/editor/test/node/diffing/fixtures/move-1/1.tst new file mode 100644 index 00000000000..0a33e795f61 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/move-1/1.tst @@ -0,0 +1,92 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as arrays from 'vs/base/common/arrays'; +import { IdleDeadline, runWhenIdle } from 'vs/base/common/async'; +import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; +import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { setTimeout0 } from 'vs/base/common/platform'; +import { StopWatch } from 'vs/base/common/stopwatch'; +import { countEOL } from 'vs/editor/common/core/eolCounter'; +import { Position } from 'vs/editor/common/core/position'; +import { IRange } from 'vs/editor/common/core/range'; +import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; +import { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; +import { ITextModel } from 'vs/editor/common/model'; +import { TextModel } from 'vs/editor/common/model/textModel'; +import { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart'; +import { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents'; +import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; +import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; + +const enum Constants { + CHEAP_TOKENIZATION_LENGTH_LIMIT = 2048 +} + +/** + * An array that avoids being sparse by always + * filling up unused indices with a default value. + */ +export class ContiguousGrowingArray { + + private _store: T[] = []; + + constructor( + private readonly _default: T + ) { } + + public get(index: number): T { + if (index < this._store.length) { + return this._store[index]; + } + return this._default; + } + + public set(index: number, value: T): void { + while (index >= this._store.length) { + this._store[this._store.length] = this._default; + } + this._store[index] = value; + } + + // TODO have `replace` instead of `delete` and `insert` + public delete(deleteIndex: number, deleteCount: number): void { + if (deleteCount === 0 || deleteIndex >= this._store.length) { + return; + } + this._store.splice(deleteIndex, deleteCount); + } + + public insert(insertIndex: number, insertCount: number): void { + if (insertCount === 0 || insertIndex >= this._store.length) { + return; + } + const arr: T[] = []; + for (let i = 0; i < insertCount; i++) { + arr[i] = this._default; + } + this._store = arrays.arrayInsert(this._store, insertIndex, arr); + } +} + +/** + * Stores the states at the start of each line and keeps track of which lines + * must be re-tokenized. Also uses state equality to quickly validate lines + * that don't need to be re-tokenized. + * + * For example, when typing on a line, the line gets marked as needing to be tokenized. + * Once the line is tokenized, the end state is checked for equality against the begin + * state of the next line. If the states are equal, tokenization doesn't need to run + * again over the rest of the file. If the states are not equal, the next line gets marked + * as needing to be tokenized. + */ +export class TokenizationStateStore { + requestTokens(startLineNumber: number, endLineNumberExclusive: number): void { + for (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) { + this._stateStore.markMustBeTokenized(lineNumber - 1); + } + } +} diff --git a/src/vs/editor/test/node/diffing/fixtures/move-1/2.tst b/src/vs/editor/test/node/diffing/fixtures/move-1/2.tst new file mode 100644 index 00000000000..161b3eddcca --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/move-1/2.tst @@ -0,0 +1,92 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as arrays from 'vs/base/common/arrays'; +import { IdleDeadline, runWhenIdle } from 'vs/base/common/async'; +import { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors'; +import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { setTimeout0 } from 'vs/base/common/platform'; +import { StopWatch } from 'vs/base/common/stopwatch'; +import { countEOL } from 'vs/editor/common/core/eolCounter'; +import { Position } from 'vs/editor/common/core/position'; +import { IRange } from 'vs/editor/common/core/range'; +import { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes'; +import { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages'; +import { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize'; +import { ITextModel } from 'vs/editor/common/model'; +import { TextModel } from 'vs/editor/common/model/textModel'; +import { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart'; +import { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents'; +import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; +import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; + +/** + * An array that avoids being sparse by always + * filling up unused indices with a default value. + */ +export class ContiguousGrowingArray { + + private _store: T[] = []; + + constructor( + private readonly _default: T + ) { } + + public get(index: number): T { + if (index < this._store.length) { + return this._store[index]; + } + return this._default; + } + + public set(index: number, value: T): void { + while (index >= this._store.length) { + this._store[this._store.length] = this._default; + } + this._store[index] = value; + } + + // TODO have `replace` instead of `delete` and `insert` + public delete(deleteIndex: number, deleteCount: number): void { + if (deleteCount === 0 || deleteIndex >= this._store.length) { + return; + } + this._store.splice(deleteIndex, deleteCount); + } + + public insert(insertIndex: number, insertCount: number): void { + if (insertCount === 0 || insertIndex >= this._store.length) { + return; + } + const arr: T[] = []; + for (let i = 0; i < insertCount; i++) { + arr[i] = this._default; + } + this._store = arrays.arrayInsert(this._store, insertIndex, arr); + } +} + +const enum Constants { + CHEAP_TOKENIZATION_LENGTH_LIMIT = 1024 +} + +/** + * Stores the states at the start of each line and keeps track of which lines + * must be re-tokenized. Also uses state equality to quickly validate lines + * that don't need to be re-tokenized. + * + * For example, when typing on a line, the line gets marked as needing to be tokenized. + * Once the line is tokenized, the end state is checked for equality against the begin + * state of the next line. If the states are equal, tokenization doesn't need to run + * again over the rest of the file. If the states are not equal, the next line gets marked + * as needing to be tokenized. + */ +export class TokenizationStateStore { + requestTokens(startLineNumber: number, endLineNumberExclusive: number): void { + for (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) { + this._stateStore.markMustBeTokenized(lineNumber - 1); + } + } +} diff --git a/src/vs/editor/test/node/diffing/fixtures/move-1/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/move-1/advanced.expected.diff.json new file mode 100644 index 00000000000..73f6bfc728f --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/move-1/advanced.expected.diff.json @@ -0,0 +1,32 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 2048\n}\n\n/**\n * An array that avoids being sparse by always\n * filling up unused indices with a default value.\n */\nexport class ContiguousGrowingArray {\n\n\tprivate _store: T[] = [];\n\n\tconstructor(\n\t\tprivate readonly _default: T\n\t) { }\n\n\tpublic get(index: number): T {\n\t\tif (index < this._store.length) {\n\t\t\treturn this._store[index];\n\t\t}\n\t\treturn this._default;\n\t}\n\n\tpublic set(index: number, value: T): void {\n\t\twhile (index >= this._store.length) {\n\t\t\tthis._store[this._store.length] = this._default;\n\t\t}\n\t\tthis._store[index] = value;\n\t}\n\n\t// TODO have `replace` instead of `delete` and `insert`\n\tpublic delete(deleteIndex: number, deleteCount: number): void {\n\t\tif (deleteCount === 0 || deleteIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tthis._store.splice(deleteIndex, deleteCount);\n\t}\n\n\tpublic insert(insertIndex: number, insertCount: number): void {\n\t\tif (insertCount === 0 || insertIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst arr: T[] = [];\n\t\tfor (let i = 0; i < insertCount; i++) {\n\t\t\tarr[i] = this._default;\n\t\t}\n\t\tthis._store = arrays.arrayInsert(this._store, insertIndex, arr);\n\t}\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\n/**\n * An array that avoids being sparse by always\n * filling up unused indices with a default value.\n */\nexport class ContiguousGrowingArray {\n\n\tprivate _store: T[] = [];\n\n\tconstructor(\n\t\tprivate readonly _default: T\n\t) { }\n\n\tpublic get(index: number): T {\n\t\tif (index < this._store.length) {\n\t\t\treturn this._store[index];\n\t\t}\n\t\treturn this._default;\n\t}\n\n\tpublic set(index: number, value: T): void {\n\t\twhile (index >= this._store.length) {\n\t\t\tthis._store[this._store.length] = this._default;\n\t\t}\n\t\tthis._store[index] = value;\n\t}\n\n\t// TODO have `replace` instead of `delete` and `insert`\n\tpublic delete(deleteIndex: number, deleteCount: number): void {\n\t\tif (deleteCount === 0 || deleteIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tthis._store.splice(deleteIndex, deleteCount);\n\t}\n\n\tpublic insert(insertIndex: number, insertCount: number): void {\n\t\tif (insertCount === 0 || insertIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst arr: T[] = [];\n\t\tfor (let i = 0; i < insertCount; i++) {\n\t\t\tarr[i] = this._default;\n\t\t}\n\t\tthis._store = arrays.arrayInsert(this._store, insertIndex, arr);\n\t}\n}\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 1024\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[24,28)", + "modifiedRange": "[24,24)", + "innerChanges": [ + { + "originalRange": "[24,1 -> 28,1]", + "modifiedRange": "[24,1 -> 24,1]" + } + ] + }, + { + "originalRange": "[74,74)", + "modifiedRange": "[70,74)", + "innerChanges": [ + { + "originalRange": "[74,1 -> 74,1]", + "modifiedRange": "[70,1 -> 74,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/move-1/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/move-1/legacy.expected.diff.json new file mode 100644 index 00000000000..42fd3c23abb --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/move-1/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 2048\n}\n\n/**\n * An array that avoids being sparse by always\n * filling up unused indices with a default value.\n */\nexport class ContiguousGrowingArray {\n\n\tprivate _store: T[] = [];\n\n\tconstructor(\n\t\tprivate readonly _default: T\n\t) { }\n\n\tpublic get(index: number): T {\n\t\tif (index < this._store.length) {\n\t\t\treturn this._store[index];\n\t\t}\n\t\treturn this._default;\n\t}\n\n\tpublic set(index: number, value: T): void {\n\t\twhile (index >= this._store.length) {\n\t\t\tthis._store[this._store.length] = this._default;\n\t\t}\n\t\tthis._store[index] = value;\n\t}\n\n\t// TODO have `replace` instead of `delete` and `insert`\n\tpublic delete(deleteIndex: number, deleteCount: number): void {\n\t\tif (deleteCount === 0 || deleteIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tthis._store.splice(deleteIndex, deleteCount);\n\t}\n\n\tpublic insert(insertIndex: number, insertCount: number): void {\n\t\tif (insertCount === 0 || insertIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst arr: T[] = [];\n\t\tfor (let i = 0; i < insertCount; i++) {\n\t\t\tarr[i] = this._default;\n\t\t}\n\t\tthis._store = arrays.arrayInsert(this._store, insertIndex, arr);\n\t}\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as arrays from 'vs/base/common/arrays';\nimport { IdleDeadline, runWhenIdle } from 'vs/base/common/async';\nimport { BugIndicatingError, onUnexpectedError } from 'vs/base/common/errors';\nimport { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';\nimport { setTimeout0 } from 'vs/base/common/platform';\nimport { StopWatch } from 'vs/base/common/stopwatch';\nimport { countEOL } from 'vs/editor/common/core/eolCounter';\nimport { Position } from 'vs/editor/common/core/position';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { StandardTokenType } from 'vs/editor/common/encodedTokenAttributes';\nimport { EncodedTokenizationResult, IBackgroundTokenizationStore, IBackgroundTokenizer, ILanguageIdCodec, IState, ITokenizationSupport, TokenizationRegistry } from 'vs/editor/common/languages';\nimport { nullTokenizeEncoded } from 'vs/editor/common/languages/nullTokenize';\nimport { ITextModel } from 'vs/editor/common/model';\nimport { TextModel } from 'vs/editor/common/model/textModel';\nimport { TokenizationTextModelPart } from 'vs/editor/common/model/tokenizationTextModelPart';\nimport { IModelContentChangedEvent, IModelLanguageChangedEvent } from 'vs/editor/common/textModelEvents';\nimport { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder';\nimport { LineTokens } from 'vs/editor/common/tokens/lineTokens';\n\n/**\n * An array that avoids being sparse by always\n * filling up unused indices with a default value.\n */\nexport class ContiguousGrowingArray {\n\n\tprivate _store: T[] = [];\n\n\tconstructor(\n\t\tprivate readonly _default: T\n\t) { }\n\n\tpublic get(index: number): T {\n\t\tif (index < this._store.length) {\n\t\t\treturn this._store[index];\n\t\t}\n\t\treturn this._default;\n\t}\n\n\tpublic set(index: number, value: T): void {\n\t\twhile (index >= this._store.length) {\n\t\t\tthis._store[this._store.length] = this._default;\n\t\t}\n\t\tthis._store[index] = value;\n\t}\n\n\t// TODO have `replace` instead of `delete` and `insert`\n\tpublic delete(deleteIndex: number, deleteCount: number): void {\n\t\tif (deleteCount === 0 || deleteIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tthis._store.splice(deleteIndex, deleteCount);\n\t}\n\n\tpublic insert(insertIndex: number, insertCount: number): void {\n\t\tif (insertCount === 0 || insertIndex >= this._store.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst arr: T[] = [];\n\t\tfor (let i = 0; i < insertCount; i++) {\n\t\t\tarr[i] = this._default;\n\t\t}\n\t\tthis._store = arrays.arrayInsert(this._store, insertIndex, arr);\n\t}\n}\n\nconst enum Constants {\n\tCHEAP_TOKENIZATION_LENGTH_LIMIT = 1024\n}\n\n/**\n * Stores the states at the start of each line and keeps track of which lines\n * must be re-tokenized. Also uses state equality to quickly validate lines\n * that don't need to be re-tokenized.\n *\n * For example, when typing on a line, the line gets marked as needing to be tokenized.\n * Once the line is tokenized, the end state is checked for equality against the begin\n * state of the next line. If the states are equal, tokenization doesn't need to run\n * again over the rest of the file. If the states are not equal, the next line gets marked\n * as needing to be tokenized.\n */\nexport class TokenizationStateStore {\n\trequestTokens(startLineNumber: number, endLineNumberExclusive: number): void {\n\t\tfor (let lineNumber = startLineNumber; lineNumber < endLineNumberExclusive; lineNumber++) {\n\t\t\tthis._stateStore.markMustBeTokenized(lineNumber - 1);\n\t\t}\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[25,29)", + "modifiedRange": "[25,25)", + "innerChanges": null + }, + { + "originalRange": "[75,75)", + "modifiedRange": "[71,75)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/advanced.expected.diff.json similarity index 50% rename from src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/advanced.expected.diff.json index c0ce019463b..7fee9a6d76d 100644 --- a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/advanced.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", + "original": { + "content": "import { IChange, IDiffComputationResult } from 'vs/editor/common/diff/diffComputer';", + "fileName": "./1.txt" + }, + "modified": { + "content": "import { IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider';\nimport { IChange } from 'vs/editor/common/diff/smartLinesDiffComputer';", + "fileName": "./2.txt" + }, "diffs": [ { "originalRange": "[1,2)", diff --git a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.human.diff.json b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/advanced.human.diff.json similarity index 100% rename from src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.human.diff.json rename to src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/advanced.human.diff.json diff --git a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/legacy.expected.diff.json similarity index 51% rename from src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/smart.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/legacy.expected.diff.json index 7eca01a03c6..9259dbaf629 100644 --- a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/smart.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/legacy.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", + "original": { + "content": "import { IChange, IDiffComputationResult } from 'vs/editor/common/diff/diffComputer';", + "fileName": "./1.txt" + }, + "modified": { + "content": "import { IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider';\nimport { IChange } from 'vs/editor/common/diff/smartLinesDiffComputer';", + "fileName": "./2.txt" + }, "diffs": [ { "originalRange": "[1,2)", diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/advanced.expected.diff.json new file mode 100644 index 00000000000..b3038a8d2b7 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-1/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "const sourceActions = notebookKernelService.getSourceActions(notebook, editor.scopedContextKeyService);\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "const sourceActions = notebookKernelService.getSourceActions(notebookTextModel, scopedContextKeyService);\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,62 -> 1,79]", + "modifiedRange": "[1,62 -> 1,81]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/experimental.expected.diff.json deleted file mode 100644 index 753a7c75cbc..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-1/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[1,2)", - "modifiedRange": "[1,2)", - "innerChanges": [ - { - "originalRange": "[1,70 -> 1,79]", - "modifiedRange": "[1,70 -> 1,81]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/legacy.expected.diff.json new file mode 100644 index 00000000000..e2af26dcae3 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-1/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "const sourceActions = notebookKernelService.getSourceActions(notebook, editor.scopedContextKeyService);\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "const sourceActions = notebookKernelService.getSourceActions(notebookTextModel, scopedContextKeyService);\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,70 -> 1,79]", + "modifiedRange": "[1,70 -> 1,81]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.expected.diff.json deleted file mode 100644 index 753a7c75cbc..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[1,2)", - "modifiedRange": "[1,2)", - "innerChanges": [ - { - "originalRange": "[1,70 -> 1,79]", - "modifiedRange": "[1,70 -> 1,81]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/advanced.expected.diff.json new file mode 100644 index 00000000000..337c2637132 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-2/advanced.expected.diff.json @@ -0,0 +1,46 @@ +{ + "original": { + "content": "if (!all.length && !sourceActions.length) {\n\tconst activeNotebookModel = getNotebookEditorFromEditorPane(editorService.activeEditorPane)?.textModel;\n\tif (activeNotebookModel) {\n\t\tconst language = this.getSuggestedLanguage(activeNotebookModel);\n\t\tsuggestedExtension = language ? this.getSuggestedKernelFromLanguage(activeNotebookModel.viewType, language) : undefined;\n\t}\n\tif (suggestedExtension) {\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "if (!all.length && !sourceActions.length) {\n\tconst language = this.getSuggestedLanguage(notebookTextModel);\n\tsuggestedExtension = language ? this.getSuggestedKernelFromLanguage(notebookTextModel.viewType, language) : undefined;\n\tif (suggestedExtension) {\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,7)", + "modifiedRange": "[2,4)", + "innerChanges": [ + { + "originalRange": "[2,8 -> 4,17]", + "modifiedRange": "[2,8 -> 2,16]" + }, + { + "originalRange": "[4,46 -> 4,53]", + "modifiedRange": "[2,45 -> 2,46]" + }, + { + "originalRange": "[4,60 -> 4,60]", + "modifiedRange": "[2,53 -> 2,57]" + }, + { + "originalRange": "[5,1 -> 5,2]", + "modifiedRange": "[3,1 -> 3,1]" + }, + { + "originalRange": "[5,71 -> 5,78]", + "modifiedRange": "[3,70 -> 3,71]" + }, + { + "originalRange": "[5,85 -> 5,85]", + "modifiedRange": "[3,78 -> 3,82]" + }, + { + "originalRange": "[6,1 -> 7,1]", + "modifiedRange": "[4,1 -> 4,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/experimental.expected.diff.json deleted file mode 100644 index 6b84b4c6209..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-2/experimental.expected.diff.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,7)", - "modifiedRange": "[2,4)", - "innerChanges": [ - { - "originalRange": "[2,8 -> 4,11]", - "modifiedRange": "[2,8 -> 2,10]" - }, - { - "originalRange": "[4,46 -> 4,53]", - "modifiedRange": "[2,45 -> 2,46]" - }, - { - "originalRange": "[4,60 -> 4,60]", - "modifiedRange": "[2,53 -> 2,57]" - }, - { - "originalRange": "[5,1 -> 5,2]", - "modifiedRange": "[3,1 -> 3,1]" - }, - { - "originalRange": "[5,71 -> 5,78]", - "modifiedRange": "[3,70 -> 3,71]" - }, - { - "originalRange": "[5,85 -> 5,85]", - "modifiedRange": "[3,78 -> 3,82]" - }, - { - "originalRange": "[6,1 -> 7,1]", - "modifiedRange": "[4,1 -> 4,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/legacy.expected.diff.json new file mode 100644 index 00000000000..7d0d8ed1629 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-2/legacy.expected.diff.json @@ -0,0 +1,46 @@ +{ + "original": { + "content": "if (!all.length && !sourceActions.length) {\n\tconst activeNotebookModel = getNotebookEditorFromEditorPane(editorService.activeEditorPane)?.textModel;\n\tif (activeNotebookModel) {\n\t\tconst language = this.getSuggestedLanguage(activeNotebookModel);\n\t\tsuggestedExtension = language ? this.getSuggestedKernelFromLanguage(activeNotebookModel.viewType, language) : undefined;\n\t}\n\tif (suggestedExtension) {\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "if (!all.length && !sourceActions.length) {\n\tconst language = this.getSuggestedLanguage(notebookTextModel);\n\tsuggestedExtension = language ? this.getSuggestedKernelFromLanguage(notebookTextModel.viewType, language) : undefined;\n\tif (suggestedExtension) {\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,7)", + "modifiedRange": "[2,4)", + "innerChanges": [ + { + "originalRange": "[2,1 -> 4,2]", + "modifiedRange": "[2,1 -> 2,1]" + }, + { + "originalRange": "[4,46 -> 4,53]", + "modifiedRange": "[2,45 -> 2,46]" + }, + { + "originalRange": "[4,60 -> 4,60]", + "modifiedRange": "[2,53 -> 2,57]" + }, + { + "originalRange": "[5,2 -> 5,3]", + "modifiedRange": "[3,2 -> 3,2]" + }, + { + "originalRange": "[5,71 -> 5,78]", + "modifiedRange": "[3,70 -> 3,71]" + }, + { + "originalRange": "[5,85 -> 5,85]", + "modifiedRange": "[3,78 -> 3,82]" + }, + { + "originalRange": "[5,123 -> 6,3]", + "modifiedRange": "[3,120 -> 3,120]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.expected.diff.json deleted file mode 100644 index d727a596dd4..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.expected.diff.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,7)", - "modifiedRange": "[2,4)", - "innerChanges": [ - { - "originalRange": "[2,1 -> 4,2]", - "modifiedRange": "[2,1 -> 2,1]" - }, - { - "originalRange": "[4,46 -> 4,53]", - "modifiedRange": "[2,45 -> 2,46]" - }, - { - "originalRange": "[4,60 -> 4,60]", - "modifiedRange": "[2,53 -> 2,57]" - }, - { - "originalRange": "[5,2 -> 5,3]", - "modifiedRange": "[3,2 -> 3,2]" - }, - { - "originalRange": "[5,71 -> 5,78]", - "modifiedRange": "[3,70 -> 3,71]" - }, - { - "originalRange": "[5,85 -> 5,85]", - "modifiedRange": "[3,78 -> 3,82]" - }, - { - "originalRange": "[5,123 -> 6,3]", - "modifiedRange": "[3,120 -> 3,120]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/advanced.expected.diff.json new file mode 100644 index 00000000000..869c81350b7 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/advanced.expected.diff.json @@ -0,0 +1,26 @@ +{ + "original": { + "content": "const { selected, all, suggestions, hidden } = notebookKernelService.getMatchingKernel(notebook);\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "const scopedContextKeyService = editor.scopedContextKeyService;\nconst matchResult = notebookKernelService.getMatchingKernel(notebook);\nconst { selected, all } = matchResult;\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,4)", + "innerChanges": [ + { + "originalRange": "[1,6 -> 1,45]", + "modifiedRange": "[1,6 -> 2,18]" + }, + { + "originalRange": "[2,1 -> 2,1]", + "modifiedRange": "[3,1 -> 4,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/experimental.expected.diff.json deleted file mode 100644 index 5c70300bec8..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-3/experimental.expected.diff.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[1,2)", - "modifiedRange": "[1,4)", - "innerChanges": [ - { - "originalRange": "[1,6 -> 1,32]", - "modifiedRange": "[1,6 -> 2,2]" - }, - { - "originalRange": "[1,35 -> 1,45]", - "modifiedRange": "[2,5 -> 2,18]" - }, - { - "originalRange": "[2,1 -> 2,1]", - "modifiedRange": "[3,1 -> 4,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/legacy.expected.diff.json new file mode 100644 index 00000000000..a1f2e8db4a5 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/legacy.expected.diff.json @@ -0,0 +1,30 @@ +{ + "original": { + "content": "const { selected, all, suggestions, hidden } = notebookKernelService.getMatchingKernel(notebook);\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "const scopedContextKeyService = editor.scopedContextKeyService;\nconst matchResult = notebookKernelService.getMatchingKernel(notebook);\nconst { selected, all } = matchResult;\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,4)", + "innerChanges": [ + { + "originalRange": "[1,7 -> 1,32]", + "modifiedRange": "[1,7 -> 2,2]" + }, + { + "originalRange": "[1,35 -> 1,45]", + "modifiedRange": "[2,5 -> 2,18]" + }, + { + "originalRange": "[1,98 -> 1,98]", + "modifiedRange": "[2,71 -> 3,39]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.expected.diff.json deleted file mode 100644 index f5d18c303e1..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.expected.diff.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[1,2)", - "modifiedRange": "[1,4)", - "innerChanges": [ - { - "originalRange": "[1,7 -> 1,32]", - "modifiedRange": "[1,7 -> 2,2]" - }, - { - "originalRange": "[1,35 -> 1,45]", - "modifiedRange": "[2,5 -> 2,18]" - }, - { - "originalRange": "[1,98 -> 1,98]", - "modifiedRange": "[2,71 -> 3,39]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/subword/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/subword/advanced.expected.diff.json new file mode 100644 index 00000000000..c8a5000a54c --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/subword/advanced.expected.diff.json @@ -0,0 +1,32 @@ +{ + "original": { + "content": "import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker';\nimport { IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { IModelService } from 'vs/editor/common/services/model';\n\nlet x: [IEditorWorkerService, EditorSimpleWorker, IModelService, IUnicodeHighlightsResult];", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker';\nimport { IDiffComputationResult, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { IModelService } from 'vs/editor/common/services/model';\n\nlet x: [IEditorWorkerService, EditorSimpleWorker, IModelService, IUnicodeHighlightsResult];\nlet y: IDiffComputationResult;", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,3)", + "modifiedRange": "[2,3)", + "innerChanges": [ + { + "originalRange": "[2,9 -> 2,9]", + "modifiedRange": "[2,9 -> 2,33]" + } + ] + }, + { + "originalRange": "[6,6)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[5,92 -> 5,92]", + "modifiedRange": "[5,92 -> 6,31]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/subword/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/subword/experimental.expected.diff.json deleted file mode 100644 index d1e2aa57bee..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/subword/experimental.expected.diff.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,9 -> 2,9]", - "modifiedRange": "[2,9 -> 2,33]" - } - ] - }, - { - "originalRange": "[6,6)", - "modifiedRange": "[6,7)", - "innerChanges": [ - { - "originalRange": "[6,1 -> 6,1]", - "modifiedRange": "[6,1 -> 7,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/subword/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/subword/legacy.expected.diff.json new file mode 100644 index 00000000000..ed40ca24537 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/subword/legacy.expected.diff.json @@ -0,0 +1,27 @@ +{ + "original": { + "content": "import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker';\nimport { IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { IModelService } from 'vs/editor/common/services/model';\n\nlet x: [IEditorWorkerService, EditorSimpleWorker, IModelService, IUnicodeHighlightsResult];", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker';\nimport { IDiffComputationResult, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { IModelService } from 'vs/editor/common/services/model';\n\nlet x: [IEditorWorkerService, EditorSimpleWorker, IModelService, IUnicodeHighlightsResult];\nlet y: IDiffComputationResult;", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,3)", + "modifiedRange": "[2,3)", + "innerChanges": [ + { + "originalRange": "[2,11 -> 2,11]", + "modifiedRange": "[2,11 -> 2,35]" + } + ] + }, + { + "originalRange": "[6,6)", + "modifiedRange": "[6,7)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/subword/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/subword/smart.expected.diff.json deleted file mode 100644 index 795a5a1d248..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/subword/smart.expected.diff.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,11 -> 2,11]", - "modifiedRange": "[2,11 -> 2,35]" - } - ] - }, - { - "originalRange": "[6,6)", - "modifiedRange": "[6,7)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/trivial/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/trivial/advanced.expected.diff.json similarity index 61% rename from src/vs/editor/test/node/diffing/fixtures/trivial/experimental.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/trivial/advanced.expected.diff.json index 82196225144..b88bd08c021 100644 --- a/src/vs/editor/test/node/diffing/fixtures/trivial/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/trivial/advanced.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", + "original": { + "content": "", + "fileName": "./1.txt" + }, + "modified": { + "content": "x", + "fileName": "./2.txt" + }, "diffs": [ { "originalRange": "[1,2)", diff --git a/src/vs/editor/test/node/diffing/fixtures/trivial/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/trivial/legacy.expected.diff.json new file mode 100644 index 00000000000..e4d8e0713df --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/trivial/legacy.expected.diff.json @@ -0,0 +1,17 @@ +{ + "original": { + "content": "", + "fileName": "./1.txt" + }, + "modified": { + "content": "x", + "fileName": "./2.txt" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/trivial/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/trivial/smart.expected.diff.json deleted file mode 100644 index 6068fbfd5b1..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/trivial/smart.expected.diff.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "originalFileName": "./1.txt", - "modifiedFileName": "./2.txt", - "diffs": [ - { - "originalRange": "[1,2)", - "modifiedRange": "[1,2)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/1.tst b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/1.tst similarity index 100% rename from src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/1.tst rename to src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/1.tst diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/2.tst b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/2.tst similarity index 100% rename from src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/2.tst rename to src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/2.tst diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/advanced.expected.diff.json new file mode 100644 index 00000000000..a1f9f55cf07 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/advanced.expected.diff.json @@ -0,0 +1,48 @@ +{ + "original": { + "content": "function compileProgram(): ExitStatus {\n // First get any syntactic errors. \n var diagnostics = program.getSyntacticDiagnostics();\n reportDiagnostics(diagnostics);\n\n // If we didn't have any syntactic errors, then also try getting the global and\n // semantic errors.\n if (diagnostics.length === 0) ", + "fileName": "./1.tst" + }, + "modified": { + "content": "function compileProgram(): ExitStatus {\n let diagnostics: Diagnostic[];\n \n // First get and report any syntactic errors.\n diagnostics = program.getSyntacticDiagnostics();\n\n // If we didn't have any syntactic errors, then also try getting the global and\n // semantic errors.\n if (diagnostics.length === 0) {", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,5)", + "modifiedRange": "[2,6)", + "innerChanges": [ + { + "originalRange": "[2,1 -> 2,1]", + "modifiedRange": "[2,1 -> 4,1]" + }, + { + "originalRange": "[2,17 -> 2,17]", + "modifiedRange": "[4,17 -> 4,28]" + }, + { + "originalRange": "[2,39 -> 2,40]", + "modifiedRange": "[4,50 -> 4,50]" + }, + { + "originalRange": "[3,5 -> 3,9]", + "modifiedRange": "[5,5 -> 5,5]" + }, + { + "originalRange": "[4,1 -> 5,1]", + "modifiedRange": "[6,1 -> 6,1]" + } + ] + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[9,10)", + "innerChanges": [ + { + "originalRange": "[8,35 -> 8,35]", + "modifiedRange": "[9,35 -> 9,36]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/legacy.expected.diff.json new file mode 100644 index 00000000000..3411d7fbc1a --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/legacy.expected.diff.json @@ -0,0 +1,48 @@ +{ + "original": { + "content": "function compileProgram(): ExitStatus {\n // First get any syntactic errors. \n var diagnostics = program.getSyntacticDiagnostics();\n reportDiagnostics(diagnostics);\n\n // If we didn't have any syntactic errors, then also try getting the global and\n // semantic errors.\n if (diagnostics.length === 0) ", + "fileName": "./1.tst" + }, + "modified": { + "content": "function compileProgram(): ExitStatus {\n let diagnostics: Diagnostic[];\n \n // First get and report any syntactic errors.\n diagnostics = program.getSyntacticDiagnostics();\n\n // If we didn't have any syntactic errors, then also try getting the global and\n // semantic errors.\n if (diagnostics.length === 0) {", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,5)", + "modifiedRange": "[2,6)", + "innerChanges": [ + { + "originalRange": "[2,1 -> 2,1]", + "modifiedRange": "[2,1 -> 4,1]" + }, + { + "originalRange": "[2,20 -> 2,20]", + "modifiedRange": "[4,20 -> 4,31]" + }, + { + "originalRange": "[2,39 -> 2,40]", + "modifiedRange": "[4,50 -> 4,50]" + }, + { + "originalRange": "[3,5 -> 3,9]", + "modifiedRange": "[5,5 -> 5,5]" + }, + { + "originalRange": "[3,57 -> 4,36]", + "modifiedRange": "[5,53 -> 5,53]" + } + ] + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[9,10)", + "innerChanges": [ + { + "originalRange": "[8,35 -> 8,35]", + "modifiedRange": "[9,35 -> 9,36]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-class/1.tst b/src/vs/editor/test/node/diffing/fixtures/ts-class/1.tst new file mode 100644 index 00000000000..926e9102e77 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-class/1.tst @@ -0,0 +1,32 @@ + +class Slice implements ISequence { + private readonly elements: Int32Array; + private readonly firstCharOnLineOffsets: Int32Array; + + constructor(public readonly lines: string[], public readonly lineRange: OffsetRange) { + let chars = 0; + this.firstCharOnLineOffsets = new Int32Array(lineRange.length); + + for (let i = lineRange.start; i < lineRange.endExclusive; i++) { + const line = lines[i]; + chars += line.length; + this.firstCharOnLineOffsets[i - lineRange.start] = chars + 1; + chars++; + } + + this.elements = new Int32Array(chars); + let offset = 0; + for (let i = lineRange.start; i < lineRange.endExclusive; i++) { + const line = lines[i]; + + for (let i = 0; i < line.length; i++) { + this.elements[offset + i] = line.charCodeAt(i); + } + offset += line.length; + if (i < lines.length - 1) { + this.elements[offset] = '\n'.charCodeAt(0); + offset += 1; + } + } + } +} diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-class/2.tst b/src/vs/editor/test/node/diffing/fixtures/ts-class/2.tst new file mode 100644 index 00000000000..f929ce3c1ef --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-class/2.tst @@ -0,0 +1,23 @@ +class Slice implements ISequence { + private readonly elements: number[] = []; + private readonly firstCharOnLineOffsets: number[] = []; + private readonly trimStartLength: number[] = []; + + constructor(public readonly lines: string[], public readonly lineRange: OffsetRange, public readonly considerWhitespaceChanges: boolean) { + for (let i = lineRange.start; i < lineRange.endExclusive; i++) { + const l = lines[i]; + const l1 = considerWhitespaceChanges ? l : l.trimStart(); + const line = considerWhitespaceChanges ? l1 : l1.trimEnd(); + this.trimStartLength.push(l.length - l1.length); + + for (let i = 0; i < line.length; i++) { + this.elements.push(line.charCodeAt(i)); + } + if (i < lines.length - 1) { + this.elements.push('\n'.charCodeAt(0)); + } + + this.firstCharOnLineOffsets[i - lineRange.start] = this.elements.length; + } + } +} diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.expected.diff.json new file mode 100644 index 00000000000..85e7beaa072 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.expected.diff.json @@ -0,0 +1,116 @@ +{ + "original": { + "content": "\nclass Slice implements ISequence {\n\tprivate readonly elements: Int32Array;\n\tprivate readonly firstCharOnLineOffsets: Int32Array;\n\n\tconstructor(public readonly lines: string[], public readonly lineRange: OffsetRange) {\n\t\tlet chars = 0;\n\t\tthis.firstCharOnLineOffsets = new Int32Array(lineRange.length);\n\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst line = lines[i];\n\t\t\tchars += line.length;\n\t\t\tthis.firstCharOnLineOffsets[i - lineRange.start] = chars + 1;\n\t\t\tchars++;\n\t\t}\n\n\t\tthis.elements = new Int32Array(chars);\n\t\tlet offset = 0;\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst line = lines[i];\n\n\t\t\tfor (let i = 0; i < line.length; i++) {\n\t\t\t\tthis.elements[offset + i] = line.charCodeAt(i);\n\t\t\t}\n\t\t\toffset += line.length;\n\t\t\tif (i < lines.length - 1) {\n\t\t\t\tthis.elements[offset] = '\\n'.charCodeAt(0);\n\t\t\t\toffset += 1;\n\t\t\t}\n\t\t}\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Slice implements ISequence {\n\tprivate readonly elements: number[] = [];\n\tprivate readonly firstCharOnLineOffsets: number[] = [];\n\tprivate readonly trimStartLength: number[] = [];\n\n\tconstructor(public readonly lines: string[], public readonly lineRange: OffsetRange, public readonly considerWhitespaceChanges: boolean) {\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst l = lines[i];\n\t\t\tconst l1 = considerWhitespaceChanges ? l : l.trimStart();\n\t\t\tconst line = considerWhitespaceChanges ? l1 : l1.trimEnd();\n\t\t\tthis.trimStartLength.push(l.length - l1.length);\n\n\t\t\tfor (let i = 0; i < line.length; i++) {\n\t\t\t\tthis.elements.push(line.charCodeAt(i));\n\t\t\t}\n\t\t\tif (i < lines.length - 1) {\n\t\t\t\tthis.elements.push('\\n'.charCodeAt(0));\n\t\t\t}\n\n\t\t\tthis.firstCharOnLineOffsets[i - lineRange.start] = this.elements.length;\n\t\t}\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,1)", + "innerChanges": [ + { + "originalRange": "[1,1 -> 2,1]", + "modifiedRange": "[1,1 -> 1,1]" + } + ] + }, + { + "originalRange": "[3,5)", + "modifiedRange": "[2,5)", + "innerChanges": [ + { + "originalRange": "[3,29 -> 3,39]", + "modifiedRange": "[2,29 -> 2,42]" + }, + { + "originalRange": "[4,43 -> 4,53]", + "modifiedRange": "[3,43 -> 4,49]" + } + ] + }, + { + "originalRange": "[6,10)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[6,85 -> 9,1]", + "modifiedRange": "[6,85 -> 6,140]" + } + ] + }, + { + "originalRange": "[11,21)", + "modifiedRange": "[8,12)", + "innerChanges": [ + { + "originalRange": "[11,10 -> 11,14]", + "modifiedRange": "[8,10 -> 8,11]" + }, + { + "originalRange": "[12,4 -> 13,52]", + "modifiedRange": "[9,4 -> 9,12]" + }, + { + "originalRange": "[13,55 -> 19,67]", + "modifiedRange": "[9,15 -> 9,61]" + }, + { + "originalRange": "[20,17 -> 20,25]", + "modifiedRange": "[10,17 -> 11,51]" + } + ] + }, + { + "originalRange": "[23,24)", + "modifiedRange": "[14,15)", + "innerChanges": [ + { + "originalRange": "[23,18 -> 23,33]", + "modifiedRange": "[14,18 -> 14,24]" + }, + { + "originalRange": "[23,50 -> 23,50]", + "modifiedRange": "[14,41 -> 14,42]" + } + ] + }, + { + "originalRange": "[25,26)", + "modifiedRange": "[16,16)", + "innerChanges": [ + { + "originalRange": "[25,1 -> 26,1]", + "modifiedRange": "[16,1 -> 16,1]" + } + ] + }, + { + "originalRange": "[27,29)", + "modifiedRange": "[17,18)", + "innerChanges": [ + { + "originalRange": "[27,18 -> 27,29]", + "modifiedRange": "[17,18 -> 17,24]" + }, + { + "originalRange": "[27,47 -> 28,16]", + "modifiedRange": "[17,42 -> 17,43]" + } + ] + }, + { + "originalRange": "[30,30)", + "modifiedRange": "[19,21)", + "innerChanges": [ + { + "originalRange": "[30,1 -> 30,1]", + "modifiedRange": "[19,1 -> 21,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.human.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.human.diff.json new file mode 100644 index 00000000000..1601892786e --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.human.diff.json @@ -0,0 +1,100 @@ +{ + "original": { + "content": "\nclass Slice implements ISequence {\n\tprivate readonly elements: Int32Array;\n\tprivate readonly firstCharOnLineOffsets: Int32Array;\n\n\tconstructor(public readonly lines: string[], public readonly lineRange: OffsetRange) {\n\t\tlet chars = 0;\n\t\tthis.firstCharOnLineOffsets = new Int32Array(lineRange.length);\n\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst line = lines[i];\n\t\t\tchars += line.length;\n\t\t\tthis.firstCharOnLineOffsets[i - lineRange.start] = chars + 1;\n\t\t\tchars++;\n\t\t}\n\n\t\tthis.elements = new Int32Array(chars);\n\t\tlet offset = 0;\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst line = lines[i];\n\n\t\t\tfor (let i = 0; i < line.length; i++) {\n\t\t\t\tthis.elements[offset + i] = line.charCodeAt(i);\n\t\t\t}\n\t\t\toffset += line.length;\n\t\t\tif (i < lines.length - 1) {\n\t\t\t\tthis.elements[offset] = '\\n'.charCodeAt(0);\n\t\t\t\toffset += 1;\n\t\t\t}\n\t\t}\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Slice implements ISequence {\n\tprivate readonly elements: number[] = [];\n\tprivate readonly firstCharOnLineOffsets: number[] = [];\n\tprivate readonly trimStartLength: number[] = [];\n\n\tconstructor(public readonly lines: string[], public readonly lineRange: OffsetRange, public readonly considerWhitespaceChanges: boolean) {\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst l = lines[i];\n\t\t\tconst l1 = considerWhitespaceChanges ? l : l.trimStart();\n\t\t\tconst line = considerWhitespaceChanges ? l1 : l1.trimEnd();\n\t\t\tthis.trimStartLength.push(l.length - l1.length);\n\n\t\t\tfor (let i = 0; i < line.length; i++) {\n\t\t\t\tthis.elements.push(line.charCodeAt(i));\n\t\t\t}\n\t\t\tif (i < lines.length - 1) {\n\t\t\t\tthis.elements.push('\\n'.charCodeAt(0));\n\t\t\t}\n\n\t\t\tthis.firstCharOnLineOffsets[i - lineRange.start] = this.elements.length;\n\t\t}\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,1)", + "innerChanges": null + }, + { + "originalRange": "[3,5)", + "modifiedRange": "[2,5)", + "innerChanges": [ + { + "originalRange": "[3,29 -> 3,39]", + "modifiedRange": "[2,29 -> 2,42]" + }, + { + "originalRange": "[4,43 -> 4,53]", + "modifiedRange": "[3,43 -> 4,49]" + } + ] + }, + + { + "originalRange": "[6,7)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[6,85 -> 6,85]", + "modifiedRange": "[6,85 -> 6,137]" + } + ] + }, + { + "originalRange": "[7,10)", + "modifiedRange": "[7,7)", + "innerChanges": null + }, + { + "originalRange": "[11,12)", + "modifiedRange": "[8,9)", + "innerChanges": [ + { + "originalRange": "[11,11 -> 11,14]", + "modifiedRange": "[8,11 -> 8,11]" + } + ] + }, + { + "originalRange": "[12,21)", + "modifiedRange": "[9,12)", + "innerChanges": null + }, + { + "originalRange": "[23,24)", + "modifiedRange": "[14,15)", + "innerChanges": [ + { + "originalRange": "[23,18 -> 23,33]", + "modifiedRange": "[14,18 -> 14,24]" + }, + { + "originalRange": "[23,51 -> 23,51]", + "modifiedRange": "[14,42 -> 14,43]" + } + ] + }, + { + "originalRange": "[25,26)", + "modifiedRange": "[16,16)", + "innerChanges": null + }, + { + "originalRange": "[27,29)", + "modifiedRange": "[17,18)", + "innerChanges": [ + { + "originalRange": "[27,18 -> 27,29]", + "modifiedRange": "[17,18 -> 17,24]" + }, + { + "originalRange": "[27,47 -> 28,16]", + "modifiedRange": "[17,42 -> 17,43]" + } + ] + }, + { + "originalRange": "[30,30)", + "modifiedRange": "[19,21)", + "innerChanges": null + } + ] +} diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-class/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-class/legacy.expected.diff.json new file mode 100644 index 00000000000..bfb1d8aa5dc --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-class/legacy.expected.diff.json @@ -0,0 +1,113 @@ +{ + "original": { + "content": "\nclass Slice implements ISequence {\n\tprivate readonly elements: Int32Array;\n\tprivate readonly firstCharOnLineOffsets: Int32Array;\n\n\tconstructor(public readonly lines: string[], public readonly lineRange: OffsetRange) {\n\t\tlet chars = 0;\n\t\tthis.firstCharOnLineOffsets = new Int32Array(lineRange.length);\n\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst line = lines[i];\n\t\t\tchars += line.length;\n\t\t\tthis.firstCharOnLineOffsets[i - lineRange.start] = chars + 1;\n\t\t\tchars++;\n\t\t}\n\n\t\tthis.elements = new Int32Array(chars);\n\t\tlet offset = 0;\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst line = lines[i];\n\n\t\t\tfor (let i = 0; i < line.length; i++) {\n\t\t\t\tthis.elements[offset + i] = line.charCodeAt(i);\n\t\t\t}\n\t\t\toffset += line.length;\n\t\t\tif (i < lines.length - 1) {\n\t\t\t\tthis.elements[offset] = '\\n'.charCodeAt(0);\n\t\t\t\toffset += 1;\n\t\t\t}\n\t\t}\n\t}\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Slice implements ISequence {\n\tprivate readonly elements: number[] = [];\n\tprivate readonly firstCharOnLineOffsets: number[] = [];\n\tprivate readonly trimStartLength: number[] = [];\n\n\tconstructor(public readonly lines: string[], public readonly lineRange: OffsetRange, public readonly considerWhitespaceChanges: boolean) {\n\t\tfor (let i = lineRange.start; i < lineRange.endExclusive; i++) {\n\t\t\tconst l = lines[i];\n\t\t\tconst l1 = considerWhitespaceChanges ? l : l.trimStart();\n\t\t\tconst line = considerWhitespaceChanges ? l1 : l1.trimEnd();\n\t\t\tthis.trimStartLength.push(l.length - l1.length);\n\n\t\t\tfor (let i = 0; i < line.length; i++) {\n\t\t\t\tthis.elements.push(line.charCodeAt(i));\n\t\t\t}\n\t\t\tif (i < lines.length - 1) {\n\t\t\t\tthis.elements.push('\\n'.charCodeAt(0));\n\t\t\t}\n\n\t\t\tthis.firstCharOnLineOffsets[i - lineRange.start] = this.elements.length;\n\t\t}\n\t}\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,1)", + "innerChanges": null + }, + { + "originalRange": "[3,5)", + "modifiedRange": "[2,5)", + "innerChanges": [ + { + "originalRange": "[3,29 -> 3,39]", + "modifiedRange": "[2,29 -> 2,42]" + }, + { + "originalRange": "[4,43 -> 4,53]", + "modifiedRange": "[3,43 -> 4,49]" + } + ] + }, + { + "originalRange": "[6,10)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[6,85 -> 8,53]", + "modifiedRange": "[6,85 -> 6,123]" + }, + { + "originalRange": "[8,57 -> 9,1]", + "modifiedRange": "[6,127 -> 6,140]" + } + ] + }, + { + "originalRange": "[11,21)", + "modifiedRange": "[8,12)", + "innerChanges": [ + { + "originalRange": "[11,11 -> 11,14]", + "modifiedRange": "[8,11 -> 8,11]" + }, + { + "originalRange": "[12,5 -> 13,14]", + "modifiedRange": "[9,5 -> 9,33]" + }, + { + "originalRange": "[13,17 -> 13,64]", + "modifiedRange": "[9,36 -> 9,60]" + }, + { + "originalRange": "[14,5 -> 17,39]", + "modifiedRange": "[10,5 -> 10,61]" + }, + { + "originalRange": "[18,3 -> 19,27]", + "modifiedRange": "[11,3 -> 11,14]" + }, + { + "originalRange": "[19,31 -> 20,25]", + "modifiedRange": "[11,18 -> 11,51]" + } + ] + }, + { + "originalRange": "[23,24)", + "modifiedRange": "[14,15)", + "innerChanges": [ + { + "originalRange": "[23,18 -> 23,33]", + "modifiedRange": "[14,18 -> 14,24]" + }, + { + "originalRange": "[23,51 -> 23,51]", + "modifiedRange": "[14,42 -> 14,43]" + } + ] + }, + { + "originalRange": "[25,26)", + "modifiedRange": "[16,16)", + "innerChanges": null + }, + { + "originalRange": "[27,29)", + "modifiedRange": "[17,18)", + "innerChanges": [ + { + "originalRange": "[27,18 -> 27,29]", + "modifiedRange": "[17,18 -> 17,24]" + }, + { + "originalRange": "[27,47 -> 28,16]", + "modifiedRange": "[17,42 -> 17,43]" + } + ] + }, + { + "originalRange": "[30,30)", + "modifiedRange": "[19,21)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-comments/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-comments/advanced.expected.diff.json new file mode 100644 index 00000000000..29e3fc1bfe1 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-comments/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "interface Test {\n /**\n * Render +/- indicators for added/deleted changes.\n * Defaults to true.\n */\n renderIndicators?: boolean;\n /**\n * Original model should be editable?\n * Defaults to false.\n */\n originalEditable?: boolean;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "interface Test {\n /**\n * Render +/- indicators for added/deleted changes.\n * Defaults to true.\n */\n renderIndicators?: boolean;\n /**\n * Shows icons in the glyph margin to revert changes.\n * Default to true.\n */\n renderMarginRevertIcon?: boolean;\n /**\n * Original model should be editable?\n * Defaults to false.\n */\n originalEditable?: boolean;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[7,7)", + "modifiedRange": "[7,12)", + "innerChanges": [ + { + "originalRange": "[7,1 -> 7,1]", + "modifiedRange": "[7,1 -> 12,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-comments/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-comments/experimental.expected.diff.json deleted file mode 100644 index 6bdd24212ff..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-comments/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[7,7)", - "modifiedRange": "[7,12)", - "innerChanges": [ - { - "originalRange": "[7,1 -> 7,1]", - "modifiedRange": "[7,1 -> 12,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-comments/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-comments/legacy.expected.diff.json new file mode 100644 index 00000000000..a1903d21727 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-comments/legacy.expected.diff.json @@ -0,0 +1,17 @@ +{ + "original": { + "content": "interface Test {\n /**\n * Render +/- indicators for added/deleted changes.\n * Defaults to true.\n */\n renderIndicators?: boolean;\n /**\n * Original model should be editable?\n * Defaults to false.\n */\n originalEditable?: boolean;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "interface Test {\n /**\n * Render +/- indicators for added/deleted changes.\n * Defaults to true.\n */\n renderIndicators?: boolean;\n /**\n * Shows icons in the glyph margin to revert changes.\n * Default to true.\n */\n renderMarginRevertIcon?: boolean;\n /**\n * Original model should be editable?\n * Defaults to false.\n */\n originalEditable?: boolean;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[8,8)", + "modifiedRange": "[8,13)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-comments/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-comments/smart.expected.diff.json deleted file mode 100644 index e5fb2b96111..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-comments/smart.expected.diff.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[8,8)", - "modifiedRange": "[8,13)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json new file mode 100644 index 00000000000..07656313cdc --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json @@ -0,0 +1,110 @@ +{ + "original": { + "content": "class Test {\n // ---- BEGIN diff --------------------------------------------------------------------------\n\n\tpublic async computeDiff(originalUrl: string, modifiedUrl: string, ignoreTrimWhitespace: boolean, maxComputationTime: number): Promise {\n\t\tconst original = this._getModel(originalUrl);\n\t\tconst modified = this._getModel(modifiedUrl);\n\t\tif (!original || !modified) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn EditorSimpleWorker.computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime);\n\t}\n\n\tpublic static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, ignoreTrimWhitespace: boolean, maxComputationTime: number): IDiffComputationResult | null {\n\t\tconst originalLines = originalTextModel.getLinesContent();\n\t\tconst modifiedLines = modifiedTextModel.getLinesContent();\n\t\tconst diffComputer = new DiffComputer(originalLines, modifiedLines, {\n\t\t\tshouldComputeCharChanges: true,\n\t\t\tshouldPostProcessCharChanges: true,\n\t\t\tshouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\n\t\t\tshouldMakePrettyDiff: true,\n\t\t\tmaxComputationTime: maxComputationTime\n\t\t});\n\n\t\tconst diffResult = diffComputer.computeDiff();\n\t\tconst identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));\n\t\treturn {\n\t\t\tquitEarly: diffResult.quitEarly,\n\t\t\tidentical: identical,\n\t\t\tchanges: diffResult.changes\n\t\t};\n\t}\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Test {\n\t// ---- BEGIN diff --------------------------------------------------------------------------\n\n\tpublic async computeDiff(originalUrl: string, modifiedUrl: string, options: ILinesDiffComputerOptions): Promise {\n\t\tconst original = this._getModel(originalUrl);\n\t\tconst modified = this._getModel(modifiedUrl);\n\t\tif (!original || !modified) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn EditorSimpleWorker.computeDiff(original, modified, options);\n\t}\n\n\tpublic static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, options: ILinesDiffComputerOptions): IDiffComputationResult {\n\n\t\tconst diffAlgorithm: ILinesDiffComputer = options.diffAlgorithm === 'experimental' ? linesDiffComputers.experimental : linesDiffComputers.smart;\n\n\t\tconst originalLines = originalTextModel.getLinesContent();\n\t\tconst modifiedLines = modifiedTextModel.getLinesContent();\n\n\t\tconst result = diffAlgorithm.computeDiff(originalLines, modifiedLines, options);\n\n\t\tconst identical = (result.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));\n\n\t\treturn {\n\t\t\tidentical,\n\t\t\tquitEarly: result.quitEarly,\n\t\t\tchanges: result.changes.map(m => ([m.originalRange.startLineNumber, m.originalRange.endLineNumberExclusive, m.modifiedRange.startLineNumber, m.modifiedRange.endLineNumberExclusive, m.innerChanges?.map(m => [\n\t\t\t\tm.originalRange.startLineNumber,\n\t\t\t\tm.originalRange.startColumn,\n\t\t\t\tm.originalRange.endLineNumber,\n\t\t\t\tm.originalRange.endColumn,\n\t\t\t\tm.modifiedRange.startLineNumber,\n\t\t\t\tm.modifiedRange.startColumn,\n\t\t\t\tm.modifiedRange.endLineNumber,\n\t\t\t\tm.modifiedRange.endColumn,\n\t\t\t])]))\n\t\t};\n\t}\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,3)", + "modifiedRange": "[2,3)", + "innerChanges": [ + { + "originalRange": "[2,1 -> 2,5]", + "modifiedRange": "[2,1 -> 2,2]" + } + ] + }, + { + "originalRange": "[4,5)", + "modifiedRange": "[4,5)", + "innerChanges": [ + { + "originalRange": "[4,69 -> 4,126]", + "modifiedRange": "[4,69 -> 4,103]" + } + ] + }, + { + "originalRange": "[11,12)", + "modifiedRange": "[11,12)", + "innerChanges": [ + { + "originalRange": "[11,61 -> 11,101]", + "modifiedRange": "[11,61 -> 11,68]" + } + ] + }, + { + "originalRange": "[14,15)", + "modifiedRange": "[14,18)", + "innerChanges": [ + { + "originalRange": "[14,120 -> 14,154]", + "modifiedRange": "[14,120 -> 14,162]" + }, + { + "originalRange": "[14,165 -> 14,211]", + "modifiedRange": "[14,173 -> 17,1]" + } + ] + }, + { + "originalRange": "[17,24)", + "modifiedRange": "[20,24)", + "innerChanges": [ + { + "originalRange": "[17,1 -> 17,1]", + "modifiedRange": "[20,1 -> 21,1]" + }, + { + "originalRange": "[17,8 -> 17,40]", + "modifiedRange": "[21,8 -> 21,43]" + }, + { + "originalRange": "[17,71 -> 17,72]", + "modifiedRange": "[21,74 -> 22,1]" + }, + { + "originalRange": "[18,3 -> 23,4]", + "modifiedRange": "[23,3 -> 23,120]" + } + ] + }, + { + "originalRange": "[25,27)", + "modifiedRange": "[25,25)", + "innerChanges": [ + { + "originalRange": "[25,1 -> 27,1]", + "modifiedRange": "[25,1 -> 25,1]" + } + ] + }, + { + "originalRange": "[28,31)", + "modifiedRange": "[26,38)", + "innerChanges": [ + { + "originalRange": "[28,1 -> 28,1]", + "modifiedRange": "[26,1 -> 27,1]" + }, + { + "originalRange": "[28,15 -> 28,20]", + "modifiedRange": "[27,15 -> 27,16]" + }, + { + "originalRange": "[29,4 -> 29,24]", + "modifiedRange": "[28,4 -> 29,36]" + }, + { + "originalRange": "[30,4 -> 30,31]", + "modifiedRange": "[30,4 -> 37,9]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/experimental.expected.diff.json deleted file mode 100644 index 37bf0534f87..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/experimental.expected.diff.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,1 -> 2,5]", - "modifiedRange": "[2,1 -> 2,2]" - } - ] - }, - { - "originalRange": "[4,5)", - "modifiedRange": "[4,5)", - "innerChanges": [ - { - "originalRange": "[4,69 -> 4,103]", - "modifiedRange": "[4,69 -> 4,88]" - }, - { - "originalRange": "[4,109 -> 4,110]", - "modifiedRange": "[4,94 -> 4,98]" - }, - { - "originalRange": "[4,114 -> 4,126]", - "modifiedRange": "[4,102 -> 4,103]" - } - ] - }, - { - "originalRange": "[11,12)", - "modifiedRange": "[11,12)", - "innerChanges": [ - { - "originalRange": "[11,61 -> 11,93]", - "modifiedRange": "[11,61 -> 11,63]" - }, - { - "originalRange": "[11,97 -> 11,101]", - "modifiedRange": "[11,67 -> 11,68]" - } - ] - }, - { - "originalRange": "[14,15)", - "modifiedRange": "[14,18)", - "innerChanges": [ - { - "originalRange": "[14,120 -> 14,154]", - "modifiedRange": "[14,120 -> 14,162]" - }, - { - "originalRange": "[14,165 -> 14,178]", - "modifiedRange": "[14,173 -> 16,22]" - }, - { - "originalRange": "[14,181 -> 14,181]", - "modifiedRange": "[16,25 -> 16,30]" - }, - { - "originalRange": "[14,191 -> 14,192]", - "modifiedRange": "[16,40 -> 16,47]" - }, - { - "originalRange": "[14,196 -> 14,211]", - "modifiedRange": "[16,51 -> 17,1]" - } - ] - }, - { - "originalRange": "[17,24)", - "modifiedRange": "[20,24)", - "innerChanges": [ - { - "originalRange": "[17,1 -> 17,1]", - "modifiedRange": "[20,1 -> 21,1]" - }, - { - "originalRange": "[17,8 -> 17,8]", - "modifiedRange": "[21,8 -> 21,17]" - }, - { - "originalRange": "[17,13 -> 17,14]", - "modifiedRange": "[21,22 -> 21,33]" - }, - { - "originalRange": "[17,20 -> 17,28]", - "modifiedRange": "[21,39 -> 21,39]" - }, - { - "originalRange": "[17,32 -> 17,40]", - "modifiedRange": "[21,43 -> 21,43]" - }, - { - "originalRange": "[17,71 -> 17,72]", - "modifiedRange": "[21,74 -> 22,1]" - }, - { - "originalRange": "[18,3 -> 19,26]", - "modifiedRange": "[23,3 -> 23,30]" - }, - { - "originalRange": "[19,32 -> 19,32]", - "modifiedRange": "[23,36 -> 23,56]" - }, - { - "originalRange": "[19,35 -> 23,4]", - "modifiedRange": "[23,59 -> 23,120]" - } - ] - }, - { - "originalRange": "[25,27)", - "modifiedRange": "[25,25)", - "innerChanges": [ - { - "originalRange": "[25,1 -> 27,1]", - "modifiedRange": "[25,1 -> 25,1]" - } - ] - }, - { - "originalRange": "[28,31)", - "modifiedRange": "[26,38)", - "innerChanges": [ - { - "originalRange": "[28,1 -> 28,1]", - "modifiedRange": "[26,1 -> 27,1]" - }, - { - "originalRange": "[28,15 -> 28,20]", - "modifiedRange": "[27,15 -> 27,16]" - }, - { - "originalRange": "[29,4 -> 29,24]", - "modifiedRange": "[28,4 -> 29,36]" - }, - { - "originalRange": "[30,4 -> 30,6]", - "modifiedRange": "[30,4 -> 30,16]" - }, - { - "originalRange": "[30,10 -> 30,26]", - "modifiedRange": "[30,20 -> 34,16]" - }, - { - "originalRange": "[30,30 -> 30,31]", - "modifiedRange": "[34,20 -> 37,9]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/legacy.expected.diff.json new file mode 100644 index 00000000000..f011be41a70 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/legacy.expected.diff.json @@ -0,0 +1,161 @@ +{ + "original": { + "content": "class Test {\n // ---- BEGIN diff --------------------------------------------------------------------------\n\n\tpublic async computeDiff(originalUrl: string, modifiedUrl: string, ignoreTrimWhitespace: boolean, maxComputationTime: number): Promise {\n\t\tconst original = this._getModel(originalUrl);\n\t\tconst modified = this._getModel(modifiedUrl);\n\t\tif (!original || !modified) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn EditorSimpleWorker.computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime);\n\t}\n\n\tpublic static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, ignoreTrimWhitespace: boolean, maxComputationTime: number): IDiffComputationResult | null {\n\t\tconst originalLines = originalTextModel.getLinesContent();\n\t\tconst modifiedLines = modifiedTextModel.getLinesContent();\n\t\tconst diffComputer = new DiffComputer(originalLines, modifiedLines, {\n\t\t\tshouldComputeCharChanges: true,\n\t\t\tshouldPostProcessCharChanges: true,\n\t\t\tshouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\n\t\t\tshouldMakePrettyDiff: true,\n\t\t\tmaxComputationTime: maxComputationTime\n\t\t});\n\n\t\tconst diffResult = diffComputer.computeDiff();\n\t\tconst identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));\n\t\treturn {\n\t\t\tquitEarly: diffResult.quitEarly,\n\t\t\tidentical: identical,\n\t\t\tchanges: diffResult.changes\n\t\t};\n\t}\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Test {\n\t// ---- BEGIN diff --------------------------------------------------------------------------\n\n\tpublic async computeDiff(originalUrl: string, modifiedUrl: string, options: ILinesDiffComputerOptions): Promise {\n\t\tconst original = this._getModel(originalUrl);\n\t\tconst modified = this._getModel(modifiedUrl);\n\t\tif (!original || !modified) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn EditorSimpleWorker.computeDiff(original, modified, options);\n\t}\n\n\tpublic static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, options: ILinesDiffComputerOptions): IDiffComputationResult {\n\n\t\tconst diffAlgorithm: ILinesDiffComputer = options.diffAlgorithm === 'experimental' ? linesDiffComputers.experimental : linesDiffComputers.smart;\n\n\t\tconst originalLines = originalTextModel.getLinesContent();\n\t\tconst modifiedLines = modifiedTextModel.getLinesContent();\n\n\t\tconst result = diffAlgorithm.computeDiff(originalLines, modifiedLines, options);\n\n\t\tconst identical = (result.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));\n\n\t\treturn {\n\t\t\tidentical,\n\t\t\tquitEarly: result.quitEarly,\n\t\t\tchanges: result.changes.map(m => ([m.originalRange.startLineNumber, m.originalRange.endLineNumberExclusive, m.modifiedRange.startLineNumber, m.modifiedRange.endLineNumberExclusive, m.innerChanges?.map(m => [\n\t\t\t\tm.originalRange.startLineNumber,\n\t\t\t\tm.originalRange.startColumn,\n\t\t\t\tm.originalRange.endLineNumber,\n\t\t\t\tm.originalRange.endColumn,\n\t\t\t\tm.modifiedRange.startLineNumber,\n\t\t\t\tm.modifiedRange.startColumn,\n\t\t\t\tm.modifiedRange.endLineNumber,\n\t\t\t\tm.modifiedRange.endColumn,\n\t\t\t])]))\n\t\t};\n\t}\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,3)", + "modifiedRange": "[2,3)", + "innerChanges": [ + { + "originalRange": "[2,1 -> 2,5]", + "modifiedRange": "[2,1 -> 2,2]" + } + ] + }, + { + "originalRange": "[4,5)", + "modifiedRange": "[4,5)", + "innerChanges": [ + { + "originalRange": "[4,69 -> 4,103]", + "modifiedRange": "[4,69 -> 4,88]" + }, + { + "originalRange": "[4,109 -> 4,110]", + "modifiedRange": "[4,94 -> 4,98]" + }, + { + "originalRange": "[4,114 -> 4,126]", + "modifiedRange": "[4,102 -> 4,103]" + } + ] + }, + { + "originalRange": "[11,12)", + "modifiedRange": "[11,12)", + "innerChanges": [ + { + "originalRange": "[11,61 -> 11,93]", + "modifiedRange": "[11,61 -> 11,63]" + }, + { + "originalRange": "[11,97 -> 11,101]", + "modifiedRange": "[11,67 -> 11,68]" + } + ] + }, + { + "originalRange": "[14,15)", + "modifiedRange": "[14,18)", + "innerChanges": [ + { + "originalRange": "[14,120 -> 14,154]", + "modifiedRange": "[14,120 -> 14,162]" + }, + { + "originalRange": "[14,165 -> 14,178]", + "modifiedRange": "[14,173 -> 16,22]" + }, + { + "originalRange": "[14,181 -> 14,181]", + "modifiedRange": "[16,25 -> 16,30]" + }, + { + "originalRange": "[14,191 -> 14,192]", + "modifiedRange": "[16,40 -> 16,47]" + }, + { + "originalRange": "[14,196 -> 14,211]", + "modifiedRange": "[16,51 -> 17,1]" + } + ] + }, + { + "originalRange": "[17,24)", + "modifiedRange": "[20,24)", + "innerChanges": [ + { + "originalRange": "[17,1 -> 17,1]", + "modifiedRange": "[20,1 -> 21,1]" + }, + { + "originalRange": "[17,9 -> 17,21]", + "modifiedRange": "[21,9 -> 21,15]" + }, + { + "originalRange": "[17,24 -> 17,29]", + "modifiedRange": "[21,18 -> 21,19]" + }, + { + "originalRange": "[17,32 -> 17,33]", + "modifiedRange": "[21,22 -> 21,33]" + }, + { + "originalRange": "[17,39 -> 17,40]", + "modifiedRange": "[21,39 -> 21,43]" + }, + { + "originalRange": "[17,71 -> 17,72]", + "modifiedRange": "[21,74 -> 22,1]" + }, + { + "originalRange": "[18,3 -> 19,26]", + "modifiedRange": "[23,3 -> 23,30]" + }, + { + "originalRange": "[19,32 -> 19,32]", + "modifiedRange": "[23,36 -> 23,56]" + }, + { + "originalRange": "[19,35 -> 23,4]", + "modifiedRange": "[23,59 -> 23,120]" + } + ] + }, + { + "originalRange": "[25,27)", + "modifiedRange": "[25,25)", + "innerChanges": null + }, + { + "originalRange": "[28,31)", + "modifiedRange": "[26,38)", + "innerChanges": [ + { + "originalRange": "[28,1 -> 28,1]", + "modifiedRange": "[26,1 -> 27,1]" + }, + { + "originalRange": "[28,15 -> 28,20]", + "modifiedRange": "[27,15 -> 27,16]" + }, + { + "originalRange": "[29,4 -> 29,24]", + "modifiedRange": "[28,4 -> 32,30]" + }, + { + "originalRange": "[30,4 -> 30,6]", + "modifiedRange": "[33,4 -> 33,16]" + }, + { + "originalRange": "[30,10 -> 30,13]", + "modifiedRange": "[33,20 -> 34,9]" + }, + { + "originalRange": "[30,16 -> 30,26]", + "modifiedRange": "[34,12 -> 36,16]" + }, + { + "originalRange": "[30,30 -> 30,31]", + "modifiedRange": "[36,20 -> 37,9]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/smart.expected.diff.json deleted file mode 100644 index a1e0ab440f9..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/smart.expected.diff.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,1 -> 2,5]", - "modifiedRange": "[2,1 -> 2,2]" - } - ] - }, - { - "originalRange": "[4,5)", - "modifiedRange": "[4,5)", - "innerChanges": [ - { - "originalRange": "[4,69 -> 4,103]", - "modifiedRange": "[4,69 -> 4,88]" - }, - { - "originalRange": "[4,109 -> 4,110]", - "modifiedRange": "[4,94 -> 4,98]" - }, - { - "originalRange": "[4,114 -> 4,126]", - "modifiedRange": "[4,102 -> 4,103]" - } - ] - }, - { - "originalRange": "[11,12)", - "modifiedRange": "[11,12)", - "innerChanges": [ - { - "originalRange": "[11,61 -> 11,93]", - "modifiedRange": "[11,61 -> 11,63]" - }, - { - "originalRange": "[11,97 -> 11,101]", - "modifiedRange": "[11,67 -> 11,68]" - } - ] - }, - { - "originalRange": "[14,15)", - "modifiedRange": "[14,18)", - "innerChanges": [ - { - "originalRange": "[14,120 -> 14,154]", - "modifiedRange": "[14,120 -> 14,162]" - }, - { - "originalRange": "[14,165 -> 14,178]", - "modifiedRange": "[14,173 -> 16,22]" - }, - { - "originalRange": "[14,181 -> 14,181]", - "modifiedRange": "[16,25 -> 16,30]" - }, - { - "originalRange": "[14,191 -> 14,192]", - "modifiedRange": "[16,40 -> 16,47]" - }, - { - "originalRange": "[14,196 -> 14,211]", - "modifiedRange": "[16,51 -> 17,1]" - } - ] - }, - { - "originalRange": "[17,24)", - "modifiedRange": "[20,24)", - "innerChanges": [ - { - "originalRange": "[17,1 -> 17,1]", - "modifiedRange": "[20,1 -> 21,1]" - }, - { - "originalRange": "[17,9 -> 17,21]", - "modifiedRange": "[21,9 -> 21,15]" - }, - { - "originalRange": "[17,24 -> 17,29]", - "modifiedRange": "[21,18 -> 21,19]" - }, - { - "originalRange": "[17,32 -> 17,33]", - "modifiedRange": "[21,22 -> 21,33]" - }, - { - "originalRange": "[17,39 -> 17,40]", - "modifiedRange": "[21,39 -> 21,43]" - }, - { - "originalRange": "[17,71 -> 17,72]", - "modifiedRange": "[21,74 -> 22,1]" - }, - { - "originalRange": "[18,3 -> 19,26]", - "modifiedRange": "[23,3 -> 23,30]" - }, - { - "originalRange": "[19,32 -> 19,32]", - "modifiedRange": "[23,36 -> 23,56]" - }, - { - "originalRange": "[19,35 -> 23,4]", - "modifiedRange": "[23,59 -> 23,120]" - } - ] - }, - { - "originalRange": "[25,27)", - "modifiedRange": "[25,25)", - "innerChanges": null - }, - { - "originalRange": "[28,31)", - "modifiedRange": "[26,38)", - "innerChanges": [ - { - "originalRange": "[28,1 -> 28,1]", - "modifiedRange": "[26,1 -> 27,1]" - }, - { - "originalRange": "[28,15 -> 28,20]", - "modifiedRange": "[27,15 -> 27,16]" - }, - { - "originalRange": "[29,4 -> 29,24]", - "modifiedRange": "[28,4 -> 32,30]" - }, - { - "originalRange": "[30,4 -> 30,6]", - "modifiedRange": "[33,4 -> 33,16]" - }, - { - "originalRange": "[30,10 -> 30,13]", - "modifiedRange": "[33,20 -> 34,9]" - }, - { - "originalRange": "[30,16 -> 30,26]", - "modifiedRange": "[34,12 -> 36,16]" - }, - { - "originalRange": "[30,30 -> 30,31]", - "modifiedRange": "[36,20 -> 37,9]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/advanced.expected.diff.json new file mode 100644 index 00000000000..ae0eb5c7342 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/advanced.expected.diff.json @@ -0,0 +1,50 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { URI } from 'vs/base/common/uri';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { TextEdit, IInplaceReplaceSupportResult } from 'vs/editor/common/languages';\nimport { IChange, IDiffComputationResult } from 'vs/editor/common/diff/diffComputer';\n\nexport class TestEditorWorkerService implements IEditorWorkerService {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tcanComputeUnicodeHighlights(uri: URI): boolean { return false; }\n\tasync computedUnicodeHighlights(uri: URI): Promise { return { ranges: [], hasMore: false, ambiguousCharacterCount: 0, invisibleCharacterCount: 0, nonBasicAsciiCharacterCount: 0 }; }\n\tasync computeDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean, maxComputationTime: number): Promise { return null; }\n\tcanComputeDirtyDiff(original: URI, modified: URI): boolean { return false; }\n\tasync computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise { return null; }\n\tasync computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise { return undefined; }\n\tcanComputeWordRanges(resource: URI): boolean { return false; }\n\tasync computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return null; }\n\tcanNavigateValueSet(resource: URI): boolean { return false; }\n\tasync navigateValueSet(resource: URI, range: IRange, up: boolean): Promise { return null; }\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { URI } from 'vs/base/common/uri';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { IDiffComputationResult, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { TextEdit, IInplaceReplaceSupportResult } from 'vs/editor/common/languages';\nimport { IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider';\nimport { IChange } from 'vs/editor/common/diff/smartLinesDiffComputer';\n\nexport class TestEditorWorkerService implements IEditorWorkerService {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tcanComputeUnicodeHighlights(uri: URI): boolean { return false; }\n\tasync computedUnicodeHighlights(uri: URI): Promise { return { ranges: [], hasMore: false, ambiguousCharacterCount: 0, invisibleCharacterCount: 0, nonBasicAsciiCharacterCount: 0 }; }\n\tasync computeDiff(original: URI, modified: URI, options: IDocumentDiffProviderOptions): Promise { return null; }\n\tcanComputeDirtyDiff(original: URI, modified: URI): boolean { return false; }\n\tasync computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise { return null; }\n\tasync computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise { return undefined; }\n\tcanComputeWordRanges(resource: URI): boolean { return false; }\n\tasync computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return null; }\n\tcanNavigateValueSet(resource: URI): boolean { return false; }\n\tasync navigateValueSet(resource: URI, range: IRange, up: boolean): Promise { return null; }\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[8,9)", + "modifiedRange": "[8,9)", + "innerChanges": [ + { + "originalRange": "[8,9 -> 8,9]", + "modifiedRange": "[8,9 -> 8,33]" + } + ] + }, + { + "originalRange": "[10,11)", + "modifiedRange": "[10,12)", + "innerChanges": [ + { + "originalRange": "[10,1 -> 10,1]", + "modifiedRange": "[10,1 -> 11,1]" + }, + { + "originalRange": "[10,17 -> 10,41]", + "modifiedRange": "[11,17 -> 11,17]" + }, + { + "originalRange": "[10,72 -> 10,73]", + "modifiedRange": "[11,48 -> 11,59]" + } + ] + }, + { + "originalRange": "[18,19)", + "modifiedRange": "[19,20)", + "innerChanges": [ + { + "originalRange": "[18,50 -> 18,107]", + "modifiedRange": "[19,50 -> 19,87]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json deleted file mode 100644 index 0845c2f7fe0..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[8,9)", - "modifiedRange": "[8,9)", - "innerChanges": [ - { - "originalRange": "[8,9 -> 8,9]", - "modifiedRange": "[8,9 -> 8,33]" - } - ] - }, - { - "originalRange": "[10,11)", - "modifiedRange": "[10,12)", - "innerChanges": [ - { - "originalRange": "[10,1 -> 10,1]", - "modifiedRange": "[10,1 -> 11,1]" - }, - { - "originalRange": "[10,17 -> 10,41]", - "modifiedRange": "[11,17 -> 11,17]" - }, - { - "originalRange": "[10,72 -> 10,73]", - "modifiedRange": "[11,48 -> 11,59]" - } - ] - }, - { - "originalRange": "[18,19)", - "modifiedRange": "[19,20)", - "innerChanges": [ - { - "originalRange": "[18,50 -> 18,91]", - "modifiedRange": "[19,50 -> 19,82]" - }, - { - "originalRange": "[18,95 -> 18,107]", - "modifiedRange": "[19,86 -> 19,87]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/legacy.expected.diff.json new file mode 100644 index 00000000000..30bf9bae1ec --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/legacy.expected.diff.json @@ -0,0 +1,54 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { URI } from 'vs/base/common/uri';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { TextEdit, IInplaceReplaceSupportResult } from 'vs/editor/common/languages';\nimport { IChange, IDiffComputationResult } from 'vs/editor/common/diff/diffComputer';\n\nexport class TestEditorWorkerService implements IEditorWorkerService {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tcanComputeUnicodeHighlights(uri: URI): boolean { return false; }\n\tasync computedUnicodeHighlights(uri: URI): Promise { return { ranges: [], hasMore: false, ambiguousCharacterCount: 0, invisibleCharacterCount: 0, nonBasicAsciiCharacterCount: 0 }; }\n\tasync computeDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean, maxComputationTime: number): Promise { return null; }\n\tcanComputeDirtyDiff(original: URI, modified: URI): boolean { return false; }\n\tasync computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise { return null; }\n\tasync computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise { return undefined; }\n\tcanComputeWordRanges(resource: URI): boolean { return false; }\n\tasync computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return null; }\n\tcanNavigateValueSet(resource: URI): boolean { return false; }\n\tasync navigateValueSet(resource: URI, range: IRange, up: boolean): Promise { return null; }\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { URI } from 'vs/base/common/uri';\nimport { IRange } from 'vs/editor/common/core/range';\nimport { IDiffComputationResult, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';\nimport { TextEdit, IInplaceReplaceSupportResult } from 'vs/editor/common/languages';\nimport { IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider';\nimport { IChange } from 'vs/editor/common/diff/smartLinesDiffComputer';\n\nexport class TestEditorWorkerService implements IEditorWorkerService {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tcanComputeUnicodeHighlights(uri: URI): boolean { return false; }\n\tasync computedUnicodeHighlights(uri: URI): Promise { return { ranges: [], hasMore: false, ambiguousCharacterCount: 0, invisibleCharacterCount: 0, nonBasicAsciiCharacterCount: 0 }; }\n\tasync computeDiff(original: URI, modified: URI, options: IDocumentDiffProviderOptions): Promise { return null; }\n\tcanComputeDirtyDiff(original: URI, modified: URI): boolean { return false; }\n\tasync computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise { return null; }\n\tasync computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise { return undefined; }\n\tcanComputeWordRanges(resource: URI): boolean { return false; }\n\tasync computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return null; }\n\tcanNavigateValueSet(resource: URI): boolean { return false; }\n\tasync navigateValueSet(resource: URI, range: IRange, up: boolean): Promise { return null; }\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[8,9)", + "modifiedRange": "[8,9)", + "innerChanges": [ + { + "originalRange": "[8,11 -> 8,11]", + "modifiedRange": "[8,11 -> 8,35]" + } + ] + }, + { + "originalRange": "[10,11)", + "modifiedRange": "[10,12)", + "innerChanges": [ + { + "originalRange": "[10,11 -> 10,20]", + "modifiedRange": "[10,11 -> 10,77]" + }, + { + "originalRange": "[10,24 -> 10,41]", + "modifiedRange": "[10,81 -> 11,17]" + }, + { + "originalRange": "[10,72 -> 10,73]", + "modifiedRange": "[11,48 -> 11,59]" + } + ] + }, + { + "originalRange": "[18,19)", + "modifiedRange": "[19,20)", + "innerChanges": [ + { + "originalRange": "[18,50 -> 18,91]", + "modifiedRange": "[19,50 -> 19,82]" + }, + { + "originalRange": "[18,95 -> 18,107]", + "modifiedRange": "[19,86 -> 19,87]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/smart.expected.diff.json deleted file mode 100644 index 7ad5e5e6604..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/smart.expected.diff.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[8,9)", - "modifiedRange": "[8,9)", - "innerChanges": [ - { - "originalRange": "[8,11 -> 8,11]", - "modifiedRange": "[8,11 -> 8,35]" - } - ] - }, - { - "originalRange": "[10,11)", - "modifiedRange": "[10,12)", - "innerChanges": [ - { - "originalRange": "[10,11 -> 10,20]", - "modifiedRange": "[10,11 -> 10,77]" - }, - { - "originalRange": "[10,24 -> 10,41]", - "modifiedRange": "[10,81 -> 11,17]" - }, - { - "originalRange": "[10,72 -> 10,73]", - "modifiedRange": "[11,48 -> 11,59]" - } - ] - }, - { - "originalRange": "[18,19)", - "modifiedRange": "[19,20)", - "innerChanges": [ - { - "originalRange": "[18,50 -> 18,91]", - "modifiedRange": "[19,50 -> 19,82]" - }, - { - "originalRange": "[18,95 -> 18,107]", - "modifiedRange": "[19,86 -> 19,87]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/advanced.expected.diff.json new file mode 100644 index 00000000000..9abcad4a94b --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/advanced.expected.diff.json @@ -0,0 +1,52 @@ +{ + "original": { + "content": "import { findLast } from 'vs/base/common/arrays';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ITransaction, observableValue, transaction } from 'vs/base/common/observable';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ScrollType } from 'vs/editor/common/editorCommon';\nimport { IFooBar, IFoo } from 'foo';\n\nconsole.log(observableValue);\n\nconsole.log(observableValue);\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { findLast } from 'vs/base/common/arrays';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ITransaction, observableFromEvent, observableValue, transaction } from 'vs/base/common/observable';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ScrollType } from 'vs/editor/common/editorCommon';\nimport { IFooBar, IBar, IFoo } from 'foo';\n\nconsole.log(observableFromEvent, observableValue);\n\nconsole.log(observableValue, observableFromEvent);\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,23 -> 3,23]", + "modifiedRange": "[3,23 -> 3,44]" + } + ] + }, + { + "originalRange": "[6,7)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[6,18 -> 6,18]", + "modifiedRange": "[6,18 -> 6,24]" + } + ] + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[8,9)", + "innerChanges": [ + { + "originalRange": "[8,13 -> 8,13]", + "modifiedRange": "[8,13 -> 8,34]" + } + ] + }, + { + "originalRange": "[10,11)", + "modifiedRange": "[10,11)", + "innerChanges": [ + { + "originalRange": "[10,28 -> 10,28]", + "modifiedRange": "[10,28 -> 10,49]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/experimental.expected.diff.json deleted file mode 100644 index 7a03e3e2009..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/experimental.expected.diff.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,23 -> 3,23]", - "modifiedRange": "[3,23 -> 3,44]" - } - ] - }, - { - "originalRange": "[6,7)", - "modifiedRange": "[6,7)", - "innerChanges": [ - { - "originalRange": "[6,18 -> 6,18]", - "modifiedRange": "[6,18 -> 6,24]" - } - ] - }, - { - "originalRange": "[8,9)", - "modifiedRange": "[8,9)", - "innerChanges": [ - { - "originalRange": "[8,13 -> 8,13]", - "modifiedRange": "[8,13 -> 8,34]" - } - ] - }, - { - "originalRange": "[10,11)", - "modifiedRange": "[10,11)", - "innerChanges": [ - { - "originalRange": "[10,28 -> 10,28]", - "modifiedRange": "[10,28 -> 10,49]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/legacy.expected.diff.json new file mode 100644 index 00000000000..3a111eefaca --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/legacy.expected.diff.json @@ -0,0 +1,52 @@ +{ + "original": { + "content": "import { findLast } from 'vs/base/common/arrays';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ITransaction, observableValue, transaction } from 'vs/base/common/observable';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ScrollType } from 'vs/editor/common/editorCommon';\nimport { IFooBar, IFoo } from 'foo';\n\nconsole.log(observableValue);\n\nconsole.log(observableValue);\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { findLast } from 'vs/base/common/arrays';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ITransaction, observableFromEvent, observableValue, transaction } from 'vs/base/common/observable';\nimport { Range } from 'vs/editor/common/core/range';\nimport { ScrollType } from 'vs/editor/common/editorCommon';\nimport { IFooBar, IBar, IFoo } from 'foo';\n\nconsole.log(observableFromEvent, observableValue);\n\nconsole.log(observableValue, observableFromEvent);\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,34 -> 3,34]", + "modifiedRange": "[3,34 -> 3,55]" + } + ] + }, + { + "originalRange": "[6,7)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[6,20 -> 6,20]", + "modifiedRange": "[6,20 -> 6,26]" + } + ] + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[8,9)", + "innerChanges": [ + { + "originalRange": "[8,23 -> 8,23]", + "modifiedRange": "[8,23 -> 8,44]" + } + ] + }, + { + "originalRange": "[10,11)", + "modifiedRange": "[10,11)", + "innerChanges": [ + { + "originalRange": "[10,28 -> 10,28]", + "modifiedRange": "[10,28 -> 10,49]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/smart.expected.diff.json deleted file mode 100644 index ac0383a456b..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-diff-word-split/smart.expected.diff.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,34 -> 3,34]", - "modifiedRange": "[3,34 -> 3,55]" - } - ] - }, - { - "originalRange": "[6,7)", - "modifiedRange": "[6,7)", - "innerChanges": [ - { - "originalRange": "[6,20 -> 6,20]", - "modifiedRange": "[6,20 -> 6,26]" - } - ] - }, - { - "originalRange": "[8,9)", - "modifiedRange": "[8,9)", - "innerChanges": [ - { - "originalRange": "[8,23 -> 8,23]", - "modifiedRange": "[8,23 -> 8,44]" - } - ] - }, - { - "originalRange": "[10,11)", - "modifiedRange": "[10,11)", - "innerChanges": [ - { - "originalRange": "[10,28 -> 10,28]", - "modifiedRange": "[10,28 -> 10,49]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example1/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example1/advanced.expected.diff.json new file mode 100644 index 00000000000..cc5f77b5dc8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-example1/advanced.expected.diff.json @@ -0,0 +1,48 @@ +{ + "original": { + "content": "export class EditorWorkerServiceDiffComputer implements IDiffComputer {\n\tconstructor(@IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService) { }\n\n\tasync computeDiff(textModel1: ITextModel, textModel2: ITextModel): Promise {\n\t\tconst diffs = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, false, 1000);\n\t\tif (!diffs || diffs.quitEarly) {\n\t\t\treturn null;\n\t\t}\n\t\treturn diffs.changes.map((c) => LineDiff.fromLineChange(c, textModel1, textModel2));\n\t}\n}\n\nfunction wait(ms: number): Promise {\n\treturn new Promise(r => setTimeout(r, ms));\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "export class EditorWorkerServiceDiffComputer implements IDiffComputer {\n\tconstructor(@IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService) { }\n\n\tasync computeDiff(textModel1: ITextModel, textModel2: ITextModel): Promise {\n\t\tconst diffs = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, false, 1000);\n\t\tif (!diffs || diffs.quitEarly) {\n\t\t\treturn null;\n\t\t}\n\t\treturn EditorWorkerServiceDiffComputer.fromDiffComputationResult(diffs, textModel1, textModel2);\n\t}\n\n\tpublic static fromDiffComputationResult(result: IDiffComputationResult, textModel1: ITextModel, textModel2: ITextModel): LineDiff[] {\n\t\treturn result.changes.map((c) => fromLineChange(c, textModel1, textModel2));\n\t}\n}\n\nfunction fromLineChange(lineChange: ILineChange, originalTextModel: ITextModel, modifiedTextModel: ITextModel): LineDiff {\n\tlet originalRange: LineRange;\n\tif (lineChange.originalEndLineNumber === 0) {\n\t\t// Insertion\n\t\toriginalRange = new LineRange(lineChange.originalStartLineNumber + 1, 0);\n\t} else {\n\t\toriginalRange = new LineRange(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1);\n\t}\n\n\tlet modifiedRange: LineRange;\n\tif (lineChange.modifiedEndLineNumber === 0) {\n\t\t// Deletion\n\t\tmodifiedRange = new LineRange(lineChange.modifiedStartLineNumber + 1, 0);\n\t} else {\n\t\tmodifiedRange = new LineRange(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1);\n\t}\n\n\tlet innerDiffs = lineChange.charChanges?.map(c => fromCharChange(c));\n\tif (!innerDiffs) {\n\t\tinnerDiffs = [diffFromLineRanges(originalRange, modifiedRange)];\n\t}\n\n\treturn new LineDiff(\n\t\toriginalTextModel,\n\t\toriginalRange,\n\t\tmodifiedTextModel,\n\t\tmodifiedRange,\n\t\tinnerDiffs\n\t);\n}\n\nfunction diffFromLineRanges(originalRange: LineRange, modifiedRange: LineRange): Diff {\n\t// [1,1) -> [100, 101)\n\n\tif (originalRange.startLineNumber !== 1 && modifiedRange.startLineNumber !== 1) {\n\n\t}\n\n\tlet original = new Range(\n\t\toriginalRange.startLineNumber - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t\toriginalRange.endLineNumberExclusive - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t);\n\n\tlet modified = new Range(\n\t\tmodifiedRange.startLineNumber - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t\tmodifiedRange.endLineNumberExclusive - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t);\n\n\treturn new Diff(\n\t\toriginal,\n\t\tmodified\n\t);\n}\n\nfunction fromCharChange(charChange: ICharChange): Diff {\n\treturn new Diff(\n\t\tnew Range(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn),\n\t\tnew Range(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn)\n\t);\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,10)", + "modifiedRange": "[9,14)", + "innerChanges": [ + { + "originalRange": "[9,10 -> 9,10]", + "modifiedRange": "[9,10 -> 9,68]" + }, + { + "originalRange": "[9,15 -> 9,15]", + "modifiedRange": "[9,73 -> 13,16]" + }, + { + "originalRange": "[9,35 -> 9,44]", + "modifiedRange": "[13,36 -> 13,36]" + } + ] + }, + { + "originalRange": "[13,15)", + "modifiedRange": "[17,80)", + "innerChanges": [ + { + "originalRange": "[13,10 -> 13,41]", + "modifiedRange": "[17,10 -> 35,18]" + }, + { + "originalRange": "[14,2 -> 14,8]", + "modifiedRange": "[36,2 -> 39,8]" + }, + { + "originalRange": "[14,13 -> 14,43]", + "modifiedRange": "[39,13 -> 79,2]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example1/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example1/experimental.expected.diff.json deleted file mode 100644 index d55f8972311..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-example1/experimental.expected.diff.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,10)", - "modifiedRange": "[9,14)", - "innerChanges": [ - { - "originalRange": "[9,10 -> 9,10]", - "modifiedRange": "[9,10 -> 9,68]" - }, - { - "originalRange": "[9,15 -> 9,15]", - "modifiedRange": "[9,73 -> 13,16]" - }, - { - "originalRange": "[9,35 -> 9,44]", - "modifiedRange": "[13,36 -> 13,36]" - } - ] - }, - { - "originalRange": "[13,15)", - "modifiedRange": "[17,80)", - "innerChanges": [ - { - "originalRange": "[13,10 -> 13,20]", - "modifiedRange": "[17,10 -> 21,62]" - }, - { - "originalRange": "[13,25 -> 13,41]", - "modifiedRange": "[21,67 -> 35,18]" - }, - { - "originalRange": "[14,2 -> 14,3]", - "modifiedRange": "[36,2 -> 39,3]" - }, - { - "originalRange": "[14,13 -> 14,43]", - "modifiedRange": "[39,13 -> 79,2]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example1/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example1/legacy.expected.diff.json new file mode 100644 index 00000000000..790a6dc2e6b --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-example1/legacy.expected.diff.json @@ -0,0 +1,44 @@ +{ + "original": { + "content": "export class EditorWorkerServiceDiffComputer implements IDiffComputer {\n\tconstructor(@IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService) { }\n\n\tasync computeDiff(textModel1: ITextModel, textModel2: ITextModel): Promise {\n\t\tconst diffs = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, false, 1000);\n\t\tif (!diffs || diffs.quitEarly) {\n\t\t\treturn null;\n\t\t}\n\t\treturn diffs.changes.map((c) => LineDiff.fromLineChange(c, textModel1, textModel2));\n\t}\n}\n\nfunction wait(ms: number): Promise {\n\treturn new Promise(r => setTimeout(r, ms));\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "export class EditorWorkerServiceDiffComputer implements IDiffComputer {\n\tconstructor(@IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService) { }\n\n\tasync computeDiff(textModel1: ITextModel, textModel2: ITextModel): Promise {\n\t\tconst diffs = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, false, 1000);\n\t\tif (!diffs || diffs.quitEarly) {\n\t\t\treturn null;\n\t\t}\n\t\treturn EditorWorkerServiceDiffComputer.fromDiffComputationResult(diffs, textModel1, textModel2);\n\t}\n\n\tpublic static fromDiffComputationResult(result: IDiffComputationResult, textModel1: ITextModel, textModel2: ITextModel): LineDiff[] {\n\t\treturn result.changes.map((c) => fromLineChange(c, textModel1, textModel2));\n\t}\n}\n\nfunction fromLineChange(lineChange: ILineChange, originalTextModel: ITextModel, modifiedTextModel: ITextModel): LineDiff {\n\tlet originalRange: LineRange;\n\tif (lineChange.originalEndLineNumber === 0) {\n\t\t// Insertion\n\t\toriginalRange = new LineRange(lineChange.originalStartLineNumber + 1, 0);\n\t} else {\n\t\toriginalRange = new LineRange(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1);\n\t}\n\n\tlet modifiedRange: LineRange;\n\tif (lineChange.modifiedEndLineNumber === 0) {\n\t\t// Deletion\n\t\tmodifiedRange = new LineRange(lineChange.modifiedStartLineNumber + 1, 0);\n\t} else {\n\t\tmodifiedRange = new LineRange(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1);\n\t}\n\n\tlet innerDiffs = lineChange.charChanges?.map(c => fromCharChange(c));\n\tif (!innerDiffs) {\n\t\tinnerDiffs = [diffFromLineRanges(originalRange, modifiedRange)];\n\t}\n\n\treturn new LineDiff(\n\t\toriginalTextModel,\n\t\toriginalRange,\n\t\tmodifiedTextModel,\n\t\tmodifiedRange,\n\t\tinnerDiffs\n\t);\n}\n\nfunction diffFromLineRanges(originalRange: LineRange, modifiedRange: LineRange): Diff {\n\t// [1,1) -> [100, 101)\n\n\tif (originalRange.startLineNumber !== 1 && modifiedRange.startLineNumber !== 1) {\n\n\t}\n\n\tlet original = new Range(\n\t\toriginalRange.startLineNumber - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t\toriginalRange.endLineNumberExclusive - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t);\n\n\tlet modified = new Range(\n\t\tmodifiedRange.startLineNumber - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t\tmodifiedRange.endLineNumberExclusive - 1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t);\n\n\treturn new Diff(\n\t\toriginal,\n\t\tmodified\n\t);\n}\n\nfunction fromCharChange(charChange: ICharChange): Diff {\n\treturn new Diff(\n\t\tnew Range(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn),\n\t\tnew Range(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn)\n\t);\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,10)", + "modifiedRange": "[9,53)", + "innerChanges": null + }, + { + "originalRange": "[11,11)", + "modifiedRange": "[54,73)", + "innerChanges": null + }, + { + "originalRange": "[13,15)", + "modifiedRange": "[75,80)", + "innerChanges": [ + { + "originalRange": "[13,10 -> 13,20]", + "modifiedRange": "[75,10 -> 77,42]" + }, + { + "originalRange": "[13,25 -> 14,9]", + "modifiedRange": "[77,47 -> 78,3]" + }, + { + "originalRange": "[14,13 -> 14,37]", + "modifiedRange": "[78,7 -> 78,112]" + }, + { + "originalRange": "[14,40 -> 14,43]", + "modifiedRange": "[78,115 -> 79,2]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example1/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example1/smart.expected.diff.json deleted file mode 100644 index e865b3fa365..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-example1/smart.expected.diff.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,10)", - "modifiedRange": "[9,53)", - "innerChanges": null - }, - { - "originalRange": "[11,11)", - "modifiedRange": "[54,73)", - "innerChanges": null - }, - { - "originalRange": "[13,15)", - "modifiedRange": "[75,80)", - "innerChanges": [ - { - "originalRange": "[13,10 -> 13,20]", - "modifiedRange": "[75,10 -> 77,42]" - }, - { - "originalRange": "[13,25 -> 14,9]", - "modifiedRange": "[77,47 -> 78,3]" - }, - { - "originalRange": "[14,13 -> 14,37]", - "modifiedRange": "[78,7 -> 78,112]" - }, - { - "originalRange": "[14,40 -> 14,43]", - "modifiedRange": "[78,115 -> 79,2]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/advanced.expected.diff.json new file mode 100644 index 00000000000..647fee613e5 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/advanced.expected.diff.json @@ -0,0 +1,40 @@ +{ + "original": { + "content": "function cloneTypeReference(source: TypeReference): TypeReference {\n const type = createType(source.flags);\n type.symbol = source.symbol;\n type.objectFlags = source.objectFlags;\n type.target = source.target;\n type.typeArguments = source.typeArguments;\n return type;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "function cloneTypeReference(source: TypeReference): TypeReference {\n const type = createType(source.flags);\n type.symbol = source.symbol;\n type.objectFlags = source.objectFlags;\n type.target = source.target;\n type.resolvedTypeArguments = source.resolvedTypeArguments;\n return type;\n}\n\nfunction createDeferredTypeReference(): DeferredTypeReference {\n const aliasSymbol = getAliasSymbolForTypeNode(node);\n const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);\n type.target = target;\n type.node = node;\n type.mapper = mapper;\n type.aliasSymbol = aliasSymbol;\n return type;\n}\n\nfunction getTypeArguments(type: TypeReference): ReadonlyArray {\n if (!type.resolvedTypeArguments) {\n const node = type.node;\n }\n return type.resolvedTypeArguments;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[6,7)", + "modifiedRange": "[6,17)", + "innerChanges": [ + { + "originalRange": "[6,10 -> 6,11]", + "modifiedRange": "[6,10 -> 6,19]" + }, + { + "originalRange": "[6,33 -> 6,34]", + "modifiedRange": "[6,41 -> 6,50]" + }, + { + "originalRange": "[7,1 -> 7,1]", + "modifiedRange": "[7,1 -> 17,1]" + } + ] + }, + { + "originalRange": "[9,9)", + "modifiedRange": "[19,26)", + "innerChanges": [ + { + "originalRange": "[8,2 -> 8,2]", + "modifiedRange": "[18,2 -> 25,2]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/experimental.expected.diff.json deleted file mode 100644 index a6bbd84c362..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/experimental.expected.diff.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[6,7)", - "modifiedRange": "[6,17)", - "innerChanges": [ - { - "originalRange": "[6,10 -> 6,11]", - "modifiedRange": "[6,10 -> 6,19]" - }, - { - "originalRange": "[6,33 -> 6,34]", - "modifiedRange": "[6,41 -> 6,50]" - }, - { - "originalRange": "[7,1 -> 7,1]", - "modifiedRange": "[7,1 -> 17,1]" - } - ] - }, - { - "originalRange": "[9,9)", - "modifiedRange": "[19,26)", - "innerChanges": [ - { - "originalRange": "[9,1 -> 9,1]", - "modifiedRange": "[19,1 -> 26,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/legacy.expected.diff.json new file mode 100644 index 00000000000..9f5bbc5b267 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/legacy.expected.diff.json @@ -0,0 +1,39 @@ +{ + "original": { + "content": "function cloneTypeReference(source: TypeReference): TypeReference {\n const type = createType(source.flags);\n type.symbol = source.symbol;\n type.objectFlags = source.objectFlags;\n type.target = source.target;\n type.typeArguments = source.typeArguments;\n return type;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "function cloneTypeReference(source: TypeReference): TypeReference {\n const type = createType(source.flags);\n type.symbol = source.symbol;\n type.objectFlags = source.objectFlags;\n type.target = source.target;\n type.resolvedTypeArguments = source.resolvedTypeArguments;\n return type;\n}\n\nfunction createDeferredTypeReference(): DeferredTypeReference {\n const aliasSymbol = getAliasSymbolForTypeNode(node);\n const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);\n type.target = target;\n type.node = node;\n type.mapper = mapper;\n type.aliasSymbol = aliasSymbol;\n return type;\n}\n\nfunction getTypeArguments(type: TypeReference): ReadonlyArray {\n if (!type.resolvedTypeArguments) {\n const node = type.node;\n }\n return type.resolvedTypeArguments;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[6,7)", + "modifiedRange": "[6,17)", + "innerChanges": [ + { + "originalRange": "[6,10 -> 6,11]", + "modifiedRange": "[6,10 -> 6,19]" + }, + { + "originalRange": "[6,33 -> 6,33]", + "modifiedRange": "[6,41 -> 7,12]" + }, + { + "originalRange": "[6,37 -> 6,37]", + "modifiedRange": "[7,16 -> 12,20]" + }, + { + "originalRange": "[6,46 -> 6,46]", + "modifiedRange": "[12,29 -> 16,35]" + } + ] + }, + { + "originalRange": "[9,9)", + "modifiedRange": "[19,26)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/smart.expected.diff.json deleted file mode 100644 index 9f38ce0b43c..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/smart.expected.diff.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[6,7)", - "modifiedRange": "[6,17)", - "innerChanges": [ - { - "originalRange": "[6,10 -> 6,11]", - "modifiedRange": "[6,10 -> 6,19]" - }, - { - "originalRange": "[6,33 -> 6,33]", - "modifiedRange": "[6,41 -> 7,12]" - }, - { - "originalRange": "[6,37 -> 6,37]", - "modifiedRange": "[7,16 -> 12,20]" - }, - { - "originalRange": "[6,46 -> 6,46]", - "modifiedRange": "[12,29 -> 16,35]" - } - ] - }, - { - "originalRange": "[9,9)", - "modifiedRange": "[19,26)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/experimental.expected.diff.json deleted file mode 100644 index 8e1cddecad9..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/experimental.expected.diff.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,5)", - "modifiedRange": "[2,6)", - "innerChanges": [ - { - "originalRange": "[2,1 -> 2,1]", - "modifiedRange": "[2,1 -> 4,1]" - }, - { - "originalRange": "[2,17 -> 2,17]", - "modifiedRange": "[4,17 -> 4,28]" - }, - { - "originalRange": "[2,39 -> 2,40]", - "modifiedRange": "[4,50 -> 4,50]" - }, - { - "originalRange": "[3,5 -> 3,9]", - "modifiedRange": "[5,5 -> 5,5]" - }, - { - "originalRange": "[4,1 -> 5,1]", - "modifiedRange": "[6,1 -> 6,1]" - } - ] - }, - { - "originalRange": "[8,9)", - "modifiedRange": "[9,10)", - "innerChanges": [ - { - "originalRange": "[8,35 -> 8,35]", - "modifiedRange": "[9,35 -> 9,36]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/smart.expected.diff.json deleted file mode 100644 index ab6e1d63356..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-experimental-bug/smart.expected.diff.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,5)", - "modifiedRange": "[2,6)", - "innerChanges": [ - { - "originalRange": "[2,1 -> 2,1]", - "modifiedRange": "[2,1 -> 4,1]" - }, - { - "originalRange": "[2,20 -> 2,20]", - "modifiedRange": "[4,20 -> 4,31]" - }, - { - "originalRange": "[2,39 -> 2,40]", - "modifiedRange": "[4,50 -> 4,50]" - }, - { - "originalRange": "[3,5 -> 3,9]", - "modifiedRange": "[5,5 -> 5,5]" - }, - { - "originalRange": "[3,57 -> 4,36]", - "modifiedRange": "[5,53 -> 5,53]" - } - ] - }, - { - "originalRange": "[8,9)", - "modifiedRange": "[9,10)", - "innerChanges": [ - { - "originalRange": "[8,35 -> 8,35]", - "modifiedRange": "[9,35 -> 9,36]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/advanced.expected.diff.json new file mode 100644 index 00000000000..14bfbbd115a --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/advanced.expected.diff.json @@ -0,0 +1,94 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IHistoryNavigationWidget } from 'vs/base/browser/history';\nimport { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';\nimport { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';\nimport { IReplaceInputOptions, ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput';\nimport { HistoryInputBox, IHistoryInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { localize } from 'vs/nls';\nimport { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\nexport const historyNavigationVisible = new RawContextKey('suggestWidgetVisible', false, localize('suggestWidgetVisible', \"Whether suggestion are visible\"));\n\nconst HistoryNavigationWidgetFocusContext = 'historyNavigationWidgetFocus';\nconst HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';\nconst HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';\n\nexport interface IHistoryNavigationContext extends IDisposable {\n\tscopedContextKeyService: IContextKeyService;\n\thistoryNavigationForwardsEnablement: IContextKey;\n\thistoryNavigationBackwardsEnablement: IContextKey;\n}\n\nlet lastFocusedWidget: IHistoryNavigationWidget | undefined = undefined;\nconst widgets: IHistoryNavigationWidget[] = [];\n\nexport function registerAndCreateHistoryNavigationContext(contextKeyService: IContextKeyService, widget: IHistoryNavigationWidget): IHistoryNavigationContext {\n\tif (widgets.includes(widget)) {\n\t\tthrow new Error('Cannot register the same widget multiple times');\n\t}\n\n\twidgets.push(widget);\n\tconst disposableStore = new DisposableStore();\n\tconst scopedContextKeyService = disposableStore.add(contextKeyService.createScoped(widget.element));\n\tconst historyNavigationWidgetFocus = new RawContextKey(HistoryNavigationWidgetFocusContext, false).bindTo(scopedContextKeyService);\n\tconst historyNavigationForwardsEnablement = new RawContextKey(HistoryNavigationForwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\tconst historyNavigationBackwardsEnablement = new RawContextKey(HistoryNavigationBackwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\n\tconst onDidFocus = () => {\n\t\thistoryNavigationWidgetFocus.set(true);\n\t\tlastFocusedWidget = widget;\n\t};\n\n\tconst onDidBlur = () => {\n\t\thistoryNavigationWidgetFocus.set(false);\n\t\tif (lastFocusedWidget === widget) {\n\t\t\tlastFocusedWidget = undefined;\n\t\t}\n\t};\n\n\t// Check for currently being focused\n\tif (widget.element === document.activeElement) {\n\t\tonDidFocus();\n\t}\n\n\tdisposableStore.add(widget.onDidFocus(() => onDidFocus()));\n\tdisposableStore.add(widget.onDidBlur(() => onDidBlur()));\n\tdisposableStore.add(toDisposable(() => {\n\t\twidgets.splice(widgets.indexOf(widget), 1);\n\t\tonDidBlur();\n\t}));\n\n\treturn {\n\t\tscopedContextKeyService,\n\t\thistoryNavigationForwardsEnablement,\n\t\thistoryNavigationBackwardsEnablement,\n\t\tdispose() {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t};\n}\n\nexport class ContextScopedHistoryInputBox extends HistoryInputBox {\n\n\tconstructor(container: HTMLElement, contextViewProvider: IContextViewProvider | undefined, options: IHistoryInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tthis._register(registerAndCreateHistoryNavigationContext(contextKeyService, this));\n\t}\n\n}\n\nexport class ContextScopedFindInput extends FindInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider, options: IFindInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tthis._register(registerAndCreateHistoryNavigationContext(contextKeyService, this.inputBox));\n\t}\n}\n\nexport class ContextScopedReplaceInput extends ReplaceInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider | undefined, options: IReplaceInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService, showReplaceOptions: boolean = false\n\t) {\n\t\tsuper(container, contextViewProvider, showReplaceOptions, options);\n\t\tthis._register(registerAndCreateHistoryNavigationContext(contextKeyService, this.inputBox));\n\t}\n\n}\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showPrevious',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationBackwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.UpArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.UpArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showPreviousValue();\n\t}\n});\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showNext',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationForwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.DownArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.DownArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showNextValue();\n\t}\n});\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IHistoryNavigationWidget } from 'vs/base/browser/history';\nimport { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';\nimport { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';\nimport { IReplaceInputOptions, ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput';\nimport { HistoryInputBox, IHistoryInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { localize } from 'vs/nls';\nimport { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\nexport const historyNavigationVisible = new RawContextKey('suggestWidgetVisible', false, localize('suggestWidgetVisible', \"Whether suggestion are visible\"));\n\nconst HistoryNavigationWidgetFocusContext = 'historyNavigationWidgetFocus';\nconst HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';\nconst HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';\n\nexport interface IHistoryNavigationContext extends IDisposable {\n\thistoryNavigationForwardsEnablement: IContextKey;\n\thistoryNavigationBackwardsEnablement: IContextKey;\n}\n\nlet lastFocusedWidget: IHistoryNavigationWidget | undefined = undefined;\nconst widgets: IHistoryNavigationWidget[] = [];\n\nexport function registerAndCreateHistoryNavigationContext(scopedContextKeyService: IContextKeyService, widget: IHistoryNavigationWidget): IHistoryNavigationContext {\n\tif (widgets.includes(widget)) {\n\t\tthrow new Error('Cannot register the same widget multiple times');\n\t}\n\n\twidgets.push(widget);\n\tconst disposableStore = new DisposableStore();\n\tconst historyNavigationWidgetFocus = new RawContextKey(HistoryNavigationWidgetFocusContext, false).bindTo(scopedContextKeyService);\n\tconst historyNavigationForwardsEnablement = new RawContextKey(HistoryNavigationForwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\tconst historyNavigationBackwardsEnablement = new RawContextKey(HistoryNavigationBackwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\n\tconst onDidFocus = () => {\n\t\thistoryNavigationWidgetFocus.set(true);\n\t\tlastFocusedWidget = widget;\n\t};\n\n\tconst onDidBlur = () => {\n\t\thistoryNavigationWidgetFocus.set(false);\n\t\tif (lastFocusedWidget === widget) {\n\t\t\tlastFocusedWidget = undefined;\n\t\t}\n\t};\n\n\t// Check for currently being focused\n\tif (widget.element === document.activeElement) {\n\t\tonDidFocus();\n\t}\n\n\tdisposableStore.add(widget.onDidFocus(() => onDidFocus()));\n\tdisposableStore.add(widget.onDidBlur(() => onDidBlur()));\n\tdisposableStore.add(toDisposable(() => {\n\t\twidgets.splice(widgets.indexOf(widget), 1);\n\t\tonDidBlur();\n\t}));\n\n\treturn {\n\t\thistoryNavigationForwardsEnablement,\n\t\thistoryNavigationBackwardsEnablement,\n\t\tdispose() {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t};\n}\n\nexport class ContextScopedHistoryInputBox extends HistoryInputBox {\n\n\tconstructor(container: HTMLElement, contextViewProvider: IContextViewProvider | undefined, options: IHistoryInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tconst scopedContextKeyService = this._register(contextKeyService.createScoped(this.element));\n\t\tthis._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this));\n\t}\n\n}\n\nexport class ContextScopedFindInput extends FindInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider, options: IFindInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tconst scopedContextKeyService = this._register(contextKeyService.createScoped(this.inputBox.element));\n\t\tthis._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this.inputBox));\n\t}\n}\n\nexport class ContextScopedReplaceInput extends ReplaceInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider | undefined, options: IReplaceInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService, showReplaceOptions: boolean = false\n\t) {\n\t\tsuper(container, contextViewProvider, showReplaceOptions, options);\n\t\tconst scopedContextKeyService = this._register(contextKeyService.createScoped(this.inputBox.element));\n\t\tthis._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this.inputBox));\n\t}\n\n}\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showPrevious',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationBackwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.UpArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.UpArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showPreviousValue();\n\t}\n});\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showNext',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationForwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.DownArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.DownArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showNextValue();\n\t}\n});\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[24,25)", + "modifiedRange": "[24,24)", + "innerChanges": [ + { + "originalRange": "[24,1 -> 25,1]", + "modifiedRange": "[24,1 -> 24,1]" + } + ] + }, + { + "originalRange": "[32,33)", + "modifiedRange": "[31,32)", + "innerChanges": [ + { + "originalRange": "[32,59 -> 32,60]", + "modifiedRange": "[31,59 -> 31,66]" + } + ] + }, + { + "originalRange": "[39,40)", + "modifiedRange": "[38,38)", + "innerChanges": [ + { + "originalRange": "[39,1 -> 40,1]", + "modifiedRange": "[38,1 -> 38,1]" + } + ] + }, + { + "originalRange": "[69,70)", + "modifiedRange": "[67,67)", + "innerChanges": [ + { + "originalRange": "[69,1 -> 70,1]", + "modifiedRange": "[67,1 -> 67,1]" + } + ] + }, + { + "originalRange": "[84,85)", + "modifiedRange": "[81,83)", + "innerChanges": [ + { + "originalRange": "[84,1 -> 84,1]", + "modifiedRange": "[81,1 -> 82,1]" + }, + { + "originalRange": "[84,60 -> 84,61]", + "modifiedRange": "[82,60 -> 82,67]" + } + ] + }, + { + "originalRange": "[95,96)", + "modifiedRange": "[93,95)", + "innerChanges": [ + { + "originalRange": "[95,1 -> 95,1]", + "modifiedRange": "[93,1 -> 94,1]" + }, + { + "originalRange": "[95,60 -> 95,61]", + "modifiedRange": "[94,60 -> 94,67]" + } + ] + }, + { + "originalRange": "[105,106)", + "modifiedRange": "[104,106)", + "innerChanges": [ + { + "originalRange": "[105,1 -> 105,1]", + "modifiedRange": "[104,1 -> 105,1]" + }, + { + "originalRange": "[105,60 -> 105,61]", + "modifiedRange": "[105,60 -> 105,67]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/experimental.expected.diff.json deleted file mode 100644 index 43782bc601f..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/experimental.expected.diff.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[24,25)", - "modifiedRange": "[24,24)", - "innerChanges": [ - { - "originalRange": "[24,1 -> 25,1]", - "modifiedRange": "[24,1 -> 24,1]" - } - ] - }, - { - "originalRange": "[32,33)", - "modifiedRange": "[31,32)", - "innerChanges": [ - { - "originalRange": "[32,59 -> 32,60]", - "modifiedRange": "[31,59 -> 31,66]" - } - ] - }, - { - "originalRange": "[39,40)", - "modifiedRange": "[38,38)", - "innerChanges": [ - { - "originalRange": "[39,1 -> 40,1]", - "modifiedRange": "[38,1 -> 38,1]" - } - ] - }, - { - "originalRange": "[69,70)", - "modifiedRange": "[67,67)", - "innerChanges": [ - { - "originalRange": "[69,1 -> 70,1]", - "modifiedRange": "[67,1 -> 67,1]" - } - ] - }, - { - "originalRange": "[84,85)", - "modifiedRange": "[81,83)", - "innerChanges": [ - { - "originalRange": "[84,1 -> 84,1]", - "modifiedRange": "[81,1 -> 82,1]" - }, - { - "originalRange": "[84,60 -> 84,61]", - "modifiedRange": "[82,60 -> 82,67]" - } - ] - }, - { - "originalRange": "[95,96)", - "modifiedRange": "[93,95)", - "innerChanges": [ - { - "originalRange": "[95,1 -> 95,1]", - "modifiedRange": "[93,1 -> 94,1]" - }, - { - "originalRange": "[95,60 -> 95,61]", - "modifiedRange": "[94,60 -> 94,67]" - } - ] - }, - { - "originalRange": "[105,106)", - "modifiedRange": "[104,106)", - "innerChanges": [ - { - "originalRange": "[105,1 -> 105,1]", - "modifiedRange": "[104,1 -> 105,1]" - }, - { - "originalRange": "[105,60 -> 105,61]", - "modifiedRange": "[105,60 -> 105,67]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/legacy.expected.diff.json new file mode 100644 index 00000000000..c7c0530ca5e --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/legacy.expected.diff.json @@ -0,0 +1,79 @@ +{ + "original": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IHistoryNavigationWidget } from 'vs/base/browser/history';\nimport { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';\nimport { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';\nimport { IReplaceInputOptions, ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput';\nimport { HistoryInputBox, IHistoryInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { localize } from 'vs/nls';\nimport { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\nexport const historyNavigationVisible = new RawContextKey('suggestWidgetVisible', false, localize('suggestWidgetVisible', \"Whether suggestion are visible\"));\n\nconst HistoryNavigationWidgetFocusContext = 'historyNavigationWidgetFocus';\nconst HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';\nconst HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';\n\nexport interface IHistoryNavigationContext extends IDisposable {\n\tscopedContextKeyService: IContextKeyService;\n\thistoryNavigationForwardsEnablement: IContextKey;\n\thistoryNavigationBackwardsEnablement: IContextKey;\n}\n\nlet lastFocusedWidget: IHistoryNavigationWidget | undefined = undefined;\nconst widgets: IHistoryNavigationWidget[] = [];\n\nexport function registerAndCreateHistoryNavigationContext(contextKeyService: IContextKeyService, widget: IHistoryNavigationWidget): IHistoryNavigationContext {\n\tif (widgets.includes(widget)) {\n\t\tthrow new Error('Cannot register the same widget multiple times');\n\t}\n\n\twidgets.push(widget);\n\tconst disposableStore = new DisposableStore();\n\tconst scopedContextKeyService = disposableStore.add(contextKeyService.createScoped(widget.element));\n\tconst historyNavigationWidgetFocus = new RawContextKey(HistoryNavigationWidgetFocusContext, false).bindTo(scopedContextKeyService);\n\tconst historyNavigationForwardsEnablement = new RawContextKey(HistoryNavigationForwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\tconst historyNavigationBackwardsEnablement = new RawContextKey(HistoryNavigationBackwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\n\tconst onDidFocus = () => {\n\t\thistoryNavigationWidgetFocus.set(true);\n\t\tlastFocusedWidget = widget;\n\t};\n\n\tconst onDidBlur = () => {\n\t\thistoryNavigationWidgetFocus.set(false);\n\t\tif (lastFocusedWidget === widget) {\n\t\t\tlastFocusedWidget = undefined;\n\t\t}\n\t};\n\n\t// Check for currently being focused\n\tif (widget.element === document.activeElement) {\n\t\tonDidFocus();\n\t}\n\n\tdisposableStore.add(widget.onDidFocus(() => onDidFocus()));\n\tdisposableStore.add(widget.onDidBlur(() => onDidBlur()));\n\tdisposableStore.add(toDisposable(() => {\n\t\twidgets.splice(widgets.indexOf(widget), 1);\n\t\tonDidBlur();\n\t}));\n\n\treturn {\n\t\tscopedContextKeyService,\n\t\thistoryNavigationForwardsEnablement,\n\t\thistoryNavigationBackwardsEnablement,\n\t\tdispose() {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t};\n}\n\nexport class ContextScopedHistoryInputBox extends HistoryInputBox {\n\n\tconstructor(container: HTMLElement, contextViewProvider: IContextViewProvider | undefined, options: IHistoryInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tthis._register(registerAndCreateHistoryNavigationContext(contextKeyService, this));\n\t}\n\n}\n\nexport class ContextScopedFindInput extends FindInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider, options: IFindInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tthis._register(registerAndCreateHistoryNavigationContext(contextKeyService, this.inputBox));\n\t}\n}\n\nexport class ContextScopedReplaceInput extends ReplaceInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider | undefined, options: IReplaceInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService, showReplaceOptions: boolean = false\n\t) {\n\t\tsuper(container, contextViewProvider, showReplaceOptions, options);\n\t\tthis._register(registerAndCreateHistoryNavigationContext(contextKeyService, this.inputBox));\n\t}\n\n}\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showPrevious',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationBackwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.UpArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.UpArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showPreviousValue();\n\t}\n});\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showNext',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationForwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.DownArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.DownArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showNextValue();\n\t}\n});\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IHistoryNavigationWidget } from 'vs/base/browser/history';\nimport { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';\nimport { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';\nimport { IReplaceInputOptions, ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput';\nimport { HistoryInputBox, IHistoryInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';\nimport { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';\nimport { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { localize } from 'vs/nls';\nimport { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\nexport const historyNavigationVisible = new RawContextKey('suggestWidgetVisible', false, localize('suggestWidgetVisible', \"Whether suggestion are visible\"));\n\nconst HistoryNavigationWidgetFocusContext = 'historyNavigationWidgetFocus';\nconst HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';\nconst HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';\n\nexport interface IHistoryNavigationContext extends IDisposable {\n\thistoryNavigationForwardsEnablement: IContextKey;\n\thistoryNavigationBackwardsEnablement: IContextKey;\n}\n\nlet lastFocusedWidget: IHistoryNavigationWidget | undefined = undefined;\nconst widgets: IHistoryNavigationWidget[] = [];\n\nexport function registerAndCreateHistoryNavigationContext(scopedContextKeyService: IContextKeyService, widget: IHistoryNavigationWidget): IHistoryNavigationContext {\n\tif (widgets.includes(widget)) {\n\t\tthrow new Error('Cannot register the same widget multiple times');\n\t}\n\n\twidgets.push(widget);\n\tconst disposableStore = new DisposableStore();\n\tconst historyNavigationWidgetFocus = new RawContextKey(HistoryNavigationWidgetFocusContext, false).bindTo(scopedContextKeyService);\n\tconst historyNavigationForwardsEnablement = new RawContextKey(HistoryNavigationForwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\tconst historyNavigationBackwardsEnablement = new RawContextKey(HistoryNavigationBackwardsEnablementContext, true).bindTo(scopedContextKeyService);\n\n\tconst onDidFocus = () => {\n\t\thistoryNavigationWidgetFocus.set(true);\n\t\tlastFocusedWidget = widget;\n\t};\n\n\tconst onDidBlur = () => {\n\t\thistoryNavigationWidgetFocus.set(false);\n\t\tif (lastFocusedWidget === widget) {\n\t\t\tlastFocusedWidget = undefined;\n\t\t}\n\t};\n\n\t// Check for currently being focused\n\tif (widget.element === document.activeElement) {\n\t\tonDidFocus();\n\t}\n\n\tdisposableStore.add(widget.onDidFocus(() => onDidFocus()));\n\tdisposableStore.add(widget.onDidBlur(() => onDidBlur()));\n\tdisposableStore.add(toDisposable(() => {\n\t\twidgets.splice(widgets.indexOf(widget), 1);\n\t\tonDidBlur();\n\t}));\n\n\treturn {\n\t\thistoryNavigationForwardsEnablement,\n\t\thistoryNavigationBackwardsEnablement,\n\t\tdispose() {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t};\n}\n\nexport class ContextScopedHistoryInputBox extends HistoryInputBox {\n\n\tconstructor(container: HTMLElement, contextViewProvider: IContextViewProvider | undefined, options: IHistoryInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tconst scopedContextKeyService = this._register(contextKeyService.createScoped(this.element));\n\t\tthis._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this));\n\t}\n\n}\n\nexport class ContextScopedFindInput extends FindInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider, options: IFindInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService\n\t) {\n\t\tsuper(container, contextViewProvider, options);\n\t\tconst scopedContextKeyService = this._register(contextKeyService.createScoped(this.inputBox.element));\n\t\tthis._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this.inputBox));\n\t}\n}\n\nexport class ContextScopedReplaceInput extends ReplaceInput {\n\n\tconstructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider | undefined, options: IReplaceInputOptions,\n\t\t@IContextKeyService contextKeyService: IContextKeyService, showReplaceOptions: boolean = false\n\t) {\n\t\tsuper(container, contextViewProvider, showReplaceOptions, options);\n\t\tconst scopedContextKeyService = this._register(contextKeyService.createScoped(this.inputBox.element));\n\t\tthis._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this.inputBox));\n\t}\n\n}\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showPrevious',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationBackwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.UpArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.UpArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showPreviousValue();\n\t}\n});\n\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n\tid: 'history.showNext',\n\tweight: KeybindingWeight.WorkbenchContrib,\n\twhen: ContextKeyExpr.and(\n\t\tContextKeyExpr.has(HistoryNavigationWidgetFocusContext),\n\t\tContextKeyExpr.equals(HistoryNavigationForwardsEnablementContext, true),\n\t\thistoryNavigationVisible.isEqualTo(false),\n\t),\n\tprimary: KeyCode.DownArrow,\n\tsecondary: [KeyMod.Alt | KeyCode.DownArrow],\n\thandler: (accessor) => {\n\t\tlastFocusedWidget?.showNextValue();\n\t}\n});\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[24,25)", + "modifiedRange": "[24,24)", + "innerChanges": null + }, + { + "originalRange": "[32,33)", + "modifiedRange": "[31,32)", + "innerChanges": [ + { + "originalRange": "[32,59 -> 32,61]", + "modifiedRange": "[31,59 -> 31,67]" + } + ] + }, + { + "originalRange": "[39,40)", + "modifiedRange": "[38,38)", + "innerChanges": null + }, + { + "originalRange": "[69,70)", + "modifiedRange": "[67,67)", + "innerChanges": null + }, + { + "originalRange": "[84,85)", + "modifiedRange": "[81,83)", + "innerChanges": [ + { + "originalRange": "[84,1 -> 84,1]", + "modifiedRange": "[81,1 -> 82,1]" + }, + { + "originalRange": "[84,60 -> 84,62]", + "modifiedRange": "[82,60 -> 82,68]" + } + ] + }, + { + "originalRange": "[95,96)", + "modifiedRange": "[93,95)", + "innerChanges": [ + { + "originalRange": "[95,1 -> 95,1]", + "modifiedRange": "[93,1 -> 94,1]" + }, + { + "originalRange": "[95,60 -> 95,62]", + "modifiedRange": "[94,60 -> 94,68]" + } + ] + }, + { + "originalRange": "[105,106)", + "modifiedRange": "[104,106)", + "innerChanges": [ + { + "originalRange": "[105,1 -> 105,1]", + "modifiedRange": "[104,1 -> 105,1]" + }, + { + "originalRange": "[105,60 -> 105,62]", + "modifiedRange": "[105,60 -> 105,68]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/smart.expected.diff.json deleted file mode 100644 index 239c6fd8899..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/smart.expected.diff.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[24,25)", - "modifiedRange": "[24,24)", - "innerChanges": null - }, - { - "originalRange": "[32,33)", - "modifiedRange": "[31,32)", - "innerChanges": [ - { - "originalRange": "[32,59 -> 32,61]", - "modifiedRange": "[31,59 -> 31,67]" - } - ] - }, - { - "originalRange": "[39,40)", - "modifiedRange": "[38,38)", - "innerChanges": null - }, - { - "originalRange": "[69,70)", - "modifiedRange": "[67,67)", - "innerChanges": null - }, - { - "originalRange": "[84,85)", - "modifiedRange": "[81,83)", - "innerChanges": [ - { - "originalRange": "[84,1 -> 84,1]", - "modifiedRange": "[81,1 -> 82,1]" - }, - { - "originalRange": "[84,60 -> 84,62]", - "modifiedRange": "[82,60 -> 82,68]" - } - ] - }, - { - "originalRange": "[95,96)", - "modifiedRange": "[93,95)", - "innerChanges": [ - { - "originalRange": "[95,1 -> 95,1]", - "modifiedRange": "[93,1 -> 94,1]" - }, - { - "originalRange": "[95,60 -> 95,62]", - "modifiedRange": "[94,60 -> 94,68]" - } - ] - }, - { - "originalRange": "[105,106)", - "modifiedRange": "[104,106)", - "innerChanges": [ - { - "originalRange": "[105,1 -> 105,1]", - "modifiedRange": "[104,1 -> 105,1]" - }, - { - "originalRange": "[105,60 -> 105,62]", - "modifiedRange": "[105,60 -> 105,68]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/advanced.expected.diff.json new file mode 100644 index 00000000000..eb1bd1ed77d --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, IMenuService, SubmenuItemAction } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, SubmenuItemAction } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,43 -> 3,57]", + "modifiedRange": "[3,43 -> 3,43]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/experimental.expected.diff.json deleted file mode 100644 index e77975d759a..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,43 -> 3,57]", - "modifiedRange": "[3,43 -> 3,43]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/legacy.expected.diff.json new file mode 100644 index 00000000000..c8bb3f44a34 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, IMenuService, SubmenuItemAction } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, SubmenuItemAction } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,44 -> 3,58]", + "modifiedRange": "[3,44 -> 3,44]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/smart.expected.diff.json deleted file mode 100644 index 396591fc4dc..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing2/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,44 -> 3,58]", - "modifiedRange": "[3,44 -> 3,44]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/advanced.expected.diff.json new file mode 100644 index 00000000000..93657f71909 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/advanced.expected.diff.json @@ -0,0 +1,46 @@ +{ + "original": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, IMenuServiceFooManager, ServiceManagerLocator } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\nISFM,SML,SFMKL\n\nconsole.log(MenuId, Action2, IAction2Options, IMenuServiceFooManager, ServiceManagerLocator);", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, ServiceManagerLocator } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\nSML\n\nconsole.log(MenuId, Action2, IAction2Options, ServiceManagerLocator);", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,43 -> 3,67]", + "modifiedRange": "[3,43 -> 3,43]" + } + ] + }, + { + "originalRange": "[7,8)", + "modifiedRange": "[7,8)", + "innerChanges": [ + { + "originalRange": "[7,1 -> 7,6]", + "modifiedRange": "[7,1 -> 7,1]" + }, + { + "originalRange": "[7,9 -> 7,15]", + "modifiedRange": "[7,4 -> 7,4]" + } + ] + }, + { + "originalRange": "[9,10)", + "modifiedRange": "[9,10)", + "innerChanges": [ + { + "originalRange": "[9,46 -> 9,70]", + "modifiedRange": "[9,46 -> 9,46]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/experimental.expected.diff.json deleted file mode 100644 index af483c2217d..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/experimental.expected.diff.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,43 -> 3,67]", - "modifiedRange": "[3,43 -> 3,43]" - } - ] - }, - { - "originalRange": "[7,8)", - "modifiedRange": "[7,8)", - "innerChanges": [ - { - "originalRange": "[7,1 -> 7,6]", - "modifiedRange": "[7,1 -> 7,1]" - }, - { - "originalRange": "[7,9 -> 7,15]", - "modifiedRange": "[7,4 -> 7,4]" - } - ] - }, - { - "originalRange": "[9,10)", - "modifiedRange": "[9,10)", - "innerChanges": [ - { - "originalRange": "[9,46 -> 9,70]", - "modifiedRange": "[9,46 -> 9,46]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/legacy.expected.diff.json new file mode 100644 index 00000000000..2c2c64d2b9c --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/legacy.expected.diff.json @@ -0,0 +1,46 @@ +{ + "original": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, IMenuServiceFooManager, ServiceManagerLocator } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\nISFM,SML,SFMKL\n\nconsole.log(MenuId, Action2, IAction2Options, IMenuServiceFooManager, ServiceManagerLocator);", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { assertIsDefined } from 'vs/base/common/types';\nimport { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';\nimport { MenuId, Action2, IAction2Options, ServiceManagerLocator } from 'vs/platform/actions/common/actions';\nimport { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';\nimport { parseLinkedText } from 'vs/base/common/linkedText';\nimport { IOpenerService } from 'vs/platform/opener/common/opener';\nSML\n\nconsole.log(MenuId, Action2, IAction2Options, ServiceManagerLocator);", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,44 -> 3,68]", + "modifiedRange": "[3,44 -> 3,44]" + } + ] + }, + { + "originalRange": "[7,8)", + "modifiedRange": "[7,8)", + "innerChanges": [ + { + "originalRange": "[7,1 -> 7,6]", + "modifiedRange": "[7,1 -> 7,1]" + }, + { + "originalRange": "[7,9 -> 7,15]", + "modifiedRange": "[7,4 -> 7,4]" + } + ] + }, + { + "originalRange": "[9,10)", + "modifiedRange": "[9,10)", + "innerChanges": [ + { + "originalRange": "[9,47 -> 9,71]", + "modifiedRange": "[9,47 -> 9,47]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/smart.expected.diff.json deleted file mode 100644 index e8211fc3870..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/smart.expected.diff.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,44 -> 3,68]", - "modifiedRange": "[3,44 -> 3,44]" - } - ] - }, - { - "originalRange": "[7,8)", - "modifiedRange": "[7,8)", - "innerChanges": [ - { - "originalRange": "[7,1 -> 7,6]", - "modifiedRange": "[7,1 -> 7,1]" - }, - { - "originalRange": "[7,9 -> 7,15]", - "modifiedRange": "[7,4 -> 7,4]" - } - ] - }, - { - "originalRange": "[9,10)", - "modifiedRange": "[9,10)", - "innerChanges": [ - { - "originalRange": "[9,47 -> 9,71]", - "modifiedRange": "[9,47 -> 9,47]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/advanced.expected.diff.json new file mode 100644 index 00000000000..ff460a11892 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { EditorGutter, IGutterItemInfo, IGutterItemView } from '../editorGutter';\nimport { CodeEditorView } from './codeEditorView';\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { EditorGutter, IGutterItemInfo, IGutterItemView } from '../editorGutter';\nimport { CodeEditorView, TitleMenu } from './codeEditorView';\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,24 -> 3,24]", + "modifiedRange": "[3,24 -> 3,35]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/experimental.expected.diff.json deleted file mode 100644 index 322bb5fc3be..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,24 -> 3,24]", - "modifiedRange": "[3,24 -> 3,35]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/legacy.expected.diff.json new file mode 100644 index 00000000000..ff460a11892 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { EditorGutter, IGutterItemInfo, IGutterItemView } from '../editorGutter';\nimport { CodeEditorView } from './codeEditorView';\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';\nimport { EditorGutter, IGutterItemInfo, IGutterItemView } from '../editorGutter';\nimport { CodeEditorView, TitleMenu } from './codeEditorView';\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,24 -> 3,24]", + "modifiedRange": "[3,24 -> 3,35]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/smart.expected.diff.json deleted file mode 100644 index 322bb5fc3be..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-import-ws-affinity/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,4)", - "innerChanges": [ - { - "originalRange": "[3,24 -> 3,24]", - "modifiedRange": "[3,24 -> 3,35]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-insert/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-insert/advanced.expected.diff.json new file mode 100644 index 00000000000..0b90a245ff9 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-insert/advanced.expected.diff.json @@ -0,0 +1,26 @@ +{ + "original": { + "content": "const sequence2 = new SequenceFromIntArray(tgtDocLines);", + "fileName": "./1.tst" + }, + "modified": { + "content": "const sequence2 = new LineSequence(tgtDocLines, modifiedLines);", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,23 -> 1,43]", + "modifiedRange": "[1,23 -> 1,35]" + }, + { + "originalRange": "[1,55 -> 1,55]", + "modifiedRange": "[1,47 -> 1,62]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-insert/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-insert/legacy.expected.diff.json similarity index 61% rename from src/vs/editor/test/node/diffing/fixtures/ts-insert/experimental.expected.diff.json rename to src/vs/editor/test/node/diffing/fixtures/ts-insert/legacy.expected.diff.json index d7b3e05ef3a..9e056decc6b 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-insert/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-insert/legacy.expected.diff.json @@ -1,6 +1,12 @@ { - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", + "original": { + "content": "const sequence2 = new SequenceFromIntArray(tgtDocLines);", + "fileName": "./1.tst" + }, + "modified": { + "content": "const sequence2 = new LineSequence(tgtDocLines, modifiedLines);", + "fileName": "./2.tst" + }, "diffs": [ { "originalRange": "[1,2)", diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-insert/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-insert/smart.expected.diff.json deleted file mode 100644 index d7b3e05ef3a..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-insert/smart.expected.diff.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[1,2)", - "modifiedRange": "[1,2)", - "innerChanges": [ - { - "originalRange": "[1,23 -> 1,23]", - "modifiedRange": "[1,23 -> 1,27]" - }, - { - "originalRange": "[1,31 -> 1,43]", - "modifiedRange": "[1,35 -> 1,35]" - }, - { - "originalRange": "[1,55 -> 1,55]", - "modifiedRange": "[1,47 -> 1,62]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-methods/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-methods/advanced.expected.diff.json new file mode 100644 index 00000000000..87ad9d8d82f --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-methods/advanced.expected.diff.json @@ -0,0 +1,30 @@ +{ + "original": { + "content": "interface Test {\n getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[];\n\tgetViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData;\n getViewLineData(lineNumber: number): ViewLineData;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "interface Test {\n getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[];\n getViewportViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData;\n getViewLineRenderingData(lineNumber: number): ViewLineRenderingData;\n getViewLineData(lineNumber: number): ViewLineData;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,5)", + "innerChanges": [ + { + "originalRange": "[3,1 -> 3,2]", + "modifiedRange": "[3,1 -> 3,5]" + }, + { + "originalRange": "[3,5 -> 3,5]", + "modifiedRange": "[3,8 -> 3,16]" + }, + { + "originalRange": "[4,1 -> 4,1]", + "modifiedRange": "[4,1 -> 5,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-methods/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-methods/experimental.expected.diff.json deleted file mode 100644 index c66254e9399..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-methods/experimental.expected.diff.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,5)", - "innerChanges": [ - { - "originalRange": "[3,1 -> 3,2]", - "modifiedRange": "[3,1 -> 3,5]" - }, - { - "originalRange": "[3,5 -> 3,5]", - "modifiedRange": "[3,8 -> 3,16]" - }, - { - "originalRange": "[4,1 -> 4,1]", - "modifiedRange": "[4,1 -> 5,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-methods/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-methods/legacy.expected.diff.json new file mode 100644 index 00000000000..5034a4b336a --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-methods/legacy.expected.diff.json @@ -0,0 +1,30 @@ +{ + "original": { + "content": "interface Test {\n getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[];\n\tgetViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData;\n getViewLineData(lineNumber: number): ViewLineData;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "interface Test {\n getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[];\n getViewportViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData;\n getViewLineRenderingData(lineNumber: number): ViewLineRenderingData;\n getViewLineData(lineNumber: number): ViewLineData;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,5)", + "innerChanges": [ + { + "originalRange": "[3,1 -> 3,2]", + "modifiedRange": "[3,1 -> 3,5]" + }, + { + "originalRange": "[3,9 -> 3,9]", + "modifiedRange": "[3,12 -> 3,20]" + }, + { + "originalRange": "[3,91 -> 3,91]", + "modifiedRange": "[3,102 -> 4,73]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-methods/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-methods/smart.expected.diff.json deleted file mode 100644 index 69e0286f34d..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-methods/smart.expected.diff.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[3,4)", - "modifiedRange": "[3,5)", - "innerChanges": [ - { - "originalRange": "[3,1 -> 3,2]", - "modifiedRange": "[3,1 -> 3,5]" - }, - { - "originalRange": "[3,9 -> 3,9]", - "modifiedRange": "[3,12 -> 3,20]" - }, - { - "originalRange": "[3,91 -> 3,91]", - "modifiedRange": "[3,102 -> 4,73]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/advanced.expected.diff.json new file mode 100644 index 00000000000..3f0012bc068 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);\nif (childEndsAfterEnd) {\n // No child after this child in the requested window, don't recurse\n node = child;\n level++;\n continue whileLoop;\n}\n\nconst shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracketType);\nif (!shouldContinue) {\n return false;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);\nif (childEndsAfterEnd) {\n // No child after this child in the requested window, don't recurse\n node = child;\n level++;\n continue whileLoop;\n}\n\nconst shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracket + 1, levelPerBracketType);\nif (!shouldContinue) {\n return false;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,10)", + "modifiedRange": "[9,10)", + "innerChanges": [ + { + "originalRange": "[9,115 -> 9,115]", + "modifiedRange": "[9,115 -> 9,136]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/experimental.expected.diff.json deleted file mode 100644 index 807bbb2dcd9..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,10)", - "modifiedRange": "[9,10)", - "innerChanges": [ - { - "originalRange": "[9,116 -> 9,116]", - "modifiedRange": "[9,116 -> 9,137]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/legacy.expected.diff.json new file mode 100644 index 00000000000..70fb45226f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);\nif (childEndsAfterEnd) {\n // No child after this child in the requested window, don't recurse\n node = child;\n level++;\n continue whileLoop;\n}\n\nconst shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracketType);\nif (!shouldContinue) {\n return false;\n}", + "fileName": "./1.tst" + }, + "modified": { + "content": "const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);\nif (childEndsAfterEnd) {\n // No child after this child in the requested window, don't recurse\n node = child;\n level++;\n continue whileLoop;\n}\n\nconst shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracket + 1, levelPerBracketType);\nif (!shouldContinue) {\n return false;\n}", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,10)", + "modifiedRange": "[9,10)", + "innerChanges": [ + { + "originalRange": "[9,135 -> 9,135]", + "modifiedRange": "[9,135 -> 9,156]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/smart.expected.diff.json deleted file mode 100644 index e155ae69309..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-shift-to-ws/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,10)", - "modifiedRange": "[9,10)", - "innerChanges": [ - { - "originalRange": "[9,135 -> 9,135]", - "modifiedRange": "[9,135 -> 9,156]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shifting/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shifting/advanced.expected.diff.json new file mode 100644 index 00000000000..20e487ad163 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-shifting/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "[\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"pflannery.vscode-versionlens\",\n\t\t\t\"uuid\": \"07fc4a0a-11fc-4121-ba9a-f0d534c729d8\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.9\",\n\t\t\"installed\": true\n\t},\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"sumneko.lua\",\n\t\t\t\"uuid\": \"3a15b5a7-be12-47e3-8445-88ee3eabc8b2\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"3.5.6\",\n\t\t\"installed\": true\n\t},\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"vscode.bat\",\n\t\t\t\"uuid\": \"5ef96c58-076f-4167-8e40-62c9deb00496\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.0\"\n\t}\n]", + "fileName": "./1.tst" + }, + "modified": { + "content": "[\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"pflannery.vscode-versionlens\",\n\t\t\t\"uuid\": \"07fc4a0a-11fc-4121-ba9a-f0d534c729d8\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.9\",\n\t\t\"installed\": true\n\t},\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"vscode.bat\",\n\t\t\t\"uuid\": \"5ef96c58-076f-4167-8e40-62c9deb00496\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.0\"\n\t}\n]", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[11,20)", + "modifiedRange": "[11,11)", + "innerChanges": [ + { + "originalRange": "[11,1 -> 20,1]", + "modifiedRange": "[11,1 -> 11,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shifting/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shifting/experimental.expected.diff.json deleted file mode 100644 index 7cae68fdc45..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-shifting/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[11,20)", - "modifiedRange": "[11,11)", - "innerChanges": [ - { - "originalRange": "[11,1 -> 20,1]", - "modifiedRange": "[11,1 -> 11,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shifting/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shifting/legacy.expected.diff.json new file mode 100644 index 00000000000..ec24fdf0386 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-shifting/legacy.expected.diff.json @@ -0,0 +1,17 @@ +{ + "original": { + "content": "[\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"pflannery.vscode-versionlens\",\n\t\t\t\"uuid\": \"07fc4a0a-11fc-4121-ba9a-f0d534c729d8\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.9\",\n\t\t\"installed\": true\n\t},\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"sumneko.lua\",\n\t\t\t\"uuid\": \"3a15b5a7-be12-47e3-8445-88ee3eabc8b2\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"3.5.6\",\n\t\t\"installed\": true\n\t},\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"vscode.bat\",\n\t\t\t\"uuid\": \"5ef96c58-076f-4167-8e40-62c9deb00496\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.0\"\n\t}\n]", + "fileName": "./1.tst" + }, + "modified": { + "content": "[\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"pflannery.vscode-versionlens\",\n\t\t\t\"uuid\": \"07fc4a0a-11fc-4121-ba9a-f0d534c729d8\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.9\",\n\t\t\"installed\": true\n\t},\n\t{\n\t\t\"identifier\": {\n\t\t\t\"id\": \"vscode.bat\",\n\t\t\t\"uuid\": \"5ef96c58-076f-4167-8e40-62c9deb00496\"\n\t\t},\n\t\t\"preRelease\": false,\n\t\t\"version\": \"1.0.0\"\n\t}\n]", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[13,22)", + "modifiedRange": "[13,13)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-shifting/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-shifting/smart.expected.diff.json deleted file mode 100644 index 32fdb9dbdd9..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-shifting/smart.expected.diff.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[13,22)", - "modifiedRange": "[13,13)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-strings/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-strings/advanced.expected.diff.json new file mode 100644 index 00000000000..163b0d65445 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-strings/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "interface Test {\n /**\n * Controls whether the fold actions in the gutter stay always visible or hide unless the mouse is over the gutter.\n * Defaults to 'mouseover'.\n */\n showFoldingControls?: 'always' | 'mouseover';\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "interface Test {\n /**\n * Controls whether the fold actions in the gutter stay always visible or hide unless the mouse is over the gutter.\n * Defaults to 'mouseover'.\n */\n showFoldingControls?: 'always' | 'never' | 'mouseover';\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[6,7)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[6,35 -> 6,35]", + "modifiedRange": "[6,35 -> 6,45]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-strings/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-strings/experimental.expected.diff.json deleted file mode 100644 index 1781d792519..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-strings/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[6,7)", - "modifiedRange": "[6,7)", - "innerChanges": [ - { - "originalRange": "[6,35 -> 6,35]", - "modifiedRange": "[6,35 -> 6,45]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-strings/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-strings/legacy.expected.diff.json new file mode 100644 index 00000000000..0d9f51ff952 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-strings/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "interface Test {\n /**\n * Controls whether the fold actions in the gutter stay always visible or hide unless the mouse is over the gutter.\n * Defaults to 'mouseover'.\n */\n showFoldingControls?: 'always' | 'mouseover';\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "interface Test {\n /**\n * Controls whether the fold actions in the gutter stay always visible or hide unless the mouse is over the gutter.\n * Defaults to 'mouseover'.\n */\n showFoldingControls?: 'always' | 'never' | 'mouseover';\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[6,7)", + "modifiedRange": "[6,7)", + "innerChanges": [ + { + "originalRange": "[6,39 -> 6,39]", + "modifiedRange": "[6,39 -> 6,49]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-strings/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-strings/smart.expected.diff.json deleted file mode 100644 index eccec9997d5..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-strings/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[6,7)", - "modifiedRange": "[6,7)", - "innerChanges": [ - { - "originalRange": "[6,39 -> 6,39]", - "modifiedRange": "[6,39 -> 6,49]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/advanced.expected.diff.json new file mode 100644 index 00000000000..aa65f823a85 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "class Test {\n protected readonly checkboxesVisible = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description checkboxesVisible */ this.configurationService.getValue('mergeEditor.showCheckboxes') ?? false\n );\n\n protected readonly showDeletionMarkers = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description showDeletionMarkers */ this.configurationService.getValue('mergeEditor.showDeletionMarkers')\n );\n\n public readonly editor = this.instantiationService.createInstance(\n CodeEditorWidget,\n this.htmlElements.editor,\n {},\n {\n contributions: this.getEditorContributions(),\n }\n );\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Test {\n protected readonly checkboxesVisible = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description checkboxesVisible */ this.configurationService.getValue('mergeEditor.showCheckboxes') ?? false\n );\n\n protected readonly showDeletionMarkers = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description showDeletionMarkers */ this.configurationService.getValue('mergeEditor.showDeletionMarkers') ?? true\n );\n\n protected readonly useSimplifiedDecorations = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description useSimplifiedDecorations */ this.configurationService.getValue('mergeEditor.useSimplifiedDecorations') ?? false\n );\n\n public readonly editor = this.instantiationService.createInstance(\n CodeEditorWidget,\n this.htmlElements.editor,\n {},\n {\n contributions: this.getEditorContributions(),\n }\n );\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,10)", + "modifiedRange": "[9,15)", + "innerChanges": [ + { + "originalRange": "[9,124 -> 9,124]", + "modifiedRange": "[9,124 -> 14,143]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/experimental.expected.diff.json deleted file mode 100644 index 7edda326b75..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/experimental.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,10)", - "modifiedRange": "[9,15)", - "innerChanges": [ - { - "originalRange": "[9,124 -> 9,124]", - "modifiedRange": "[9,124 -> 14,143]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/legacy.expected.diff.json new file mode 100644 index 00000000000..aa65f823a85 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "class Test {\n protected readonly checkboxesVisible = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description checkboxesVisible */ this.configurationService.getValue('mergeEditor.showCheckboxes') ?? false\n );\n\n protected readonly showDeletionMarkers = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description showDeletionMarkers */ this.configurationService.getValue('mergeEditor.showDeletionMarkers')\n );\n\n public readonly editor = this.instantiationService.createInstance(\n CodeEditorWidget,\n this.htmlElements.editor,\n {},\n {\n contributions: this.getEditorContributions(),\n }\n );\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "class Test {\n protected readonly checkboxesVisible = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description checkboxesVisible */ this.configurationService.getValue('mergeEditor.showCheckboxes') ?? false\n );\n\n protected readonly showDeletionMarkers = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description showDeletionMarkers */ this.configurationService.getValue('mergeEditor.showDeletionMarkers') ?? true\n );\n\n protected readonly useSimplifiedDecorations = observableFromEvent(\n this.configurationService.onDidChangeConfiguration,\n () => /** @description useSimplifiedDecorations */ this.configurationService.getValue('mergeEditor.useSimplifiedDecorations') ?? false\n );\n\n public readonly editor = this.instantiationService.createInstance(\n CodeEditorWidget,\n this.htmlElements.editor,\n {},\n {\n contributions: this.getEditorContributions(),\n }\n );\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[9,10)", + "modifiedRange": "[9,15)", + "innerChanges": [ + { + "originalRange": "[9,124 -> 9,124]", + "modifiedRange": "[9,124 -> 14,143]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/smart.expected.diff.json deleted file mode 100644 index 7edda326b75..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[9,10)", - "modifiedRange": "[9,15)", - "innerChanges": [ - { - "originalRange": "[9,124 -> 9,124]", - "modifiedRange": "[9,124 -> 14,143]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/advanced.expected.diff.json new file mode 100644 index 00000000000..b23cdb41fa7 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/advanced.expected.diff.json @@ -0,0 +1,32 @@ +{ + "original": { + "content": "import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions';\nimport { IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport * as languages from 'vs/editor/common/languages';\nimport { TriggerContext } from 'vs/editor/contrib/parameterHints/browser/parameterHintsModel';\nimport { Context } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp';\nimport * as nls from 'vs/nls';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { ParameterHintsWidget } from './parameterHintsWidget';\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Lazy } from 'vs/base/common/lazy';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions';\nimport { IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport * as languages from 'vs/editor/common/languages';\nimport { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures';\nimport { ParameterHintsModel, TriggerContext } from 'vs/editor/contrib/parameterHints/browser/parameterHintsModel';\nimport { Context } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp';\nimport * as nls from 'vs/nls';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { ParameterHintsWidget } from './parameterHintsWidget';\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,2)", + "modifiedRange": "[2,3)", + "innerChanges": [ + { + "originalRange": "[2,1 -> 2,1]", + "modifiedRange": "[2,1 -> 3,1]" + } + ] + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[9,11)", + "innerChanges": [ + { + "originalRange": "[8,9 -> 8,9]", + "modifiedRange": "[9,9 -> 10,30]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/experimental.expected.diff.json deleted file mode 100644 index c6d9f203ae5..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/experimental.expected.diff.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,2)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,1 -> 2,1]", - "modifiedRange": "[2,1 -> 3,1]" - } - ] - }, - { - "originalRange": "[8,9)", - "modifiedRange": "[9,11)", - "innerChanges": [ - { - "originalRange": "[8,1 -> 8,1]", - "modifiedRange": "[9,1 -> 10,1]" - }, - { - "originalRange": "[8,9 -> 8,9]", - "modifiedRange": "[10,9 -> 10,30]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/legacy.expected.diff.json new file mode 100644 index 00000000000..9bd86ea7b59 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/legacy.expected.diff.json @@ -0,0 +1,27 @@ +{ + "original": { + "content": "import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions';\nimport { IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport * as languages from 'vs/editor/common/languages';\nimport { TriggerContext } from 'vs/editor/contrib/parameterHints/browser/parameterHintsModel';\nimport { Context } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp';\nimport * as nls from 'vs/nls';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { ParameterHintsWidget } from './parameterHintsWidget';\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';\nimport { Lazy } from 'vs/base/common/lazy';\nimport { Disposable } from 'vs/base/common/lifecycle';\nimport { ICodeEditor } from 'vs/editor/browser/editorBrowser';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions';\nimport { IEditorContribution } from 'vs/editor/common/editorCommon';\nimport { EditorContextKeys } from 'vs/editor/common/editorContextKeys';\nimport * as languages from 'vs/editor/common/languages';\nimport { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures';\nimport { ParameterHintsModel, TriggerContext } from 'vs/editor/contrib/parameterHints/browser/parameterHintsModel';\nimport { Context } from 'vs/editor/contrib/parameterHints/browser/provideSignatureHelp';\nimport * as nls from 'vs/nls';\nimport { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';\nimport { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';\nimport { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';\nimport { ParameterHintsWidget } from './parameterHintsWidget';\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[2,2)", + "modifiedRange": "[2,3)", + "innerChanges": null + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[9,11)", + "innerChanges": [ + { + "originalRange": "[8,10 -> 8,10]", + "modifiedRange": "[9,10 -> 10,31]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/smart.expected.diff.json deleted file mode 100644 index 9f3b700c75e..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-unfragmented-diffing/smart.expected.diff.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[2,2)", - "modifiedRange": "[2,3)", - "innerChanges": null - }, - { - "originalRange": "[8,9)", - "modifiedRange": "[9,11)", - "innerChanges": [ - { - "originalRange": "[8,10 -> 8,10]", - "modifiedRange": "[9,10 -> 10,31]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/advanced.expected.diff.json new file mode 100644 index 00000000000..c14aaa445f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/advanced.expected.diff.json @@ -0,0 +1,32 @@ +{ + "original": { + "content": "test(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n })\n});\n\ntest(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n })\n});", + "fileName": "./1.tst" + }, + "modified": { + "content": "test(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n2 console.log(2);\n })\n\n it(() => {\n \n })\n});\n\ntest(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n })\n\n it(() => {\n \n })\n});", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[7,7)", + "modifiedRange": "[7,12)", + "innerChanges": [ + { + "originalRange": "[7,1 -> 7,1]", + "modifiedRange": "[7,1 -> 12,1]" + } + ] + }, + { + "originalRange": "[17,17)", + "modifiedRange": "[22,26)", + "innerChanges": [ + { + "originalRange": "[17,1 -> 17,1]", + "modifiedRange": "[22,1 -> 26,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/experimental.expected.diff.json deleted file mode 100644 index a37e3ebe187..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/experimental.expected.diff.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[7,7)", - "modifiedRange": "[7,12)", - "innerChanges": [ - { - "originalRange": "[7,1 -> 7,1]", - "modifiedRange": "[7,1 -> 12,1]" - } - ] - }, - { - "originalRange": "[17,17)", - "modifiedRange": "[22,26)", - "innerChanges": [ - { - "originalRange": "[17,1 -> 17,1]", - "modifiedRange": "[22,1 -> 26,1]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/legacy.expected.diff.json new file mode 100644 index 00000000000..92390d02f61 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "test(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n })\n});\n\ntest(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n })\n});", + "fileName": "./1.tst" + }, + "modified": { + "content": "test(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n2 console.log(2);\n })\n\n it(() => {\n \n })\n});\n\ntest(() => {\n it(() => {\n console.log(1);\n })\n\n it(() => {\n })\n\n it(() => {\n \n })\n});", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[7,7)", + "modifiedRange": "[7,12)", + "innerChanges": null + }, + { + "originalRange": "[17,17)", + "modifiedRange": "[22,26)", + "innerChanges": null + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/smart.expected.diff.json deleted file mode 100644 index 4c25222b3b4..00000000000 --- a/src/vs/editor/test/node/diffing/fixtures/ts-unit-test/smart.expected.diff.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "originalFileName": "./1.tst", - "modifiedFileName": "./2.tst", - "diffs": [ - { - "originalRange": "[7,7)", - "modifiedRange": "[7,12)", - "innerChanges": null - }, - { - "originalRange": "[17,17)", - "modifiedRange": "[22,26)", - "innerChanges": null - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/1.tst b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/1.tst new file mode 100644 index 00000000000..d4975329f03 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/1.tst @@ -0,0 +1,79 @@ +// test case 1: +{ + const abc = 1; +} + +// test case 2: +{ + const private = 1; +} + +// test case 3: +{ + const abc1 = 1; +} + +// test case 4: +{ + const index = 1; +} + +// test case 5: +{ + const InlineDecoration = 1; +} + +// test case 6: +{ + const _getDecorationsInRange = 1; +} + +// test case 7: +{ + const lord = 1; +} + +// test case 8: +{ + const abc1 = 1; +} + +// test case 1: +{ + // hello world +} + +// test case 2: +{ + // optimizeSequenceDiffs +} + +// test case 3: +{ + const optequffs = 1; +} + +// test case 4: +{ + const abc = 1; +} + +// test case 5: +{ + const abc = 1; +} + +// test case 6: +{ + const abc = 1; +} + +// test case 7: +{ + const abc = 1; +} + +// test case 8: +{ + const abc = 1; +} diff --git a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/2.tst b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/2.tst new file mode 100644 index 00000000000..7dc1e732506 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/2.tst @@ -0,0 +1,79 @@ +// test case 1: +{ + const asciiLower = 1; +} + +// test case 2: +{ + const protected = 1; +} + +// test case 3: +{ + const abc2 = 1; +} + +// test case 4: +{ + const undefined = 1; +} + +// test case 5: +{ + const IDecorationsViewportData = 1; +} + +// test case 6: +{ + const configuration = 1; +} + +// test case 7: +{ + const helloWorld = 1; +} + +// test case 8: +{ + const abc1 = 1; +} + +// test case 1: +{ + // helwor +} + +// test case 2: +{ + // optimize Sequence Diffs +} + +// test case 3: +{ + const optimize Sequence Diffs = 1; +} + +// test case 4: +{ + const abc = 1; +} + +// test case 5: +{ + const abc = 1; +} + +// test case 6: +{ + const abc = 1; +} + +// test case 7: +{ + const abc = 1; +} + +// test case 8: +{ + const abc = 1; +} diff --git a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json new file mode 100644 index 00000000000..5742291665d --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json @@ -0,0 +1,116 @@ +{ + "original": { + "content": "// test case 1:\n{\n\tconst abc = 1;\n}\n\n// test case 2:\n{\n\tconst private = 1;\n}\n\n// test case 3:\n{\n\tconst abc1 = 1;\n}\n\n// test case 4:\n{\n\tconst index = 1;\n}\n\n// test case 5:\n{\n\tconst InlineDecoration = 1;\n}\n\n// test case 6:\n{\n\tconst _getDecorationsInRange = 1;\n}\n\n// test case 7:\n{\n\tconst lord = 1;\n}\n\n// test case 8:\n{\n\tconst abc1 = 1;\n}\n\n// test case 1:\n{\n\t// hello world\n}\n\n// test case 2:\n{\n\t// optimizeSequenceDiffs\n}\n\n// test case 3:\n{\n\tconst optequffs = 1;\n}\n\n// test case 4:\n{\n\tconst abc = 1;\n}\n\n// test case 5:\n{\n\tconst abc = 1;\n}\n\n// test case 6:\n{\n\tconst abc = 1;\n}\n\n// test case 7:\n{\n\tconst abc = 1;\n}\n\n// test case 8:\n{\n\tconst abc = 1;\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "// test case 1:\n{\n\tconst asciiLower = 1;\n}\n\n// test case 2:\n{\n\tconst protected = 1;\n}\n\n// test case 3:\n{\n\tconst abc2 = 1;\n}\n\n// test case 4:\n{\n\tconst undefined = 1;\n}\n\n// test case 5:\n{\n\tconst IDecorationsViewportData = 1;\n}\n\n// test case 6:\n{\n\tconst configuration = 1;\n}\n\n// test case 7:\n{\n\tconst helloWorld = 1;\n}\n\n// test case 8:\n{\n\tconst abc1 = 1;\n}\n\n// test case 1:\n{\n\t// helwor\n}\n\n// test case 2:\n{\n\t// optimize Sequence Diffs\n}\n\n// test case 3:\n{\n\tconst optimize Sequence Diffs = 1;\n}\n\n// test case 4:\n{\n\tconst abc = 1;\n}\n\n// test case 5:\n{\n\tconst abc = 1;\n}\n\n// test case 6:\n{\n\tconst abc = 1;\n}\n\n// test case 7:\n{\n\tconst abc = 1;\n}\n\n// test case 8:\n{\n\tconst abc = 1;\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,8 -> 3,11]", + "modifiedRange": "[3,8 -> 3,18]" + } + ] + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[8,9)", + "innerChanges": [ + { + "originalRange": "[8,8 -> 8,15]", + "modifiedRange": "[8,8 -> 8,17]" + } + ] + }, + { + "originalRange": "[13,14)", + "modifiedRange": "[13,14)", + "innerChanges": [ + { + "originalRange": "[13,11 -> 13,12]", + "modifiedRange": "[13,11 -> 13,12]" + } + ] + }, + { + "originalRange": "[18,19)", + "modifiedRange": "[18,19)", + "innerChanges": [ + { + "originalRange": "[18,8 -> 18,13]", + "modifiedRange": "[18,8 -> 18,17]" + } + ] + }, + { + "originalRange": "[23,24)", + "modifiedRange": "[23,24)", + "innerChanges": [ + { + "originalRange": "[23,8 -> 23,24]", + "modifiedRange": "[23,8 -> 23,32]" + } + ] + }, + { + "originalRange": "[28,29)", + "modifiedRange": "[28,29)", + "innerChanges": [ + { + "originalRange": "[28,8 -> 28,30]", + "modifiedRange": "[28,8 -> 28,21]" + } + ] + }, + { + "originalRange": "[33,34)", + "modifiedRange": "[33,34)", + "innerChanges": [ + { + "originalRange": "[33,8 -> 33,12]", + "modifiedRange": "[33,8 -> 33,18]" + } + ] + }, + { + "originalRange": "[43,44)", + "modifiedRange": "[43,44)", + "innerChanges": [ + { + "originalRange": "[43,5 -> 43,16]", + "modifiedRange": "[43,5 -> 43,11]" + } + ] + }, + { + "originalRange": "[48,49)", + "modifiedRange": "[48,49)", + "innerChanges": [ + { + "originalRange": "[48,13 -> 48,13]", + "modifiedRange": "[48,13 -> 48,14]" + }, + { + "originalRange": "[48,21 -> 48,21]", + "modifiedRange": "[48,22 -> 48,23]" + } + ] + }, + { + "originalRange": "[53,54)", + "modifiedRange": "[53,54)", + "innerChanges": [ + { + "originalRange": "[53,8 -> 53,17]", + "modifiedRange": "[53,8 -> 53,31]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/legacy.expected.diff.json new file mode 100644 index 00000000000..8f9a20db404 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/legacy.expected.diff.json @@ -0,0 +1,132 @@ +{ + "original": { + "content": "// test case 1:\n{\n\tconst abc = 1;\n}\n\n// test case 2:\n{\n\tconst private = 1;\n}\n\n// test case 3:\n{\n\tconst abc1 = 1;\n}\n\n// test case 4:\n{\n\tconst index = 1;\n}\n\n// test case 5:\n{\n\tconst InlineDecoration = 1;\n}\n\n// test case 6:\n{\n\tconst _getDecorationsInRange = 1;\n}\n\n// test case 7:\n{\n\tconst lord = 1;\n}\n\n// test case 8:\n{\n\tconst abc1 = 1;\n}\n\n// test case 1:\n{\n\t// hello world\n}\n\n// test case 2:\n{\n\t// optimizeSequenceDiffs\n}\n\n// test case 3:\n{\n\tconst optequffs = 1;\n}\n\n// test case 4:\n{\n\tconst abc = 1;\n}\n\n// test case 5:\n{\n\tconst abc = 1;\n}\n\n// test case 6:\n{\n\tconst abc = 1;\n}\n\n// test case 7:\n{\n\tconst abc = 1;\n}\n\n// test case 8:\n{\n\tconst abc = 1;\n}\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "// test case 1:\n{\n\tconst asciiLower = 1;\n}\n\n// test case 2:\n{\n\tconst protected = 1;\n}\n\n// test case 3:\n{\n\tconst abc2 = 1;\n}\n\n// test case 4:\n{\n\tconst undefined = 1;\n}\n\n// test case 5:\n{\n\tconst IDecorationsViewportData = 1;\n}\n\n// test case 6:\n{\n\tconst configuration = 1;\n}\n\n// test case 7:\n{\n\tconst helloWorld = 1;\n}\n\n// test case 8:\n{\n\tconst abc1 = 1;\n}\n\n// test case 1:\n{\n\t// helwor\n}\n\n// test case 2:\n{\n\t// optimize Sequence Diffs\n}\n\n// test case 3:\n{\n\tconst optimize Sequence Diffs = 1;\n}\n\n// test case 4:\n{\n\tconst abc = 1;\n}\n\n// test case 5:\n{\n\tconst abc = 1;\n}\n\n// test case 6:\n{\n\tconst abc = 1;\n}\n\n// test case 7:\n{\n\tconst abc = 1;\n}\n\n// test case 8:\n{\n\tconst abc = 1;\n}\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[3,4)", + "modifiedRange": "[3,4)", + "innerChanges": [ + { + "originalRange": "[3,9 -> 3,11]", + "modifiedRange": "[3,9 -> 3,18]" + } + ] + }, + { + "originalRange": "[8,9)", + "modifiedRange": "[8,9)", + "innerChanges": [ + { + "originalRange": "[8,10 -> 8,15]", + "modifiedRange": "[8,10 -> 8,17]" + } + ] + }, + { + "originalRange": "[13,14)", + "modifiedRange": "[13,14)", + "innerChanges": [ + { + "originalRange": "[13,11 -> 13,12]", + "modifiedRange": "[13,11 -> 13,12]" + } + ] + }, + { + "originalRange": "[18,19)", + "modifiedRange": "[18,19)", + "innerChanges": [ + { + "originalRange": "[18,8 -> 18,13]", + "modifiedRange": "[18,8 -> 18,17]" + } + ] + }, + { + "originalRange": "[23,24)", + "modifiedRange": "[23,24)", + "innerChanges": [ + { + "originalRange": "[23,9 -> 23,14]", + "modifiedRange": "[23,9 -> 23,9]" + }, + { + "originalRange": "[23,24 -> 23,24]", + "modifiedRange": "[23,19 -> 23,32]" + } + ] + }, + { + "originalRange": "[28,29)", + "modifiedRange": "[28,29)", + "innerChanges": [ + { + "originalRange": "[28,8 -> 28,16]", + "modifiedRange": "[28,8 -> 28,15]" + }, + { + "originalRange": "[28,22 -> 28,30]", + "modifiedRange": "[28,21 -> 28,21]" + } + ] + }, + { + "originalRange": "[33,34)", + "modifiedRange": "[33,34)", + "innerChanges": [ + { + "originalRange": "[33,8 -> 33,11]", + "modifiedRange": "[33,8 -> 33,17]" + } + ] + }, + { + "originalRange": "[43,44)", + "modifiedRange": "[43,44)", + "innerChanges": [ + { + "originalRange": "[43,8 -> 43,11]", + "modifiedRange": "[43,8 -> 43,8]" + }, + { + "originalRange": "[43,14 -> 43,16]", + "modifiedRange": "[43,11 -> 43,11]" + } + ] + }, + { + "originalRange": "[48,49)", + "modifiedRange": "[48,49)", + "innerChanges": [ + { + "originalRange": "[48,13 -> 48,13]", + "modifiedRange": "[48,13 -> 48,14]" + }, + { + "originalRange": "[48,21 -> 48,21]", + "modifiedRange": "[48,22 -> 48,23]" + } + ] + }, + { + "originalRange": "[53,54)", + "modifiedRange": "[53,54)", + "innerChanges": [ + { + "originalRange": "[53,11 -> 53,11]", + "modifiedRange": "[53,11 -> 53,18]" + }, + { + "originalRange": "[53,14 -> 53,14]", + "modifiedRange": "[53,21 -> 53,28]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/ws-alignment/1.tsx b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/1.tsx new file mode 100644 index 00000000000..693ebcc1e12 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/1.tsx @@ -0,0 +1,16 @@ +import { Stack, Text } from '@fluentui/react'; +import { View } from '../../layout/layout'; + +export const WelcomeView = () => { + return ( + + + + + Welcome to the VS Code Tools application. + + + + + ); +} diff --git a/src/vs/editor/test/node/diffing/fixtures/ws-alignment/2.tsx b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/2.tsx new file mode 100644 index 00000000000..cb911e799d4 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/2.tsx @@ -0,0 +1,20 @@ +import { Nav } from '@fluentui/react'; +import { View } from '../../layout/layout'; + +export const WelcomeView = () => { + return ( + + + + ); +} diff --git a/src/vs/editor/test/node/diffing/fixtures/ws-alignment/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/advanced.expected.diff.json new file mode 100644 index 00000000000..92c6e475761 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/advanced.expected.diff.json @@ -0,0 +1,56 @@ +{ + "original": { + "content": "import { Stack, Text } from '@fluentui/react';\nimport { View } from '../../layout/layout';\n\nexport const WelcomeView = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tWelcome to the VS Code Tools application.\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n", + "fileName": "./1.tsx" + }, + "modified": { + "content": "import { Nav } from '@fluentui/react';\nimport { View } from '../../layout/layout';\n\nexport const WelcomeView = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n", + "fileName": "./2.tsx" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,10 -> 1,21]", + "modifiedRange": "[1,10 -> 1,13]" + } + ] + }, + { + "originalRange": "[7,14)", + "modifiedRange": "[7,18)", + "innerChanges": [ + { + "originalRange": "[7,5 -> 7,43]", + "modifiedRange": "[7,5 -> 11,140]" + }, + { + "originalRange": "[8,5 -> 9,12]", + "modifiedRange": "[12,5 -> 12,131]" + }, + { + "originalRange": "[10,7 -> 10,22]", + "modifiedRange": "[13,7 -> 13,17]" + }, + { + "originalRange": "[10,30 -> 10,48]", + "modifiedRange": "[13,25 -> 13,118]" + }, + { + "originalRange": "[11,6 -> 11,13]", + "modifiedRange": "[14,6 -> 14,8]" + }, + { + "originalRange": "[12,5 -> 12,17]", + "modifiedRange": "[15,5 -> 16,7]" + }, + { + "originalRange": "[13,6 -> 13,11]", + "modifiedRange": "[17,6 -> 17,9]" + } + ] + } + ] +} diff --git a/src/vs/editor/test/node/diffing/fixtures/ws-alignment/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/legacy.expected.diff.json new file mode 100644 index 00000000000..c248859e098 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/legacy.expected.diff.json @@ -0,0 +1,64 @@ +{ + "original": { + "content": "import { Stack, Text } from '@fluentui/react';\nimport { View } from '../../layout/layout';\n\nexport const WelcomeView = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tWelcome to the VS Code Tools application.\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n", + "fileName": "./1.tsx" + }, + "modified": { + "content": "import { Nav } from '@fluentui/react';\nimport { View } from '../../layout/layout';\n\nexport const WelcomeView = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n", + "fileName": "./2.tsx" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,10 -> 1,21]", + "modifiedRange": "[1,10 -> 1,13]" + } + ] + }, + { + "originalRange": "[7,14)", + "modifiedRange": "[7,18)", + "innerChanges": [ + { + "originalRange": "[7,5 -> 7,11]", + "modifiedRange": "[7,5 -> 8,5]" + }, + { + "originalRange": "[7,14 -> 7,43]", + "modifiedRange": "[8,8 -> 11,140]" + }, + { + "originalRange": "[8,5 -> 8,6]", + "modifiedRange": "[12,5 -> 12,25]" + }, + { + "originalRange": "[8,9 -> 9,12]", + "modifiedRange": "[12,28 -> 12,131]" + }, + { + "originalRange": "[10,7 -> 10,22]", + "modifiedRange": "[13,7 -> 13,17]" + }, + { + "originalRange": "[10,30 -> 10,48]", + "modifiedRange": "[13,25 -> 14,8]" + }, + { + "originalRange": "[11,6 -> 11,13]", + "modifiedRange": "[15,6 -> 15,7]" + }, + { + "originalRange": "[12,5 -> 12,17]", + "modifiedRange": "[16,5 -> 16,7]" + }, + { + "originalRange": "[13,6 -> 13,11]", + "modifiedRange": "[17,6 -> 17,9]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/lineRangeMapping.test.ts b/src/vs/editor/test/node/diffing/lineRangeMapping.test.ts new file mode 100644 index 00000000000..5cda2c94794 --- /dev/null +++ b/src/vs/editor/test/node/diffing/lineRangeMapping.test.ts @@ -0,0 +1,54 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { Range } from 'vs/editor/common/core/range'; +import { RangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; +import { getLineRangeMapping } from 'vs/editor/common/diff/standardLinesDiffComputer'; + +suite('lineRangeMapping', () => { + test('1', () => { + assert.deepStrictEqual( + getLineRangeMapping( + new RangeMapping( + new Range(2, 1, 3, 1), + new Range(2, 1, 2, 1) + ), + [ + 'const abc = "helloworld".split("");', + '', + '' + ], + [ + 'const asciiLower = "helloworld".split("");', + '' + ] + ).toString(), + "{[2,3)->[2,2)}" + ); + }); + + test('2', () => { + assert.deepStrictEqual( + getLineRangeMapping( + new RangeMapping( + new Range(2, 1, 2, 1), + new Range(2, 1, 4, 1), + ), + [ + '', + '', + ], + [ + '', + '', + '', + '', + ] + ).toString(), + "{[2,2)->[2,4)}" + ); + }); +}); diff --git a/src/vs/loader.js b/src/vs/loader.js index 5c71e7aacf5..cebfe6da858 100644 --- a/src/vs/loader.js +++ b/src/vs/loader.js @@ -656,7 +656,8 @@ var AMDLoader; try { const func = (trustedTypesPolicy ? self.eval(trustedTypesPolicy.createScript('', 'true')) - : new Function('true')); + : new Function('true') // CodeQL [SM01632] the loader is responsible with loading code, fetch + eval is used on the web worker instead of importScripts if possible because importScripts is synchronous and we observed deadlocks on Safari + ); func.call(self); return true; } @@ -705,7 +706,8 @@ var AMDLoader; text = `${text}\n//# sourceURL=${scriptSrc}`; const func = (trustedTypesPolicy ? self.eval(trustedTypesPolicy.createScript('', text)) - : new Function(text)); + : new Function(text) // CodeQL [SM01632] the loader is responsible with loading code, fetch + eval is used on the web worker instead of importScripts if possible because importScripts is synchronous and we observed deadlocks on Safari + ); func.call(self); callback(); }).then(undefined, errorback); diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 54756156433..d59db506ee1 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -14,10 +14,45 @@ declare namespace monaco { export type Thenable = PromiseLike; export interface Environment { + /** + * Define a global `monaco` symbol. + * This is true by default in AMD and false by default in ESM. + */ globalAPI?: boolean; + /** + * The base url where the editor sources are found (which contains the vs folder) + */ baseUrl?: string; + /** + * A web worker factory. + * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked. + */ getWorker?(workerId: string, label: string): Promise | Worker; + /** + * Return the location for web worker scripts. + * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked. + */ getWorkerUrl?(workerId: string, label: string): string; + /** + * Create a trusted types policy (same API as window.trustedTypes.createPolicy) + */ + createTrustedTypesPolicy?( + policyName: string, + policyOptions?: ITrustedTypePolicyOptions, + ): undefined | ITrustedTypePolicy; + } + + export interface ITrustedTypePolicyOptions { + createHTML?: (input: string, ...arguments: any[]) => string; + createScript?: (input: string, ...arguments: any[]) => string; + createScriptURL?: (input: string, ...arguments: any[]) => string; + } + + export interface ITrustedTypePolicy { + readonly name: string; + createHTML?(input: string): any; + createScript?(input: string): any; + createScriptURL?(input: string): any; } export interface IDisposable { @@ -174,13 +209,14 @@ declare namespace monaco { * @param path A file system path (see `Uri#fsPath`) */ static file(path: string): Uri; - static from(components: { - scheme: string; - authority?: string; - path?: string; - query?: string; - fragment?: string; - }): Uri; + /** + * Creates new Uri from uri components. + * + * Unless `strict` is `true` the scheme is defaults to be `file`. This function performs + * validation and should be used for untrusted uri components retrieved from storage, + * user input, command arguments etc + */ + static from(components: UriComponents, strict?: boolean): Uri; /** * Join a Uri path with path fragments and normalizes the resulting path. * @@ -202,6 +238,16 @@ declare namespace monaco { */ toString(skipEncoding?: boolean): string; toJSON(): UriComponents; + /** + * A helper function to revive URIs. + * + * **Note** that this function should only be used when receiving Uri#toJSON generated data + * and that it doesn't do any validation. Use {@link Uri.from} when received "untrusted" + * uri components such as command arguments or data from storage. + * + * @param data The Uri components or Uri to revive. + * @returns The revived Uri or undefined or null. + */ static revive(data: UriComponents | Uri): Uri; static revive(data: UriComponents | Uri | undefined): Uri | undefined; static revive(data: UriComponents | Uri | null): Uri | null; @@ -210,10 +256,10 @@ declare namespace monaco { export interface UriComponents { scheme: string; - authority: string; - path: string; - query: string; - fragment: string; + authority?: string; + path?: string; + query?: string; + fragment?: string; } /** * Virtual Key Codes, the value does not hold any inherent meaning. @@ -303,116 +349,121 @@ declare namespace monaco { F17 = 75, F18 = 76, F19 = 77, - NumLock = 78, - ScrollLock = 79, + F20 = 78, + F21 = 79, + F22 = 80, + F23 = 81, + F24 = 82, + NumLock = 83, + ScrollLock = 84, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ';:' key */ - Semicolon = 80, + Semicolon = 85, /** * For any country/region, the '+' key * For the US standard keyboard, the '=+' key */ - Equal = 81, + Equal = 86, /** * For any country/region, the ',' key * For the US standard keyboard, the ',<' key */ - Comma = 82, + Comma = 87, /** * For any country/region, the '-' key * For the US standard keyboard, the '-_' key */ - Minus = 83, + Minus = 88, /** * For any country/region, the '.' key * For the US standard keyboard, the '.>' key */ - Period = 84, + Period = 89, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '/?' key */ - Slash = 85, + Slash = 90, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '`~' key */ - Backquote = 86, + Backquote = 91, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '[{' key */ - BracketLeft = 87, + BracketLeft = 92, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '\|' key */ - Backslash = 88, + Backslash = 93, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ']}' key */ - BracketRight = 89, + BracketRight = 94, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ''"' key */ - Quote = 90, + Quote = 95, /** * Used for miscellaneous characters; it can vary by keyboard. */ - OEM_8 = 91, + OEM_8 = 96, /** * Either the angle bracket key or the backslash key on the RT 102-key keyboard. */ - IntlBackslash = 92, - Numpad0 = 93, - Numpad1 = 94, - Numpad2 = 95, - Numpad3 = 96, - Numpad4 = 97, - Numpad5 = 98, - Numpad6 = 99, - Numpad7 = 100, - Numpad8 = 101, - Numpad9 = 102, - NumpadMultiply = 103, - NumpadAdd = 104, - NUMPAD_SEPARATOR = 105, - NumpadSubtract = 106, - NumpadDecimal = 107, - NumpadDivide = 108, + IntlBackslash = 97, + Numpad0 = 98, + Numpad1 = 99, + Numpad2 = 100, + Numpad3 = 101, + Numpad4 = 102, + Numpad5 = 103, + Numpad6 = 104, + Numpad7 = 105, + Numpad8 = 106, + Numpad9 = 107, + NumpadMultiply = 108, + NumpadAdd = 109, + NUMPAD_SEPARATOR = 110, + NumpadSubtract = 111, + NumpadDecimal = 112, + NumpadDivide = 113, /** * Cover all key codes when IME is processing input. */ - KEY_IN_COMPOSITION = 109, - ABNT_C1 = 110, - ABNT_C2 = 111, - AudioVolumeMute = 112, - AudioVolumeUp = 113, - AudioVolumeDown = 114, - BrowserSearch = 115, - BrowserHome = 116, - BrowserBack = 117, - BrowserForward = 118, - MediaTrackNext = 119, - MediaTrackPrevious = 120, - MediaStop = 121, - MediaPlayPause = 122, - LaunchMediaPlayer = 123, - LaunchMail = 124, - LaunchApp2 = 125, + KEY_IN_COMPOSITION = 114, + ABNT_C1 = 115, + ABNT_C2 = 116, + AudioVolumeMute = 117, + AudioVolumeUp = 118, + AudioVolumeDown = 119, + BrowserSearch = 120, + BrowserHome = 121, + BrowserBack = 122, + BrowserForward = 123, + MediaTrackNext = 124, + MediaTrackPrevious = 125, + MediaStop = 126, + MediaPlayPause = 127, + LaunchMediaPlayer = 128, + LaunchMail = 129, + LaunchApp2 = 130, /** * VK_CLEAR, 0x0C, CLEAR key */ - Clear = 126, + Clear = 131, /** * Placed last to cover the length of the enum. * Please do not depend on this value! */ - MAX_VALUE = 127 + MAX_VALUE = 132 } export class KeyMod { static readonly CtrlCmd: number; @@ -1097,6 +1148,43 @@ declare namespace monaco.editor { */ export function registerCommand(id: string, handler: (accessor: any, ...args: any[]) => void): IDisposable; + export interface ILinkOpener { + open(resource: Uri): boolean | Promise; + } + + /** + * Registers a handler that is called when a link is opened in any editor. The handler callback should return `true` if the link was handled and `false` otherwise. + * The handler that was registered last will be called first when a link is opened. + * + * Returns a disposable that can unregister the opener again. + */ + export function registerLinkOpener(opener: ILinkOpener): IDisposable; + + /** + * Represents an object that can handle editor open operations (e.g. when "go to definition" is called + * with a resource other than the current model). + */ + export interface ICodeEditorOpener { + /** + * Callback that is invoked when a resource other than the current model should be opened (e.g. when "go to definition" is called). + * The callback should return `true` if the request was handled and `false` otherwise. + * @param source The code editor instance that initiated the request. + * @param resource The Uri of the resource that should be opened. + * @param selectionOrPosition An optional position or selection inside the model corresponding to `resource` that can be used to set the cursor. + */ + openCodeEditor(source: ICodeEditor, resource: Uri, selectionOrPosition?: IRange | IPosition): boolean | Promise; + } + + /** + * Registers a handler that is called when a resource other than the current model should be opened in the editor (e.g. "go to definition"). + * The handler callback should return `true` if the request was handled and `false` otherwise. + * + * Returns a disposable that can unregister the opener again. + * + * If no handler is registered the default behavior is to do nothing for models other than the currently attached one. + */ + export function registerEditorOpener(opener: ICodeEditorOpener): IDisposable; + export type BuiltinTheme = 'vs' | 'vs-dark' | 'hc-black' | 'hc-light'; export interface IStandaloneThemeData { @@ -1492,6 +1580,14 @@ declare namespace monaco.editor { Full = 7 } + /** + * Vertical Lane in the glyph margin of the editor. + */ + export enum GlyphMarginLane { + Left = 1, + Right = 2 + } + /** * Position in the minimap to render the decoration. */ @@ -1513,6 +1609,13 @@ declare namespace monaco.editor { darkColor?: string | ThemeColor; } + export interface IModelDecorationGlyphMarginOptions { + /** + * The position in the glyph margin. + */ + position: GlyphMarginLane; + } + /** * Options for rendering a model decoration in the overview ruler. */ @@ -1524,11 +1627,11 @@ declare namespace monaco.editor { } /** - * Options for rendering a model decoration in the overview ruler. + * Options for rendering a model decoration in the minimap. */ export interface IModelDecorationMinimapOptions extends IDecorationOptions { /** - * The position in the overview ruler. + * The position in the minimap. */ position: MinimapPosition; } @@ -1546,12 +1649,18 @@ declare namespace monaco.editor { * CSS class name describing the decoration. */ className?: string | null; + /** + * Indicates whether the decoration should span across the entire line when it continues onto the next line. + */ + shouldFillLineOnLineBreak?: boolean | null; blockClassName?: string | null; /** * Indicates if this block should be rendered after the last line. * In this case, the range must be empty and set to the last line. */ blockIsAfterEnd?: boolean | null; + blockDoesNotCollapse?: boolean | null; + blockPadding?: [top: number, right: number, bottom: number, left: number] | null; /** * Message to be rendered when hovering over the glyph margin decoration. */ @@ -1586,6 +1695,11 @@ declare namespace monaco.editor { * If set, the decoration will be rendered in the glyph margin with this CSS class name. */ glyphMarginClassName?: string | null; + /** + * If set and the decoration has {@link glyphMarginClassName} set, render this decoration + * with the specified {@link IModelDecorationGlyphMarginOptions} in the glyph margin. + */ + glyphMargin?: IModelDecorationGlyphMarginOptions | null; /** * If set, the decoration will be rendered in the lines decorations with this CSS class name. */ @@ -2081,15 +2195,22 @@ declare namespace monaco.editor { * @param range The range to search in * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). + * @param onlyMinimapDecorations If set, it will return only decorations that render in the minimap. + * @param onlyMarginDecorations If set, it will return only decorations that render in the glyph margin. * @return An array with the decorations */ - getDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: boolean, onlyMinimapDecorations?: boolean): IModelDecoration[]; + getDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: boolean, onlyMinimapDecorations?: boolean, onlyMarginDecorations?: boolean): IModelDecoration[]; /** * Gets all the decorations as an array. * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). */ getAllDecorations(ownerId?: number, filterOutValidation?: boolean): IModelDecoration[]; + /** + * Gets all decorations that render in the glyph margin as an array. + * @param ownerId If set, it will ignore decorations belonging to other owners. + */ + getAllMarginDecorations(ownerId?: number): IModelDecoration[]; /** * Gets all the decorations that should be rendered in the overview ruler as an array. * @param ownerId If set, it will ignore decorations belonging to other owners. @@ -2266,13 +2387,17 @@ declare namespace monaco.editor { */ export interface IDocumentDiffProviderOptions { /** - * When set to true, the diff should ignore whitespace changes.i + * When set to true, the diff should ignore whitespace changes. */ ignoreTrimWhitespace: boolean; /** * A diff computation should throw if it takes longer than this value. */ maxComputationTimeMs: number; + /** + * If set, the diff computation should compute moves in addition to insertions and deletions. + */ + computeMoves: boolean; } /** @@ -2290,36 +2415,30 @@ declare namespace monaco.editor { /** * Maps all modified line ranges in the original to the corresponding line ranges in the modified text model. */ - readonly changes: LineRangeMapping[]; - } - - /** - * Maps a line range in the original text model to a line range in the modified text model. - */ - export class LineRangeMapping { + readonly changes: readonly LineRangeMapping[]; /** - * The line range in the original text model. + * Sorted by original line ranges. + * The original line ranges and the modified line ranges must be disjoint (but can be touching). */ - readonly originalRange: LineRange; - /** - * The line range in the modified text model. - */ - readonly modifiedRange: LineRange; - /** - * If inner changes have not been computed, this is set to undefined. - * Otherwise, it represents the character-level diff in this line range. - * The original range of each range mapping should be contained in the original line range (same for modified). - * Must not be an empty array. - */ - readonly innerChanges: RangeMapping[] | undefined; - constructor(originalRange: LineRange, modifiedRange: LineRange, innerChanges: RangeMapping[] | undefined); - toString(): string; + readonly moves: readonly MovedText[]; } /** * A range of lines (1-based). */ export class LineRange { + static fromRange(range: Range): LineRange; + static subtract(a: LineRange, b: LineRange | undefined): LineRange[]; + /** + * @param lineRanges An array of sorted line ranges. + */ + static joinMany(lineRanges: readonly (readonly LineRange[])[]): readonly LineRange[]; + /** + * @param lineRanges1 Must be sorted. + * @param lineRanges2 Must be sorted. + */ + static join(lineRanges1: readonly LineRange[], lineRanges2: readonly LineRange[]): readonly LineRange[]; + static ofLength(startLineNumber: number, length: number): LineRange; /** * The start line number. */ @@ -2329,6 +2448,10 @@ declare namespace monaco.editor { */ readonly endLineNumberExclusive: number; constructor(startLineNumber: number, endLineNumberExclusive: number); + /** + * Indicates if this line range contains the given line number. + */ + contains(lineNumber: number): boolean; /** * Indicates if this line range is empty. */ @@ -2346,6 +2469,44 @@ declare namespace monaco.editor { */ join(other: LineRange): LineRange; toString(): string; + /** + * The resulting range is empty if the ranges do not intersect, but touch. + * If the ranges don't even touch, the result is undefined. + */ + intersect(other: LineRange): LineRange | undefined; + intersectsStrict(other: LineRange): boolean; + overlapOrTouch(other: LineRange): boolean; + equals(b: LineRange): boolean; + toInclusiveRange(): Range | null; + toExclusiveRange(): Range; + mapToLineArray(f: (lineNumber: number) => T): T[]; + includes(lineNumber: number): boolean; + } + + /** + * Maps a line range in the original text model to a line range in the modified text model. + */ + export class LineRangeMapping { + static inverse(mapping: readonly LineRangeMapping[], originalLineCount: number, modifiedLineCount: number): LineRangeMapping[]; + /** + * The line range in the original text model. + */ + readonly originalRange: LineRange; + /** + * The line range in the modified text model. + */ + readonly modifiedRange: LineRange; + /** + * If inner changes have not been computed, this is set to undefined. + * Otherwise, it represents the character-level diff in this line range. + * The original range of each range mapping should be contained in the original line range (same for modified), exceptions are new-lines. + * Must not be an empty array. + */ + readonly innerChanges: RangeMapping[] | undefined; + constructor(originalRange: LineRange, modifiedRange: LineRange, innerChanges: RangeMapping[] | undefined); + toString(): string; + get changedLineCount(): any; + flip(): LineRangeMapping; } /** @@ -2362,6 +2523,27 @@ declare namespace monaco.editor { readonly modifiedRange: Range; constructor(originalRange: Range, modifiedRange: Range); toString(): string; + flip(): RangeMapping; + } + + export class MovedText { + readonly lineRangeMapping: SimpleLineRangeMapping; + /** + * The diff from the original text to the moved text. + * Must be contained in the original/modified line range. + * Can be empty if the text didn't change (only moved). + */ + readonly changes: readonly LineRangeMapping[]; + constructor(lineRangeMapping: SimpleLineRangeMapping, changes: readonly LineRangeMapping[]); + flip(): MovedText; + } + + export class SimpleLineRangeMapping { + readonly originalRange: LineRange; + readonly modifiedRange: LineRange; + constructor(originalRange: LineRange, modifiedRange: LineRange); + toString(): string; + flip(): SimpleLineRangeMapping; } export interface IDimension { width: number; @@ -2446,6 +2628,11 @@ declare namespace monaco.editor { modified: ITextModel; } + export interface IDiffEditorViewModel { + readonly model: IDiffEditorModel; + waitForDiff(): Promise; + } + /** * An event describing that an editor has had its model reset (i.e. `editor.setModel()`). */ @@ -2477,10 +2664,10 @@ declare namespace monaco.editor { readonly label: string; readonly alias: string; isSupported(): boolean; - run(): Promise; + run(args?: unknown): Promise; } - export type IEditorModel = ITextModel | IDiffEditorModel; + export type IEditorModel = ITextModel | IDiffEditorModel | IDiffEditorViewModel; /** * A (serializable) state of the cursors. @@ -2521,6 +2708,7 @@ declare namespace monaco.editor { export interface IDiffEditorViewState { original: ICodeEditorViewState | null; modified: ICodeEditorViewState | null; + modelState?: unknown; } /** @@ -2772,7 +2960,7 @@ declare namespace monaco.editor { /** * Replace all previous decorations with `newDecorations`. */ - set(newDecorations: IModelDeltaDecoration[]): void; + set(newDecorations: readonly IModelDeltaDecoration[]): string[]; /** * Remove all previous decorations. */ @@ -2874,6 +3062,10 @@ declare namespace monaco.editor { * The model has been reset to a new value. */ readonly isFlush: boolean; + /** + * Flag that indicates that this event describes an eol change. + */ + readonly isEolChange: boolean; } /** @@ -2882,6 +3074,7 @@ declare namespace monaco.editor { export interface IModelDecorationsChangedEvent { readonly affectsMinimap: boolean; readonly affectsOverviewRuler: boolean; + readonly affectsGlyphMargin: boolean; } export interface IModelOptionsChangedEvent { @@ -3028,6 +3221,10 @@ declare namespace monaco.editor { * The aria label for the editor's textarea (when it is focused). */ ariaLabel?: string; + /** + * Control whether a screen reader announces inline suggestion content immediately. + */ + screenReaderAnnounceInlineSuggestion?: boolean; /** * The `tabindex` property of the editor's textarea */ @@ -3118,6 +3315,10 @@ declare namespace monaco.editor { * Defaults to false. */ readOnly?: boolean; + /** + * The message to display when the editor is readonly. + */ + readOnlyMessage?: IMarkdownString; /** * Should the textarea used for input use the DOM `readonly` attribute. * Defaults to false. @@ -3207,6 +3408,10 @@ declare namespace monaco.editor { * Defaults to false. */ fontVariations?: boolean | string; + /** + * Controls whether to use default color decorations or not using the default document color provider + */ + defaultColorDecorators?: boolean; /** * Disable the use of `transform: translate3d(0px, 0px, 0px)` for the editor margin and lines layers. * The usage of `transform: translate3d(0px, 0px, 0px)` acts as a hint for browsers to create an extra layer. @@ -3312,6 +3517,10 @@ declare namespace monaco.editor { * Enable inline color decorators and color picker rendering. */ colorDecorators?: boolean; + /** + * Controls what is the condition to spawn a color picker from a color dectorator + */ + colorDecoratorsActivatedOn?: 'clickAndHover' | 'click' | 'hover'; /** * Controls the max number of color decorators that can be rendered in an editor at once. */ @@ -3666,6 +3875,10 @@ declare namespace monaco.editor { * When enabled, this shows a preview of the drop location and triggers an `onDropIntoEditor` event. */ dropIntoEditor?: IDropIntoEditorOptions; + /** + * Controls support for changing how content is pasted into the editor. + */ + pasteAs?: IPasteAsOptions; /** * Controls whether the editor receives tabs or defers them to the workbench for navigation. */ @@ -3678,6 +3891,12 @@ declare namespace monaco.editor { * Defaults to true. */ enableSplitViewResizing?: boolean; + /** + * The default ratio when rendering side-by-side editors. + * Must be a number between 0 and 1, min sizes apply. + * Defaults to 0.5 + */ + splitViewDefaultRatio?: number; /** * Render the differences in two side-by-side editors. * Defaults to true. @@ -3730,7 +3949,27 @@ declare namespace monaco.editor { /** * Diff Algorithm */ - diffAlgorithm?: 'smart' | 'experimental' | IDocumentDiffProvider; + diffAlgorithm?: 'legacy' | 'advanced' | IDocumentDiffProvider; + /** + * Whether the diff editor aria label should be verbose. + */ + accessibilityVerbose?: boolean; + experimental?: { + /** + * Defaults to false. + */ + collapseUnchangedRegions?: boolean; + /** + * Defaults to false. + */ + showMoves?: boolean; + showEmptyDecorations?: boolean; + }; + /** + * Is the diff editor inside another editor + * Defaults to false + */ + isInEmbeddedEditor?: boolean; } /** @@ -3961,6 +4200,10 @@ declare namespace monaco.editor { * The width of the glyph margin. */ readonly glyphMarginWidth: number; + /** + * The number of decoration lanes to render in the glyph margin. + */ + readonly glyphMarginDecorationLaneCount: number; /** * Left position for the line numbers. */ @@ -4047,6 +4290,10 @@ declare namespace monaco.editor { * Maximum number of sticky lines to show */ maxLineCount?: number; + /** + * Model to choose for sticky scroll by default + */ + defaultModel?: 'outlineModel' | 'foldingProviderModel' | 'indentationModel'; } /** @@ -4330,6 +4577,11 @@ declare namespace monaco.editor { */ mode?: 'prefix' | 'subword' | 'subwordSmart'; showToolbar?: 'always' | 'onHover'; + suppressSuggestions?: boolean; + /** + * Does not clear active inline suggestions when the editor loses focus. + */ + keepOnBlur?: boolean; } export interface IBracketPairColorizationOptions { @@ -4539,6 +4791,7 @@ declare namespace monaco.editor { export interface ISmartSelectOptions { selectLeadingAndTrailingWhitespace?: boolean; + selectSubwords?: boolean; } /** @@ -4575,10 +4828,31 @@ declare namespace monaco.editor { */ export interface IDropIntoEditorOptions { /** - * Enable the dropping into editor. + * Enable dropping into editor. * Defaults to true. */ enabled?: boolean; + /** + * Controls if a widget is shown after a drop. + * Defaults to 'afterDrop'. + */ + showDropSelector?: 'afterDrop' | 'never'; + } + + /** + * Configuration options for editor pasting as into behavior + */ + export interface IPasteAsOptions { + /** + * Enable paste as functionality in editors. + * Defaults to true. + */ + enabled?: boolean; + /** + * Controls if a widget is shown after a drop. + * Defaults to 'afterPaste'. + */ + showPasteSelector?: 'afterPaste' | 'never'; } export enum EditorOption { @@ -4588,140 +4862,145 @@ declare namespace monaco.editor { accessibilityPageSize = 3, ariaLabel = 4, autoClosingBrackets = 5, - autoClosingDelete = 6, - autoClosingOvertype = 7, - autoClosingQuotes = 8, - autoIndent = 9, - automaticLayout = 10, - autoSurround = 11, - bracketPairColorization = 12, - guides = 13, - codeLens = 14, - codeLensFontFamily = 15, - codeLensFontSize = 16, - colorDecorators = 17, - colorDecoratorsLimit = 18, - columnSelection = 19, - comments = 20, - contextmenu = 21, - copyWithSyntaxHighlighting = 22, - cursorBlinking = 23, - cursorSmoothCaretAnimation = 24, - cursorStyle = 25, - cursorSurroundingLines = 26, - cursorSurroundingLinesStyle = 27, - cursorWidth = 28, - disableLayerHinting = 29, - disableMonospaceOptimizations = 30, - domReadOnly = 31, - dragAndDrop = 32, - dropIntoEditor = 33, - emptySelectionClipboard = 34, - experimentalWhitespaceRendering = 35, - extraEditorClassName = 36, - fastScrollSensitivity = 37, - find = 38, - fixedOverflowWidgets = 39, - folding = 40, - foldingStrategy = 41, - foldingHighlight = 42, - foldingImportsByDefault = 43, - foldingMaximumRegions = 44, - unfoldOnClickAfterEndOfLine = 45, - fontFamily = 46, - fontInfo = 47, - fontLigatures = 48, - fontSize = 49, - fontWeight = 50, - fontVariations = 51, - formatOnPaste = 52, - formatOnType = 53, - glyphMargin = 54, - gotoLocation = 55, - hideCursorInOverviewRuler = 56, - hover = 57, - inDiffEditor = 58, - inlineSuggest = 59, - letterSpacing = 60, - lightbulb = 61, - lineDecorationsWidth = 62, - lineHeight = 63, - lineNumbers = 64, - lineNumbersMinChars = 65, - linkedEditing = 66, - links = 67, - matchBrackets = 68, - minimap = 69, - mouseStyle = 70, - mouseWheelScrollSensitivity = 71, - mouseWheelZoom = 72, - multiCursorMergeOverlapping = 73, - multiCursorModifier = 74, - multiCursorPaste = 75, - multiCursorLimit = 76, - occurrencesHighlight = 77, - overviewRulerBorder = 78, - overviewRulerLanes = 79, - padding = 80, - parameterHints = 81, - peekWidgetDefaultFocus = 82, - definitionLinkOpensInPeek = 83, - quickSuggestions = 84, - quickSuggestionsDelay = 85, - readOnly = 86, - renameOnType = 87, - renderControlCharacters = 88, - renderFinalNewline = 89, - renderLineHighlight = 90, - renderLineHighlightOnlyWhenFocus = 91, - renderValidationDecorations = 92, - renderWhitespace = 93, - revealHorizontalRightPadding = 94, - roundedSelection = 95, - rulers = 96, - scrollbar = 97, - scrollBeyondLastColumn = 98, - scrollBeyondLastLine = 99, - scrollPredominantAxis = 100, - selectionClipboard = 101, - selectionHighlight = 102, - selectOnLineNumbers = 103, - showFoldingControls = 104, - showUnused = 105, - snippetSuggestions = 106, - smartSelect = 107, - smoothScrolling = 108, - stickyScroll = 109, - stickyTabStops = 110, - stopRenderingLineAfter = 111, - suggest = 112, - suggestFontSize = 113, - suggestLineHeight = 114, - suggestOnTriggerCharacters = 115, - suggestSelection = 116, - tabCompletion = 117, - tabIndex = 118, - unicodeHighlighting = 119, - unusualLineTerminators = 120, - useShadowDOM = 121, - useTabStops = 122, - wordBreak = 123, - wordSeparators = 124, - wordWrap = 125, - wordWrapBreakAfterCharacters = 126, - wordWrapBreakBeforeCharacters = 127, - wordWrapColumn = 128, - wordWrapOverride1 = 129, - wordWrapOverride2 = 130, - wrappingIndent = 131, - wrappingStrategy = 132, - showDeprecated = 133, - inlayHints = 134, - editorClassName = 135, - pixelRatio = 136, - tabFocusMode = 137, - layoutInfo = 138, - wrappingInfo = 139 + screenReaderAnnounceInlineSuggestion = 6, + autoClosingDelete = 7, + autoClosingOvertype = 8, + autoClosingQuotes = 9, + autoIndent = 10, + automaticLayout = 11, + autoSurround = 12, + bracketPairColorization = 13, + guides = 14, + codeLens = 15, + codeLensFontFamily = 16, + codeLensFontSize = 17, + colorDecorators = 18, + colorDecoratorsLimit = 19, + columnSelection = 20, + comments = 21, + contextmenu = 22, + copyWithSyntaxHighlighting = 23, + cursorBlinking = 24, + cursorSmoothCaretAnimation = 25, + cursorStyle = 26, + cursorSurroundingLines = 27, + cursorSurroundingLinesStyle = 28, + cursorWidth = 29, + disableLayerHinting = 30, + disableMonospaceOptimizations = 31, + domReadOnly = 32, + dragAndDrop = 33, + dropIntoEditor = 34, + emptySelectionClipboard = 35, + experimentalWhitespaceRendering = 36, + extraEditorClassName = 37, + fastScrollSensitivity = 38, + find = 39, + fixedOverflowWidgets = 40, + folding = 41, + foldingStrategy = 42, + foldingHighlight = 43, + foldingImportsByDefault = 44, + foldingMaximumRegions = 45, + unfoldOnClickAfterEndOfLine = 46, + fontFamily = 47, + fontInfo = 48, + fontLigatures = 49, + fontSize = 50, + fontWeight = 51, + fontVariations = 52, + formatOnPaste = 53, + formatOnType = 54, + glyphMargin = 55, + gotoLocation = 56, + hideCursorInOverviewRuler = 57, + hover = 58, + inDiffEditor = 59, + inlineSuggest = 60, + letterSpacing = 61, + lightbulb = 62, + lineDecorationsWidth = 63, + lineHeight = 64, + lineNumbers = 65, + lineNumbersMinChars = 66, + linkedEditing = 67, + links = 68, + matchBrackets = 69, + minimap = 70, + mouseStyle = 71, + mouseWheelScrollSensitivity = 72, + mouseWheelZoom = 73, + multiCursorMergeOverlapping = 74, + multiCursorModifier = 75, + multiCursorPaste = 76, + multiCursorLimit = 77, + occurrencesHighlight = 78, + overviewRulerBorder = 79, + overviewRulerLanes = 80, + padding = 81, + pasteAs = 82, + parameterHints = 83, + peekWidgetDefaultFocus = 84, + definitionLinkOpensInPeek = 85, + quickSuggestions = 86, + quickSuggestionsDelay = 87, + readOnly = 88, + readOnlyMessage = 89, + renameOnType = 90, + renderControlCharacters = 91, + renderFinalNewline = 92, + renderLineHighlight = 93, + renderLineHighlightOnlyWhenFocus = 94, + renderValidationDecorations = 95, + renderWhitespace = 96, + revealHorizontalRightPadding = 97, + roundedSelection = 98, + rulers = 99, + scrollbar = 100, + scrollBeyondLastColumn = 101, + scrollBeyondLastLine = 102, + scrollPredominantAxis = 103, + selectionClipboard = 104, + selectionHighlight = 105, + selectOnLineNumbers = 106, + showFoldingControls = 107, + showUnused = 108, + snippetSuggestions = 109, + smartSelect = 110, + smoothScrolling = 111, + stickyScroll = 112, + stickyTabStops = 113, + stopRenderingLineAfter = 114, + suggest = 115, + suggestFontSize = 116, + suggestLineHeight = 117, + suggestOnTriggerCharacters = 118, + suggestSelection = 119, + tabCompletion = 120, + tabIndex = 121, + unicodeHighlighting = 122, + unusualLineTerminators = 123, + useShadowDOM = 124, + useTabStops = 125, + wordBreak = 126, + wordSeparators = 127, + wordWrap = 128, + wordWrapBreakAfterCharacters = 129, + wordWrapBreakBeforeCharacters = 130, + wordWrapColumn = 131, + wordWrapOverride1 = 132, + wordWrapOverride2 = 133, + wrappingIndent = 134, + wrappingStrategy = 135, + showDeprecated = 136, + inlayHints = 137, + editorClassName = 138, + pixelRatio = 139, + tabFocusMode = 140, + layoutInfo = 141, + wrappingInfo = 142, + defaultColorDecorators = 143, + colorDecoratorsActivatedOn = 144 } export const EditorOptions: { @@ -4730,6 +5009,7 @@ declare namespace monaco.editor { accessibilitySupport: IEditorOption; accessibilityPageSize: IEditorOption; ariaLabel: IEditorOption; + screenReaderAnnounceInlineSuggestion: IEditorOption; autoClosingBrackets: IEditorOption; autoClosingDelete: IEditorOption; autoClosingOvertype: IEditorOption; @@ -4744,6 +5024,7 @@ declare namespace monaco.editor { codeLensFontFamily: IEditorOption; codeLensFontSize: IEditorOption; colorDecorators: IEditorOption; + colorDecoratorActivatedOn: IEditorOption; colorDecoratorsLimit: IEditorOption; columnSelection: IEditorOption; comments: IEditorOption>>; @@ -4807,12 +5088,14 @@ declare namespace monaco.editor { overviewRulerBorder: IEditorOption; overviewRulerLanes: IEditorOption; padding: IEditorOption>>; + pasteAs: IEditorOption>>; parameterHints: IEditorOption>>; peekWidgetDefaultFocus: IEditorOption; definitionLinkOpensInPeek: IEditorOption; quickSuggestions: IEditorOption; quickSuggestionsDelay: IEditorOption; readOnly: IEditorOption; + readOnlyMessage: IEditorOption; renameOnType: IEditorOption; renderControlCharacters: IEditorOption; renderFinalNewline: IEditorOption; @@ -4859,6 +5142,7 @@ declare namespace monaco.editor { wordWrapOverride1: IEditorOption; wordWrapOverride2: IEditorOption; editorClassName: IEditorOption; + defaultColorDecorators: IEditorOption; pixelRatio: IEditorOption; tabFocusMode: IEditorOption; layoutInfo: IEditorOption; @@ -4909,6 +5193,15 @@ declare namespace monaco.editor { * If the `afterColumn` has multiple view columns, the affinity specifies which one to use. Defaults to `none`. */ afterColumnAffinity?: PositionAffinity; + /** + * Render the zone even when its line is hidden. + */ + showInHiddenAreas?: boolean; + /** + * Tiebreaker that is used when multiple view zones want to be after the same line. + * Defaults to `afterColumn` otherwise 10000; + */ + ordinal?: number; /** * Suppress mouse down events. * If set, the editor will attach a mouse down listener to the view zone and .preventDefault on it. @@ -5110,6 +5403,43 @@ declare namespace monaco.editor { getPosition(): IOverlayWidgetPosition | null; } + /** + * A glyph margin widget renders in the editor glyph margin. + */ + export interface IGlyphMarginWidget { + /** + * Get a unique identifier of the glyph widget. + */ + getId(): string; + /** + * Get the dom node of the glyph widget. + */ + getDomNode(): HTMLElement; + /** + * Get the placement of the glyph widget. + */ + getPosition(): IGlyphMarginWidgetPosition; + } + + /** + * A position for rendering glyph margin widgets. + */ + export interface IGlyphMarginWidgetPosition { + /** + * The glyph margin lane where the widget should be shown. + */ + lane: GlyphMarginLane; + /** + * The priority order of the widget, used for determining which widget + * to render when there are multiple. + */ + zIndex: number; + /** + * The editor range that this widget applies to. + */ + range: IRange; + } + /** * Type of hit element with the mouse in the editor. */ @@ -5310,11 +5640,7 @@ declare namespace monaco.editor { readonly languageId: string | null; } - export interface IDiffEditorConstructionOptions extends IDiffEditorOptions { - /** - * The initial editor dimension (to avoid measuring the container). - */ - dimension?: IDimension; + export interface IDiffEditorConstructionOptions extends IDiffEditorOptions, IEditorConstructionOptions { /** * Place overflow widgets inside an external DOM node. * Defaults to an internal DOM node. @@ -5328,11 +5654,6 @@ declare namespace monaco.editor { * Aria label for modified editor. */ modifiedAriaLabel?: string; - /** - * Is the diff editor inside another editor - * Defaults to false - */ - isInEmbeddedEditor?: boolean; } /** @@ -5571,6 +5892,10 @@ declare namespace monaco.editor { * Change the scroll position of the editor's viewport. */ setScrollPosition(position: INewScrollPosition, scrollType?: ScrollType): void; + /** + * Check if the editor is currently scrolling towards a different scroll position. + */ + hasPendingScrollAnimation(): boolean; /** * Get an action that is a contribution to this editor. * @id Unique identifier of the contribution. @@ -5683,6 +6008,19 @@ declare namespace monaco.editor { * Remove an overlay widget. */ removeOverlayWidget(widget: IOverlayWidget): void; + /** + * Add a glyph margin widget. Widgets must have unique ids, otherwise they will be overwritten. + */ + addGlyphMarginWidget(widget: IGlyphMarginWidget): void; + /** + * Layout/Reposition a glyph margin widget. This is a ping to the editor to call widget.getPosition() + * and update appropriately. + */ + layoutGlyphMarginWidget(widget: IGlyphMarginWidget): void; + /** + * Remove a glyph margin widget. + */ + removeGlyphMarginWidget(widget: IGlyphMarginWidget): void; /** * Change the view zones. View zones are lost when a new model is attached to the editor. */ @@ -5723,13 +6061,6 @@ declare namespace monaco.editor { setBanner(bannerDomNode: HTMLElement | null, height: number): void; } - /** - * Information about a line in the diff editor - */ - export interface IDiffLineInformation { - readonly equivalentLineNumber: number; - } - /** * A rich diff editor. */ @@ -5760,6 +6091,7 @@ declare namespace monaco.editor { * Type the getModel() of IEditor. */ getModel(): IDiffEditorModel | null; + createViewModel(model: IDiffEditorModel): IDiffEditorViewModel; /** * Sets the current model attached to this editor. * If the previous model was created by the editor via the value key in the options @@ -5768,7 +6100,7 @@ declare namespace monaco.editor { * will not be destroyed. * It is safe to call setModel(null) to simply detach the current model from the editor. */ - setModel(model: IDiffEditorModel | null): void; + setModel(model: IDiffEditorModel | IDiffEditorViewModel | null): void; /** * Get the `original` editor. */ @@ -5781,20 +6113,12 @@ declare namespace monaco.editor { * Get the computed diff information. */ getLineChanges(): ILineChange[] | null; - /** - * Get information based on computed diff about a line number from the original model. - * If the diff computation is not finished or the model is missing, will return null. - */ - getDiffLineInformationForOriginal(lineNumber: number): IDiffLineInformation | null; - /** - * Get information based on computed diff about a line number from the modified model. - * If the diff computation is not finished or the model is missing, will return null. - */ - getDiffLineInformationForModified(lineNumber: number): IDiffLineInformation | null; /** * Update the editor's options after the editor has been created. */ updateOptions(newOptions: IDiffEditorOptions): void; + diffReviewNext(): void; + diffReviewPrev(): void; } export class FontInfo extends BareFontInfo { @@ -5823,6 +6147,14 @@ declare namespace monaco.editor { readonly letterSpacing: number; } + export const EditorZoom: IEditorZoom; + + export interface IEditorZoom { + onDidChangeZoomLevel: IEvent; + getZoomLevel(): number; + setZoomLevel(zoomLevel: number): void; + } + //compatibility: export type IReadOnlyModel = ITextModel; export type IModel = ITextModel; @@ -5857,6 +6189,10 @@ declare namespace monaco.languages { */ readonly hasAccessToAllModels?: boolean; readonly exclusive?: boolean; + /** + * This provider comes from a builtin extension. + */ + readonly isBuiltin?: boolean; } /** @@ -6696,11 +7032,13 @@ declare namespace monaco.languages { readonly selectedSuggestionInfo: SelectedSuggestionInfo | undefined; } - export interface SelectedSuggestionInfo { - range: IRange; - text: string; - isSnippetText: boolean; - completionKind: CompletionItemKind; + export class SelectedSuggestionInfo { + readonly range: IRange; + readonly text: string; + readonly completionKind: CompletionItemKind; + readonly isSnippetText: boolean; + constructor(range: IRange, text: string, completionKind: CompletionItemKind, isSnippetText: boolean); + equals(other: SelectedSuggestionInfo): boolean; } export interface InlineCompletion { @@ -6745,14 +7083,22 @@ declare namespace monaco.languages { * A list of commands associated with the inline completions of this list. */ readonly commands?: Command[]; + readonly suppressSuggestions?: boolean | undefined; + /** + * When set and the user types a suggestion without derivating from it, the inline suggestion is not updated. + */ + readonly enableForwardStability?: boolean | undefined; } + export type InlineCompletionProviderGroupId = string; + export interface InlineCompletionsProvider { provideInlineCompletions(model: editor.ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): ProviderResult; /** * Will be called when an item is shown. + * @param updatedInsertText Is useful to understand bracket completion. */ - handleItemDidShow?(completions: T, item: T['items'][number]): void; + handleItemDidShow?(completions: T, item: T['items'][number], updatedInsertText: string): void; /** * Will be called when an item is partially accepted. */ @@ -6761,6 +7107,17 @@ declare namespace monaco.languages { * Will be called when a completions list is no longer in use and can be garbage-collected. */ freeInlineCompletions(completions: T): void; + /** + * Only used for {@link yieldsToGroupIds}. + * Multiple providers can have the same group id. + */ + groupId?: InlineCompletionProviderGroupId; + /** + * Returns a list of preferred provider {@link groupId}s. + * The current provider is only requested for completions if no provider with a preferred group id returned a result. + */ + yieldsToGroupIds?: InlineCompletionProviderGroupId[]; + toString?(): string; } export interface CodeAction { @@ -7132,6 +7489,10 @@ declare namespace monaco.languages { * Prefer spaces over tabs. */ insertSpaces: boolean; + /** + * The list of multiple ranges to format at once, if the provider supports it. + */ + ranges?: Range[]; } /** @@ -7160,6 +7521,7 @@ declare namespace monaco.languages { * of the range to full syntax nodes. */ provideDocumentRangeFormattingEdits(model: editor.ITextModel, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult; + provideDocumentRangesFormattingEdits?(model: editor.ITextModel, ranges: Range[], options: FormattingOptions, token: CancellationToken): ProviderResult; } /** @@ -7362,7 +7724,6 @@ declare namespace monaco.languages { folder?: boolean; skipTrashBin?: boolean; maxSize?: number; - contentsBase64?: string; } export interface IWorkspaceFileEdit { diff --git a/src/vs/nls.ts b/src/vs/nls.ts index 7ec0e246f8f..db57b98d67b 100644 --- a/src/vs/nls.ts +++ b/src/vs/nls.ts @@ -123,6 +123,9 @@ export function localize(info: ILocalizeInfo, message: string, ...args: (string */ export function localize(key: string, message: string, ...args: (string | number | boolean | undefined | null)[]): string; +/** + * @skipMangle + */ export function localize(data: ILocalizeInfo | string, message: string, ...args: (string | number | boolean | undefined | null)[]): string { return _format(message, args); } @@ -133,18 +136,25 @@ export function localize(data: ILocalizeInfo | string, message: string, ...args: * in order to ensure the loader plugin has been initialized before this function is called. */ export function getConfiguredDefaultLocale(stringFromLocalizeCall: string): string | undefined; +/** + * @skipMangle + */ export function getConfiguredDefaultLocale(_: string): string | undefined { // This returns undefined because this implementation isn't used and is overwritten by the loader // when loaded. return undefined; } +/** + * @skipMangle + */ export function setPseudoTranslation(value: boolean) { isPseudo = value; } /** * Invoked in a built product at run-time + * @skipMangle */ export function create(key: string, data: IBundledStrings & IConsumerAPI): IConsumerAPI { return { @@ -155,10 +165,12 @@ export function create(key: string, data: IBundledStrings & IConsumerAPI): ICons /** * Invoked by the loader at run-time + * @skipMangle */ export function load(name: string, req: AMDLoader.IRelativeRequire, load: AMDLoader.IPluginLoadCallback, config: AMDLoader.IConfigurationOptions): void { const pluginConfig: INLSPluginConfig = config['vs/nls'] ?? {}; if (!name || name.length === 0) { + // TODO: We need to give back the mangled names here return load({ localize: localize, getConfiguredDefaultLocale: () => pluginConfig.availableLanguages?.['*'] diff --git a/src/vs/platform/accessibility/common/accessibility.ts b/src/vs/platform/accessibility/common/accessibility.ts index e156660fece..f7325c2caa9 100644 --- a/src/vs/platform/accessibility/common/accessibility.ts +++ b/src/vs/platform/accessibility/common/accessibility.ts @@ -40,3 +40,9 @@ export interface IAccessibilityInformation { label: string; role?: string; } + +export function isAccessibilityInformation(obj: any): obj is IAccessibilityInformation { + return obj && typeof obj === 'object' + && typeof obj.label === 'string' + && (typeof obj.role === 'undefined' || typeof obj.role === 'string'); +} diff --git a/src/vs/platform/actionWidget/browser/actionList.ts b/src/vs/platform/actionWidget/browser/actionList.ts index 8a6277fa459..ebf6a8319f4 100644 --- a/src/vs/platform/actionWidget/browser/actionList.ts +++ b/src/vs/platform/actionWidget/browser/actionList.ts @@ -3,18 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as dom from 'vs/base/browser/dom'; -import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; import { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; import { IListEvent, IListMouseEvent, IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; import { List } from 'vs/base/browser/ui/list/listWidget'; import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; import { ResolvedKeybinding } from 'vs/base/common/keybindings'; import { Disposable } from 'vs/base/common/lifecycle'; import { OS } from 'vs/base/common/platform'; +import { ThemeIcon } from 'vs/base/common/themables'; import 'vs/css!./actionWidget'; import { localize } from 'vs/nls'; -import { IActionItem } from 'vs/platform/actionWidget/common/actionWidget'; import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { defaultListStyles } from 'vs/platform/theme/browser/defaultStyles'; @@ -23,18 +21,17 @@ import { asCssVariable } from 'vs/platform/theme/common/colorRegistry'; export const acceptSelectedActionCommand = 'acceptSelectedCodeAction'; export const previewSelectedActionCommand = 'previewSelectedCodeAction'; -export interface IRenderDelegate { +export interface IActionListDelegate { onHide(didCancel?: boolean): void; - onSelect(action: IActionItem, preview?: boolean): Promise; + onSelect(action: T, preview?: boolean): void; } -export interface IListMenuItem { +export interface IActionListItem { readonly item?: T; readonly kind: ActionListItemKind; readonly group?: { kind?: any; icon?: ThemeIcon; title: string }; readonly disabled?: boolean; readonly label?: string; - readonly description?: string; readonly keybinding?: ResolvedKeybinding; } @@ -56,7 +53,7 @@ interface IHeaderTemplateData { readonly text: HTMLElement; } -class HeaderRenderer> implements IListRenderer { +class HeaderRenderer implements IListRenderer, IHeaderTemplateData> { get templateId(): string { return ActionListItemKind.Header; } @@ -69,7 +66,7 @@ class HeaderRenderer> implements IListRende return { container, text }; } - renderElement(element: IListMenuItem, _index: number, templateData: IHeaderTemplateData): void { + renderElement(element: IActionListItem, _index: number, templateData: IHeaderTemplateData): void { templateData.text.textContent = element.group?.title ?? ''; } @@ -78,7 +75,7 @@ class HeaderRenderer> implements IListRende } } -class ActionItemRenderer> implements IListRenderer { +class ActionItemRenderer implements IListRenderer, IActionMenuTemplateData> { get templateId(): string { return ActionListItemKind.Action; } @@ -103,7 +100,7 @@ class ActionItemRenderer> implements IListR return { container, icon, text, keybinding }; } - renderElement(element: T, _index: number, data: IActionMenuTemplateData): void { + renderElement(element: IActionListItem, _index: number, data: IActionMenuTemplateData): void { if (element.group?.icon) { data.icon.className = ThemeIcon.asClassName(element.group.icon); if (element.group.icon.color) { @@ -120,12 +117,8 @@ class ActionItemRenderer> implements IListR data.text.textContent = stripNewlines(element.label); - if (!element.keybinding) { - dom.hide(data.keybinding.element); - } else { - data.keybinding.set(element.keybinding); - dom.show(data.keybinding.element); - } + data.keybinding.set(element.keybinding); + dom.setVisibility(!!element.keybinding, data.keybinding.element); const actionTitle = this._keybindingService.lookupKeybinding(acceptSelectedActionCommand)?.getLabel(); const previewTitle = this._keybindingService.lookupKeybinding(previewSelectedActionCommand)?.getLabel(); @@ -141,12 +134,6 @@ class ActionItemRenderer> implements IListR } else { data.container.title = ''; } - - if (element.description) { - const label = new HighlightedLabel(dom.append(data.container, dom.$('span.label-description'))); - label.element.classList.add('action-list-description'); - label.set(element.description); - } } disposeTemplate(_templateData: IActionMenuTemplateData): void { @@ -162,22 +149,22 @@ class PreviewSelectedEvent extends UIEvent { constructor() { super('previewSelectedAction'); } } -export class ActionList extends Disposable { +export class ActionList extends Disposable { public readonly domNode: HTMLElement; - private readonly _list: List>; + private readonly _list: List>; private readonly _actionLineHeight = 24; private readonly _headerLineHeight = 26; - private readonly _allMenuItems: readonly IListMenuItem[]; + private readonly _allMenuItems: readonly IActionListItem[]; constructor( user: string, preview: boolean, - items: readonly IListMenuItem[], - private readonly _delegate: IRenderDelegate, + items: readonly IActionListItem[], + private readonly _delegate: IActionListDelegate, @IContextViewService private readonly _contextViewService: IContextViewService, @IKeybindingService private readonly _keybindingService: IKeybindingService ) { @@ -185,13 +172,13 @@ export class ActionList extends Disposable { this.domNode = document.createElement('div'); this.domNode.classList.add('actionList'); - const virtualDelegate: IListVirtualDelegate> = { + const virtualDelegate: IListVirtualDelegate> = { getHeight: element => element.kind === ActionListItemKind.Header ? this._headerLineHeight : this._actionLineHeight, getTemplateId: element => element.kind }; this._list = this._register(new List(user, this.domNode, virtualDelegate, [ - new ActionItemRenderer>(preview, this._keybindingService), + new ActionItemRenderer>(preview, this._keybindingService), new HeaderRenderer(), ], { keyboardSupport: false, @@ -226,7 +213,7 @@ export class ActionList extends Disposable { } } - private focusCondition(element: IListMenuItem): boolean { + private focusCondition(element: IActionListItem): boolean { return !element.disabled && element.kind === ActionListItemKind.Action; } @@ -291,7 +278,7 @@ export class ActionList extends Disposable { this._list.setSelection([focusIndex], event); } - private onListSelection(e: IListEvent>): void { + private onListSelection(e: IListEvent>): void { if (!e.elements.length) { return; } @@ -304,11 +291,11 @@ export class ActionList extends Disposable { } } - private onListHover(e: IListMouseEvent>): void { + private onListHover(e: IListMouseEvent>): void { this._list.setFocus(typeof e.index === 'number' ? [e.index] : []); } - private onListClick(e: IListMouseEvent>): void { + private onListClick(e: IListMouseEvent>): void { if (e.element && this.focusCondition(e.element)) { this._list.setFocus([]); } diff --git a/src/vs/platform/actionWidget/browser/actionWidget.css b/src/vs/platform/actionWidget/browser/actionWidget.css index 38c68b78f21..c2ed9072d58 100644 --- a/src/vs/platform/actionWidget/browser/actionWidget.css +++ b/src/vs/platform/actionWidget/browser/actionWidget.css @@ -3,13 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -.action-list-description { - opacity: .7; - margin-left: 0.5em; - font-size: .9em; - white-space: pre; -} - .action-widget { font-size: 13px; border-radius: 0; diff --git a/src/vs/platform/actionWidget/browser/actionWidget.ts b/src/vs/platform/actionWidget/browser/actionWidget.ts index 570588b6097..87f6884c183 100644 --- a/src/vs/platform/actionWidget/browser/actionWidget.ts +++ b/src/vs/platform/actionWidget/browser/actionWidget.ts @@ -10,8 +10,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable, DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; import 'vs/css!./actionWidget'; import { localize } from 'vs/nls'; -import { acceptSelectedActionCommand, ActionList, IListMenuItem, previewSelectedActionCommand } from 'vs/platform/actionWidget/browser/actionList'; -import { IActionItem } from 'vs/platform/actionWidget/common/actionWidget'; +import { acceptSelectedActionCommand, ActionList, IActionListDelegate, IActionListItem, previewSelectedActionCommand } from 'vs/platform/actionWidget/browser/actionList'; import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; @@ -24,17 +23,12 @@ const ActionWidgetContextKeys = { Visible: new RawContextKey('codeActionMenuVisible', false, localize('codeActionMenuVisible', "Whether the action widget list is visible")) }; -export interface IRenderDelegate { - onHide(didCancel?: boolean): void; - onSelect(action: IActionItem, preview?: boolean): Promise; -} - export const IActionWidgetService = createDecorator('actionWidgetService'); export interface IActionWidgetService { readonly _serviceBrand: undefined; - show(user: string, supportsPreview: boolean, items: readonly IListMenuItem[], delegate: IRenderDelegate, anchor: IAnchor, container: HTMLElement | undefined, actionBarActions?: readonly IAction[]): void; + show(user: string, supportsPreview: boolean, items: readonly IActionListItem[], delegate: IActionListDelegate, anchor: IAnchor, container: HTMLElement | undefined, actionBarActions?: readonly IAction[]): void; hide(): void; @@ -48,7 +42,7 @@ class ActionWidgetService extends Disposable implements IActionWidgetService { return ActionWidgetContextKeys.Visible.getValue(this._contextKeyService) || false; } - private readonly _list = this._register(new MutableDisposable>()); + private readonly _list = this._register(new MutableDisposable>()); constructor( @IContextViewService private readonly _contextViewService: IContextViewService, @@ -58,7 +52,7 @@ class ActionWidgetService extends Disposable implements IActionWidgetService { super(); } - show(user: string, supportsPreview: boolean, items: readonly IListMenuItem[], delegate: IRenderDelegate, anchor: IAnchor, container: HTMLElement | undefined, actionBarActions?: readonly IAction[]): void { + show(user: string, supportsPreview: boolean, items: readonly IActionListItem[], delegate: IActionListDelegate, anchor: IAnchor, container: HTMLElement | undefined, actionBarActions?: readonly IAction[]): void { const visibleContext = ActionWidgetContextKeys.Visible.bindTo(this._contextKeyService); const list = this._instantiationService.createInstance(ActionList, user, supportsPreview, items, delegate); @@ -96,7 +90,7 @@ class ActionWidgetService extends Disposable implements IActionWidgetService { this._list.clear(); } - private _renderWidget(element: HTMLElement, list: ActionList, actionBarActions: readonly IAction[]): IDisposable { + private _renderWidget(element: HTMLElement, list: ActionList, actionBarActions: readonly IAction[]): IDisposable { const widget = document.createElement('div'); widget.classList.add('action-widget'); element.appendChild(widget); diff --git a/src/vs/platform/actionWidget/common/actionWidget.ts b/src/vs/platform/actionWidget/common/actionWidget.ts index e0b76b41e29..efa9c98774e 100644 --- a/src/vs/platform/actionWidget/common/actionWidget.ts +++ b/src/vs/platform/actionWidget/common/actionWidget.ts @@ -10,8 +10,3 @@ export interface ActionSet extends IDisposable { readonly allActions: readonly T[]; readonly hasAutoFix: boolean; } - -export interface IActionItem { - // TODO: Use generics - action: any; -} diff --git a/src/vs/platform/actions/browser/buttonbar.ts b/src/vs/platform/actions/browser/buttonbar.ts new file mode 100644 index 00000000000..cb6ab4c31df --- /dev/null +++ b/src/vs/platform/actions/browser/buttonbar.ts @@ -0,0 +1,126 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { ButtonBar, IButton } from 'vs/base/browser/ui/button/button'; +import { ActionRunner, IAction, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; +import { Emitter, Event } from 'vs/base/common/event'; +import { DisposableStore } from 'vs/base/common/lifecycle'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { localize } from 'vs/nls'; +import { MenuId, IMenuService, SubmenuItemAction, MenuItemAction } from 'vs/platform/actions/common/actions'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; + +export type IButtonConfigProvider = (action: IAction) => { + showIcon?: boolean; + showLabel?: boolean; + isSecondary?: boolean; +} | undefined; + +export interface IMenuWorkbenchButtonBarOptions { + telemetrySource?: string; + buttonConfigProvider?: IButtonConfigProvider; +} + +export class MenuWorkbenchButtonBar extends ButtonBar { + + private readonly _store = new DisposableStore(); + + private readonly _onDidChangeMenuItems = new Emitter(); + readonly onDidChangeMenuItems: Event = this._onDidChangeMenuItems.event; + + constructor( + container: HTMLElement, + menuId: MenuId, + options: IMenuWorkbenchButtonBarOptions | undefined, + @IMenuService menuService: IMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IContextMenuService contextMenuService: IContextMenuService, + @IKeybindingService keybindingService: IKeybindingService, + @ITelemetryService telemetryService: ITelemetryService, + ) { + super(container); + + const menu = menuService.createMenu(menuId, contextKeyService); + this._store.add(menu); + + const actionRunner = this._store.add(new ActionRunner()); + if (options?.telemetrySource) { + actionRunner.onDidRun(e => { + telemetryService.publicLog2( + 'workbenchActionExecuted', + { id: e.action.id, from: options.telemetrySource! } + ); + }, this._store); + } + + const conifgProvider: IButtonConfigProvider = options?.buttonConfigProvider ?? (() => ({ showLabel: true })); + + const update = () => { + + this.clear(); + + const actions = menu + .getActions({ renderShortTitle: true }) + .flatMap(entry => entry[1]); + + for (let i = 0; i < actions.length; i++) { + + const secondary = i > 0; + const actionOrSubmenu = actions[i]; + let action: MenuItemAction | SubmenuItemAction; + let btn: IButton; + + if (actionOrSubmenu instanceof SubmenuItemAction && actionOrSubmenu.actions.length > 0) { + const [first, ...rest] = actionOrSubmenu.actions; + action = first; + btn = this.addButtonWithDropdown({ + secondary: conifgProvider(action)?.isSecondary ?? secondary, + actionRunner, + actions: rest, + contextMenuProvider: contextMenuService, + }); + } else { + action = actionOrSubmenu; + btn = this.addButton({ + secondary: conifgProvider(action)?.isSecondary ?? secondary, + }); + } + + btn.enabled = action.enabled; + btn.element.classList.add('default-colors'); + if (conifgProvider(action)?.showLabel ?? true) { + btn.label = action.label; + } else { + btn.element.classList.add('monaco-text-button'); + } + if (conifgProvider(action)?.showIcon && ThemeIcon.isThemeIcon(action.item.icon)) { + btn.icon = action.item.icon; + } + const kb = keybindingService.lookupKeybinding(action.id); + if (kb) { + btn.element.title = localize('labelWithKeybinding', "{0} ({1})", action.label, kb.getLabel()); + } else { + btn.element.title = action.label; + + } + btn.onDidClick(async () => { + actionRunner.run(action); + }); + } + this._onDidChangeMenuItems.fire(this); + }; + this._store.add(menu.onDidChange(update)); + update(); + } + + override dispose() { + this._onDidChangeMenuItems.dispose(); + this._store.dispose(); + super.dispose(); + } +} diff --git a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts index 22a932f5cd7..f2e783f211f 100644 --- a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts +++ b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $, addDisposableListener, append, asCSSUrl, EventType, ModifierKeyEmitter, prepend } from 'vs/base/browser/dom'; +import { $, addDisposableListener, append, asCSSUrl, EventType, IModifierKeyStatus, ModifierKeyEmitter, prepend } from 'vs/base/browser/dom'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { ActionViewItem, BaseActionViewItem, SelectActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; import { DropdownMenuActionViewItem, IDropdownMenuActionViewItemOptions } from 'vs/base/browser/ui/dropdown/dropdownActionViewItem'; @@ -155,38 +155,25 @@ export class MenuEntryActionViewItem extends ActionViewItem { super.render(container); container.classList.add('menu-entry'); - this._updateItemClass(this._menuItemAction.item); - - let mouseOver = false; - - let alternativeKeyDown = this._altKey.keyStatus.altKey || ((isWindows || isLinux) && this._altKey.keyStatus.shiftKey); - - const updateAltState = () => { - const wantsAltCommand = mouseOver && alternativeKeyDown && !!this._commandAction.alt?.enabled; - if (wantsAltCommand !== this._wantsAltCommand) { - this._wantsAltCommand = wantsAltCommand; - this.updateLabel(); - this.updateTooltip(); - this.updateClass(); - } - }; - - if (this._menuItemAction.alt) { - this._register(this._altKey.event(value => { - alternativeKeyDown = value.altKey || ((isWindows || isLinux) && value.shiftKey); - updateAltState(); - })); + if (this.options.icon) { + this._updateItemClass(this._menuItemAction.item); } - this._register(addDisposableListener(container, 'mouseleave', _ => { - mouseOver = false; - updateAltState(); - })); + if (this._menuItemAction.alt) { + const updateAltState = (keyStatus: IModifierKeyStatus) => { + const wantsAltCommand = !!this._commandAction.alt?.enabled && (keyStatus.altKey || ((isWindows || isLinux) && keyStatus.shiftKey)); - this._register(addDisposableListener(container, 'mouseenter', _ => { - mouseOver = true; - updateAltState(); - })); + if (wantsAltCommand !== this._wantsAltCommand) { + this._wantsAltCommand = wantsAltCommand; + this.updateLabel(); + this.updateTooltip(); + this.updateClass(); + } + }; + + this._register(this._altKey.event(updateAltState)); + updateAltState(this._altKey.keyStatus); + } } protected override updateLabel(): void { @@ -277,13 +264,16 @@ export class SubmenuEntryActionViewItem extends DropdownMenuActionViewItem { constructor( action: SubmenuItemAction, options: IDropdownMenuActionViewItemOptions | undefined, + @IKeybindingService protected _keybindingService: IKeybindingService, @IContextMenuService protected _contextMenuService: IContextMenuService, @IThemeService protected _themeService: IThemeService ) { - const dropdownOptions = Object.assign({}, options ?? Object.create(null), { + const dropdownOptions: IDropdownMenuActionViewItemOptions = { + ...options, menuAsChild: options?.menuAsChild ?? false, classNames: options?.classNames ?? (ThemeIcon.isThemeIcon(action.item.icon) ? ThemeIcon.asClassName(action.item.icon) : undefined), - }); + keybindingProvider: options?.keybindingProvider ?? (action => _keybindingService.lookupKeybinding(action.id)) + }; super(action, { getActions: () => action.actions }, _contextMenuService, dropdownOptions); } @@ -317,14 +307,15 @@ export class SubmenuEntryActionViewItem extends DropdownMenuActionViewItem { export interface IDropdownWithDefaultActionViewItemOptions extends IDropdownMenuActionViewItemOptions { renderKeybindingWithDefaultActionLabel?: boolean; + persistLastActionId?: boolean; } export class DropdownWithDefaultActionViewItem extends BaseActionViewItem { private readonly _options: IDropdownWithDefaultActionViewItemOptions | undefined; private _defaultAction: ActionViewItem; - private _dropdown: DropdownMenuActionViewItem; + private readonly _dropdown: DropdownMenuActionViewItem; private _container: HTMLElement | null = null; - private _storageKey: string; + private readonly _storageKey: string; get onDidChangeDropdownVisibility(): Event { return this._dropdown.onDidChangeVisibility; @@ -346,7 +337,7 @@ export class DropdownWithDefaultActionViewItem extends BaseActionViewItem { // determine default action let defaultAction: IAction | undefined; - const defaultActionId = _storageService.get(this._storageKey, StorageScope.WORKSPACE); + const defaultActionId = options?.persistLastActionId ? _storageService.get(this._storageKey, StorageScope.WORKSPACE) : undefined; if (defaultActionId) { defaultAction = submenuAction.actions.find(a => defaultActionId === a.id); } @@ -356,11 +347,13 @@ export class DropdownWithDefaultActionViewItem extends BaseActionViewItem { this._defaultAction = this._instaService.createInstance(MenuEntryActionViewItem, defaultAction, { keybinding: this._getDefaultActionKeybindingLabel(defaultAction) }); - const dropdownOptions = Object.assign({}, options ?? Object.create(null), { + const dropdownOptions: IDropdownMenuActionViewItemOptions = { + keybindingProvider: action => this._keybindingService.lookupKeybinding(action.id), + ...options, menuAsChild: options?.menuAsChild ?? true, classNames: options?.classNames ?? ['codicon', 'codicon-chevron-down'], - actionRunner: options?.actionRunner ?? new ActionRunner() - }); + actionRunner: options?.actionRunner ?? new ActionRunner(), + }; this._dropdown = new DropdownMenuActionViewItem(submenuAction, submenuAction.actions, this._contextMenuService, dropdownOptions); this._dropdown.actionRunner.onDidRun((e: IRunEvent) => { @@ -371,7 +364,9 @@ export class DropdownWithDefaultActionViewItem extends BaseActionViewItem { } private update(lastAction: MenuItemAction): void { - this._storageService.store(this._storageKey, lastAction.id, StorageScope.WORKSPACE, StorageTarget.USER); + if (this._options?.persistLastActionId) { + this._storageService.store(this._storageKey, lastAction.id, StorageScope.WORKSPACE, StorageTarget.MACHINE); + } this._defaultAction.dispose(); this._defaultAction = this._instaService.createInstance(MenuEntryActionViewItem, lastAction, { keybinding: this._getDefaultActionKeybindingLabel(lastAction) }); @@ -502,7 +497,7 @@ export function createActionViewItem(instaService: IInstantiationService, action return instaService.createInstance(SubmenuEntrySelectActionViewItem, action); } else { if (action.item.rememberDefaultAction) { - return instaService.createInstance(DropdownWithDefaultActionViewItem, action, options); + return instaService.createInstance(DropdownWithDefaultActionViewItem, action, { ...options, persistLastActionId: true }); } else { return instaService.createInstance(SubmenuEntryActionViewItem, action, options); } diff --git a/src/vs/platform/actions/browser/toolbar.ts b/src/vs/platform/actions/browser/toolbar.ts index c76b6eeb57a..6df086344a7 100644 --- a/src/vs/platform/actions/browser/toolbar.ts +++ b/src/vs/platform/actions/browser/toolbar.ts @@ -8,6 +8,7 @@ import { IToolBarOptions, ToolBar } from 'vs/base/browser/ui/toolbar/toolbar'; import { IAction, Separator, SubmenuAction, toAction, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; import { coalesceInPlace } from 'vs/base/common/arrays'; import { BugIndicatingError } from 'vs/base/common/errors'; +import { Emitter, Event } from 'vs/base/common/event'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { localize } from 'vs/nls'; import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; @@ -94,13 +95,15 @@ export class WorkbenchToolBar extends ToolBar { ..._options, // mandatory (overide options) allowContextMenu: true, + skipTelemetry: typeof _options?.telemetrySource === 'string', }); // telemetry logic - if (_options?.telemetrySource) { + const telemetrySource = _options?.telemetrySource; + if (telemetrySource) { this._store.add(this.actionBar.onDidRun(e => telemetryService.publicLog2( 'workbenchActionExecuted', - { id: e.action.id, from: _options!.telemetrySource! }) + { id: e.action.id, from: telemetrySource }) )); } } @@ -234,6 +237,7 @@ export class WorkbenchToolBar extends ToolBar { // add context menu actions (iff appicable) menuId: this._options?.contextMenu, menuActionOptions: { renderShortTitle: true, ...this._options?.menuOptions }, + skipTelemetry: typeof this._options?.telemetrySource === 'string', contextKeyService: this._contextKeyService, }); })); @@ -283,6 +287,9 @@ export interface IMenuWorkbenchToolBarOptions extends IWorkbenchToolBarOptions { */ export class MenuWorkbenchToolBar extends WorkbenchToolBar { + private readonly _onDidChangeMenuItems = this._store.add(new Emitter()); + readonly onDidChangeMenuItems: Event = this._onDidChangeMenuItems.event; + constructor( container: HTMLElement, menuId: MenuId, @@ -309,7 +316,10 @@ export class MenuWorkbenchToolBar extends WorkbenchToolBar { super.setActions(primary, secondary); }; - this._store.add(menu.onDidChange(updateToolbar)); + this._store.add(menu.onDidChange(() => { + updateToolbar(); + this._onDidChangeMenuItems.fire(this); + })); updateToolbar(); } diff --git a/src/vs/platform/actions/common/actions.ts b/src/vs/platform/actions/common/actions.ts index d09fe3f2907..a6b2f612b3c 100644 --- a/src/vs/platform/actions/common/actions.ts +++ b/src/vs/platform/actions/common/actions.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Action, IAction, SubmenuAction } from 'vs/base/common/actions'; +import { IAction, SubmenuAction } from 'vs/base/common/actions'; import { ThemeIcon } from 'vs/base/common/themables'; import { Event, MicrotaskEmitter } from 'vs/base/common/event'; import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; @@ -12,9 +12,8 @@ import { ICommandAction, ICommandActionTitle, Icon, ILocalizedString } from 'vs/ import { Categories } from 'vs/platform/action/common/actionCommonCategories'; import { CommandsRegistry, ICommandHandlerDescription, ICommandService } from 'vs/platform/commands/common/commands'; import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { SyncDescriptor, SyncDescriptor0 } from 'vs/platform/instantiation/common/descriptors'; -import { BrandedService, createDecorator, IConstructorSignature, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IKeybindingRule, IKeybindings, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { createDecorator, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { IKeybindingRule, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; export interface IMenuItem { command: ICommandAction; @@ -59,15 +58,19 @@ export class MenuId { static readonly EditorContext = new MenuId('EditorContext'); static readonly SimpleEditorContext = new MenuId('SimpleEditorContext'); static readonly EditorContent = new MenuId('EditorContent'); + static readonly EditorLineNumberContext = new MenuId('EditorLineNumberContext'); static readonly EditorContextCopy = new MenuId('EditorContextCopy'); static readonly EditorContextPeek = new MenuId('EditorContextPeek'); static readonly EditorContextShare = new MenuId('EditorContextShare'); static readonly EditorTitle = new MenuId('EditorTitle'); static readonly EditorTitleRun = new MenuId('EditorTitleRun'); static readonly EditorTitleContext = new MenuId('EditorTitleContext'); + static readonly EditorTitleContextShare = new MenuId('EditorTitleContextShare'); static readonly EmptyEditorGroup = new MenuId('EmptyEditorGroup'); static readonly EmptyEditorGroupContext = new MenuId('EmptyEditorGroupContext'); + static readonly EditorTabsBarContext = new MenuId('EditorTabsBarContext'); static readonly ExplorerContext = new MenuId('ExplorerContext'); + static readonly ExplorerContextShare = new MenuId('ExplorerContextShare'); static readonly ExtensionContext = new MenuId('ExtensionContext'); static readonly GlobalActivity = new MenuId('GlobalActivity'); static readonly CommandCenter = new MenuId('CommandCenter'); @@ -95,9 +98,11 @@ export class MenuId { static readonly MenubarViewMenu = new MenuId('MenubarViewMenu'); static readonly MenubarHomeMenu = new MenuId('MenubarHomeMenu'); static readonly OpenEditorsContext = new MenuId('OpenEditorsContext'); + static readonly OpenEditorsContextShare = new MenuId('OpenEditorsContextShare'); static readonly ProblemsPanelContext = new MenuId('ProblemsPanelContext'); static readonly SCMChangeContext = new MenuId('SCMChangeContext'); static readonly SCMResourceContext = new MenuId('SCMResourceContext'); + static readonly SCMResourceContextShare = new MenuId('SCMResourceContextShare'); static readonly SCMResourceFolderContext = new MenuId('SCMResourceFolderContext'); static readonly SCMResourceGroupContext = new MenuId('SCMResourceGroupContext'); static readonly SCMSourceControl = new MenuId('SCMSourceControl'); @@ -176,6 +181,10 @@ export class MenuId { static readonly MergeBaseToolbar = new MenuId('MergeBaseToolbar'); static readonly MergeInputResultToolbar = new MenuId('MergeToolbarResultToolbar'); static readonly InlineSuggestionToolbar = new MenuId('InlineSuggestionToolbar'); + static readonly ChatContext = new MenuId('ChatContext'); + static readonly ChatCodeBlock = new MenuId('ChatCodeblock'); + static readonly ChatMessageTitle = new MenuId('ChatMessageTitle'); + static readonly ChatExecute = new MenuId('ChatExecute'); /** * Create or reuse a `MenuId` with the given identifier @@ -436,6 +445,8 @@ export class MenuItemAction implements IAction { this.enabled = !item.precondition || contextKeyService.contextMatchesRules(item.precondition); this.checked = undefined; + let icon: ThemeIcon | undefined; + if (item.toggled) { const toggled = ((item.toggled as { condition: ContextKeyExpression }).condition ? item.toggled : { condition: item.toggled }) as { condition: ContextKeyExpression; icon?: Icon; tooltip?: string | ILocalizedString; title?: string | ILocalizedString; @@ -445,17 +456,24 @@ export class MenuItemAction implements IAction { this.tooltip = typeof toggled.tooltip === 'string' ? toggled.tooltip : toggled.tooltip.value; } - if (toggled.title) { + if (this.checked && ThemeIcon.isThemeIcon(toggled.icon)) { + icon = toggled.icon; + } + + if (this.checked && toggled.title) { this.label = typeof toggled.title === 'string' ? toggled.title : toggled.title.value; } } + if (!icon) { + icon = ThemeIcon.isThemeIcon(item.icon) ? item.icon : undefined; + } + this.item = item; this.alt = alt ? new MenuItemAction(alt, undefined, options, hideActions, contextKeyService, _commandService) : undefined; this._options = options; - if (ThemeIcon.isThemeIcon(item.icon)) { - this.class = ThemeIcon.asClassName(item.icon); - } + this.class = icon && ThemeIcon.asClassName(icon); + } run(...args: any[]): Promise { @@ -473,72 +491,6 @@ export class MenuItemAction implements IAction { } } -/** - * @deprecated Use {@link registerAction2} instead. - */ -export class SyncActionDescriptor { - - private readonly _descriptor: SyncDescriptor0; - - private readonly _id: string; - private readonly _label?: string; - private readonly _keybindings: IKeybindings | undefined; - private readonly _keybindingContext: ContextKeyExpression | undefined; - private readonly _keybindingWeight: number | undefined; - - public static create(ctor: { new(id: string, label: string, ...services: Services): Action }, - id: string, label: string | undefined, keybindings?: IKeybindings, keybindingContext?: ContextKeyExpression, keybindingWeight?: number - ): SyncActionDescriptor { - return new SyncActionDescriptor(ctor as IConstructorSignature, id, label, keybindings, keybindingContext, keybindingWeight); - } - - public static from( - ctor: { - new(id: string, label: string, ...services: Services): Action; - readonly ID: string; - readonly LABEL: string; - }, - keybindings?: IKeybindings, keybindingContext?: ContextKeyExpression, keybindingWeight?: number - ): SyncActionDescriptor { - return SyncActionDescriptor.create(ctor, ctor.ID, ctor.LABEL, keybindings, keybindingContext, keybindingWeight); - } - - private constructor(ctor: IConstructorSignature, - id: string, label: string | undefined, keybindings?: IKeybindings, keybindingContext?: ContextKeyExpression, keybindingWeight?: number - ) { - this._id = id; - this._label = label; - this._keybindings = keybindings; - this._keybindingContext = keybindingContext; - this._keybindingWeight = keybindingWeight; - this._descriptor = new SyncDescriptor(ctor, [this._id, this._label]); - } - - public get syncDescriptor(): SyncDescriptor0 { - return this._descriptor; - } - - public get id(): string { - return this._id; - } - - public get label(): string | undefined { - return this._label; - } - - public get keybindings(): IKeybindings | undefined { - return this._keybindings; - } - - public get keybindingContext(): ContextKeyExpression | undefined { - return this._keybindingContext; - } - - public get keybindingWeight(): number | undefined { - return this._keybindingWeight; - } -} - //#region --- IAction2 type OneOrN = T | T[]; diff --git a/src/vs/platform/assignment/common/assignment.ts b/src/vs/platform/assignment/common/assignment.ts index 4af83d3efbe..1fe2da6a875 100644 --- a/src/vs/platform/assignment/common/assignment.ts +++ b/src/vs/platform/assignment/common/assignment.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as platform from 'vs/base/common/platform'; -import { IExperimentationFilterProvider } from 'tas-client-umd'; +import type { IExperimentationFilterProvider } from 'tas-client-umd'; export const ASSIGNMENT_STORAGE_KEY = 'VSCode.ABExp.FeatureData'; export const ASSIGNMENT_REFETCH_INTERVAL = 0; // no polling diff --git a/src/vs/platform/assignment/common/assignmentService.ts b/src/vs/platform/assignment/common/assignmentService.ts index ca98ef69341..67e34826627 100644 --- a/src/vs/platform/assignment/common/assignmentService.ts +++ b/src/vs/platform/assignment/common/assignmentService.ts @@ -9,6 +9,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur import { IProductService } from 'vs/platform/product/common/productService'; import { getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils'; import { AssignmentFilterProvider, ASSIGNMENT_REFETCH_INTERVAL, ASSIGNMENT_STORAGE_KEY, IAssignmentService, TargetPopulation } from 'vs/platform/assignment/common/assignment'; +import { importAMDNodeModule } from 'vs/amdX'; export abstract class BaseAssignmentService implements IAssignmentService { _serviceBrand: undefined; @@ -21,7 +22,7 @@ export abstract class BaseAssignmentService implements IAssignmentService { } constructor( - private readonly getMachineId: () => Promise, + private readonly machineId: string, protected readonly configurationService: IConfigurationService, protected readonly productService: IProductService, protected telemetry: IExperimentationTelemetry, @@ -77,21 +78,19 @@ export abstract class BaseAssignmentService implements IAssignmentService { TargetPopulation.Public : (this.productService.quality === 'exploration' ? TargetPopulation.Exploration : TargetPopulation.Insiders); - const machineId = await this.getMachineId(); const filterProvider = new AssignmentFilterProvider( this.productService.version, this.productService.nameLong, - machineId, + this.machineId, targetPopulation ); const tasConfig = this.productService.tasConfig!; - const tasClient = new (await import('tas-client-umd')).ExperimentationService({ + const tasClient = new (await importAMDNodeModule('tas-client-umd', 'lib/tas-client-umd.js')).ExperimentationService({ filterProviders: [filterProvider], telemetry: this.telemetry, storageKey: ASSIGNMENT_STORAGE_KEY, keyValueStorage: this.keyValueStorage, - featuresTelemetryPropertyName: tasConfig.featuresTelemetryPropertyName, assignmentContextTelemetryPropertyName: tasConfig.assignmentContextTelemetryPropertyName, telemetryEventName: tasConfig.telemetryEventName, endpoint: tasConfig.endpoint, diff --git a/src/vs/platform/audioCues/browser/audioCueService.ts b/src/vs/platform/audioCues/browser/audioCueService.ts index 53c383fce3c..ca6756406e1 100644 --- a/src/vs/platform/audioCues/browser/audioCueService.ts +++ b/src/vs/platform/audioCues/browser/audioCueService.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable } from 'vs/base/common/lifecycle'; +import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { FileAccess } from 'vs/base/common/network'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { Event } from 'vs/base/common/event'; import { localize } from 'vs/nls'; -import { IObservable, observableFromEvent, derived, IObserver } from 'vs/base/common/observable'; +import { observableFromEvent, derived } from 'vs/base/common/observable'; export const IAudioCueService = createDecorator('audioCue'); @@ -22,11 +22,13 @@ export interface IAudioCueService { onEnabledChanged(cue: AudioCue): Event; playSound(cue: Sound, allowManyInParallel?: boolean): Promise; + playAudioCueLoop(cue: AudioCue, milliseconds: number): IDisposable; + playRandomAudioCue(groupId: AudioCueGroupId, allowManyInParallel?: boolean): void; } export class AudioCueService extends Disposable implements IAudioCueService { readonly _serviceBrand: undefined; - + sounds: Map = new Map(); private readonly screenReaderAttached = observableFromEvent( this.accessibilityService.onDidChangeScreenReaderOptimized, () => /** @description accessibilityService.onDidChangeScreenReaderOptimized */ this.accessibilityService.isScreenReaderOptimized() @@ -51,6 +53,16 @@ export class AudioCueService extends Disposable implements IAudioCueService { await Promise.all(Array.from(sounds).map(sound => this.playSound(sound, true))); } + /** + * Gaming and other apps often play a sound variant when the same event happens again + * for an improved experience. This function plays a random sound from the given group to accomplish that. + */ + public playRandomAudioCue(groupId: AudioCueGroupId, allowManyInParallel?: boolean): void { + const cues = AudioCue.allAudioCues.filter(cue => cue.groupId === groupId); + const index = Math.floor(Math.random() * cues.length); + this.playAudioCue(cues[index], allowManyInParallel); + } + private getVolumeInPercent(): number { const volume = this.configurationService.getValue('audioCues.volume'); if (typeof volume !== 'number') { @@ -66,15 +78,19 @@ export class AudioCueService extends Disposable implements IAudioCueService { if (!allowManyInParallel && this.playingSounds.has(sound)) { return; } - this.playingSounds.add(sound); - - const url = FileAccess.asBrowserUri( - `vs/platform/audioCues/browser/media/${sound.fileName}` - ).toString(); + const url = FileAccess.asBrowserUri(`vs/platform/audioCues/browser/media/${sound.fileName}`).toString(true); try { - await playAudio(url, this.getVolumeInPercent() / 100); + const sound = this.sounds.get(url); + if (sound) { + sound.volume = this.getVolumeInPercent() / 100; + sound.currentTime = 0; + await sound.play(); + } else { + const playedSound = await playAudio(url, this.getVolumeInPercent() / 100); + this.sounds.set(url, playedSound); + } } catch (e) { console.error('Error while playing sound', e); } finally { @@ -82,6 +98,23 @@ export class AudioCueService extends Disposable implements IAudioCueService { } } + public playAudioCueLoop(cue: AudioCue, milliseconds: number): IDisposable { + let playing = true; + const playSound = () => { + if (playing) { + this.playAudioCue(cue, true).finally(() => { + setTimeout(() => { + if (playing) { + playSound(); + } + }, milliseconds); + }); + } + }; + playSound(); + return toDisposable(() => playing = false); + } + private readonly obsoleteAudioCuesEnabled = observableFromEvent( Event.filter(this.configurationService.onDidChangeConfiguration, (e) => e.affectsConfiguration('audioCues.enabled') @@ -122,7 +155,7 @@ export class AudioCueService extends Disposable implements IAudioCueService { } public onEnabledChanged(cue: AudioCue): Event { - return eventFromObservable(this.isEnabledCache.get(cue)); + return Event.fromObservableLight(this.isEnabledCache.get(cue)); } } @@ -130,12 +163,12 @@ export class AudioCueService extends Disposable implements IAudioCueService { * Play the given audio url. * @volume value between 0 and 1 */ -function playAudio(url: string, volume: number): Promise { +function playAudio(url: string, volume: number): Promise { return new Promise((resolve, reject) => { const audio = new Audio(url); audio.volume = volume; audio.addEventListener('ended', () => { - resolve(); + resolve(audio); }); audio.addEventListener('error', (e) => { // When the error event fires, ended might not be called @@ -148,38 +181,6 @@ function playAudio(url: string, volume: number): Promise { }); } -function eventFromObservable(observable: IObservable): Event { - return (listener) => { - let count = 0; - let didChange = false; - const observer: IObserver = { - beginUpdate() { - count++; - }, - endUpdate() { - count--; - if (count === 0 && didChange) { - didChange = false; - listener(); - } - }, - handleChange() { - if (count === 0) { - listener(); - } else { - didChange = true; - } - } - }; - observable.addObserver(observer); - return { - dispose() { - observable.removeObserver(observer); - } - }; - }; -} - class Cache { private readonly map = new Map(); constructor(private readonly getValue: (value: TArg) => TValue) { @@ -217,19 +218,29 @@ export class Sound { public static readonly diffLineInserted = Sound.register({ fileName: 'diffLineInserted.mp3' }); public static readonly diffLineDeleted = Sound.register({ fileName: 'diffLineDeleted.mp3' }); public static readonly diffLineModified = Sound.register({ fileName: 'diffLineModified.mp3' }); + public static readonly chatRequestSent = Sound.register({ fileName: 'chatRequestSent.mp3' }); + public static readonly chatResponsePending = Sound.register({ fileName: 'chatResponsePending.mp3' }); + public static readonly chatResponseReceived1 = Sound.register({ fileName: 'chatResponseReceived1.mp3' }); + public static readonly chatResponseReceived2 = Sound.register({ fileName: 'chatResponseReceived2.mp3' }); + public static readonly chatResponseReceived3 = Sound.register({ fileName: 'chatResponseReceived3.mp3' }); + public static readonly chatResponseReceived4 = Sound.register({ fileName: 'chatResponseReceived4.mp3' }); private constructor(public readonly fileName: string) { } } +export const enum AudioCueGroupId { + chatResponseReceived = 'chatResponseReceived' +} + export class AudioCue { private static _audioCues = new Set(); - private static register(options: { name: string; sound: Sound; settingsKey: string; + groupId?: AudioCueGroupId; }): AudioCue { - const audioCue = new AudioCue(options.sound, options.name, options.settingsKey); + const audioCue = new AudioCue(options.sound, options.name, options.settingsKey, options.groupId); AudioCue._audioCues.add(audioCue); return audioCue; } @@ -336,9 +347,48 @@ export class AudioCue { settingsKey: 'audioCues.diffLineModified' }); + public static readonly chatRequestSent = AudioCue.register({ + name: localize('audioCues.chatRequestSent', 'Chat Request Sent'), + sound: Sound.chatRequestSent, + settingsKey: 'audioCues.chatRequestSent' + }); + + private static readonly chatResponseReceived = { + name: localize('audioCues.chatResponseReceived', 'Chat Response Received'), + settingsKey: 'audioCues.chatResponseReceived', + groupId: AudioCueGroupId.chatResponseReceived + }; + + public static readonly chatResponseReceived1 = AudioCue.register({ + sound: Sound.chatResponseReceived1, + ...this.chatResponseReceived + }); + + public static readonly chatResponseReceived2 = AudioCue.register({ + sound: Sound.chatResponseReceived2, + ...this.chatResponseReceived + }); + + public static readonly chatResponseReceived3 = AudioCue.register({ + sound: Sound.chatResponseReceived3, + ...this.chatResponseReceived + }); + + public static readonly chatResponseReceived4 = AudioCue.register({ + sound: Sound.chatResponseReceived4, + ...this.chatResponseReceived + }); + + public static readonly chatResponsePending = AudioCue.register({ + name: localize('audioCues.chatResponsePending', 'Chat Response Pending'), + sound: Sound.chatResponsePending, + settingsKey: 'audioCues.chatResponsePending' + }); + private constructor( public readonly sound: Sound, public readonly name: string, public readonly settingsKey: string, + public readonly groupId?: string ) { } } diff --git a/src/vs/platform/audioCues/browser/media/chatRequestSent.mp3 b/src/vs/platform/audioCues/browser/media/chatRequestSent.mp3 new file mode 100644 index 00000000000..cc959d00a46 Binary files /dev/null and b/src/vs/platform/audioCues/browser/media/chatRequestSent.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/chatResponsePending.mp3 b/src/vs/platform/audioCues/browser/media/chatResponsePending.mp3 new file mode 100644 index 00000000000..67d23509aef Binary files /dev/null and b/src/vs/platform/audioCues/browser/media/chatResponsePending.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/chatResponseReceived1.mp3 b/src/vs/platform/audioCues/browser/media/chatResponseReceived1.mp3 new file mode 100644 index 00000000000..967f3e8d2d9 Binary files /dev/null and b/src/vs/platform/audioCues/browser/media/chatResponseReceived1.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/chatResponseReceived2.mp3 b/src/vs/platform/audioCues/browser/media/chatResponseReceived2.mp3 new file mode 100644 index 00000000000..91991b88db7 Binary files /dev/null and b/src/vs/platform/audioCues/browser/media/chatResponseReceived2.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/chatResponseReceived3.mp3 b/src/vs/platform/audioCues/browser/media/chatResponseReceived3.mp3 new file mode 100644 index 00000000000..edb55232f42 Binary files /dev/null and b/src/vs/platform/audioCues/browser/media/chatResponseReceived3.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/chatResponseReceived4.mp3 b/src/vs/platform/audioCues/browser/media/chatResponseReceived4.mp3 new file mode 100644 index 00000000000..856d16d81bf Binary files /dev/null and b/src/vs/platform/audioCues/browser/media/chatResponseReceived4.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/diffLineDeleted.mp3 b/src/vs/platform/audioCues/browser/media/diffLineDeleted.mp3 index fc7ec846611..d8f5f0a1813 100644 Binary files a/src/vs/platform/audioCues/browser/media/diffLineDeleted.mp3 and b/src/vs/platform/audioCues/browser/media/diffLineDeleted.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/diffLineInserted.mp3 b/src/vs/platform/audioCues/browser/media/diffLineInserted.mp3 index 5f3ede4ced7..3ebd9612e24 100644 Binary files a/src/vs/platform/audioCues/browser/media/diffLineInserted.mp3 and b/src/vs/platform/audioCues/browser/media/diffLineInserted.mp3 differ diff --git a/src/vs/platform/audioCues/browser/media/diffLineModified.mp3 b/src/vs/platform/audioCues/browser/media/diffLineModified.mp3 index 8d6183c5c2f..65fc4bab99b 100644 Binary files a/src/vs/platform/audioCues/browser/media/diffLineModified.mp3 and b/src/vs/platform/audioCues/browser/media/diffLineModified.mp3 differ diff --git a/src/vs/platform/configuration/common/configuration.ts b/src/vs/platform/configuration/common/configuration.ts index c12b9bac4a0..eb419a6929a 100644 --- a/src/vs/platform/configuration/common/configuration.ts +++ b/src/vs/platform/configuration/common/configuration.ts @@ -99,6 +99,15 @@ export interface IConfigurationValue { readonly overrideIdentifiers?: string[]; } +export function isConfigured(configValue: IConfigurationValue): configValue is IConfigurationValue & { value: T } { + return configValue.applicationValue !== undefined || + configValue.userValue !== undefined || + configValue.userLocalValue !== undefined || + configValue.userRemoteValue !== undefined || + configValue.workspaceValue !== undefined || + configValue.workspaceFolderValue !== undefined; +} + export interface IConfigurationUpdateOptions { /** * If `true`, do not notifies the error to user by showing the message box. Default is `false`. @@ -121,7 +130,7 @@ export interface IConfigurationService { * Fetches the value of the section for the given overrides. * Value can be of native type or an object keyed off the section name. * - * @param section - Section of the configuraion. Can be `null` or `undefined`. + * @param section - Section of the configuration. Can be `null` or `undefined`. * @param overrides - Overrides that has to be applied while fetching * */ @@ -139,7 +148,7 @@ export interface IConfigurationService { * * Passing a resource through overrides will update the configuration in the workspace folder containing that resource. * - * *Note 1:* Updating configuraiton to a default value will remove the configuration from the requested target. If not target is passed, it will be removed from all writeable targets. + * *Note 1:* Updating configuration to a default value will remove the configuration from the requested target. If not target is passed, it will be removed from all writeable targets. * * *Note 2:* Use `undefined` value to remove the configuration from the given target. If not target is passed, it will be removed from all writeable targets. * diff --git a/src/vs/platform/configuration/common/configurationModels.ts b/src/vs/platform/configuration/common/configurationModels.ts index d5abc192713..9e171f9b6cb 100644 --- a/src/vs/platform/configuration/common/configurationModels.ts +++ b/src/vs/platform/configuration/common/configurationModels.ts @@ -211,7 +211,7 @@ export class ConfigurationModel implements IConfigurationModel { } }; for (const override of this.overrides) { - if (arrays.equals(override.identifiers, [identifier])) { + if (override.identifiers.length === 1 && override.identifiers[0] === identifier) { contentsForIdentifierOnly = override.contents; } else if (override.identifiers.includes(identifier)) { mergeContents(override.contents); @@ -1012,7 +1012,7 @@ export class Configuration { this._defaultConfiguration.keys.forEach(key => keys.add(key)); this.userConfiguration.keys.forEach(key => keys.add(key)); this._workspaceConfiguration.keys.forEach(key => keys.add(key)); - this._folderConfigurations.forEach(folderConfiguraiton => folderConfiguraiton.keys.forEach(key => keys.add(key))); + this._folderConfigurations.forEach(folderConfiguration => folderConfiguration.keys.forEach(key => keys.add(key))); return [...keys.values()]; } @@ -1021,7 +1021,7 @@ export class Configuration { this._defaultConfiguration.getAllOverrideIdentifiers().forEach(key => keys.add(key)); this.userConfiguration.getAllOverrideIdentifiers().forEach(key => keys.add(key)); this._workspaceConfiguration.getAllOverrideIdentifiers().forEach(key => keys.add(key)); - this._folderConfigurations.forEach(folderConfiguraiton => folderConfiguraiton.getAllOverrideIdentifiers().forEach(key => keys.add(key))); + this._folderConfigurations.forEach(folderConfiguration => folderConfiguration.getAllOverrideIdentifiers().forEach(key => keys.add(key))); return [...keys.values()]; } @@ -1030,7 +1030,7 @@ export class Configuration { this._defaultConfiguration.getKeysForOverrideIdentifier(overrideIdentifier).forEach(key => keys.add(key)); this.userConfiguration.getKeysForOverrideIdentifier(overrideIdentifier).forEach(key => keys.add(key)); this._workspaceConfiguration.getKeysForOverrideIdentifier(overrideIdentifier).forEach(key => keys.add(key)); - this._folderConfigurations.forEach(folderConfiguraiton => folderConfiguraiton.getKeysForOverrideIdentifier(overrideIdentifier).forEach(key => keys.add(key))); + this._folderConfigurations.forEach(folderConfiguration => folderConfiguration.getKeysForOverrideIdentifier(overrideIdentifier).forEach(key => keys.add(key))); return [...keys.values()]; } diff --git a/src/vs/platform/configuration/test/common/configurationService.test.ts b/src/vs/platform/configuration/test/common/configurationService.test.ts index 8e9162e6e89..5337e51d667 100644 --- a/src/vs/platform/configuration/test/common/configurationService.test.ts +++ b/src/vs/platform/configuration/test/common/configurationService.test.ts @@ -10,7 +10,7 @@ import { DisposableStore } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; -import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; +import { ConfigurationTarget, isConfigured } from 'vs/platform/configuration/common/configuration'; import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; import { IFileService } from 'vs/platform/files/common/files'; @@ -200,11 +200,13 @@ suite('ConfigurationService', () => { assert.strictEqual(res.value, undefined); assert.strictEqual(res.defaultValue, undefined); assert.strictEqual(res.userValue, undefined); + assert.strictEqual(isConfigured(res), false); res = testObject.inspect('lookup.service.testSetting'); assert.strictEqual(res.defaultValue, 'isSet'); assert.strictEqual(res.value, 'isSet'); assert.strictEqual(res.userValue, undefined); + assert.strictEqual(isConfigured(res), false); await fileService.writeFile(settingsResource, VSBuffer.fromString('{ "lookup.service.testSetting": "bar" }')); @@ -213,6 +215,7 @@ suite('ConfigurationService', () => { assert.strictEqual(res.defaultValue, 'isSet'); assert.strictEqual(res.userValue, 'bar'); assert.strictEqual(res.value, 'bar'); + assert.strictEqual(isConfigured(res), true); })); diff --git a/src/vs/platform/contextkey/browser/contextKeyService.ts b/src/vs/platform/contextkey/browser/contextKeyService.ts index 17cd0275224..fd49a5ff37c 100644 --- a/src/vs/platform/contextkey/browser/contextKeyService.ts +++ b/src/vs/platform/contextkey/browser/contextKeyService.ts @@ -14,7 +14,7 @@ import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { CommandsRegistry } from 'vs/platform/commands/common/commands'; import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyExpression, ContextKeyInfo, ContextKeyValue, IContext, IContextKey, IContextKeyChangeEvent, IContextKeyService, IContextKeyServiceTarget, IReadableSet, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { ContextKeyExpression, ContextKeyInfo, ContextKeyValue, IContext, IContextKey, IContextKeyChangeEvent, IContextKeyService, IContextKeyServiceTarget, IReadableSet, IScopedContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; const KEYBINDING_CONTEXT_ATTR = 'data-keybinding-context'; @@ -282,8 +282,6 @@ export abstract class AbstractContextKeyService implements IContextKeyService { return this._myContextId; } - abstract dispose(): void; - public createKey(key: string, defaultValue: T | undefined): IContextKey { if (this._isDisposed) { throw new Error(`AbstractContextKeyService has been disposed`); @@ -301,7 +299,7 @@ export abstract class AbstractContextKeyService implements IContextKeyService { } } - public createScoped(domNode: IContextKeyServiceTarget): IContextKeyService { + public createScoped(domNode: IContextKeyServiceTarget): IScopedContextKeyService { if (this._isDisposed) { throw new Error(`AbstractContextKeyService has been disposed`); } @@ -500,6 +498,10 @@ class ScopedContextKeyService extends AbstractContextKeyService { } public updateParent(parentContextKeyService: AbstractContextKeyService): void { + if (this._parent === parentContextKeyService) { + return; + } + const thisContainer = this._parent.getContextValuesContainer(this._myContextId); const oldAllValues = thisContainer.collectAllValues(); this._parent = parentContextKeyService; @@ -571,7 +573,7 @@ class OverlayContextKeyService implements IContextKeyService { return this.overlay.has(key) ? this.overlay.get(key) : this.parent.getContextKeyValue(key); } - createScoped(): IContextKeyService { + createScoped(): IScopedContextKeyService { throw new Error('Not supported.'); } @@ -582,10 +584,6 @@ class OverlayContextKeyService implements IContextKeyService { updateParent(): void { throw new Error('Not supported.'); } - - dispose(): void { - // noop - } } function findContextAttr(domNode: IContextKeyServiceTarget | null): number { diff --git a/src/vs/platform/contextkey/common/contextkey.ts b/src/vs/platform/contextkey/common/contextkey.ts index 35fc1e6447b..a461dfe4fe7 100644 --- a/src/vs/platform/contextkey/common/contextkey.ts +++ b/src/vs/platform/contextkey/common/contextkey.ts @@ -10,6 +10,8 @@ import { isFalsyOrWhitespace } from 'vs/base/common/strings'; import { Scanner, LexingError, Token, TokenType } from 'vs/platform/contextkey/common/scanner'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { localize } from 'vs/nls'; +import { IDisposable } from 'vs/base/common/lifecycle'; +import { illegalArgument } from 'vs/base/common/errors'; const CONSTANT_VALUES = new Map(); CONSTANT_VALUES.set('false', false); @@ -24,6 +26,13 @@ CONSTANT_VALUES.set('isFirefox', isFirefox); CONSTANT_VALUES.set('isChrome', isChrome); CONSTANT_VALUES.set('isSafari', isSafari); +/** allow register constant context keys that are known only after startup; requires running `substituteConstants` on the context key - https://github.com/microsoft/vscode/issues/174218#issuecomment-1437972127 */ +export function setConstant(key: string, value: boolean) { + if (CONSTANT_VALUES.get(key) !== undefined) { throw illegalArgument('contextkey.setConstant(k, v) invoked with already set constant `k`'); } + + CONSTANT_VALUES.set(key, value); +} + const hasOwnProperty = Object.prototype.hasOwnProperty; export const enum ContextKeyExprType { @@ -79,168 +88,6 @@ export type ContextKeyExpression = ( | ContextKeySmallerExpr | ContextKeySmallerEqualsExpr ); -export abstract class ContextKeyExpr { - - public static false(): ContextKeyExpression { - return ContextKeyFalseExpr.INSTANCE; - } - public static true(): ContextKeyExpression { - return ContextKeyTrueExpr.INSTANCE; - } - public static has(key: string): ContextKeyExpression { - return ContextKeyDefinedExpr.create(key); - } - public static equals(key: string, value: any): ContextKeyExpression { - return ContextKeyEqualsExpr.create(key, value); - } - public static notEquals(key: string, value: any): ContextKeyExpression { - return ContextKeyNotEqualsExpr.create(key, value); - } - public static regex(key: string, value: RegExp): ContextKeyExpression { - return ContextKeyRegexExpr.create(key, value); - } - public static in(key: string, value: string): ContextKeyExpression { - return ContextKeyInExpr.create(key, value); - } - public static notIn(key: string, value: string): ContextKeyExpression { - return ContextKeyNotInExpr.create(key, value); - } - public static not(key: string): ContextKeyExpression { - return ContextKeyNotExpr.create(key); - } - public static and(...expr: Array): ContextKeyExpression | undefined { - return ContextKeyAndExpr.create(expr, null, true); - } - public static or(...expr: Array): ContextKeyExpression | undefined { - return ContextKeyOrExpr.create(expr, null, true); - } - public static greater(key: string, value: number): ContextKeyExpression { - return ContextKeyGreaterExpr.create(key, value); - } - public static greaterEquals(key: string, value: number): ContextKeyExpression { - return ContextKeyGreaterEqualsExpr.create(key, value); - } - public static smaller(key: string, value: number): ContextKeyExpression { - return ContextKeySmallerExpr.create(key, value); - } - public static smallerEquals(key: string, value: number): ContextKeyExpression { - return ContextKeySmallerEqualsExpr.create(key, value); - } - - public static deserialize(serialized: string | null | undefined): ContextKeyExpression | undefined { - if (!serialized) { - return undefined; - } - - return this._deserializeOrExpression(serialized); - } - - private static _deserializeOrExpression(serialized: string): ContextKeyExpression | undefined { - const pieces = serialized.split('||'); - return ContextKeyOrExpr.create(pieces.map(p => this._deserializeAndExpression(p)), null, true); - } - - private static _deserializeAndExpression(serialized: string): ContextKeyExpression | undefined { - const pieces = serialized.split('&&'); - return ContextKeyAndExpr.create(pieces.map(p => this._deserializeOne(p)), null, true); - } - - private static _deserializeOne(serializedOne: string): ContextKeyExpression { - serializedOne = serializedOne.trim(); - - if (serializedOne.indexOf('!=') >= 0) { - const pieces = serializedOne.split('!='); - return ContextKeyNotEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1])); - } - - if (serializedOne.indexOf('==') >= 0) { - const pieces = serializedOne.split('=='); - return ContextKeyEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1])); - } - - if (serializedOne.indexOf('=~') >= 0) { - const pieces = serializedOne.split('=~'); - return ContextKeyRegexExpr.create(pieces[0].trim(), this._deserializeRegexValue(pieces[1])); - } - - if (serializedOne.indexOf(' not in ') >= 0) { // careful: this must come before `in` - const pieces = serializedOne.split(' not in '); - return ContextKeyNotInExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1])); - } - - if (serializedOne.indexOf(' in ') >= 0) { - const pieces = serializedOne.split(' in '); - return ContextKeyInExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1])); - } - - if (/^[^<=>]+>=[^<=>]+$/.test(serializedOne)) { - const pieces = serializedOne.split('>='); - return ContextKeyGreaterEqualsExpr.create(pieces[0].trim(), pieces[1].trim()); - } - - if (/^[^<=>]+>[^<=>]+$/.test(serializedOne)) { - const pieces = serializedOne.split('>'); - return ContextKeyGreaterExpr.create(pieces[0].trim(), pieces[1].trim()); - } - - if (/^[^<=>]+<=[^<=>]+$/.test(serializedOne)) { - const pieces = serializedOne.split('<='); - return ContextKeySmallerEqualsExpr.create(pieces[0].trim(), pieces[1].trim()); - } - - if (/^[^<=>]+<[^<=>]+$/.test(serializedOne)) { - const pieces = serializedOne.split('<'); - return ContextKeySmallerExpr.create(pieces[0].trim(), pieces[1].trim()); - } - - if (/^\!\s*/.test(serializedOne)) { - return ContextKeyNotExpr.create(serializedOne.substr(1).trim()); - } - - return ContextKeyDefinedExpr.create(serializedOne); - } - - private static _deserializeValue(serializedValue: string): any { - serializedValue = serializedValue.trim(); - - if (serializedValue === 'true') { - return true; - } - - if (serializedValue === 'false') { - return false; - } - - const m = /^'([^']*)'$/.exec(serializedValue); - if (m) { - return m[1].trim(); - } - - return serializedValue; - } - - private static _deserializeRegexValue(serializedValue: string): RegExp | null { - - if (isFalsyOrWhitespace(serializedValue)) { - return null; - } - - const start = serializedValue.indexOf('/'); - const end = serializedValue.lastIndexOf('/'); - if (start === end || start < 0) { - return null; - } - - const value = serializedValue.slice(start + 1, end); - const caseIgnoreFlag = serializedValue[end + 1] === 'i' ? 'i' : ''; - try { - return new RegExp(value, caseIgnoreFlag); - } catch (_e) { - return null; - } - } -} - /* @@ -255,21 +102,24 @@ or ::= and { '||' and }* and ::= term { '&&' term }* term ::= - | '!' (CONTEXT | 'true' | 'false') // we do not yet support negation of arbitrary expressions + | '!' (KEY | true | false | parenthesized) | primary primary ::= | 'true' | 'false' + | parenthesized + | KEY '=~' REGEX + | KEY [ ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'not' 'in' | 'in') value ] + +parenthesized ::= | '(' expression ')' - | CONTEXT '=~' REGEX - | CONTEXT [ ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'not' 'in' | 'in') value ] value ::= | 'true' | 'false' | 'in' // we support `in` as a value because there's an extension that uses it, ie "when": "languageId == in" - | VALUE // matched by the same regex as CONTEXT; consider putting the value in single quotes if it's a string (e.g., with spaces) + | VALUE // matched by the same regex as KEY; consider putting the value in single quotes if it's a string (e.g., with spaces) | SINGLE_QUOTED_STR | EMPTY_STR // this allows "when": "foo == " which's used by existing extensions @@ -287,8 +137,6 @@ const defaultConfig: ParserConfig = { regexParsingWithErrorRecovery: true }; -class ParseError extends Error { } - export type ParsingError = { message: string; offset: number; @@ -298,7 +146,6 @@ export type ParsingError = { const errorEmptyString = localize('contextkey.parser.error.emptyString', "Empty context key expression"); const hintEmptyString = localize('contextkey.parser.error.emptyString.hint', "Did you forget to write an expression? You can also put 'false' or 'true' to always evaluate to false or true, respectively."); -const errorDontSupportArbitraryNegation = localize('contextkey.parser.error.dontSupportArbitraryNegation', "Negation of arbitrary expressions is not supported."); const errorNoInAfterNot = localize('contextkey.parser.error.noInAfterNot', "'in' after 'not'."); const errorClosingParenthesis = localize('contextkey.parser.error.closingParenthesis', "closing parenthesis ')'"); const errorUnexpectedToken = localize('contextkey.parser.error.unexpectedToken', "Unexpected token"); @@ -327,6 +174,8 @@ export class Parser { // Note: this doesn't produce an exact syntax tree but a normalized one // ContextKeyExpression's that we use as AST nodes do not expose constructors that do not normalize + private static _parseError = new Error(); + // lifetime note: `_scanner` lives as long as the parser does, i.e., is not reset between calls to `parse` private readonly _scanner = new Scanner(); @@ -371,11 +220,11 @@ export class Parser { const peek = this._peek(); const additionalInfo = peek.type === TokenType.Str ? hintUnexpectedToken : undefined; this._parsingErrors.push({ message: errorUnexpectedToken, offset: peek.offset, lexeme: Scanner.getLexeme(peek), additionalInfo }); - throw new ParseError(); + throw Parser._parseError; } return expr; } catch (e) { - if (!(e instanceof ParseError)) { + if (!(e === Parser._parseError)) { throw e; } return undefined; @@ -410,19 +259,25 @@ export class Parser { private _term(): ContextKeyExpression | undefined { if (this._matchOne(TokenType.Neg)) { - const expr = this._peek(); - switch (expr.type) { - case TokenType.Str: - this._advance(); - return ContextKeyExpr.not(expr.lexeme!); + const peek = this._peek(); + switch (peek.type) { case TokenType.True: this._advance(); - return ContextKeyExpr.false(); + return ContextKeyFalseExpr.INSTANCE; case TokenType.False: this._advance(); - return ContextKeyExpr.true(); + return ContextKeyTrueExpr.INSTANCE; + case TokenType.LParen: { + this._advance(); + const expr = this._expr(); + this._consume(TokenType.RParen, errorClosingParenthesis); + return expr?.negate(); + } + case TokenType.Str: + this._advance(); + return ContextKeyNotExpr.create(peek.lexeme); default: - throw this._errExpectedButGot('CONTEXT | true | false', expr, errorDontSupportArbitraryNegation); + throw this._errExpectedButGot(`KEY | true | false | '(' expression ')'`, peek); } } return this._primary(); @@ -448,7 +303,7 @@ export class Parser { } case TokenType.Str: { - // CONTEXT + // KEY const key = peek.lexeme; this._advance(); @@ -465,7 +320,7 @@ export class Parser { } const regexLexeme = expr.lexeme; const closingSlashIndex = regexLexeme.lastIndexOf('/'); - const flags = closingSlashIndex === regexLexeme.length - 1 ? undefined : regexLexeme.substring(closingSlashIndex + 1); + const flags = closingSlashIndex === regexLexeme.length - 1 ? undefined : this._removeFlagsGY(regexLexeme.substring(closingSlashIndex + 1)); let regexp: RegExp | null; try { regexp = new RegExp(regexLexeme.substring(1, closingSlashIndex), flags); @@ -519,7 +374,7 @@ export class Parser { const regexLexeme = lexemeReconstruction.join(''); const closingSlashIndex = regexLexeme.lastIndexOf('/'); - const flags = closingSlashIndex === regexLexeme.length - 1 ? undefined : regexLexeme.substring(closingSlashIndex + 1); + const flags = closingSlashIndex === regexLexeme.length - 1 ? undefined : this._removeFlagsGY(regexLexeme.substring(closingSlashIndex + 1)); let regexp: RegExp | null; try { regexp = new RegExp(regexLexeme.substring(1, closingSlashIndex), flags); @@ -635,10 +490,10 @@ export class Parser { case TokenType.EOF: this._parsingErrors.push({ message: errorUnexpectedEOF, offset: peek.offset, lexeme: '', additionalInfo: hintUnexpectedEOF }); - throw new ParseError(); + throw Parser._parseError; default: - throw this._errExpectedButGot(`true | false | CONTEXT \n\t| CONTEXT '=~' REGEX \n\t| CONTEXT ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'in' | 'not' 'in') value`, this._peek()); + throw this._errExpectedButGot(`true | false | KEY \n\t| KEY '=~' REGEX \n\t| KEY ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'in' | 'not' 'in') value`, this._peek()); } } @@ -666,6 +521,11 @@ export class Parser { } } + private _flagsGYRe = /g|y/g; + private _removeFlagsGY(flags: string): string { + return flags.replaceAll(this._flagsGYRe, ''); + } + // careful: this can throw if current token is the initial one (ie index = 0) private _previous() { return this._tokens[this._current - 1]; @@ -700,7 +560,7 @@ export class Parser { const offset = got.offset; const lexeme = Scanner.getLexeme(got); this._parsingErrors.push({ message, offset, lexeme, additionalInfo }); - return new ParseError(); + return Parser._parseError; } private _check(type: TokenType) { @@ -716,6 +576,94 @@ export class Parser { } } +export abstract class ContextKeyExpr { + + public static false(): ContextKeyExpression { + return ContextKeyFalseExpr.INSTANCE; + } + public static true(): ContextKeyExpression { + return ContextKeyTrueExpr.INSTANCE; + } + public static has(key: string): ContextKeyExpression { + return ContextKeyDefinedExpr.create(key); + } + public static equals(key: string, value: any): ContextKeyExpression { + return ContextKeyEqualsExpr.create(key, value); + } + public static notEquals(key: string, value: any): ContextKeyExpression { + return ContextKeyNotEqualsExpr.create(key, value); + } + public static regex(key: string, value: RegExp): ContextKeyExpression { + return ContextKeyRegexExpr.create(key, value); + } + public static in(key: string, value: string): ContextKeyExpression { + return ContextKeyInExpr.create(key, value); + } + public static notIn(key: string, value: string): ContextKeyExpression { + return ContextKeyNotInExpr.create(key, value); + } + public static not(key: string): ContextKeyExpression { + return ContextKeyNotExpr.create(key); + } + public static and(...expr: Array): ContextKeyExpression | undefined { + return ContextKeyAndExpr.create(expr, null, true); + } + public static or(...expr: Array): ContextKeyExpression | undefined { + return ContextKeyOrExpr.create(expr, null, true); + } + public static greater(key: string, value: number): ContextKeyExpression { + return ContextKeyGreaterExpr.create(key, value); + } + public static greaterEquals(key: string, value: number): ContextKeyExpression { + return ContextKeyGreaterEqualsExpr.create(key, value); + } + public static smaller(key: string, value: number): ContextKeyExpression { + return ContextKeySmallerExpr.create(key, value); + } + public static smallerEquals(key: string, value: number): ContextKeyExpression { + return ContextKeySmallerEqualsExpr.create(key, value); + } + + private static _parser = new Parser({ regexParsingWithErrorRecovery: false }); + public static deserialize(serialized: string | null | undefined): ContextKeyExpression | undefined { + if (serialized === undefined || serialized === null) { // an empty string needs to be handled by the parser to get a corresponding parsing error reported + return undefined; + } + + const expr = this._parser.parse(serialized); + return expr; + } + +} + + +export function validateWhenClauses(whenClauses: string[]): any { + + const parser = new Parser({ regexParsingWithErrorRecovery: false }); // we run with no recovery to guide users to use correct regexes + + return whenClauses.map(whenClause => { + parser.parse(whenClause); + + if (parser.lexingErrors.length > 0) { + return parser.lexingErrors.map((se: LexingError) => ({ + errorMessage: se.additionalInfo ? + localize('contextkey.scanner.errorForLinterWithHint', "Unexpected token. Hint: {0}", se.additionalInfo) : + localize('contextkey.scanner.errorForLinter', "Unexpected token."), + offset: se.offset, + length: se.lexeme.length, + })); + } else if (parser.parsingErrors.length > 0) { + return parser.parsingErrors.map((pe: ParsingError) => ({ + errorMessage: pe.additionalInfo ? `${pe.message}. ${pe.additionalInfo}` : pe.message, + offset: pe.offset, + length: pe.lexeme.length, + })); + } else { + return []; + } + }); +} + export function expressionsAreEqualWithConstantSubstitution(a: ContextKeyExpression | null | undefined, b: ContextKeyExpression | null | undefined): boolean { const aExpr = a ? a.substituteConstants() : undefined; const bExpr = b ? b.substituteConstants() : undefined; @@ -1576,7 +1524,7 @@ export class ContextKeyNotRegexExpr implements IContextKeyExpression { } public serialize(): string { - throw new Error('Method not implemented.'); + return `!(${this._actual.serialize()})`; } public keys(): string[] { @@ -1624,7 +1572,7 @@ function eliminateConstantsInArray(arr: ContextKeyExpression[]): (ContextKeyExpr return newArr; } -class ContextKeyAndExpr implements IContextKeyExpression { +export class ContextKeyAndExpr implements IContextKeyExpression { public static create(_expr: ReadonlyArray, negated: ContextKeyExpression | null, extraRedundantCheck: boolean): ContextKeyExpression | undefined { return ContextKeyAndExpr._normalizeArr(_expr, negated, extraRedundantCheck); @@ -1823,7 +1771,7 @@ class ContextKeyAndExpr implements IContextKeyExpression { } } -class ContextKeyOrExpr implements IContextKeyExpression { +export class ContextKeyOrExpr implements IContextKeyExpression { public static create(_expr: ReadonlyArray, negated: ContextKeyExpression | null, extraRedundantCheck: boolean): ContextKeyExpression | undefined { return ContextKeyOrExpr._normalizeArr(_expr, negated, extraRedundantCheck); @@ -2092,9 +2040,10 @@ export interface IContextKeyChangeEvent { allKeysContainedIn(keys: IReadableSet): boolean; } +export type IScopedContextKeyService = IContextKeyService & IDisposable; + export interface IContextKeyService { readonly _serviceBrand: undefined; - dispose(): void; onDidChangeContext: Event; bufferChangeEvents(callback: Function): void; @@ -2103,7 +2052,7 @@ export interface IContextKeyService { contextMatchesRules(rules: ContextKeyExpression | undefined): boolean; getContextKeyValue(key: string): T | undefined; - createScoped(target: IContextKeyServiceTarget): IContextKeyService; + createScoped(target: IContextKeyServiceTarget): IScopedContextKeyService; createOverlay(overlay: Iterable<[string, any]>): IContextKeyService; getContext(target: IContextKeyServiceTarget | null): IContext; diff --git a/src/vs/platform/contextkey/common/scanner.ts b/src/vs/platform/contextkey/common/scanner.ts index b5f4f33d876..95168127c69 100644 --- a/src/vs/platform/contextkey/common/scanner.ts +++ b/src/vs/platform/contextkey/common/scanner.ts @@ -35,8 +35,8 @@ export type Token = | { type: TokenType.LParen; offset: number } | { type: TokenType.RParen; offset: number } | { type: TokenType.Neg; offset: number } - | { type: TokenType.Eq; offset: number } - | { type: TokenType.NotEq; offset: number } + | { type: TokenType.Eq; offset: number; isTripleEq: boolean } + | { type: TokenType.NotEq; offset: number; isTripleEq: boolean } | { type: TokenType.Lt; offset: number } | { type: TokenType.LtEq; offset: number } | { type: TokenType.Gt; offset: number } @@ -59,8 +59,6 @@ type TokenTypeWithoutLexeme = TokenType.LParen | TokenType.RParen | TokenType.Neg | - TokenType.Eq | - TokenType.NotEq | TokenType.Lt | TokenType.LtEq | TokenType.Gt | @@ -98,7 +96,6 @@ function hintDidYouMean(...meant: string[]) { } } -const hintDontSupportTripleEq = localize('contextkey.scanner.hint.dontSupportTripleEq', "The '===' operator is not supported. Use '==' instead."); const hintDidYouForgetToOpenOrCloseQuote = localize('contextkey.scanner.hint.didYouForgetToOpenOrCloseQuote', "Did you forget to open or close the quote?"); const hintDidYouForgetToEscapeSlash = localize('contextkey.scanner.hint.didYouForgetToEscapeSlash', "Did you forget to escape the '/' (slash) character? Put two backslashes before it to escape, e.g., '\\\\/\'."); @@ -128,9 +125,9 @@ export class Scanner { case TokenType.Neg: return '!'; case TokenType.Eq: - return '=='; + return token.isTripleEq ? '===' : '=='; case TokenType.NotEq: - return '!='; + return token.isTripleEq ? '!==' : '!='; case TokenType.Lt: return '<'; case TokenType.LtEq: @@ -209,7 +206,12 @@ export class Scanner { case CharCode.CloseParen: this._addToken(TokenType.RParen); break; case CharCode.ExclamationMark: - this._addToken(this._match(CharCode.Equals) ? TokenType.NotEq : TokenType.Neg); + if (this._match(CharCode.Equals)) { + const isTripleEq = this._match(CharCode.Equals); // eat last `=` if `!==` + this._tokens.push({ type: TokenType.NotEq, offset: this._start, isTripleEq }); + } else { + this._addToken(TokenType.Neg); + } break; case CharCode.SingleQuote: this._quotedString(); break; @@ -217,15 +219,12 @@ export class Scanner { case CharCode.Equals: if (this._match(CharCode.Equals)) { // support `==` - this._addToken(TokenType.Eq); + const isTripleEq = this._match(CharCode.Equals); // eat last `=` if `===` + this._tokens.push({ type: TokenType.Eq, offset: this._start, isTripleEq }); } else if (this._match(CharCode.Tilde)) { this._addToken(TokenType.RegexOp); } else { - if (this._tokens.length === 0 || this._tokens[this._tokens.length - 1].type !== TokenType.Eq) { - this._error(hintDidYouMean('==', '=~')); - } else { - this._error(hintDontSupportTripleEq); - } + this._error(hintDidYouMean('==', '=~')); } break; @@ -294,7 +293,7 @@ export class Scanner { private _error(additional?: string) { const offset = this._start; const lexeme = this._input.substring(this._start, this._current); - const errToken = { type: TokenType.Error, offset: this._start, lexeme }; + const errToken: Token = { type: TokenType.Error, offset: this._start, lexeme }; this._errors.push({ offset, lexeme, additionalInfo: additional }); this._tokens.push(errToken); } diff --git a/src/vs/platform/contextkey/test/browser/contextkey.test.ts b/src/vs/platform/contextkey/test/browser/contextkey.test.ts index 8cbecda9b4b..12cc7cc065d 100644 --- a/src/vs/platform/contextkey/test/browser/contextkey.test.ts +++ b/src/vs/platform/contextkey/test/browser/contextkey.test.ts @@ -60,6 +60,25 @@ suite('ContextKeyService', () => { return p; }); + test('updateParent to same service', () => { + const root = new ContextKeyService(new TestConfigurationService()); + const parent1 = root.createScoped(document.createElement('div')); + + const child = parent1.createScoped(document.createElement('div')); + parent1.createKey('testA', 1); + parent1.createKey('testB', 2); + parent1.createKey('testD', 0); + + let eventFired = false; + child.onDidChangeContext(e => { + eventFired = true; + }); + + child.updateParent(parent1); + + assert.strictEqual(eventFired, false); + }); + test('issue #147732: URIs as context values', () => { const disposables = new DisposableStore(); const configurationService: IConfigurationService = new TestConfigurationService(); diff --git a/src/vs/platform/contextkey/test/common/parser.test.ts b/src/vs/platform/contextkey/test/common/parser.test.ts index 80c72da0e0c..6d08961dae8 100644 --- a/src/vs/platform/contextkey/test/common/parser.test.ts +++ b/src/vs/platform/contextkey/test/common/parser.test.ts @@ -119,6 +119,21 @@ suite('Context Key Parser', () => { assert.deepStrictEqual(parseToStr(input), "cmake:enableFullFeatureSet && !cmake:hideBuildCommand"); }); + test('!(foo && bar)', () => { + const input = '!(foo && bar)'; + assert.deepStrictEqual(parseToStr(input), "!bar || !foo"); + }); + + test('!(foo && bar || boar) || deer', () => { + const input = '!(foo && bar || boar) || deer'; + assert.deepStrictEqual(parseToStr(input), "deer || !bar && !boar || !boar && !foo"); + }); + + test(`!(!foo)`, () => { + const input = `!(!foo)`; + assert.deepStrictEqual(parseToStr(input), "foo"); + }); + suite('controversial', () => { /* new parser KEEPS old one's behavior: @@ -161,9 +176,9 @@ suite('Context Key Parser', () => { assert.deepStrictEqual(parseToStr(input), "resource =~ /((\\/scratch\\/(?!update)(.*)\\/)|((\\/src\\/).*\\/)).*$/"); }); - test(`resourcePath =~ /\.md(\.yml|\.txt)*$/gim`, () => { - const input = `resourcePath =~ /\.md(\.yml|\.txt)*$/gim`; - assert.deepStrictEqual(parseToStr(input), "resourcePath =~ /.md(.yml|.txt)*$/gim"); + test(`resourcePath =~ /\.md(\.yml|\.txt)*$/giym`, () => { + const input = `resourcePath =~ /\.md(\.yml|\.txt)*$/giym`; + assert.deepStrictEqual(parseToStr(input), "resourcePath =~ /.md(.yml|.txt)*$/im"); }); }); @@ -195,21 +210,21 @@ suite('Context Key Parser', () => { assert.deepStrictEqual(parseToStr(input), "Lexing errors:\n\nUnexpected token ''bar' at offset 7. Did you forget to open or close the quote?\n\n --- \nParsing errors:\n\nUnexpected ''bar' at offset 7.\n"); }); - /* - We do not support negation of arbitrary expressions, only of keys. - - TODO@ulugbekna: move after adding support for negation of arbitrary expressions - */ - test('!(foo && bar)', () => { - const input = '!(foo && bar)'; - assert.deepStrictEqual(parseToStr(input), "Parsing errors:\n\nUnexpected '(' at offset 1.\n"); - }); - test(`config.foo && &&bar =~ /^foo$|^bar-foo$|^joo$|^jar$/ && !foo`, () => { const input = `config.foo && &&bar =~ /^foo$|^bar-foo$|^joo$|^jar$/ && !foo`; assert.deepStrictEqual(parseToStr(input), "Parsing errors:\n\nUnexpected '&&' at offset 15.\n"); }); + test(`!foo == 'test'`, () => { + const input = `!foo == 'test'`; + assert.deepStrictEqual(parseToStr(input), "Parsing errors:\n\nUnexpected '==' at offset 5.\n"); + }); + + test(`!!foo`, function () { + const input = `!!foo`; + assert.deepStrictEqual(parseToStr(input), "Parsing errors:\n\nUnexpected '!' at offset 1.\n"); + }); + }); }); diff --git a/src/vs/platform/contextkey/test/common/scanner.test.ts b/src/vs/platform/contextkey/test/common/scanner.test.ts index cd93b7fd9b6..de4e9f7c3c5 100644 --- a/src/vs/platform/contextkey/test/common/scanner.test.ts +++ b/src/vs/platform/contextkey/test/common/scanner.test.ts @@ -15,9 +15,9 @@ suite('Context Key Scanner', () => { case TokenType.Neg: return '!'; case TokenType.Eq: - return '=='; + return token.isTripleEq ? '===' : '=='; case TokenType.NotEq: - return '!='; + return token.isTripleEq ? '!==' : '!='; case TokenType.Lt: return '<'; case TokenType.LtEq: @@ -53,6 +53,7 @@ suite('Context Key Scanner', () => { } } + function scan(input: string) { return (new Scanner()).reset(input).scan().map((token: Token) => { return 'lexeme' in token @@ -79,6 +80,16 @@ suite('Context Key Scanner', () => { assert.deepStrictEqual(scan(input), ([{ type: "!", offset: 0 }, { type: "Str", lexeme: "foo", offset: 1 }, { type: "EOF", offset: 4 }])); }); + test('foo === bar', () => { + const input = 'foo === bar'; + assert.deepStrictEqual(scan(input), ([{ type: "Str", offset: 0, lexeme: "foo" }, { type: "===", offset: 4 }, { type: "Str", offset: 8, lexeme: "bar" }, { type: "EOF", offset: 11 }])); + }); + + test('foo !== bar', () => { + const input = 'foo !== bar'; + assert.deepStrictEqual(scan(input), ([{ type: "Str", offset: 0, lexeme: "foo" }, { type: "!==", offset: 5 }, { type: "Str", offset: 9, lexeme: "bar" }, { type: "EOF", offset: 12 }])); + }); + test('!(foo && bar)', () => { const input = '!(foo && bar)'; assert.deepStrictEqual(scan(input), ([{ type: "!", offset: 0 }, { type: "(", offset: 1 }, { type: "Str", lexeme: "foo", offset: 2 }, { type: "&&", offset: 6 }, { type: "Str", lexeme: "bar", offset: 9 }, { type: ")", offset: 12 }, { type: "EOF", offset: 13 }])); @@ -181,11 +192,16 @@ suite('Context Key Scanner', () => { }); }); + test(`foo === bar'`, () => { + const input = `foo === bar'`; + assert.deepStrictEqual(scan(input), ([{ type: "Str", offset: 0, lexeme: "foo" }, { type: "===", offset: 4 }, { type: "Str", offset: 8, lexeme: "bar" }, { type: "ErrorToken", offset: 11, lexeme: "'" }, { type: "EOF", offset: 12 }])); + }); + suite('handling lexical errors', () => { test(`foo === '`, () => { const input = `foo === '`; - assert.deepStrictEqual(scan(input), ([{ type: "Str", offset: 0, lexeme: "foo" }, { type: "==", offset: 4 }, { type: "ErrorToken", offset: 6, lexeme: "=" }, { type: "ErrorToken", offset: 8, lexeme: "'" }, { type: "EOF", offset: 9 }])); + assert.deepStrictEqual(scan(input), ([{ type: "Str", offset: 0, lexeme: "foo" }, { type: "===", offset: 4 }, { type: "ErrorToken", offset: 8, lexeme: "'" }, { type: "EOF", offset: 9 }])); }); test(`foo && 'bar - unterminated single quote`, () => { @@ -193,11 +209,6 @@ suite('Context Key Scanner', () => { assert.deepStrictEqual(scan(input), ([{ type: "Str", lexeme: "foo", offset: 0 }, { type: "&&", offset: 4 }, { type: "ErrorToken", offset: 7, lexeme: "'bar" }, { type: "EOF", offset: 11 }])); }); - test(`foo === bar'`, () => { - const input = `foo === bar'`; - assert.deepStrictEqual(scan(input), ([{ type: "Str", offset: 0, lexeme: "foo" }, { type: "==", offset: 4 }, { type: "ErrorToken", offset: 6, lexeme: "=" }, { type: "Str", offset: 8, lexeme: "bar" }, { type: "ErrorToken", offset: 11, lexeme: "'" }, { type: "EOF", offset: 12 }])); - }); - test('vim == 1 && vim<2 <= 3', () => { const input = 'vim == 1 && vim<2 <= 3'; assert.deepStrictEqual(scan(input), ([{ type: "Str", lexeme: "vim", offset: 0 }, { type: "==", offset: 9 }, { type: "Str", lexeme: "1", offset: 12 }, { type: "&&", offset: 14 }, { type: "Str", lexeme: "vim<2", offset: 17 }, { type: "<=", offset: 23 }, { type: "Str", lexeme: "3", offset: 26 }, { type: "EOF", offset: 27 }])); diff --git a/src/vs/platform/credentials/common/credentials.ts b/src/vs/platform/credentials/common/credentials.ts index 5ec41dc712f..889b0a2ac12 100644 --- a/src/vs/platform/credentials/common/credentials.ts +++ b/src/vs/platform/credentials/common/credentials.ts @@ -18,7 +18,7 @@ export interface ICredentialsProvider { } export interface ICredentialsChangeEvent { - service: string; + service?: string; account: string; } diff --git a/src/vs/platform/credentials/common/credentialsMainService.ts b/src/vs/platform/credentials/common/credentialsMainService.ts index bc140432faf..80e3c89b3dd 100644 --- a/src/vs/platform/credentials/common/credentialsMainService.ts +++ b/src/vs/platform/credentials/common/credentialsMainService.ts @@ -8,7 +8,7 @@ import { Emitter } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; import { ILogService } from 'vs/platform/log/common/log'; import { isWindows } from 'vs/base/common/platform'; -import { retry } from 'vs/base/common/async'; +import { retry, SequencerByKey } from 'vs/base/common/async'; interface ChunkedPassword { content: string; @@ -28,6 +28,8 @@ export abstract class BaseCredentialsMainService extends Disposable implements I protected _keytarCache: KeytarModule | undefined; + private _sequencer = new SequencerByKey(); + constructor( @ILogService protected readonly logService: ILogService, ) { @@ -47,7 +49,7 @@ export abstract class BaseCredentialsMainService extends Disposable implements I //#endregion async getPassword(service: string, account: string): Promise { - this.logService.trace('Getting password from keytar:', service, account); + this.logService.trace('Going to get password from keytar:', service, account); let keytar: KeytarModule; try { keytar = await this.withKeytar(); @@ -56,6 +58,11 @@ export abstract class BaseCredentialsMainService extends Disposable implements I return null; } + return await this._sequencer.queue(service + account, () => this.doGetPassword(keytar, service, account)); + } + + private async doGetPassword(keytar: KeytarModule, service: string, account: string): Promise { + this.logService.trace('Doing get password from keytar:', service, account); const password = await retry(() => keytar.getPassword(service, account), 50, 3); if (!password) { this.logService.trace('Did not get a password from keytar for account:', account); @@ -97,7 +104,7 @@ export abstract class BaseCredentialsMainService extends Disposable implements I } async setPassword(service: string, account: string, password: string): Promise { - this.logService.trace('Setting password using keytar:', service, account); + this.logService.trace('Going to set password using keytar:', service, account); let keytar: KeytarModule; try { keytar = await this.withKeytar(); @@ -106,34 +113,53 @@ export abstract class BaseCredentialsMainService extends Disposable implements I throw e; } - if (isWindows && password.length > BaseCredentialsMainService.MAX_PASSWORD_LENGTH) { - let index = 0; - let chunk = 0; - let hasNextChunk = true; - while (hasNextChunk) { - const passwordChunk = password.substring(index, index + BaseCredentialsMainService.PASSWORD_CHUNK_SIZE); - index += BaseCredentialsMainService.PASSWORD_CHUNK_SIZE; - hasNextChunk = password.length - index > 0; - - const content: ChunkedPassword = { - content: passwordChunk, - hasNextChunk: hasNextChunk - }; - await retry(() => keytar.setPassword(service, chunk ? `${account}-${chunk}` : account, JSON.stringify(content)), 50, 3); - chunk++; - } - - this.logService.trace(`Got${chunk ? ` ${chunk}-chunked` : ''} password from keytar for account:`, account); - } else { - await retry(() => keytar.setPassword(service, account, password), 50, 3); - this.logService.trace('Got password from keytar for account:', account); - } - + await this._sequencer.queue(service + account, () => this.doSetPassword(keytar, service, account, password)); this._onDidChangePassword.fire({ service, account }); } + private async doSetPassword(keytar: KeytarModule, service: string, account: string, password: string): Promise { + this.logService.trace('Doing set password from keytar:', service, account); + if (!isWindows) { + await retry(() => keytar.setPassword(service, account, password), 50, 3); + this.logService.trace('Set password from keytar for account:', account); + return; + } + + // On Windows, we sometimes have to chunk the password because the Windows Credential Manager only allows passwords of a max length. + // So to make sure we can store passwords of any length, we chunk the longer passwords and store it as multiple passwords. + // To ensure we store any password correctly, we first delete any existing password, chunks and all, and then store the new ones. + + await this.doDeletePassword(keytar, service, account); + + // if it's a short password, just store it + if (password.length <= BaseCredentialsMainService.PASSWORD_CHUNK_SIZE) { + await retry(() => keytar.setPassword(service, account, password), 50, 3); + this.logService.trace('Set password from keytar for account:', account); + return; + } + + // otherwise, chunk it and store it + let index = 0; + let chunk = 0; + let hasNextChunk = true; + while (hasNextChunk) { + const passwordChunk = password.substring(index, index + BaseCredentialsMainService.PASSWORD_CHUNK_SIZE); + index += BaseCredentialsMainService.PASSWORD_CHUNK_SIZE; + hasNextChunk = password.length - index > 0; + + const content: ChunkedPassword = { + content: passwordChunk, + hasNextChunk: hasNextChunk + }; + await retry(() => keytar.setPassword(service, chunk ? `${account}-${chunk}` : account, JSON.stringify(content)), 50, 3); + chunk++; + } + + this.logService.trace(`Set${chunk ? ` ${chunk}-chunked` : ''} password from keytar for account:`, account); + } + async deletePassword(service: string, account: string): Promise { - this.logService.trace('Deleting password using keytar:', service, account); + this.logService.trace('Going to delete password using keytar:', service, account); let keytar: KeytarModule; try { keytar = await this.withKeytar(); @@ -142,6 +168,15 @@ export abstract class BaseCredentialsMainService extends Disposable implements I throw e; } + const result = await this._sequencer.queue(service + account, () => this.doDeletePassword(keytar, service, account)); + if (result) { + this._onDidChangePassword.fire({ service, account }); + } + return result; + } + + private async doDeletePassword(keytar: KeytarModule, service: string, account: string): Promise { + this.logService.trace('Doing delete password from keytar:', service, account); const password = await keytar.getPassword(service, account); if (!password) { this.logService.trace('Did not get a password to delete from keytar for account:', account); @@ -184,7 +219,6 @@ export abstract class BaseCredentialsMainService extends Disposable implements I // Delete the first account to determine deletion success if (await keytar.deletePassword(service, account)) { - this._onDidChangePassword.fire({ service, account }); this.logService.trace(`Deleted${index ? ` ${index}-chunked` : ''} password from keytar for account:`, account); return true; } diff --git a/src/vs/platform/diagnostics/common/diagnostics.ts b/src/vs/platform/diagnostics/common/diagnostics.ts index 043ca044182..7d5af4f92da 100644 --- a/src/vs/platform/diagnostics/common/diagnostics.ts +++ b/src/vs/platform/diagnostics/common/diagnostics.ts @@ -52,6 +52,10 @@ export interface SystemInfo extends IMachineInfo { export interface IRemoteDiagnosticInfo extends IDiagnosticInfo { hostName: string; + latency?: { + current: number; + average: number; + }; } export interface IRemoteDiagnosticError { diff --git a/src/vs/platform/dialogs/common/dialogs.ts b/src/vs/platform/dialogs/common/dialogs.ts index a03114303cd..07ffac3fffd 100644 --- a/src/vs/platform/dialogs/common/dialogs.ts +++ b/src/vs/platform/dialogs/common/dialogs.ts @@ -143,7 +143,7 @@ export interface IPromptWithDefaultCancel extends IPrompt { export interface IPromptResult extends ICheckboxResult { /** - * The result of the `IPromptButton`` that was pressed or `undefined` if none. + * The result of the `IPromptButton` that was pressed or `undefined` if none. */ readonly result?: T; } @@ -546,6 +546,13 @@ export interface IFileDialogService { */ pickFileToSave(defaultUri: URI, availableFileSystems?: string[]): Promise; + /** + * The preferred folder path to open the dialog at. + * @param schemeFilter The scheme of the file path. If no filter given, the scheme of the current window is used. + * Falls back to user home in the absence of a setting. + */ + preferredHome(schemeFilter?: string): Promise; + /** * Shows a save file dialog and returns the chosen file URI. */ diff --git a/src/vs/platform/dnd/browser/dnd.ts b/src/vs/platform/dnd/browser/dnd.ts index a78eebf10d4..04d024b9675 100644 --- a/src/vs/platform/dnd/browser/dnd.ts +++ b/src/vs/platform/dnd/browser/dnd.ts @@ -358,3 +358,52 @@ export const Extensions = { Registry.add(Extensions.DragAndDropContribution, new DragAndDropContributionRegistry()); //#endregion + +//#region DND Utilities + +/** + * A singleton to store transfer data during drag & drop operations that are only valid within the application. + */ +export class LocalSelectionTransfer { + + private static readonly INSTANCE = new LocalSelectionTransfer(); + + private data?: T[]; + private proto?: T; + + private constructor() { + // protect against external instantiation + } + + static getInstance(): LocalSelectionTransfer { + return LocalSelectionTransfer.INSTANCE as LocalSelectionTransfer; + } + + hasData(proto: T): boolean { + return proto && proto === this.proto; + } + + clearData(proto: T): void { + if (this.hasData(proto)) { + this.proto = undefined; + this.data = undefined; + } + } + + getData(proto: T): T[] | undefined { + if (this.hasData(proto)) { + return this.data; + } + + return undefined; + } + + setData(data: T[], proto: T): void { + if (proto) { + this.data = data; + this.proto = proto; + } + } +} + +//#endregion diff --git a/src/vs/platform/driver/browser/driver.ts b/src/vs/platform/driver/browser/driver.ts index ce2167ba328..9b00c056de5 100644 --- a/src/vs/platform/driver/browser/driver.ts +++ b/src/vs/platform/driver/browser/driver.ts @@ -6,11 +6,25 @@ import { getClientArea, getTopLeftOffset } from 'vs/base/browser/dom'; import { coalesce } from 'vs/base/common/arrays'; import { language, locale } from 'vs/base/common/platform'; -import { IElement, ILocaleInfo, ILocalizedStrings, IWindowDriver } from 'vs/platform/driver/common/driver'; +import { IElement, ILocaleInfo, ILocalizedStrings, ILogFile, IWindowDriver } from 'vs/platform/driver/common/driver'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { IFileService } from 'vs/platform/files/common/files'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import localizedStrings from 'vs/platform/languagePacks/common/localizedStrings'; +import { getLogs } from 'vs/platform/log/browser/log'; export class BrowserWindowDriver implements IWindowDriver { + constructor( + @IFileService private readonly fileService: IFileService, + @IEnvironmentService private readonly environmentService: IEnvironmentService + ) { + } + + async getLogs(): Promise { + return getLogs(this.fileService, this.environmentService); + } + async setValue(selector: string, text: string): Promise { const element = document.querySelector(selector); @@ -25,10 +39,6 @@ export class BrowserWindowDriver implements IWindowDriver { inputElement.dispatchEvent(event); } - async getTitle(): Promise { - return document.title; - } - async isActiveElement(selector: string): Promise { const element = document.querySelector(selector); @@ -198,19 +208,11 @@ export class BrowserWindowDriver implements IWindowDriver { return { x, y }; } - click(selector: string, xoffset?: number, yoffset?: number): Promise { - - // This is actually not used in the playwright drivers - // that can implement `click` natively via the driver - - throw new Error('Method not implemented.'); - } - async exitApplication(): Promise { // No-op in web } } -export function registerWindowDriver(): void { - Object.assign(window, { driver: new BrowserWindowDriver() }); +export function registerWindowDriver(instantiationService: IInstantiationService): void { + Object.assign(window, { driver: instantiationService.createInstance(BrowserWindowDriver) }); } diff --git a/src/vs/platform/driver/common/driver.ts b/src/vs/platform/driver/common/driver.ts index 1c593be20d1..6fae57d5f52 100644 --- a/src/vs/platform/driver/common/driver.ts +++ b/src/vs/platform/driver/common/driver.ts @@ -7,30 +7,33 @@ //*START export interface IElement { - tagName: string; - className: string; - textContent: string; - attributes: { [name: string]: string }; - children: IElement[]; - top: number; - left: number; + readonly tagName: string; + readonly className: string; + readonly textContent: string; + readonly attributes: { [name: string]: string }; + readonly children: IElement[]; + readonly top: number; + readonly left: number; } export interface ILocaleInfo { - language: string; - locale?: string; + readonly language: string; + readonly locale?: string; } export interface ILocalizedStrings { - open: string; - close: string; - find: string; + readonly open: string; + readonly close: string; + readonly find: string; +} + +export interface ILogFile { + readonly relativePath: string; + readonly contents: string; } export interface IWindowDriver { - click(selector: string, xoffset?: number | undefined, yoffset?: number | undefined): Promise; setValue(selector: string, text: string): Promise; - getTitle(): Promise; isActiveElement(selector: string): Promise; getElements(selector: string, recursive: boolean): Promise; getElementXY(selector: string, xoffset?: number, yoffset?: number): Promise<{ x: number; y: number }>; @@ -39,6 +42,7 @@ export interface IWindowDriver { writeInTerminal(selector: string, text: string): Promise; getLocaleInfo(): Promise; getLocalizedStrings(): Promise; + getLogs(): Promise; exitApplication(): Promise; } //*END diff --git a/src/vs/platform/driver/electron-sandbox/driver.ts b/src/vs/platform/driver/electron-sandbox/driver.ts index fb9b9a596ff..df9c305cb22 100644 --- a/src/vs/platform/driver/electron-sandbox/driver.ts +++ b/src/vs/platform/driver/electron-sandbox/driver.ts @@ -4,6 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { BrowserWindowDriver } from 'vs/platform/driver/browser/driver'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { IFileService } from 'vs/platform/files/common/files'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; interface INativeWindowDriverHelper { exitApplication(): Promise; @@ -11,8 +14,12 @@ interface INativeWindowDriverHelper { class NativeWindowDriver extends BrowserWindowDriver { - constructor(private readonly helper: INativeWindowDriverHelper) { - super(); + constructor( + private readonly helper: INativeWindowDriverHelper, + @IFileService fileService: IFileService, + @IEnvironmentService environmentService: IEnvironmentService + ) { + super(fileService, environmentService); } override exitApplication(): Promise { @@ -20,6 +27,6 @@ class NativeWindowDriver extends BrowserWindowDriver { } } -export function registerWindowDriver(helper: INativeWindowDriverHelper): void { - Object.assign(window, { driver: new NativeWindowDriver(helper) }); +export function registerWindowDriver(instantiationService: IInstantiationService, helper: INativeWindowDriverHelper): void { + Object.assign(window, { driver: instantiationService.createInstance(NativeWindowDriver, helper) }); } diff --git a/src/vs/platform/encryption/common/encryptionService.ts b/src/vs/platform/encryption/common/encryptionService.ts index 8379401883e..59d6b385014 100644 --- a/src/vs/platform/encryption/common/encryptionService.ts +++ b/src/vs/platform/encryption/common/encryptionService.ts @@ -5,9 +5,14 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -export const IEncryptionMainService = createDecorator('encryptionMainService'); +export const IEncryptionService = createDecorator('encryptionService'); +export interface IEncryptionService extends ICommonEncryptionService { + setUsePlainTextEncryption(): Promise; + getKeyStorageProvider(): Promise; +} -export interface IEncryptionMainService extends ICommonEncryptionService { } +export const IEncryptionMainService = createDecorator('encryptionMainService'); +export interface IEncryptionMainService extends IEncryptionService { } export interface ICommonEncryptionService { @@ -16,4 +21,37 @@ export interface ICommonEncryptionService { encrypt(value: string): Promise; decrypt(value: string): Promise; + + isEncryptionAvailable(): Promise; +} + +export const enum KnownStorageProvider { + unknown = 'unknown', + basicText = 'basic_text', + + // Linux + gnomeAny = 'gnome_any', + gnomeLibsecret = 'gnome_libsecret', + gnomeKeyring = 'gnome_keyring', + kwallet = 'kwallet', + kwallet5 = 'kwallet5', + kwallet6 = 'kwallet6', + + // Windows + dplib = 'dpapi', + + // macOS + keychainAccess = 'keychain_access', +} + +export function isKwallet(backend: string): boolean { + return backend === KnownStorageProvider.kwallet + || backend === KnownStorageProvider.kwallet5 + || backend === KnownStorageProvider.kwallet6; +} + +export function isGnome(backend: string): boolean { + return backend === KnownStorageProvider.gnomeAny + || backend === KnownStorageProvider.gnomeLibsecret + || backend === KnownStorageProvider.gnomeKeyring; } diff --git a/src/vs/platform/encryption/electron-main/encryptionMainService.ts b/src/vs/platform/encryption/electron-main/encryptionMainService.ts new file mode 100644 index 00000000000..0589dc473b9 --- /dev/null +++ b/src/vs/platform/encryption/electron-main/encryptionMainService.ts @@ -0,0 +1,124 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { safeStorage as safeStorageElectron, app } from 'electron'; +import { isMacintosh, isWindows } from 'vs/base/common/platform'; +import { KnownStorageProvider, IEncryptionMainService } from 'vs/platform/encryption/common/encryptionService'; +import { ILogService } from 'vs/platform/log/common/log'; + +// These APIs are currently only supported in our custom build of electron so +// we need to guard against them not being available. +interface ISafeStorageAdditionalAPIs { + setUsePlainTextEncryption(usePlainText: boolean): void; + getSelectedStorageBackend(): string; +} + +const safeStorage: typeof import('electron').safeStorage & Partial = safeStorageElectron; + +export class EncryptionMainService implements IEncryptionMainService { + _serviceBrand: undefined; + + constructor( + private readonly machineId: string, + @ILogService private readonly logService: ILogService + ) { + // if this commandLine switch is set, the user has opted in to using basic text encryption + if (app.commandLine.getSwitchValue('password-store') === 'basic_text') { + safeStorage.setUsePlainTextEncryption?.(true); + } + } + + async encrypt(value: string): Promise { + this.logService.trace('[EncryptionMainService] Encrypting value.'); + try { + const result = JSON.stringify(safeStorage.encryptString(value)); + this.logService.trace('[EncryptionMainService] Encrypted value.'); + return result; + } catch (e) { + this.logService.error(e); + throw e; + } + } + + async decrypt(value: string): Promise { + let parsedValue: { data: string }; + try { + parsedValue = JSON.parse(value); + if (!parsedValue.data) { + this.logService.trace('[EncryptionMainService] Unable to parse encrypted value. Attempting old decryption.'); + return this.oldDecrypt(value); + } + } catch (e) { + this.logService.trace('[EncryptionMainService] Unable to parse encrypted value. Attempting old decryption.', e); + return this.oldDecrypt(value); + } + const bufferToDecrypt = Buffer.from(parsedValue.data); + + this.logService.trace('[EncryptionMainService] Decrypting value.'); + try { + const result = safeStorage.decryptString(bufferToDecrypt); + this.logService.trace('[EncryptionMainService] Decrypted value.'); + return result; + } catch (e) { + this.logService.error(e); + throw e; + } + } + + isEncryptionAvailable(): Promise { + return Promise.resolve(safeStorage.isEncryptionAvailable()); + } + + getKeyStorageProvider(): Promise { + if (isWindows) { + return Promise.resolve(KnownStorageProvider.dplib); + } + if (isMacintosh) { + return Promise.resolve(KnownStorageProvider.keychainAccess); + } + if (safeStorage.getSelectedStorageBackend) { + try { + const result = safeStorage.getSelectedStorageBackend() as KnownStorageProvider; + return Promise.resolve(result); + } catch (e) { + this.logService.error(e); + } + } + return Promise.resolve(KnownStorageProvider.unknown); + } + + async setUsePlainTextEncryption(): Promise { + if (isWindows) { + throw new Error('Setting plain text encryption is not supported on Windows.'); + } + + if (isMacintosh) { + throw new Error('Setting plain text encryption is not supported on macOS.'); + } + + if (!safeStorage.setUsePlainTextEncryption) { + throw new Error('Setting plain text encryption is not supported.'); + } + + safeStorage.setUsePlainTextEncryption(true); + } + + // TODO: Remove this after a few releases + private async oldDecrypt(value: string): Promise { + let encryption: { decrypt(salt: string, value: string): Promise }; + try { + encryption = await new Promise((resolve, reject) => require(['vscode-encrypt'], resolve, reject)); + } catch (e) { + return value; + } + + try { + return encryption.decrypt(this.machineId, value); + } catch (e) { + this.logService.error(e); + return value; + } + } +} diff --git a/src/vs/platform/encryption/node/encryptionMainService.ts b/src/vs/platform/encryption/node/encryptionMainService.ts index 5396bd31b96..568c305c61b 100644 --- a/src/vs/platform/encryption/node/encryptionMainService.ts +++ b/src/vs/platform/encryption/node/encryptionMainService.ts @@ -52,4 +52,13 @@ export class EncryptionMainService implements ICommonEncryptionService { return value; } } + + async isEncryptionAvailable(): Promise { + try { + await this.encryption(); + return true; + } catch (e) { + return false; + } + } } diff --git a/src/vs/platform/environment/common/argv.ts b/src/vs/platform/environment/common/argv.ts index 3fd7438bad4..2bbfd487d75 100644 --- a/src/vs/platform/environment/common/argv.ts +++ b/src/vs/platform/environment/common/argv.ts @@ -93,7 +93,6 @@ export interface NativeParsedArgs { 'crash-reporter-directory'?: string; 'crash-reporter-id'?: string; 'skip-add-to-recently-opened'?: boolean; - 'max-memory'?: string; 'file-write'?: boolean; 'file-chmod'?: boolean; 'enable-smoke-test-driver'?: boolean; @@ -110,6 +109,7 @@ export interface NativeParsedArgs { 'locate-shell-integration-path'?: string; 'profile'?: string; 'profile-temp'?: boolean; + 'disable-chromium-sandbox'?: boolean; 'enable-coi'?: boolean; diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts index 66e37b69e3a..96ccb252006 100644 --- a/src/vs/platform/environment/common/environment.ts +++ b/src/vs/platform/environment/common/environment.ts @@ -135,7 +135,6 @@ export interface INativeEnvironmentService extends IEnvironmentService { tmpDir: URI; userDataPath: string; machineSettingsResource: URI; - installSourcePath: string; // --- extensions extensionsPath: string; @@ -146,7 +145,6 @@ export interface INativeEnvironmentService extends IEnvironmentService { disableKeytar?: boolean; crossOriginIsolated?: boolean; - isRemoteServer?: boolean; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // diff --git a/src/vs/platform/environment/common/environmentService.ts b/src/vs/platform/environment/common/environmentService.ts index cabac5aa087..78eccd30b05 100644 --- a/src/vs/platform/environment/common/environmentService.ts +++ b/src/vs/platform/environment/common/environmentService.ts @@ -5,7 +5,7 @@ import { toLocalISOString } from 'vs/base/common/date'; import { memoize } from 'vs/base/common/decorators'; -import { FileAccess } from 'vs/base/common/network'; +import { FileAccess, Schemas } from 'vs/base/common/network'; import { dirname, join, normalize, resolve } from 'vs/base/common/path'; import { env } from 'vs/base/common/process'; import { joinPath } from 'vs/base/common/resources'; @@ -65,10 +65,10 @@ export abstract class AbstractNativeEnvironmentService implements INativeEnviron get stateResource(): URI { return joinPath(this.appSettingsHome, 'globalStorage', 'storage.json'); } @memoize - get userRoamingDataHome(): URI { return this.appSettingsHome; } + get userRoamingDataHome(): URI { return this.appSettingsHome.with({ scheme: Schemas.vscodeUserData }); } @memoize - get userDataSyncHome(): URI { return joinPath(this.userRoamingDataHome, 'sync'); } + get userDataSyncHome(): URI { return joinPath(this.appSettingsHome, 'sync'); } get logsHome(): URI { if (!this.args.logsPath) { @@ -110,9 +110,6 @@ export abstract class AbstractNativeEnvironmentService implements INativeEnviron @memoize get untitledWorkspacesHome(): URI { return URI.file(join(this.userDataPath, 'Workspaces')); } - @memoize - get installSourcePath(): string { return join(this.userDataPath, 'installSource'); } - @memoize get builtinExtensionsPath(): string { const cliBuiltinExtensionsDir = this.args['builtin-extensions-dir']; diff --git a/src/vs/platform/environment/electron-main/environmentMainService.ts b/src/vs/platform/environment/electron-main/environmentMainService.ts index a783410ccd7..1fd54c5997b 100644 --- a/src/vs/platform/environment/electron-main/environmentMainService.ts +++ b/src/vs/platform/environment/electron-main/environmentMainService.ts @@ -5,6 +5,7 @@ import { memoize } from 'vs/base/common/decorators'; import { join } from 'vs/base/common/path'; +import { isLinux } from 'vs/base/common/platform'; import { createStaticIPCHandle } from 'vs/base/parts/ipc/node/ipc.net'; import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService'; @@ -34,10 +35,15 @@ export interface IEnvironmentMainService extends INativeEnvironmentService { // --- config readonly disableUpdates: boolean; + + unsetSnapExportedVariables(): void; + restoreSnapExportedVariables(): void; } export class EnvironmentMainService extends NativeEnvironmentService implements IEnvironmentMainService { + private _snapEnv: Record = {}; + @memoize get cachedLanguagesPath(): string { return join(this.userDataPath, 'clp'); } @@ -64,4 +70,39 @@ export class EnvironmentMainService extends NativeEnvironmentService implements @memoize get useCodeCache(): boolean { return !!this.codeCachePath; } + + unsetSnapExportedVariables() { + if (!isLinux) { + return; + } + for (const key in process.env) { + if (key.endsWith('_VSCODE_SNAP_ORIG')) { + const originalKey = key.slice(0, -17); // Remove the _VSCODE_SNAP_ORIG suffix + if (this._snapEnv[originalKey]) { + continue; + } + // Preserve the original value in case the snap env is re-entered + if (process.env[originalKey]) { + this._snapEnv[originalKey] = process.env[originalKey]!; + } + // Copy the original value from before entering the snap env if available, + // if not delete the env variable. + if (process.env[key]) { + process.env[originalKey] = process.env[key]; + } else { + delete process.env[originalKey]; + } + } + } + } + + restoreSnapExportedVariables() { + if (!isLinux) { + return; + } + for (const key in this._snapEnv) { + process.env[key] = this._snapEnv[key]; + delete this._snapEnv[key]; + } + } } diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index 8f94ff9c6c4..fbae6c3e4ed 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -85,7 +85,7 @@ export const OPTIONS: OptionDescriptions> = { 'builtin-extensions-dir': { type: 'string' }, 'list-extensions': { type: 'boolean', cat: 'e', description: localize('listExtensions', "List the installed extensions.") }, 'show-versions': { type: 'boolean', cat: 'e', description: localize('showVersions', "Show versions of installed extensions, when using --list-extensions.") }, - 'category': { type: 'string', cat: 'e', description: localize('category', "Filters installed extensions by provided category, when using --list-extensions."), args: 'category' }, + 'category': { type: 'string', allowEmptyValue: true, cat: 'e', description: localize('category', "Filters installed extensions by provided category, when using --list-extensions."), args: 'category' }, 'install-extension': { type: 'string[]', cat: 'e', args: 'ext-id | path', description: localize('installExtension', "Installs or updates an extension. The argument is either an extension id or a path to a VSIX. The identifier of an extension is '${publisher}.${name}'. Use '--force' argument to update to latest version. To install a specific version provide '@${version}'. For example: 'vscode.csharp@1.2.3'.") }, 'pre-release': { type: 'boolean', cat: 'e', description: localize('install prerelease', "Installs the pre-release version of the extension, when using --install-extension") }, 'uninstall-extension': { type: 'string[]', cat: 'e', args: 'ext-id', description: localize('uninstallExtension', "Uninstalls an extension.") }, @@ -109,8 +109,8 @@ export const OPTIONS: OptionDescriptions> = { 'inspect-extensions': { type: 'string', allowEmptyValue: true, deprecates: ['debugPluginHost'], args: 'port', cat: 't', description: localize('inspect-extensions', "Allow debugging and profiling of extensions. Check the developer tools for the connection URI.") }, '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.") }, 'ms-enable-electron-run-as-node': { type: 'boolean', global: true }, - 'max-memory': { type: 'string', cat: 't', description: localize('maxMemory', "Max memory size for a window (in Mbytes)."), args: 'memory' }, 'telemetry': { type: 'boolean', cat: 't', description: localize('telemetry', "Shows all telemetry events which VS code collects.") }, 'remote': { type: 'string', allowEmptyValue: true }, diff --git a/src/vs/platform/environment/node/argvHelper.ts b/src/vs/platform/environment/node/argvHelper.ts index 610ba3d774a..74a7369225d 100644 --- a/src/vs/platform/environment/node/argvHelper.ts +++ b/src/vs/platform/environment/node/argvHelper.ts @@ -9,8 +9,6 @@ import { localize } from 'vs/nls'; import { NativeParsedArgs } from 'vs/platform/environment/common/argv'; import { ErrorReporter, OPTIONS, parseArgs } from 'vs/platform/environment/node/argv'; -const MIN_MAX_MEMORY_SIZE_MB = 2048; - function parseAndValidate(cmdLineArgs: string[], reportWarnings: boolean): NativeParsedArgs { const onMultipleValues = (id: string, val: string) => { console.warn(localize('multipleValues', "Option '{0}' is defined more than once. Using value '{1}'.", id, val)); @@ -44,11 +42,7 @@ function parseAndValidate(cmdLineArgs: string[], reportWarnings: boolean): Nativ const args = parseArgs(cmdLineArgs, OPTIONS, reportWarnings ? errorReporter : undefined); if (args.goto) { - args._.forEach(arg => assert(/^(\w:)?[^:]+(:\d*){0,2}$/.test(arg), localize('gotoValidation', "Arguments in `--goto` mode should be in the format of `FILE(:LINE(:CHARACTER))`."))); - } - - if (args['max-memory']) { - assert(parseInt(args['max-memory']) >= MIN_MAX_MEMORY_SIZE_MB, `The max-memory argument cannot be specified lower than ${MIN_MAX_MEMORY_SIZE_MB} MB.`); + args._.forEach(arg => assert(/^(\w:)?[^:]+(:\d*){0,2}:?$/.test(arg), localize('gotoValidation', "Arguments in `--goto` mode should be in the format of `FILE(:LINE(:CHARACTER))`."))); } return args; diff --git a/src/vs/platform/environment/test/electron-main/environmentMainService.test.ts b/src/vs/platform/environment/test/electron-main/environmentMainService.test.ts new file mode 100644 index 00000000000..deb22c605fc --- /dev/null +++ b/src/vs/platform/environment/test/electron-main/environmentMainService.test.ts @@ -0,0 +1,128 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { EnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService'; +import product from 'vs/platform/product/common/product'; +import { isLinux } from 'vs/base/common/platform'; + +suite('EnvironmentMainService', () => { + + test('can unset and restore snap env variables', () => { + const service = new EnvironmentMainService({ '_': [] }, { '_serviceBrand': undefined, ...product }); + + process.env['TEST_ARG1_VSCODE_SNAP_ORIG'] = 'original'; + process.env['TEST_ARG1'] = 'modified'; + process.env['TEST_ARG2_SNAP'] = 'test_arg2'; + process.env['TEST_ARG3_VSCODE_SNAP_ORIG'] = ''; + process.env['TEST_ARG3'] = 'test_arg3_non_empty'; + + // Unset snap env variables + service.unsetSnapExportedVariables(); + if (isLinux) { + assert.strictEqual(process.env['TEST_ARG1'], 'original'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], undefined); + } else { + assert.strictEqual(process.env['TEST_ARG1'], 'modified'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], 'test_arg3_non_empty'); + } + + // Restore snap env variables + service.restoreSnapExportedVariables(); + if (isLinux) { + assert.strictEqual(process.env['TEST_ARG1'], 'modified'); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], 'test_arg3_non_empty'); + } else { + assert.strictEqual(process.env['TEST_ARG1'], 'modified'); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], 'test_arg3_non_empty'); + } + }); + + test('can invoke unsetSnapExportedVariables and restoreSnapExportedVariables multiple times', () => { + const service = new EnvironmentMainService({ '_': [] }, { '_serviceBrand': undefined, ...product }); + // Mock snap environment + process.env['SNAP'] = '1'; + process.env['SNAP_REVISION'] = 'test_revision'; + + process.env['TEST_ARG1_VSCODE_SNAP_ORIG'] = 'original'; + process.env['TEST_ARG1'] = 'modified'; + process.env['TEST_ARG2_SNAP'] = 'test_arg2'; + process.env['TEST_ARG3_VSCODE_SNAP_ORIG'] = ''; + process.env['TEST_ARG3'] = 'test_arg3_non_empty'; + + // Unset snap env variables + service.unsetSnapExportedVariables(); + service.unsetSnapExportedVariables(); + service.unsetSnapExportedVariables(); + if (isLinux) { + assert.strictEqual(process.env['TEST_ARG1'], 'original'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], undefined); + } else { + assert.strictEqual(process.env['TEST_ARG1'], 'modified'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], 'test_arg3_non_empty'); + } + + // Restore snap env variables + service.restoreSnapExportedVariables(); + service.restoreSnapExportedVariables(); + if (isLinux) { + assert.strictEqual(process.env['TEST_ARG1'], 'modified'); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], 'test_arg3_non_empty'); + } else { + assert.strictEqual(process.env['TEST_ARG1'], 'modified'); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], 'test_arg3_non_empty'); + } + + // Unset snap env variables + service.unsetSnapExportedVariables(); + if (isLinux) { + assert.strictEqual(process.env['TEST_ARG1'], 'original'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], undefined); + } else { + assert.strictEqual(process.env['TEST_ARG1'], 'modified'); + assert.strictEqual(process.env['TEST_ARG2'], undefined); + assert.strictEqual(process.env['TEST_ARG1_VSCODE_SNAP_ORIG'], 'original'); + assert.strictEqual(process.env['TEST_ARG2_SNAP'], 'test_arg2'); + assert.strictEqual(process.env['TEST_ARG3_VSCODE_SNAP_ORIG'], ''); + assert.strictEqual(process.env['TEST_ARG3'], 'test_arg3_non_empty'); + } + }); +}); diff --git a/src/vs/platform/environment/test/node/nativeModules.test.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts similarity index 87% rename from src/vs/platform/environment/test/node/nativeModules.test.ts rename to src/vs/platform/environment/test/node/nativeModules.integrationTest.ts index c538d8c3220..bd10be78b29 100644 --- a/src/vs/platform/environment/test/node/nativeModules.test.ts +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts @@ -40,10 +40,10 @@ flakySuite('Native Modules (all platforms)', () => { assert.ok(typeof nodePty.spawn === 'function', testErrorMessage('node-pty')); }); - (process.type === 'renderer' ? test.skip /* TODO@electron module is not context aware yet and thus cannot load in Electron renderer used by tests */ : test)('spdlog', async () => { - const spdlog = await import('spdlog'); - assert.ok(typeof spdlog.createRotatingLogger === 'function', testErrorMessage('spdlog')); - assert.ok(typeof spdlog.version === 'number', testErrorMessage('spdlog')); + (process.type === 'renderer' ? test.skip /* TODO@electron module is not context aware yet and thus cannot load in Electron renderer used by tests */ : test)('@vscode/spdlog', async () => { + const spdlog = await import('@vscode/spdlog'); + assert.ok(typeof spdlog.createRotatingLogger === 'function', testErrorMessage('@vscode/spdlog')); + assert.ok(typeof spdlog.version === 'number', testErrorMessage('@vscode/spdlog')); }); test('@parcel/watcher', async () => { @@ -109,10 +109,10 @@ flakySuite('Native Modules (all platforms)', () => { (!isWindows ? suite.skip : suite)('Native Modules (Windows)', () => { - (process.type === 'renderer' ? test.skip /* TODO@electron module is not context aware yet and thus cannot load in Electron renderer used by tests */ : test)('windows-mutex', async () => { - const mutex = await import('windows-mutex'); - assert.ok(mutex && typeof mutex.isActive === 'function', testErrorMessage('windows-mutex')); - assert.ok(typeof mutex.isActive === 'function', testErrorMessage('windows-mutex')); + (process.type === 'renderer' ? test.skip /* TODO@electron module is not context aware yet and thus cannot load in Electron renderer used by tests */ : test)('@vscode/windows-mutex', async () => { + const mutex = await import('@vscode/windows-mutex'); + assert.ok(mutex && typeof mutex.isActive === 'function', testErrorMessage('@vscode/windows-mutex')); + assert.ok(typeof mutex.isActive === 'function', testErrorMessage('@vscode/windows-mutex')); }); test('windows-foreground-love', async () => { @@ -123,16 +123,16 @@ flakySuite('Native Modules (all platforms)', () => { assert.ok(typeof result === 'boolean', testErrorMessage('windows-foreground-love')); }); - test('windows-process-tree', async () => { - const processTree = await import('windows-process-tree'); - assert.ok(typeof processTree.getProcessTree === 'function', testErrorMessage('windows-process-tree')); + test('@vscode/windows-process-tree', async () => { + const processTree = await import('@vscode/windows-process-tree'); + assert.ok(typeof processTree.getProcessTree === 'function', testErrorMessage('@vscode/windows-process-tree')); return new Promise((resolve, reject) => { processTree.getProcessTree(process.pid, tree => { if (tree) { resolve(); } else { - reject(new Error(testErrorMessage('windows-process-tree'))); + reject(new Error(testErrorMessage('@vscode/windows-process-tree'))); } }); }); @@ -146,13 +146,13 @@ flakySuite('Native Modules (all platforms)', () => { assert.ok(typeof result === 'string' || typeof result === 'undefined', testErrorMessage('@vscode/windows-registry')); }); - test('vscode-windows-ca-certs', async () => { + test('@vscode/windows-ca-certs', async () => { // @ts-ignore we do not directly depend on this module anymore - // but indirectly from our dependency to `vscode-proxy-agent` + // but indirectly from our dependency to `@vscode/proxy-agent` // we still want to ensure this module can work properly. - const windowsCerts = await import('vscode-windows-ca-certs'); + const windowsCerts = await import('@vscode/windows-ca-certs'); const store = new windowsCerts.Crypt32(); - assert.ok(windowsCerts, testErrorMessage('vscode-windows-ca-certs')); + assert.ok(windowsCerts, testErrorMessage('@vscode/windows-ca-certs')); let certCount = 0; try { while (store.next()) { diff --git a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts index 78eb1b06f24..a62ab547fcf 100644 --- a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts +++ b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts @@ -10,31 +10,30 @@ import { CancellationError, getErrorMessage } from 'vs/base/common/errors'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; import { isWeb } from 'vs/base/common/platform'; +import { isDefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import * as nls from 'vs/nls'; import { ExtensionManagementError, IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementParticipant, IGalleryExtension, ILocalExtension, InstallOperation, IExtensionsControlManifest, StatisticType, isTargetPlatformCompatible, TargetPlatformToString, ExtensionManagementErrorCode, - InstallOptions, InstallVSIXOptions, UninstallOptions, Metadata, InstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionResult, UninstallExtensionEvent, IExtensionManagementService + InstallOptions, InstallVSIXOptions, UninstallOptions, Metadata, InstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionResult, UninstallExtensionEvent, IExtensionManagementService, InstallExtensionInfo } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { areSameExtensions, ExtensionKey, getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; +import { areSameExtensions, ExtensionKey, getGalleryExtensionId, getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { ExtensionType, IExtensionManifest, isApplicationScopedExtension, TargetPlatform } from 'vs/platform/extensions/common/extensions'; import { ILogService } from 'vs/platform/log/common/log'; import { IProductService } from 'vs/platform/product/common/productService'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -export const enum ExtensionVerificationStatus { - 'Verified' = 'Verified', - 'Unverified' = 'Unverified', - 'UnknownError' = 'UnknownError', -} +export type ExtensionVerificationStatus = boolean | string; +export type InstallableExtension = { readonly manifest: IExtensionManifest; extension: IGalleryExtension | URI; options: InstallOptions & InstallVSIXOptions }; export type InstallExtensionTaskOptions = InstallOptions & InstallVSIXOptions & { readonly profileLocation: URI }; export interface IInstallExtensionTask { readonly identifier: IExtensionIdentifier; readonly source: IGalleryExtension | URI; readonly operation: InstallOperation; + readonly profileLocation: URI; readonly verificationStatus?: ExtensionVerificationStatus; run(): Promise; waitUntilTaskIsFinished(): Promise; @@ -95,19 +94,54 @@ export abstract class AbstractExtensionManagementService extends Disposable impl async installFromGallery(extension: IGalleryExtension, options: InstallOptions = {}): Promise { try { - if (!this.galleryService.isEnabled()) { - throw new ExtensionManagementError(nls.localize('MarketPlaceDisabled', "Marketplace is not enabled"), ExtensionManagementErrorCode.Internal); + const results = await this.installGalleryExtensions([{ extension, options }]); + const result = results.find(({ identifier }) => areSameExtensions(identifier, extension.identifier)); + if (result?.local) { + return result?.local; } - const compatible = await this.checkAndGetCompatibleVersion(extension, !!options.installGivenVersion, !!options.installPreReleaseVersion); - return await this.installExtension(compatible.manifest, compatible.extension, options); + if (result?.error) { + throw result.error; + } + throw toExtensionManagementError(new Error(`Unknown error while installing extension ${extension.identifier.id}`)); } catch (error) { - reportTelemetry(this.telemetryService, 'extensionGallery:install', { extensionData: getGalleryExtensionTelemetryData(extension), error }); - this.logService.error(`Failed to install extension.`, extension.identifier.id); - this.logService.error(error); throw toExtensionManagementError(error); } } + async installGalleryExtensions(extensions: InstallExtensionInfo[]): Promise { + if (!this.galleryService.isEnabled()) { + throw new ExtensionManagementError(nls.localize('MarketPlaceDisabled', "Marketplace is not enabled"), ExtensionManagementErrorCode.Internal); + } + + const results: InstallExtensionResult[] = []; + const installableExtensions: InstallableExtension[] = []; + + await Promise.allSettled(extensions.map(async ({ extension, options }) => { + try { + const compatible = await this.checkAndGetCompatibleVersion(extension, !!options?.installGivenVersion, !!options?.installPreReleaseVersion); + installableExtensions.push({ ...compatible, options }); + } catch (error) { + results.push({ identifier: extension.identifier, operation: InstallOperation.Install, source: extension, error }); + } + })); + + if (installableExtensions.length) { + results.push(...await this.installExtensions(installableExtensions)); + } + + for (const result of results) { + if (result.error) { + this.logService.error(`Failed to install extension.`, result.identifier.id); + this.logService.error(result.error); + if (result.source && !URI.isUri(result.source)) { + reportTelemetry(this.telemetryService, 'extensionGallery:install', { extensionData: getGalleryExtensionTelemetryData(result.source), error: result.error }); + } + } + } + + return results; + } + async uninstall(extension: ILocalExtension, options: UninstallOptions = {}): Promise { this.logService.trace('ExtensionManagementService#uninstall', extension.identifier.id); return this.uninstallExtension(extension, options); @@ -128,12 +162,28 @@ export abstract class AbstractExtensionManagementService extends Disposable impl this.participants.push(participant); } - protected async installExtension(manifest: IExtensionManifest, extension: URI | IGalleryExtension, options: InstallOptions & InstallVSIXOptions): Promise { + protected async installExtensions(extensions: InstallableExtension[]): Promise { + const results: InstallExtensionResult[] = []; + await Promise.allSettled(extensions.map(async e => { + try { + const result = await this.installExtension(e); + results.push(...result); + } catch (error) { + results.push({ identifier: { id: getGalleryExtensionId(e.manifest.publisher, e.manifest.name) }, operation: InstallOperation.Install, source: e.extension, error }); + } + })); + this._onDidInstallExtensions.fire(results); + return results; + } + private async installExtension({ manifest, extension, options }: InstallableExtension): Promise { + + const isApplicationScoped = options.isApplicationScoped || options.isBuiltin || isApplicationScopedExtension(manifest); const installExtensionTaskOptions: InstallExtensionTaskOptions = { ...options, installOnlyNewlyAddedFromExtensionPack: URI.isUri(extension) ? options.installOnlyNewlyAddedFromExtensionPack : true, /* always true for gallery extensions */ - profileLocation: isApplicationScopedExtension(manifest) ? this.userDataProfilesService.defaultProfile.extensionsResource : options.profileLocation ?? this.getCurrentExtensionsManifestLocation() + isApplicationScoped, + profileLocation: isApplicationScoped ? this.userDataProfilesService.defaultProfile.extensionsResource : options.profileLocation ?? this.getCurrentExtensionsManifestLocation() }; const getInstallExtensionTaskKey = (extension: IGalleryExtension) => `${ExtensionKey.create(extension).toString()}${installExtensionTaskOptions.profileLocation ? `-${installExtensionTaskOptions.profileLocation.toString()}` : ''}`; @@ -142,7 +192,8 @@ export abstract class AbstractExtensionManagementService extends Disposable impl const installingExtension = this.installingExtensions.get(getInstallExtensionTaskKey(extension)); if (installingExtension) { this.logService.info('Extensions is already requested to install', extension.identifier.id); - return installingExtension.task.waitUntilTaskIsFinished(); + await installingExtension.task.waitUntilTaskIsFinished(); + return []; } } @@ -251,7 +302,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl } catch (error) { /* ignore */ } } } - installResults.push({ local, identifier: task.identifier, operation: task.operation, source: task.source, context: installExtensionTaskOptions.context, profileLocation: installExtensionTaskOptions.profileLocation, applicationScoped: local.isApplicationScoped }); + installResults.push({ local, identifier: task.identifier, operation: task.operation, source: task.source, context: installExtensionTaskOptions.context, profileLocation: task.profileLocation, applicationScoped: local.isApplicationScoped }); } catch (error) { if (!URI.isUri(task.source)) { reportTelemetry(this.telemetryService, task.operation === InstallOperation.Update ? 'extensionGallery:update' : 'extensionGallery:install', { @@ -272,8 +323,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl } installResults.forEach(({ identifier }) => this.logService.info(`Extension installed successfully:`, identifier.id)); - this._onDidInstallExtensions.fire(installResults); - return installResults.filter(({ identifier }) => areSameExtensions(identifier, installExtensionTask.identifier))[0].local; + return installResults; } catch (error) { @@ -299,8 +349,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl } } - this._onDidInstallExtensions.fire(allInstallExtensionTasks.map(({ task }) => ({ identifier: task.identifier, operation: InstallOperation.Install, source: task.source, context: installExtensionTaskOptions.context, profileLocation: installExtensionTaskOptions.profileLocation }))); - throw error; + return allInstallExtensionTasks.map(({ task }) => ({ identifier: task.identifier, operation: InstallOperation.Install, source: task.source, context: installExtensionTaskOptions.context, profileLocation: installExtensionTaskOptions.profileLocation, error })); } finally { // Finally, remove all the tasks from the cache for (const { task } of allInstallExtensionTasks) { @@ -643,7 +692,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl return manifest; } catch (err) { this.logService.trace('ExtensionManagementService.refreshControlCache - failed to get extension control manifest'); - return { malicious: [], deprecated: {} }; + return { malicious: [], deprecated: {}, search: [] }; } } @@ -656,7 +705,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl abstract installExtensionsFromProfile(extensions: IExtensionIdentifier[], fromProfileLocation: URI, toProfileLocation: URI): Promise; abstract getInstalled(type?: ExtensionType, profileLocation?: URI): Promise; abstract copyExtensions(fromProfileLocation: URI, toProfileLocation: URI): Promise; - abstract download(extension: IGalleryExtension, operation: InstallOperation): Promise; + abstract download(extension: IGalleryExtension, operation: InstallOperation, donotVerifySignature: boolean): Promise; abstract reinstallFromGallery(extension: ILocalExtension): Promise; abstract cleanUp(): Promise; @@ -678,7 +727,7 @@ export function joinErrors(errorOrErrors: (Error | string) | (Array; + search?: ISearchPrefferedResults[]; } abstract class AbstractExtensionGalleryService implements IExtensionGalleryService { @@ -1206,7 +1207,7 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi } if (!this.extensionsControlUrl) { - return { malicious: [], deprecated: {} }; + return { malicious: [], deprecated: {}, search: [] }; } const context = await this.requestService.request({ type: 'GET', url: this.extensionsControlUrl }, CancellationToken.None); @@ -1217,6 +1218,7 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi const result = await asJson(context); const malicious: IExtensionIdentifier[] = []; const deprecated: IStringDictionary = {}; + const search: ISearchPrefferedResults[] = []; if (result) { for (const id of result.malicious) { malicious.push({ id }); @@ -1243,9 +1245,14 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi } } } + if (result.search) { + for (const s of result.search) { + search.push(s); + } + } } - return { malicious, deprecated }; + return { malicious, deprecated, search }; } } diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts index 2864289beba..77f90157954 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts @@ -311,9 +311,15 @@ export interface IDeprecationInfo { readonly additionalInfo?: string; } +export interface ISearchPrefferedResults { + readonly query?: string; + readonly preferredResults?: string[]; +} + export interface IExtensionsControlManifest { readonly malicious: IExtensionIdentifier[]; readonly deprecated: IStringDictionary; + readonly search: ISearchPrefferedResults[]; } export const enum InstallOperation { @@ -341,6 +347,11 @@ export interface IExtensionQueryOptions { } export const IExtensionGalleryService = createDecorator('extensionGalleryService'); + +/** + * Service to interact with the Visual Studio Code Marketplace to get extensions. + * @throws Error if the Marketplace is not enabled or not reachable. + */ export interface IExtensionGalleryService { readonly _serviceBrand: undefined; isEnabled(): boolean; @@ -372,6 +383,7 @@ export interface InstallExtensionResult { readonly operation: InstallOperation; readonly source?: URI | IGalleryExtension; readonly local?: ILocalExtension; + readonly error?: Error; readonly context?: IStringDictionary; readonly profileLocation?: URI; readonly applicationScoped?: boolean; @@ -405,8 +417,14 @@ export enum ExtensionManagementErrorCode { Rename = 'Rename', CorruptZip = 'CorruptZip', IncompleteZip = 'IncompleteZip', + Signature = 'Signature', Internal = 'Internal', - Signature = 'Signature' +} + +export enum ExtensionSignaturetErrorCode { + UnknownError = 'UnknownError', + PackageIsInvalidZip = 'PackageIsInvalidZip', + SignatureArchiveIsInvalidZip = 'SignatureArchiveIsInvalidZip', } export class ExtensionManagementError extends Error { @@ -419,9 +437,11 @@ export class ExtensionManagementError extends Error { export type InstallOptions = { isBuiltin?: boolean; isMachineScoped?: boolean; + isApplicationScoped?: boolean; donotIncludePackAndDependencies?: boolean; installGivenVersion?: boolean; installPreReleaseVersion?: boolean; + donotVerifySignature?: boolean; operation?: InstallOperation; /** * Context passed through to InstallExtensionResult @@ -437,6 +457,8 @@ export interface IExtensionManagementParticipant { postUninstall(local: ILocalExtension, options: UninstallOptions, token: CancellationToken): Promise; } +export type InstallExtensionInfo = { readonly extension: IGalleryExtension; readonly options: InstallOptions }; + export const IExtensionManagementService = createDecorator('extensionManagementService'); export interface IExtensionManagementService { readonly _serviceBrand: undefined; @@ -453,6 +475,7 @@ export interface IExtensionManagementService { install(vsix: URI, options?: InstallVSIXOptions): Promise; canInstall(extension: IGalleryExtension): Promise; installFromGallery(extension: IGalleryExtension, options?: InstallOptions): Promise; + installGalleryExtensions(extensions: InstallExtensionInfo[]): Promise; installFromLocation(location: URI, profileLocation: URI): Promise; installExtensionsFromProfile(extensions: IExtensionIdentifier[], fromProfileLocation: URI, toProfileLocation: URI): Promise; uninstall(extension: ILocalExtension, options?: UninstallOptions): Promise; @@ -462,7 +485,7 @@ export interface IExtensionManagementService { copyExtensions(fromProfileLocation: URI, toProfileLocation: URI): Promise; updateMetadata(local: ILocalExtension, metadata: Partial, profileLocation?: URI): Promise; - download(extension: IGalleryExtension, operation: InstallOperation): Promise; + download(extension: IGalleryExtension, operation: InstallOperation, donotVerifySignature: boolean): Promise; registerParticipant(pariticipant: IExtensionManagementParticipant): void; getTargetPlatform(): Promise; @@ -515,8 +538,3 @@ export interface IExtensionTipsService { export const ExtensionsLabel = localize('extensions', "Extensions"); export const ExtensionsLocalizedLabel = { value: ExtensionsLabel, original: 'Extensions' }; export const PreferencesLocalizedLabel = { value: localize('preferences', "Preferences"), original: 'Preferences' }; - -export interface CLIOutput { - log(s: string): void; - error(s: string): void; -} diff --git a/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts b/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts index da71203302f..1515c45cca2 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagementCLI.ts @@ -4,15 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from 'vs/base/common/cancellation'; -import { isCancellationError } from 'vs/base/common/errors'; +import { getErrorMessage, isCancellationError } from 'vs/base/common/errors'; import { Schemas } from 'vs/base/common/network'; import { basename } from 'vs/base/common/resources'; import { gt } from 'vs/base/common/semver/semver'; import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; -import { CLIOutput, IExtensionGalleryService, IExtensionManagementService, IGalleryExtension, ILocalExtension, InstallOptions } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { EXTENSION_IDENTIFIER_REGEX, IExtensionGalleryService, IExtensionInfo, IExtensionManagementService, IGalleryExtension, ILocalExtension, InstallOptions } from 'vs/platform/extensionManagement/common/extensionManagement'; import { areSameExtensions, getGalleryExtensionId, getIdAndVersion } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { ExtensionType, EXTENSION_CATEGORIES, IExtensionManifest } from 'vs/platform/extensions/common/extensions'; +import { ILogger } from 'vs/platform/log/common/log'; const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id); @@ -27,26 +28,27 @@ function getId(manifest: IExtensionManifest, withVersion?: boolean): string { } } +type InstallVSIXInfo = { vsix: URI; installOptions: InstallOptions }; type InstallExtensionInfo = { id: string; version?: string; installOptions: InstallOptions }; - export class ExtensionManagementCLI { constructor( + protected readonly logger: ILogger, @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, - @IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService + @IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService, ) { } protected get location(): string | undefined { return undefined; } - public async listExtensions(showVersions: boolean, category?: string, profileLocation?: URI, output: CLIOutput = console): Promise { + public async listExtensions(showVersions: boolean, category?: string, profileLocation?: URI): Promise { let extensions = await this.extensionManagementService.getInstalled(ExtensionType.User, profileLocation); const categories = EXTENSION_CATEGORIES.map(c => c.toLowerCase()); if (category && category !== '') { if (categories.indexOf(category.toLowerCase()) < 0) { - output.log('Invalid category please enter a valid category. To list valid categories run --category without a category specified'); + this.logger.info('Invalid category please enter a valid category. To list valid categories run --category without a category specified'); return; } extensions = extensions.filter(e => { @@ -57,14 +59,14 @@ export class ExtensionManagementCLI { return false; }); } else if (category === '') { - output.log('Possible Categories: '); + this.logger.info('Possible Categories: '); categories.forEach(category => { - output.log(category); + this.logger.info(category); }); return; } if (this.location) { - output.log(localize('listFromLocation', "Extensions installed on {0}:", this.location)); + this.logger.info(localize('listFromLocation', "Extensions installed on {0}:", this.location)); } extensions = extensions.sort((e1, e2) => e1.identifier.id.localeCompare(e2.identifier.id)); @@ -72,91 +74,97 @@ export class ExtensionManagementCLI { for (const extension of extensions) { if (lastId !== extension.identifier.id) { lastId = extension.identifier.id; - output.log(getId(extension.manifest, showVersions)); + this.logger.info(getId(extension.manifest, showVersions)); } } } - public async installExtensions(extensions: (string | URI)[], builtinExtensionIds: string[], installOptions: InstallOptions, force: boolean, output: CLIOutput = console): Promise { + public async installExtensions(extensions: (string | URI)[], builtinExtensions: (string | URI)[], installOptions: InstallOptions, force: boolean): Promise { const failed: string[] = []; - const installedExtensionsManifests: IExtensionManifest[] = []; - if (extensions.length) { - output.log(this.location ? localize('installingExtensionsOnLocation', "Installing extensions on {0}...", this.location) : localize('installingExtensions', "Installing extensions...")); - } - const installed = await this.extensionManagementService.getInstalled(ExtensionType.User, installOptions.profileLocation); - const checkIfNotInstalled = (id: string, version?: string): boolean => { - const installedExtension = installed.find(i => areSameExtensions(i.identifier, { id })); - if (installedExtension) { - if (!force && (!version || (version === 'prerelease' && installedExtension.preRelease))) { - output.log(localize('alreadyInstalled-checkAndUpdate', "Extension '{0}' v{1} is already installed. Use '--force' option to update to latest version or provide '@' to install a specific version, for example: '{2}@1.2.3'.", id, installedExtension.manifest.version, id)); - return false; - } - if (version && installedExtension.manifest.version === version) { - output.log(localize('alreadyInstalled', "Extension '{0}' is already installed.", `${id}@${version}`)); - return false; - } + try { + const installedExtensionsManifests: IExtensionManifest[] = []; + if (extensions.length) { + this.logger.info(this.location ? localize('installingExtensionsOnLocation', "Installing extensions on {0}...", this.location) : localize('installingExtensions', "Installing extensions...")); } - return true; - }; - const addInstallExtensionInfo = (id: string, version: string | undefined, isBuiltin: boolean) => { - installExtensionInfos.push({ id, version: version !== 'prerelease' ? version : undefined, installOptions: { ...installOptions, isBuiltin, installPreReleaseVersion: version === 'prerelease' || installOptions.installPreReleaseVersion } }); - }; - const vsixs: URI[] = []; - const installExtensionInfos: InstallExtensionInfo[] = []; - for (const extension of extensions) { - if (extension instanceof URI) { - vsixs.push(extension); - } else { - const [id, version] = getIdAndVersion(extension); - if (checkIfNotInstalled(id, version)) { + + const installVSIXInfos: InstallVSIXInfo[] = []; + let installExtensionInfos: InstallExtensionInfo[] = []; + const addInstallExtensionInfo = (id: string, version: string | undefined, isBuiltin: boolean) => { + installExtensionInfos.push({ id, version: version !== 'prerelease' ? version : undefined, installOptions: { ...installOptions, isBuiltin, installPreReleaseVersion: version === 'prerelease' || installOptions.installPreReleaseVersion } }); + }; + for (const extension of extensions) { + if (extension instanceof URI) { + installVSIXInfos.push({ vsix: extension, installOptions }); + } else { + const [id, version] = getIdAndVersion(extension); addInstallExtensionInfo(id, version, false); } } - } - for (const extension of builtinExtensionIds) { - const [id, version] = getIdAndVersion(extension); - if (checkIfNotInstalled(id, version)) { - addInstallExtensionInfo(id, version, true); - } - } - - if (vsixs.length) { - await Promise.all(vsixs.map(async vsix => { - try { - const manifest = await this.installVSIX(vsix, { ...installOptions, isBuiltin: false }, force, output); - if (manifest) { - installedExtensionsManifests.push(manifest); - } - } catch (err) { - output.error(err.message || err.stack || err); - failed.push(vsix.toString()); + for (const extension of builtinExtensions) { + if (extension instanceof URI) { + installVSIXInfos.push({ vsix: extension, installOptions: { ...installOptions, isBuiltin: true, donotIncludePackAndDependencies: true } }); + } else { + const [id, version] = getIdAndVersion(extension); + addInstallExtensionInfo(id, version, true); } - })); - } + } - if (installExtensionInfos.length) { + const installed = await this.extensionManagementService.getInstalled(ExtensionType.User, installOptions.profileLocation); - const galleryExtensions = await this.getGalleryExtensions(installExtensionInfos); - - await Promise.all(installExtensionInfos.map(async extensionInfo => { - const gallery = galleryExtensions.get(extensionInfo.id.toLowerCase()); - if (gallery) { + if (installVSIXInfos.length) { + await Promise.all(installVSIXInfos.map(async ({ vsix, installOptions }) => { try { - const manifest = await this.installFromGallery(extensionInfo, gallery, installed, force, output); + const manifest = await this.installVSIX(vsix, installOptions, force, installed); if (manifest) { installedExtensionsManifests.push(manifest); } } catch (err) { - output.error(err.message || err.stack || err); - failed.push(extensionInfo.id); + this.logger.error(err); + failed.push(vsix.toString()); } - } else { - output.error(`${notFound(extensionInfo.version ? `${extensionInfo.id}@${extensionInfo.version}` : extensionInfo.id)}\n${useId}`); - failed.push(extensionInfo.id); - } - })); + })); + } + if (installExtensionInfos.length) { + installExtensionInfos = installExtensionInfos.filter(({ id, version }) => { + const installedExtension = installed.find(i => areSameExtensions(i.identifier, { id })); + if (installedExtension) { + if (!force && (!version || (version === 'prerelease' && installedExtension.preRelease))) { + this.logger.info(localize('alreadyInstalled-checkAndUpdate', "Extension '{0}' v{1} is already installed. Use '--force' option to update to latest version or provide '@' to install a specific version, for example: '{2}@1.2.3'.", id, installedExtension.manifest.version, id)); + return false; + } + if (version && installedExtension.manifest.version === version) { + this.logger.info(localize('alreadyInstalled', "Extension '{0}' is already installed.", `${id}@${version}`)); + return false; + } + } + return true; + }); + if (installExtensionInfos.length) { + const galleryExtensions = await this.getGalleryExtensions(installExtensionInfos); + await Promise.all(installExtensionInfos.map(async extensionInfo => { + const gallery = galleryExtensions.get(extensionInfo.id.toLowerCase()); + if (gallery) { + try { + const manifest = await this.installFromGallery(extensionInfo, gallery, installed); + if (manifest) { + installedExtensionsManifests.push(manifest); + } + } catch (err) { + this.logger.error(err.message || err.stack || err); + failed.push(extensionInfo.id); + } + } else { + this.logger.error(`${notFound(extensionInfo.version ? `${extensionInfo.id}@${extensionInfo.version}` : extensionInfo.id)}\n${useId}`); + failed.push(extensionInfo.id); + } + })); + } + } + } catch (error) { + this.logger.error(localize('error while installing extensions', "Error while installing extensions: {0}", getErrorMessage(error))); + throw error; } if (failed.length) { @@ -164,22 +172,22 @@ export class ExtensionManagementCLI { } } - private async installVSIX(vsix: URI, installOptions: InstallOptions, force: boolean, output: CLIOutput): Promise { + private async installVSIX(vsix: URI, installOptions: InstallOptions, force: boolean, installedExtensions: ILocalExtension[]): Promise { const manifest = await this.extensionManagementService.getManifest(vsix); if (!manifest) { throw new Error('Invalid vsix'); } - const valid = await this.validateVSIX(manifest, force, installOptions.profileLocation, output); + const valid = await this.validateVSIX(manifest, force, installOptions.profileLocation, installedExtensions); if (valid) { try { await this.extensionManagementService.install(vsix, installOptions); - output.log(localize('successVsixInstall', "Extension '{0}' was successfully installed.", basename(vsix))); + this.logger.info(localize('successVsixInstall', "Extension '{0}' was successfully installed.", basename(vsix))); return manifest; } catch (error) { if (isCancellationError(error)) { - output.log(localize('cancelVsixInstall', "Cancelled installing extension '{0}'.", basename(vsix))); + this.logger.info(localize('cancelVsixInstall', "Cancelled installing extension '{0}'.", basename(vsix))); return null; } else { throw error; @@ -192,41 +200,50 @@ export class ExtensionManagementCLI { private async getGalleryExtensions(extensions: InstallExtensionInfo[]): Promise> { const galleryExtensions = new Map(); const preRelease = extensions.some(e => e.installOptions.installPreReleaseVersion); - const result = await this.extensionGalleryService.getExtensions(extensions.map(e => ({ ...e, preRelease })), CancellationToken.None); - for (const extension of result) { - galleryExtensions.set(extension.identifier.id.toLowerCase(), extension); + const targetPlatform = await this.extensionManagementService.getTargetPlatform(); + const extensionInfos: IExtensionInfo[] = []; + for (const extension of extensions) { + if (EXTENSION_IDENTIFIER_REGEX.test(extension.id)) { + extensionInfos.push({ ...extension, preRelease }); + } + } + if (extensionInfos.length) { + const result = await this.extensionGalleryService.getExtensions(extensionInfos, { targetPlatform }, CancellationToken.None); + for (const extension of result) { + galleryExtensions.set(extension.identifier.id.toLowerCase(), extension); + } } return galleryExtensions; } - private async installFromGallery({ id, version, installOptions }: InstallExtensionInfo, galleryExtension: IGalleryExtension, installed: ILocalExtension[], force: boolean, output: CLIOutput): Promise { + private async installFromGallery({ id, version, installOptions }: InstallExtensionInfo, galleryExtension: IGalleryExtension, installed: ILocalExtension[]): Promise { const manifest = await this.extensionGalleryService.getManifest(galleryExtension, CancellationToken.None); - if (manifest && !this.validateExtensionKind(manifest, output)) { + if (manifest && !this.validateExtensionKind(manifest)) { return null; } const installedExtension = installed.find(e => areSameExtensions(e.identifier, galleryExtension.identifier)); if (installedExtension) { if (galleryExtension.version === installedExtension.manifest.version) { - output.log(localize('alreadyInstalled', "Extension '{0}' is already installed.", version ? `${id}@${version}` : id)); + this.logger.info(localize('alreadyInstalled', "Extension '{0}' is already installed.", version ? `${id}@${version}` : id)); return null; } - output.log(localize('updateMessage', "Updating the extension '{0}' to the version {1}", id, galleryExtension.version)); + this.logger.info(localize('updateMessage', "Updating the extension '{0}' to the version {1}", id, galleryExtension.version)); } try { if (installOptions.isBuiltin) { - output.log(version ? localize('installing builtin with version', "Installing builtin extension '{0}' v{1}...", id, version) : localize('installing builtin ', "Installing builtin extension '{0}'...", id)); + this.logger.info(version ? localize('installing builtin with version', "Installing builtin extension '{0}' v{1}...", id, version) : localize('installing builtin ', "Installing builtin extension '{0}'...", id)); } else { - output.log(version ? localize('installing with version', "Installing extension '{0}' v{1}...", id, version) : localize('installing', "Installing extension '{0}'...", id)); + this.logger.info(version ? localize('installing with version', "Installing extension '{0}' v{1}...", id, version) : localize('installing', "Installing extension '{0}'...", id)); } const local = await this.extensionManagementService.installFromGallery(galleryExtension, { ...installOptions, installGivenVersion: !!version }); - output.log(localize('successInstall', "Extension '{0}' v{1} was successfully installed.", id, local.manifest.version)); + this.logger.info(localize('successInstall', "Extension '{0}' v{1} was successfully installed.", id, local.manifest.version)); return manifest; } catch (error) { if (isCancellationError(error)) { - output.log(localize('cancelInstall', "Cancelled installing extension '{0}'.", id)); + this.logger.info(localize('cancelInstall', "Cancelled installing extension '{0}'.", id)); return null; } else { throw error; @@ -234,24 +251,24 @@ export class ExtensionManagementCLI { } } - protected validateExtensionKind(_manifest: IExtensionManifest, output: CLIOutput): boolean { + protected validateExtensionKind(_manifest: IExtensionManifest): boolean { return true; } - private async validateVSIX(manifest: IExtensionManifest, force: boolean, profileLocation: URI | undefined, output: CLIOutput): Promise { - const extensionIdentifier = { id: getGalleryExtensionId(manifest.publisher, manifest.name) }; - const installedExtensions = await this.extensionManagementService.getInstalled(ExtensionType.User, profileLocation); - const newer = installedExtensions.find(local => areSameExtensions(extensionIdentifier, local.identifier) && gt(local.manifest.version, manifest.version)); - - if (newer && !force) { - output.log(localize('forceDowngrade', "A newer version of extension '{0}' v{1} is already installed. Use '--force' option to downgrade to older version.", newer.identifier.id, newer.manifest.version, manifest.version)); - return false; + private async validateVSIX(manifest: IExtensionManifest, force: boolean, profileLocation: URI | undefined, installedExtensions: ILocalExtension[]): Promise { + if (!force) { + const extensionIdentifier = { id: getGalleryExtensionId(manifest.publisher, manifest.name) }; + const newer = installedExtensions.find(local => areSameExtensions(extensionIdentifier, local.identifier) && gt(local.manifest.version, manifest.version)); + if (newer) { + this.logger.info(localize('forceDowngrade', "A newer version of extension '{0}' v{1} is already installed. Use '--force' option to downgrade to older version.", newer.identifier.id, newer.manifest.version, manifest.version)); + return false; + } } - return this.validateExtensionKind(manifest, output); + return this.validateExtensionKind(manifest); } - public async uninstallExtensions(extensions: (string | URI)[], force: boolean, profileLocation?: URI, output: CLIOutput = console): Promise { + public async uninstallExtensions(extensions: (string | URI)[], force: boolean, profileLocation?: URI): Promise { const getExtensionId = async (extensionDescription: string | URI): Promise => { if (extensionDescription instanceof URI) { const manifest = await this.extensionManagementService.getManifest(extensionDescription); @@ -269,35 +286,35 @@ export class ExtensionManagementCLI { throw new Error(`${this.notInstalled(id)}\n${useId}`); } if (extensionsToUninstall.some(e => e.type === ExtensionType.System)) { - output.log(localize('builtin', "Extension '{0}' is a Built-in extension and cannot be uninstalled", id)); + this.logger.info(localize('builtin', "Extension '{0}' is a Built-in extension and cannot be uninstalled", id)); return; } if (!force && extensionsToUninstall.some(e => e.isBuiltin)) { - output.log(localize('forceUninstall', "Extension '{0}' is marked as a Built-in extension by user. Please use '--force' option to uninstall it.", id)); + this.logger.info(localize('forceUninstall', "Extension '{0}' is marked as a Built-in extension by user. Please use '--force' option to uninstall it.", id)); return; } - output.log(localize('uninstalling', "Uninstalling {0}...", id)); + this.logger.info(localize('uninstalling', "Uninstalling {0}...", id)); for (const extensionToUninstall of extensionsToUninstall) { await this.extensionManagementService.uninstall(extensionToUninstall, { profileLocation }); uninstalledExtensions.push(extensionToUninstall); } if (this.location) { - output.log(localize('successUninstallFromLocation', "Extension '{0}' was successfully uninstalled from {1}!", id, this.location)); + this.logger.info(localize('successUninstallFromLocation', "Extension '{0}' was successfully uninstalled from {1}!", id, this.location)); } else { - output.log(localize('successUninstall', "Extension '{0}' was successfully uninstalled!", id)); + this.logger.info(localize('successUninstall', "Extension '{0}' was successfully uninstalled!", id)); } } } - public async locateExtension(extensions: string[], output: CLIOutput = console): Promise { + public async locateExtension(extensions: string[]): Promise { const installed = await this.extensionManagementService.getInstalled(); extensions.forEach(e => { installed.forEach(i => { if (i.identifier.id === e) { if (i.location.scheme === Schemas.file) { - output.log(i.location.fsPath); + this.logger.info(i.location.fsPath); return; } } diff --git a/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts b/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts index 81d3ceb46f9..c1d91312b45 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagementIpc.ts @@ -9,7 +9,7 @@ import { cloneAndChange } from 'vs/base/common/objects'; import { URI, UriComponents } from 'vs/base/common/uri'; import { DefaultURITransformer, IURITransformer, transformAndReviveIncomingURIs } from 'vs/base/common/uriIpc'; import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IExtensionIdentifier, IExtensionTipsService, IGalleryExtension, ILocalExtension, IExtensionsControlManifest, isTargetPlatformCompatible, InstallOptions, InstallVSIXOptions, UninstallOptions, Metadata, IExtensionManagementService, DidUninstallExtensionEvent, InstallExtensionEvent, InstallExtensionResult, UninstallExtensionEvent, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { IExtensionIdentifier, IExtensionTipsService, IGalleryExtension, ILocalExtension, IExtensionsControlManifest, isTargetPlatformCompatible, InstallOptions, InstallVSIXOptions, UninstallOptions, Metadata, IExtensionManagementService, DidUninstallExtensionEvent, InstallExtensionEvent, InstallExtensionResult, UninstallExtensionEvent, InstallOperation, InstallExtensionInfo } from 'vs/platform/extensionManagement/common/extensionManagement'; import { ExtensionType, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; function transformIncomingURI(uri: UriComponents, transformer: IURITransformer | null): URI; @@ -128,6 +128,10 @@ export class ExtensionManagementChannel implements IServerChannel { case 'installFromGallery': { return this.service.installFromGallery(args[0], transformIncomingOptions(args[1], uriTransformer)); } + case 'installGalleryExtensions': { + const arg: InstallExtensionInfo[] = args[0]; + return this.service.installGalleryExtensions(arg.map(({ extension, options }) => ({ extension, options: transformIncomingOptions(options, uriTransformer) ?? {} }))); + } case 'uninstall': { return this.service.uninstall(transformIncomingExtension(args[0], uriTransformer), transformIncomingOptions(args[1], uriTransformer)); } @@ -149,7 +153,7 @@ export class ExtensionManagementChannel implements IServerChannel { return this.service.getExtensionsControlManifest(); } case 'download': { - return this.service.download(args[0], args[1]); + return this.service.download(args[0], args[1], args[2]); } case 'cleanUp': { return this.service.cleanUp(); @@ -250,6 +254,11 @@ export class ExtensionManagementChannelClient extends Disposable implements IExt return Promise.resolve(this.channel.call('installFromGallery', [extension, installOptions])).then(local => transformIncomingExtension(local, null)); } + async installGalleryExtensions(extensions: InstallExtensionInfo[]): Promise { + const results = await this.channel.call('installGalleryExtensions', [extensions]); + return results.map(e => ({ ...e, local: e.local ? transformIncomingExtension(e.local, null) : e.local, source: this.isUriComponents(e.source) ? URI.revive(e.source) : e.source, profileLocation: URI.revive(e.profileLocation) })); + } + uninstall(extension: ILocalExtension, options?: UninstallOptions): Promise { return Promise.resolve(this.channel.call('uninstall', [extension!, options])); } @@ -276,8 +285,8 @@ export class ExtensionManagementChannelClient extends Disposable implements IExt return Promise.resolve(this.channel.call('getExtensionsControlManifest')); } - async download(extension: IGalleryExtension, operation: InstallOperation): Promise { - const result = await this.channel.call('download', [extension, operation]); + async download(extension: IGalleryExtension, operation: InstallOperation, donotVerifySignature: boolean): Promise { + const result = await this.channel.call('download', [extension, operation, donotVerifySignature]); return URI.revive(result); } diff --git a/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts b/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts index 120f7d87619..e7e7bab19e6 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagementUtil.ts @@ -5,7 +5,7 @@ import { compareIgnoreCase } from 'vs/base/common/strings'; import { IExtensionIdentifier, IGalleryExtension, ILocalExtension, getTargetPlatform } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { ExtensionIdentifier, IExtension, TargetPlatform } from 'vs/platform/extensions/common/extensions'; +import { ExtensionIdentifier, IExtension, TargetPlatform, UNDEFINED_PUBLISHER } from 'vs/platform/extensions/common/extensions'; import { IFileService } from 'vs/platform/files/common/files'; import { isLinux, platform } from 'vs/base/common/platform'; import { URI } from 'vs/base/common/uri'; @@ -75,11 +75,11 @@ export function getExtensionId(publisher: string, name: string): string { } export function adoptToGalleryExtensionId(id: string): string { - return id.toLocaleLowerCase(); + return id.toLowerCase(); } -export function getGalleryExtensionId(publisher: string, name: string): string { - return adoptToGalleryExtensionId(getExtensionId(publisher, name)); +export function getGalleryExtensionId(publisher: string | undefined, name: string): string { + return adoptToGalleryExtensionId(getExtensionId(publisher ?? UNDEFINED_PUBLISHER, name)); } export function groupByExtension(extensions: T[], getExtensionIdentifier: (t: T) => IExtensionIdentifier): T[][] { diff --git a/src/vs/platform/extensionManagement/common/extensionTipsService.ts b/src/vs/platform/extensionManagement/common/extensionTipsService.ts index 88134849a46..34cea78ca9b 100644 --- a/src/vs/platform/extensionManagement/common/extensionTipsService.ts +++ b/src/vs/platform/extensionManagement/common/extensionTipsService.ts @@ -8,7 +8,6 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { IConfigBasedExtensionTip as IRawConfigBasedExtensionTip } from 'vs/base/common/product'; import { joinPath } from 'vs/base/common/resources'; import { URI } from 'vs/base/common/uri'; -import { getDomainsOfRemotes } from 'vs/platform/extensionManagement/common/configRemotes'; import { IConfigBasedExtensionTip, IExecutableBasedExtensionTip, IExtensionManagementService, IExtensionTipsService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; import { IFileService } from 'vs/platform/files/common/files'; import { IProductService } from 'vs/platform/product/common/productService'; @@ -18,7 +17,6 @@ import { Event } from 'vs/base/common/event'; import { join } from 'vs/base/common/path'; import { isWindows } from 'vs/base/common/platform'; import { env } from 'vs/base/common/process'; -import { localize } from 'vs/nls'; import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { IExtensionRecommendationNotificationService, RecommendationsNotificationResult, RecommendationSource } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; import { ExtensionType } from 'vs/platform/extensions/common/extensions'; @@ -62,21 +60,9 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe continue; } try { - const content = await this.fileService.readFile(joinPath(folder, configPath)); - const recommendationByRemote: Map = new Map(); - Object.entries(tip.recommendations).forEach(([key, value]) => { - if (isNonEmptyArray(value.remotes)) { - for (const remote of value.remotes) { - recommendationByRemote.set(remote, { - extensionId: key, - extensionName: value.name, - configName: tip.configName, - important: !!value.important, - isExtensionPack: !!value.isExtensionPack, - whenNotInstalled: value.whenNotInstalled - }); - } - } else { + const content = (await this.fileService.readFile(joinPath(folder, configPath))).value.toString(); + for (const [key, value] of Object.entries(tip.recommendations)) { + if (!value.contentPattern || new RegExp(value.contentPattern, 'mig').test(content)) { result.push({ extensionId: key, extensionName: value.name, @@ -86,13 +72,6 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe whenNotInstalled: value.whenNotInstalled }); } - }); - const domains = getDomainsOfRemotes(content.value.toString(), [...recommendationByRemote.keys()]); - for (const domain of domains) { - const remote = recommendationByRemote.get(domain); - if (remote) { - result.push(remote); - } } } catch (error) { /* Ignore */ } } @@ -325,11 +304,10 @@ export abstract class AbstractNativeExtensionTipsService extends ExtensionTipsSe private async promptExeRecommendations(tips: IExecutableBasedExtensionTip[]): Promise { const installed = await this.extensionManagementService.getInstalled(ExtensionType.User); - const extensionIds = tips + const extensions = tips .filter(tip => !tip.whenNotInstalled || tip.whenNotInstalled.every(id => installed.every(local => !areSameExtensions(local.identifier, { id })))) .map(({ extensionId }) => extensionId.toLowerCase()); - const message = localize({ key: 'exeRecommended', comment: ['Placeholder string is the name of the software that is installed.'] }, "You have {0} installed on your system. Do you want to install the recommended extensions for it?", tips[0].exeFriendlyName); - return this.extensionRecommendationNotificationService.promptImportantExtensionsInstallNotification(extensionIds, message, `@exe:"${tips[0].exeName}"`, RecommendationSource.EXE); + return this.extensionRecommendationNotificationService.promptImportantExtensionsInstallNotification({ extensions, source: RecommendationSource.EXE, name: tips[0].exeFriendlyName, searchValue: `@exe:"${tips[0].exeName}"` }); } private getLastPromptedMediumExeTime(): number { diff --git a/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts b/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts index 30e749ac312..925b9dd905c 100644 --- a/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts +++ b/src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts @@ -12,7 +12,7 @@ import { URI, UriComponents } from 'vs/base/common/uri'; import { Metadata, isIExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement'; import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { IExtension, IExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; -import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; +import { FileOperationResult, IFileService, hasFileAtomicWriteCapability, toFileOperationResult } from 'vs/platform/files/common/files'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { ILogService } from 'vs/platform/log/common/log'; import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; @@ -290,7 +290,8 @@ export abstract class AbstractExtensionsProfileScannerService extends Disposable relativeLocation: this.toRelativePath(e.location), metadata: e.metadata })); - await this.fileService.writeFile(file, VSBuffer.fromString(JSON.stringify(storedProfileExtensions))); + const fsp = this.fileService.getProvider(file.scheme); + await this.fileService.writeFile(file, VSBuffer.fromString(JSON.stringify(storedProfileExtensions)), fsp && hasFileAtomicWriteCapability(fsp) ? { atomic: { postfix: '.vsctmp' } } : undefined); } return extensions; diff --git a/src/vs/platform/extensionManagement/common/extensionsScannerService.ts b/src/vs/platform/extensionManagement/common/extensionsScannerService.ts index d2e8090e82a..b25fe1cfc56 100644 --- a/src/vs/platform/extensionManagement/common/extensionsScannerService.ts +++ b/src/vs/platform/extensionManagement/common/extensionsScannerService.ts @@ -24,7 +24,7 @@ import { localize } from 'vs/nls'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { Metadata } from 'vs/platform/extensionManagement/common/extensionManagement'; import { areSameExtensions, computeTargetPlatform, ExtensionKey, getExtensionId, getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ExtensionType, ExtensionIdentifier, IExtensionManifest, TargetPlatform, IExtensionIdentifier, IRelaxedExtensionManifest, UNDEFINED_PUBLISHER, IExtensionDescription, BUILTIN_MANIFEST_CACHE_FILE, USER_MANIFEST_CACHE_FILE, MANIFEST_CACHE_FOLDER, ExtensionIdentifierMap } from 'vs/platform/extensions/common/extensions'; +import { ExtensionType, ExtensionIdentifier, IExtensionManifest, TargetPlatform, IExtensionIdentifier, IRelaxedExtensionManifest, UNDEFINED_PUBLISHER, IExtensionDescription, BUILTIN_MANIFEST_CACHE_FILE, USER_MANIFEST_CACHE_FILE, ExtensionIdentifierMap } from 'vs/platform/extensions/common/extensions'; import { validateExtensionManifest } from 'vs/platform/extensions/common/extensionValidator'; import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; import { createDecorator, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; @@ -33,7 +33,7 @@ import { IProductService } from 'vs/platform/product/common/productService'; import { Emitter, Event } from 'vs/base/common/event'; import { revive } from 'vs/base/common/marshalling'; import { ExtensionsProfileScanningError, ExtensionsProfileScanningErrorCode, IExtensionsProfileScannerService, IProfileExtensionsScanOptions, IScannedProfileExtension } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { localizeManifest } from 'vs/platform/extensionManagement/common/extensionNls'; @@ -142,15 +142,15 @@ export abstract class AbstractExtensionsScannerService extends Disposable implem readonly onDidChangeCache = this._onDidChangeCache.event; private readonly obsoleteFile = joinPath(this.userExtensionsLocation, '.obsolete'); - private readonly systemExtensionsCachedScanner = this._register(this.instantiationService.createInstance(CachedExtensionsScanner, joinPath(this.cacheLocation, BUILTIN_MANIFEST_CACHE_FILE), this.obsoleteFile)); - private readonly userExtensionsCachedScanner = this._register(this.instantiationService.createInstance(CachedExtensionsScanner, joinPath(this.cacheLocation, USER_MANIFEST_CACHE_FILE), this.obsoleteFile)); + private readonly systemExtensionsCachedScanner = this._register(this.instantiationService.createInstance(CachedExtensionsScanner, this.currentProfile, this.obsoleteFile)); + private readonly userExtensionsCachedScanner = this._register(this.instantiationService.createInstance(CachedExtensionsScanner, this.currentProfile, this.obsoleteFile)); private readonly extensionsScanner = this._register(this.instantiationService.createInstance(ExtensionsScanner, this.obsoleteFile)); constructor( readonly systemExtensionsLocation: URI, readonly userExtensionsLocation: URI, private readonly extensionsControlLocation: URI, - private readonly cacheLocation: URI, + private readonly currentProfile: IUserDataProfile, @IUserDataProfilesService private readonly userDataProfilesService: IUserDataProfilesService, @IExtensionsProfileScannerService protected readonly extensionsProfileScannerService: IExtensionsProfileScannerService, @IFileService protected readonly fileService: IFileService, @@ -579,7 +579,7 @@ class ExtensionsScanner extends Disposable { let profileExtensions = await this.scanExtensionsFromProfileResource(input.location, () => true, input); if (input.applicationExtensionslocation && !this.uriIdentityService.extUri.isEqual(input.location, input.applicationExtensionslocation)) { profileExtensions = profileExtensions.filter(e => !e.metadata?.isApplicationScoped); - const applicationExtensions = await this.scanExtensionsFromProfileResource(input.applicationExtensionslocation, (e) => !!e.metadata?.isApplicationScoped, input); + const applicationExtensions = await this.scanExtensionsFromProfileResource(input.applicationExtensionslocation, (e) => !!e.metadata?.isBuiltin || !!e.metadata?.isApplicationScoped, input); profileExtensions.push(...applicationExtensions); } return profileExtensions; @@ -848,8 +848,9 @@ class CachedExtensionsScanner extends ExtensionsScanner { readonly onDidChangeCache = this._onDidChangeCache.event; constructor( - private readonly cacheFile: URI, + private readonly currentProfile: IUserDataProfile, obsoleteFile: URI, + @IUserDataProfilesService private readonly userDataProfilesService: IUserDataProfilesService, @IExtensionsProfileScannerService extensionsProfileScannerService: IExtensionsProfileScannerService, @IUriIdentityService uriIdentityService: IUriIdentityService, @IFileService fileService: IFileService, @@ -859,7 +860,8 @@ class CachedExtensionsScanner extends ExtensionsScanner { } override async scanExtensions(input: ExtensionScannerInput): Promise { - const cacheContents = await this.readExtensionCache(); + const cacheFile = this.getCacheFile(input); + const cacheContents = await this.readExtensionCache(cacheFile); this.input = input; if (cacheContents && cacheContents.input && ExtensionScannerInput.equals(cacheContents.input, this.input)) { this.logService.debug('Using cached extensions scan result', input.location.toString()); @@ -871,26 +873,26 @@ class CachedExtensionsScanner extends ExtensionsScanner { }); } const result = await super.scanExtensions(input); - await this.writeExtensionCache({ input, result }); + await this.writeExtensionCache(cacheFile, { input, result }); return result; } - private async readExtensionCache(): Promise { + private async readExtensionCache(cacheFile: URI): Promise { try { - const cacheRawContents = await this.fileService.readFile(this.cacheFile); + const cacheRawContents = await this.fileService.readFile(cacheFile); const extensionCacheData: IExtensionCacheData = JSON.parse(cacheRawContents.value.toString()); return { result: extensionCacheData.result, input: revive(extensionCacheData.input) }; } catch (error) { - this.logService.debug('Error while reading the extension cache file:', this.cacheFile.path, getErrorMessage(error)); + this.logService.debug('Error while reading the extension cache file:', cacheFile.path, getErrorMessage(error)); } return null; } - private async writeExtensionCache(cacheContents: IExtensionCacheData): Promise { + private async writeExtensionCache(cacheFile: URI, cacheContents: IExtensionCacheData): Promise { try { - await this.fileService.writeFile(this.cacheFile, VSBuffer.fromString(JSON.stringify(cacheContents))); + await this.fileService.writeFile(cacheFile, VSBuffer.fromString(JSON.stringify(cacheContents))); } catch (error) { - this.logService.debug('Error while writing the extension cache file:', this.cacheFile.path, getErrorMessage(error)); + this.logService.debug('Error while writing the extension cache file:', cacheFile.path, getErrorMessage(error)); } } @@ -900,7 +902,8 @@ class CachedExtensionsScanner extends ExtensionsScanner { return; } - const cacheContents = await this.readExtensionCache(); + const cacheFile = this.getCacheFile(this.input); + const cacheContents = await this.readExtensionCache(cacheFile); if (!cacheContents) { // Cache has been deleted by someone else, which is perfectly fine... return; @@ -916,13 +919,31 @@ class CachedExtensionsScanner extends ExtensionsScanner { try { this.logService.info('Invalidating Cache', actual, expected); // Cache is invalid, delete it - await this.fileService.del(this.cacheFile); + await this.fileService.del(cacheFile); this._onDidChangeCache.fire(); } catch (error) { this.logService.error(error); } } + private getCacheFile(input: ExtensionScannerInput): URI { + const profile = this.getProfile(input); + return this.uriIdentityService.extUri.joinPath(profile.cacheHome, input.type === ExtensionType.System ? BUILTIN_MANIFEST_CACHE_FILE : USER_MANIFEST_CACHE_FILE); + } + + private getProfile(input: ExtensionScannerInput): IUserDataProfile { + if (input.type === ExtensionType.System) { + return this.userDataProfilesService.defaultProfile; + } + if (!input.profile) { + return this.userDataProfilesService.defaultProfile; + } + if (this.uriIdentityService.extUri.isEqual(input.location, this.currentProfile.extensionsResource)) { + return this.currentProfile; + } + return this.userDataProfilesService.profiles.find(p => this.uriIdentityService.extUri.isEqual(input.location, p.extensionsResource)) ?? this.currentProfile; + } + } export function toExtensionDescription(extension: IScannedExtension, isUnderDevelopment: boolean): IExtensionDescription { @@ -948,7 +969,7 @@ export class NativeExtensionsScannerService extends AbstractExtensionsScannerSer systemExtensionsLocation: URI, userExtensionsLocation: URI, userHome: URI, - userDataPath: URI, + currentProfile: IUserDataProfile, userDataProfilesService: IUserDataProfilesService, extensionsProfileScannerService: IExtensionsProfileScannerService, fileService: IFileService, @@ -962,7 +983,7 @@ export class NativeExtensionsScannerService extends AbstractExtensionsScannerSer systemExtensionsLocation, userExtensionsLocation, joinPath(userHome, '.vscode-oss-dev', 'extensions', 'control.json'), - joinPath(userDataPath, MANIFEST_CACHE_FOLDER), + currentProfile, userDataProfilesService, extensionsProfileScannerService, fileService, logService, environmentService, productService, uriIdentityService, instantiationService); this.translationsPromise = (async () => { if (platform.translationsConfigFile) { diff --git a/src/vs/platform/extensionManagement/node/extensionDownloader.ts b/src/vs/platform/extensionManagement/node/extensionDownloader.ts index abc54a51b6d..f30b0a165d4 100644 --- a/src/vs/platform/extensionManagement/node/extensionDownloader.ts +++ b/src/vs/platform/extensionManagement/node/extensionDownloader.ts @@ -18,7 +18,7 @@ import { CorruptZipMessage } from 'vs/base/node/zip'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; import { ExtensionVerificationStatus } from 'vs/platform/extensionManagement/common/abstractExtensionManagementService'; -import { ExtensionManagementError, ExtensionManagementErrorCode, IExtensionGalleryService, IGalleryExtension, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { ExtensionManagementError, ExtensionManagementErrorCode, ExtensionSignaturetErrorCode, IExtensionGalleryService, IGalleryExtension, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; import { ExtensionKey, groupByExtension } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { ExtensionSignatureVerificationError, IExtensionSignatureVerificationService } from 'vs/platform/extensionManagement/node/extensionSignatureVerificationService'; import { IFileService, IFileStatWithMetadata } from 'vs/platform/files/common/files'; @@ -46,7 +46,7 @@ export class ExtensionsDownloader extends Disposable { this.cleanUpPromise = this.cleanUp(); } - async download(extension: IGalleryExtension, operation: InstallOperation): Promise<{ readonly location: URI; readonly verificationStatus: ExtensionVerificationStatus }> { + async download(extension: IGalleryExtension, operation: InstallOperation, verifySignature: boolean): Promise<{ readonly location: URI; readonly verificationStatus: ExtensionVerificationStatus }> { await this.cleanUpPromise; const location = joinPath(this.extensionsDownloadDir, this.getName(extension)); @@ -56,35 +56,20 @@ export class ExtensionsDownloader extends Disposable { throw new ExtensionManagementError(error.message, ExtensionManagementErrorCode.Download); } - let verificationStatus: ExtensionVerificationStatus = ExtensionVerificationStatus.Unverified; + let verificationStatus: ExtensionVerificationStatus = false; - if (this.shouldVerifySignature(extension)) { + if (verifySignature && this.shouldVerifySignature(extension)) { const signatureArchiveLocation = await this.downloadSignatureArchive(extension); try { - const verified = await this.extensionSignatureVerificationService.verify(location.fsPath, signatureArchiveLocation.fsPath, this.logService.getLevel() === LogLevel.Trace); - if (verified) { - verificationStatus = ExtensionVerificationStatus.Verified; - } - this.logService.info(`Extension signature verification: ${extension.identifier.id}. Verification status: ${verificationStatus}.`); + verificationStatus = await this.extensionSignatureVerificationService.verify(location.fsPath, signatureArchiveLocation.fsPath, this.logService.getLevel() === LogLevel.Trace); } catch (error) { const sigError = error as ExtensionSignatureVerificationError; - const code: string = sigError.code; - + verificationStatus = sigError.code; if (sigError.output) { this.logService.trace(`Extension signature verification details for ${extension.identifier.id} ${extension.version}:\n${sigError.output}`); } - - if (code === 'UnknownError') { - verificationStatus = ExtensionVerificationStatus.UnknownError; - this.logService.warn(`Extension signature verification: ${extension.identifier.id}. Verification status: ${verificationStatus}.`); - } else if (code === 'PackageIsInvalidZip' || code === 'SignatureArchiveIsInvalidZip') { + if (verificationStatus === ExtensionSignaturetErrorCode.PackageIsInvalidZip || verificationStatus === ExtensionSignaturetErrorCode.SignatureArchiveIsInvalidZip) { throw new ExtensionManagementError(CorruptZipMessage, ExtensionManagementErrorCode.CorruptZip); - } else if (!sigError.didExecute) { - this.logService.warn(`Extension signature verification: ${extension.identifier.id}. Verification status: ${verificationStatus} (${code})`); - } else { - await this.delete(location); - - throw new ExtensionManagementError(code, ExtensionManagementErrorCode.Signature); } } finally { try { @@ -96,6 +81,14 @@ export class ExtensionsDownloader extends Disposable { } } + if (verificationStatus === true) { + this.logService.info(`Extension signature is verified: ${extension.identifier.id}`); + } else if (verificationStatus === false) { + this.logService.info(`Extension signature verification is not done: ${extension.identifier.id}`); + } else { + this.logService.warn(`Extension signature verification failed with error '${verificationStatus}': ${extension.identifier.id}`); + } + return { location, verificationStatus }; } diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts index 0a3a830fcf4..49ebc362edf 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -10,6 +10,7 @@ import { IStringDictionary } from 'vs/base/common/collections'; import { toErrorMessage } from 'vs/base/common/errorMessage'; import { getErrorMessage } from 'vs/base/common/errors'; import { Emitter } from 'vs/base/common/event'; +import { hash } from 'vs/base/common/hash'; import { Disposable } from 'vs/base/common/lifecycle'; import { ResourceSet } from 'vs/base/common/map'; import { Schemas } from 'vs/base/common/network'; @@ -19,13 +20,13 @@ import { joinPath } from 'vs/base/common/resources'; import * as semver from 'vs/base/common/semver/semver'; import { isBoolean, isUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; -import { generateUuid, isUUID } from 'vs/base/common/uuid'; +import { generateUuid } from 'vs/base/common/uuid'; import * as pfs from 'vs/base/node/pfs'; import { extract, ExtractError, IFile, zip } from 'vs/base/node/zip'; import * as nls from 'vs/nls'; import { IDownloadService } from 'vs/platform/download/common/download'; import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { AbstractExtensionManagementService, AbstractExtensionTask, ExtensionVerificationStatus, IInstallExtensionTask, InstallExtensionTaskOptions, IUninstallExtensionTask, joinErrors, UninstallExtensionTaskOptions } from 'vs/platform/extensionManagement/common/abstractExtensionManagementService'; +import { AbstractExtensionManagementService, AbstractExtensionTask, ExtensionVerificationStatus, IInstallExtensionTask, InstallExtensionTaskOptions, IUninstallExtensionTask, joinErrors, toExtensionManagementError, UninstallExtensionTaskOptions } from 'vs/platform/extensionManagement/common/abstractExtensionManagementService'; import { ExtensionManagementError, ExtensionManagementErrorCode, IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementService, IGalleryExtension, ILocalExtension, InstallOperation, Metadata, InstallVSIXOptions @@ -38,7 +39,7 @@ import { ExtensionsLifecycle } from 'vs/platform/extensionManagement/node/extens import { getManifest } from 'vs/platform/extensionManagement/node/extensionManagementUtil'; import { ExtensionsManifestCache } from 'vs/platform/extensionManagement/node/extensionsManifestCache'; import { DidChangeProfileExtensionsEvent, ExtensionsWatcher } from 'vs/platform/extensionManagement/node/extensionsWatcher'; -import { ExtensionType, IExtension, IExtensionManifest, isApplicationScopedExtension, TargetPlatform } from 'vs/platform/extensions/common/extensions'; +import { ExtensionType, IExtension, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; import { isEngineValid } from 'vs/platform/extensions/common/extensionValidator'; import { FileChangesEvent, FileChangeType, FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; import { IInstantiationService, refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; @@ -62,6 +63,8 @@ export interface INativeServerExtensionManagementService extends IExtensionManag markAsUninstalled(...extensions: IExtension[]): Promise; } +const DELETED_FOLDER_POSTFIX = '.vsctmp'; + export class ExtensionManagementService extends AbstractExtensionManagementService implements INativeServerExtensionManagementService { private readonly extensionsScanner: ExtensionsScanner; @@ -90,7 +93,7 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi super(galleryService, telemetryService, logService, productService, userDataProfilesService); const extensionLifecycle = this._register(instantiationService.createInstance(ExtensionsLifecycle)); this.extensionsScanner = this._register(instantiationService.createInstance(ExtensionsScanner, extension => extensionLifecycle.postUninstall(extension))); - this.manifestCache = this._register(new ExtensionsManifestCache(environmentService, this)); + this.manifestCache = this._register(new ExtensionsManifestCache(userDataProfilesService, fileService, uriIdentityService, this, this.logService)); this.extensionsDownloader = this._register(instantiationService.createInstance(ExtensionsDownloader)); const extensionsWatcher = this._register(new ExtensionsWatcher(this, this.extensionsScannerService, userDataProfilesService, extensionsProfileScannerService, uriIdentityService, fileService, logService)); @@ -148,11 +151,19 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi try { const manifest = await getManifest(path.resolve(location.fsPath)); + const extensionId = getGalleryExtensionId(manifest.publisher, manifest.name); if (manifest.engines && manifest.engines.vscode && !isEngineValid(manifest.engines.vscode, this.productService.version, this.productService.date)) { - throw new Error(nls.localize('incompatible', "Unable to install extension '{0}' as it is not compatible with VS Code '{1}'.", getGalleryExtensionId(manifest.publisher, manifest.name), this.productService.version)); + throw new Error(nls.localize('incompatible', "Unable to install extension '{0}' as it is not compatible with VS Code '{1}'.", extensionId, this.productService.version)); } - return await this.installExtension(manifest, location, options); + const result = await this.installExtensions([{ manifest, extension: location, options }]); + if (result[0]?.local) { + return result[0]?.local; + } + if (result[0]?.error) { + throw result[0].error; + } + throw toExtensionManagementError(new Error(`Unknown error while installing extension ${extensionId}`)); } finally { await cleanup(); } @@ -190,7 +201,7 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi metadata.isBuiltin = metadata.isBuiltin || undefined; metadata.pinned = metadata.pinned || undefined; local = await this.extensionsScanner.updateMetadata(local, metadata, profileLocation); - this.manifestCache.invalidate(); + this.manifestCache.invalidate(profileLocation); this._onDidUpdateExtensionMetadata.fire(local); return local; } @@ -233,8 +244,8 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi } } - async download(extension: IGalleryExtension, operation: InstallOperation): Promise { - const { location } = await this.extensionsDownloader.download(extension, operation); + async download(extension: IGalleryExtension, operation: InstallOperation, donotVerifySignature: boolean): Promise { + const { location } = await this.extensionsDownloader.download(extension, operation, !donotVerifySignature); return location; } @@ -269,7 +280,7 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi let installExtensionTask = this.installGalleryExtensionsTasks.get(key); if (!installExtensionTask) { this.installGalleryExtensionsTasks.set(key, installExtensionTask = new InstallGalleryExtensionTask(manifest, extension, options, this.extensionsDownloader, this.extensionsScanner, this.uriIdentityService, this.userDataProfilesService, this.extensionsScannerService, this.extensionsProfileScannerService, this.logService)); - installExtensionTask.waitUntilTaskIsFinished().then(() => this.installGalleryExtensionsTasks.delete(key)); + installExtensionTask.waitUntilTaskIsFinished().finally(() => this.installGalleryExtensionsTasks.delete(key)); } return installExtensionTask; } @@ -409,14 +420,11 @@ export class ExtensionsScanner extends Disposable { private readonly _onExtract = this._register(new Emitter()); readonly onExtract = this._onExtract.event; - private cleanUpGeneratedFoldersPromise: Promise = Promise.resolve(); - constructor( private readonly beforeRemovingExtension: (e: ILocalExtension) => Promise, @IFileService private readonly fileService: IFileService, @IExtensionsScannerService private readonly extensionsScannerService: IExtensionsScannerService, @IExtensionsProfileScannerService private readonly extensionsProfileScannerService: IExtensionsProfileScannerService, - @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, @ILogService private readonly logService: ILogService, ) { super(); @@ -425,12 +433,11 @@ export class ExtensionsScanner extends Disposable { } async cleanUp(): Promise { + await this.removeTemporarilyDeletedFolders(); await this.removeUninstalledExtensions(); - this.cleanUpGeneratedFoldersPromise = this.cleanUpGeneratedFoldersPromise.then(() => this.removeGeneratedFolders()); - await this.cleanUpGeneratedFoldersPromise; } - async scanExtensions(type: ExtensionType | null, profileLocation: URI | undefined): Promise { + async scanExtensions(type: ExtensionType | null, profileLocation: URI): Promise { const userScanOptions: ScanOptions = { includeInvalid: true, profileLocation }; let scannedExtensions: IScannedExtension[] = []; if (type === null || type === ExtensionType.System) { @@ -459,39 +466,66 @@ export class ExtensionsScanner extends Disposable { return null; } - async extractUserExtension(extensionKey: ExtensionKey, zipPath: string, metadata: Metadata, token: CancellationToken): Promise { - await this.cleanUpGeneratedFoldersPromise.catch(() => undefined); - + async extractUserExtension(extensionKey: ExtensionKey, zipPath: string, metadata: Metadata, removeIfExists: boolean, token: CancellationToken): Promise { const folderName = extensionKey.toString(); - const tempPath = path.join(this.extensionsScannerService.userExtensionsLocation.fsPath, `.${generateUuid()}`); - const extensionPath = path.join(this.extensionsScannerService.userExtensionsLocation.fsPath, folderName); + const tempLocation = URI.file(path.join(this.extensionsScannerService.userExtensionsLocation.fsPath, `.${generateUuid()}`)); + const extensionLocation = URI.file(path.join(this.extensionsScannerService.userExtensionsLocation.fsPath, folderName)); - try { - await pfs.Promises.rm(extensionPath); - } catch (error) { - throw new ExtensionManagementError(nls.localize('errorDeleting', "Unable to delete the existing folder '{0}' while installing the extension '{1}'. Please delete the folder manually and try again", extensionPath, extensionKey.id), ExtensionManagementErrorCode.Delete); + let exists = await this.fileService.exists(extensionLocation); + + if (exists && removeIfExists) { + try { + await this.deleteExtensionFromLocation(extensionKey.id, extensionLocation, 'removeExisting'); + } catch (error) { + throw new ExtensionManagementError(nls.localize('errorDeleting', "Unable to delete the existing folder '{0}' while installing the extension '{1}'. Please delete the folder manually and try again", extensionLocation.fsPath, extensionKey.id), ExtensionManagementErrorCode.Delete); + } + exists = false; } - await this.extractAtLocation(extensionKey, zipPath, tempPath, token); - await this.extensionsScannerService.updateMetadata(URI.file(tempPath), metadata); - - try { - this._onExtract.fire(URI.file(extensionPath)); - await this.rename(extensionKey, tempPath, extensionPath, Date.now() + (2 * 60 * 1000) /* Retry for 2 minutes */); - this.logService.info('Renamed to', extensionPath); - } catch (error) { + if (!exists) { try { - await pfs.Promises.rm(tempPath); - } catch (e) { /* ignore */ } - if (error.code === 'ENOTEMPTY') { - this.logService.info(`Rename failed because extension was installed by another source. So ignoring renaming.`, extensionKey.id); - } else { - this.logService.info(`Rename failed because of ${getErrorMessage(error)}. Deleted from extracted location`, tempPath); + // Extract + try { + this.logService.trace(`Started extracting the extension from ${zipPath} to ${extensionLocation.fsPath}`); + await extract(zipPath, tempLocation.fsPath, { sourcePath: 'extension', overwrite: true }, token); + this.logService.info(`Extracted extension to ${extensionLocation}:`, extensionKey.id); + } catch (e) { + let errorCode = ExtensionManagementErrorCode.Extract; + if (e instanceof ExtractError) { + if (e.type === 'CorruptZip') { + errorCode = ExtensionManagementErrorCode.CorruptZip; + } else if (e.type === 'Incomplete') { + errorCode = ExtensionManagementErrorCode.IncompleteZip; + } + } + throw new ExtensionManagementError(e.message, errorCode); + } + + await this.extensionsScannerService.updateMetadata(tempLocation, metadata); + + // Rename + try { + this.logService.trace(`Started renaming the extension from ${tempLocation.fsPath} to ${extensionLocation.fsPath}`); + await this.rename(extensionKey, tempLocation.fsPath, extensionLocation.fsPath, Date.now() + (2 * 60 * 1000) /* Retry for 2 minutes */); + this.logService.info('Renamed to', extensionLocation.fsPath); + } catch (error) { + if (error.code === 'ENOTEMPTY') { + this.logService.info(`Rename failed because extension was installed by another source. So ignoring renaming.`, extensionKey.id); + } else { + this.logService.info(`Rename failed because of ${getErrorMessage(error)}. Deleted from extracted location`, tempLocation); + throw error; + } + } + + this._onExtract.fire(extensionLocation); + + } catch (error) { + try { await this.fileService.del(tempLocation, { recursive: true }); } catch (e) { /* ignore */ } throw error; } } - return this.scanLocalExtension(URI.file(extensionPath), ExtensionType.User); + return this.scanLocalExtension(extensionLocation, ExtensionType.User); } async scanMetadata(local: ILocalExtension, profileLocation?: URI): Promise { @@ -529,12 +563,8 @@ export class ExtensionsScanner extends Disposable { await this.withUninstalledExtensions(uninstalled => delete uninstalled[extensionKey.toString()]); } - async removeExtension(extension: ILocalExtension | IScannedExtension, type: string): Promise { - this.logService.trace(`Deleting ${type} extension from disk`, extension.identifier.id, extension.location.fsPath); - const renamedLocation = this.uriIdentityService.extUri.joinPath(this.uriIdentityService.extUri.dirname(extension.location), `.${generateUuid()}`); - await this.rename(extension.identifier, extension.location.fsPath, renamedLocation.fsPath, Date.now() + (2 * 60 * 1000) /* Retry for 2 minutes */); - await this.fileService.del(renamedLocation, { recursive: true }); - this.logService.info('Deleted from disk', extension.identifier.id, extension.location.fsPath); + removeExtension(extension: ILocalExtension | IScannedExtension, type: string): Promise { + return this.deleteExtensionFromLocation(extension.identifier.id, extension.location, type); } async removeUninstalledExtension(extension: ILocalExtension | IScannedExtension): Promise { @@ -550,6 +580,12 @@ export class ExtensionsScanner extends Disposable { await this.extensionsProfileScannerService.addExtensionsToProfile(extensions, toProfileLocation); } + private async deleteExtensionFromLocation(id: string, location: URI, type: string): Promise { + this.logService.trace(`Deleting ${type} extension from disk`, id, location.fsPath); + await this.fileService.del(location, { recursive: true, atomic: { postfix: `.${hash(generateUuid()).toString(16)}${DELETED_FOLDER_POSTFIX}` } }); + this.logService.info(`Deleted ${type} extension from disk`, id, location.fsPath); + } + private async withUninstalledExtensions(updateFn?: (uninstalled: IStringDictionary) => void): Promise> { return this.uninstalledFileLimiter.queue(async () => { let raw: string | undefined; @@ -582,33 +618,6 @@ export class ExtensionsScanner extends Disposable { }); } - private async extractAtLocation(identifier: IExtensionIdentifier, zipPath: string, location: string, token: CancellationToken): Promise { - this.logService.trace(`Started extracting the extension from ${zipPath} to ${location}`); - - // Clean the location - try { - await pfs.Promises.rm(location); - } catch (e) { - throw new ExtensionManagementError(this.joinErrors(e).message, ExtensionManagementErrorCode.Delete); - } - - try { - await extract(zipPath, location, { sourcePath: 'extension', overwrite: true }, token); - this.logService.info(`Extracted extension to ${location}:`, identifier.id); - } catch (e) { - try { await pfs.Promises.rm(location); } catch (e) { /* Ignore */ } - let errorCode = ExtensionManagementErrorCode.Extract; - if (e instanceof ExtractError) { - if (e.type === 'CorruptZip') { - errorCode = ExtensionManagementErrorCode.CorruptZip; - } else if (e.type === 'Incomplete') { - errorCode = ExtensionManagementErrorCode.IncompleteZip; - } - } - throw new ExtensionManagementError(e.message, errorCode); - } - } - private async rename(identifier: IExtensionIdentifier, extractPath: string, renamePath: string, retryUntil: number): Promise { try { await pfs.Promises.rename(extractPath, renamePath); @@ -662,6 +671,11 @@ export class ExtensionsScanner extends Disposable { private async removeUninstalledExtensions(): Promise { const uninstalled = await this.getUninstalledExtensions(); + if (Object.keys(uninstalled).length === 0) { + this.logService.debug(`No uninstalled extensions found.`); + return; + } + this.logService.debug(`Removing uninstalled extensions:`, Object.keys(uninstalled)); const extensions = await this.extensionsScannerService.scanUserExtensions({ includeAllVersions: true, includeUninstalled: true, includeInvalid: true }); // All user extensions @@ -689,9 +703,9 @@ export class ExtensionsScanner extends Disposable { await Promise.allSettled(toRemove.map(e => this.removeUninstalledExtension(e))); } - private async removeGeneratedFolders(): Promise { - this.logService.trace('ExtensionManagementService#removeGeneratedFolders'); - const promises: Promise[] = []; + private async removeTemporarilyDeletedFolders(): Promise { + this.logService.trace('ExtensionManagementService#removeTempDeleteFolders'); + let stat; try { stat = await this.fileService.resolve(this.extensionsScannerService.userExtensionsLocation); @@ -699,38 +713,39 @@ export class ExtensionsScanner extends Disposable { if (toFileOperationResult(error) !== FileOperationResult.FILE_NOT_FOUND) { this.logService.error(error); } + return; } - for (const child of stat?.children ?? []) { - if (child.isDirectory && child.name.startsWith('.') && isUUID(child.name.substring(1))) { - promises.push((async () => { - this.logService.trace('Deleting the generated extension folder', child.resource.toString()); - try { - await this.fileService.del(child.resource, { recursive: true }); - this.logService.info('Deleted the generated extension folder', child.resource.toString()); - } catch (error) { + + if (!stat?.children) { + return; + } + + try { + await Promise.allSettled(stat.children.map(async child => { + if (!child.isDirectory || !child.name.endsWith(DELETED_FOLDER_POSTFIX)) { + return; + } + this.logService.trace('Deleting the temporarily deleted folder', child.resource.toString()); + try { + await this.fileService.del(child.resource, { recursive: true }); + this.logService.trace('Deleted the temporarily deleted folder', child.resource.toString()); + } catch (error) { + if (toFileOperationResult(error) !== FileOperationResult.FILE_NOT_FOUND) { this.logService.error(error); } - })()); - } - } - await Promise.allSettled(promises); - } - - private joinErrors(errorOrErrors: (Error | string) | (Array)): Error { - const errors = Array.isArray(errorOrErrors) ? errorOrErrors : [errorOrErrors]; - if (errors.length === 1) { - return errors[0] instanceof Error ? errors[0] : new Error(errors[0]); - } - return errors.reduce((previousValue: Error, currentValue: Error | string) => { - return new Error(`${previousValue.message}${previousValue.message ? ',' : ''}${currentValue instanceof Error ? currentValue.message : currentValue}`); - }, new Error('')); + } + })); + } catch (error) { /* ignore */ } } } abstract class InstallExtensionTask extends AbstractExtensionTask implements IInstallExtensionTask { - protected _verificationStatus = ExtensionVerificationStatus.Unverified; + private _profileLocation = this.options.profileLocation; + get profileLocation() { return this._profileLocation; } + + protected _verificationStatus: ExtensionVerificationStatus = false; get verificationStatus() { return this._verificationStatus; } protected _operation = InstallOperation.Install; @@ -752,18 +767,19 @@ abstract class InstallExtensionTask extends AbstractExtensionTask { const [local, metadata] = await this.install(token); - if (this.uriIdentityService.extUri.isEqual(this.userDataProfilesService.defaultProfile.extensionsResource, this.options.profileLocation)) { + this._profileLocation = local.isBuiltin || local.isApplicationScoped ? this.userDataProfilesService.defaultProfile.extensionsResource : this.options.profileLocation; + if (this.uriIdentityService.extUri.isEqual(this.userDataProfilesService.defaultProfile.extensionsResource, this._profileLocation)) { await this.extensionsScannerService.initializeDefaultProfileExtensions(); } - await this.extensionsProfileScannerService.addExtensionsToProfile([[local, metadata]], this.options.profileLocation); + await this.extensionsProfileScannerService.addExtensionsToProfile([[local, metadata]], this._profileLocation); return local; } - protected async extractExtension({ zipPath, key, metadata }: InstallableExtension, token: CancellationToken): Promise { + protected async extractExtension({ zipPath, key, metadata }: InstallableExtension, removeIfExists: boolean, token: CancellationToken): Promise { let local = await this.unsetIfUninstalled(key); if (!local) { this.logService.trace('Extracting extension...', key.id); - local = await this.extensionsScanner.extractUserExtension(key, zipPath, metadata, token); + local = await this.extensionsScanner.extractUserExtension(key, zipPath, metadata, removeIfExists, token); this.logService.info('Extracting extension completed.', key.id); } return local; @@ -796,7 +812,7 @@ abstract class InstallExtensionTask extends AbstractExtensionTask { + const local = await super.doRun(token); + this.updateMetadata(local, token); + return local; + } + protected async install(token: CancellationToken): Promise<[ILocalExtension, Metadata]> { const extensionKey = new ExtensionKey(this.identifier, this.manifest.version); const installedExtensions = await this.extensionsScanner.scanExtensions(ExtensionType.User, this.options.profileLocation); const existing = installedExtensions.find(i => areSameExtensions(this.identifier, i.identifier)); - const metadata = await this.getMetadata(this.identifier.id, this.manifest.version, token); - metadata.isApplicationScoped = isApplicationScopedExtension(this.manifest); - metadata.isMachineScoped = this.options.isMachineScoped || existing?.isMachineScoped; - metadata.isBuiltin = this.options.isBuiltin || existing?.isBuiltin; - metadata.installedTimestamp = Date.now(); - metadata.pinned = this.options.installGivenVersion ? true : undefined; + const metadata: Metadata = { + isApplicationScoped: this.options.isApplicationScoped || existing?.isApplicationScoped, + isMachineScoped: this.options.isMachineScoped || existing?.isMachineScoped, + isBuiltin: this.options.isBuiltin || existing?.isBuiltin, + installedTimestamp: Date.now(), + pinned: this.options.installGivenVersion ? true : undefined, + }; if (existing) { this._operation = InstallOperation.Update; @@ -921,29 +944,29 @@ class InstallVSIXTask extends InstallExtensionTask { } } - const local = await this.extractExtension({ zipPath: path.resolve(this.location.fsPath), key: extensionKey, metadata }, token); + const local = await this.extractExtension({ zipPath: path.resolve(this.location.fsPath), key: extensionKey, metadata }, true, token); return [local, metadata]; } - private async getMetadata(id: string, version: string, token: CancellationToken): Promise { + private async updateMetadata(extension: ILocalExtension, token: CancellationToken): Promise { try { - let [galleryExtension] = await this.galleryService.getExtensions([{ id, version }], token); + let [galleryExtension] = await this.galleryService.getExtensions([{ id: extension.identifier.id, version: extension.manifest.version }], token); if (!galleryExtension) { - [galleryExtension] = await this.galleryService.getExtensions([{ id }], token); + [galleryExtension] = await this.galleryService.getExtensions([{ id: extension.identifier.id }], token); } if (galleryExtension) { - return { + const metadata = { id: galleryExtension.identifier.uuid, publisherDisplayName: galleryExtension.publisherDisplayName, publisherId: galleryExtension.publisherId, isPreReleaseVersion: galleryExtension.properties.isPreReleaseVersion, preRelease: galleryExtension.properties.isPreReleaseVersion || this.options.installPreReleaseVersion }; + await this.extensionsScanner.updateMetadata(extension, metadata, this.options.profileLocation); } } catch (error) { /* Ignore Error */ } - return {}; } } diff --git a/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts b/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts index 66c1055ac1e..cc5d48ee4e1 100644 --- a/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts +++ b/src/vs/platform/extensionManagement/node/extensionsManifestCache.ts @@ -4,19 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import { Disposable } from 'vs/base/common/lifecycle'; -import { join } from 'vs/base/common/path'; -import * as pfs from 'vs/base/node/pfs'; -import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; +import { URI } from 'vs/base/common/uri'; import { DidUninstallExtensionEvent, IExtensionManagementService, InstallExtensionResult } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { MANIFEST_CACHE_FOLDER, USER_MANIFEST_CACHE_FILE } from 'vs/platform/extensions/common/extensions'; +import { USER_MANIFEST_CACHE_FILE } from 'vs/platform/extensions/common/extensions'; +import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files'; +import { ILogService } from 'vs/platform/log/common/log'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; export class ExtensionsManifestCache extends Disposable { - private extensionsManifestCache = join(this.environmentService.userDataPath, MANIFEST_CACHE_FOLDER, USER_MANIFEST_CACHE_FILE); - constructor( - private readonly environmentService: INativeEnvironmentService, - extensionsManagementService: IExtensionManagementService + private readonly userDataProfilesService: IUserDataProfilesService, + private readonly fileService: IFileService, + private readonly uriIdentityService: IUriIdentityService, + extensionsManagementService: IExtensionManagementService, + private readonly logService: ILogService, ) { super(); this._register(extensionsManagementService.onDidInstallExtensions(e => this.onDidInstallExtensions(e))); @@ -24,18 +27,38 @@ export class ExtensionsManifestCache extends Disposable { } private onDidInstallExtensions(results: readonly InstallExtensionResult[]): void { - if (results.some(r => !!r.local)) { - this.invalidate(); + for (const r of results) { + if (r.local) { + this.invalidate(r.profileLocation); + } } } private onDidUnInstallExtension(e: DidUninstallExtensionEvent): void { if (!e.error) { - this.invalidate(); + this.invalidate(e.profileLocation); } } - invalidate(): void { - pfs.Promises.rm(this.extensionsManifestCache, pfs.RimRafMode.MOVE).then(() => { }, () => { }); + async invalidate(extensionsManifestLocation: URI | undefined): Promise { + if (extensionsManifestLocation) { + for (const profile of this.userDataProfilesService.profiles) { + if (this.uriIdentityService.extUri.isEqual(profile.extensionsResource, extensionsManifestLocation)) { + await this.deleteUserCacheFile(profile); + } + } + } else { + await this.deleteUserCacheFile(this.userDataProfilesService.defaultProfile); + } + } + + private async deleteUserCacheFile(profile: IUserDataProfile): Promise { + try { + await this.fileService.del(this.uriIdentityService.extUri.joinPath(profile.cacheHome, USER_MANIFEST_CACHE_FILE)); + } catch (error) { + if (toFileOperationResult(error) !== FileOperationResult.FILE_NOT_FOUND) { + this.logService.error(error); + } + } } } diff --git a/src/vs/platform/extensionManagement/node/extensionsScannerService.ts b/src/vs/platform/extensionManagement/node/extensionsScannerService.ts index e18299c4ae4..4f95fb924f2 100644 --- a/src/vs/platform/extensionManagement/node/extensionsScannerService.ts +++ b/src/vs/platform/extensionManagement/node/extensionsScannerService.ts @@ -30,7 +30,7 @@ export class ExtensionsScannerService extends NativeExtensionsScannerService imp URI.file(environmentService.builtinExtensionsPath), URI.file(environmentService.extensionsPath), environmentService.userHome, - URI.file(environmentService.userDataPath), + userDataProfilesService.defaultProfile, userDataProfilesService, extensionsProfileScannerService, fileService, logService, environmentService, productService, uriIdentityService, instantiationService); } diff --git a/src/vs/platform/extensionManagement/node/extensionsWatcher.ts b/src/vs/platform/extensionManagement/node/extensionsWatcher.ts index 4bd05c9d29b..ba8e026b893 100644 --- a/src/vs/platform/extensionManagement/node/extensionsWatcher.ts +++ b/src/vs/platform/extensionManagement/node/extensionsWatcher.ts @@ -45,13 +45,13 @@ export class ExtensionsWatcher extends Disposable { private async initialize(): Promise { await this.extensionsScannerService.initializeDefaultProfileExtensions(); - await this.onDidChangeProfiles(this.userDataProfilesService.profiles, []); + await this.onDidChangeProfiles(this.userDataProfilesService.profiles); this.registerListeners(); await this.uninstallExtensionsNotInProfiles(); } private registerListeners(): void { - this._register(this.userDataProfilesService.onDidChangeProfiles(e => this.onDidChangeProfiles(e.added, e.removed))); + this._register(this.userDataProfilesService.onDidChangeProfiles(e => this.onDidChangeProfiles(e.added))); this._register(this.extensionsProfileScannerService.onAddExtensions(e => this.onAddExtensions(e))); this._register(this.extensionsProfileScannerService.onDidAddExtensions(e => this.onDidAddExtensions(e))); this._register(this.extensionsProfileScannerService.onRemoveExtensions(e => this.onRemoveExtensions(e))); @@ -59,13 +59,8 @@ export class ExtensionsWatcher extends Disposable { this._register(this.fileService.onDidFilesChange(e => this.onDidFilesChange(e))); } - private async onDidChangeProfiles(added: readonly IUserDataProfile[], removed: readonly IUserDataProfile[]): Promise { + private async onDidChangeProfiles(added: readonly IUserDataProfile[]): Promise { try { - await Promise.all(removed.map(profile => { - this.extensionsProfileWatchDisposables.deleteAndDispose(profile.id); - return this.removeExtensionsFromProfile(profile.extensionsResource); - })); - if (added.length) { await Promise.all(added.map(profile => { this.extensionsProfileWatchDisposables.set(profile.id, combinedDisposable( @@ -184,13 +179,6 @@ export class ExtensionsWatcher extends Disposable { } } - private async removeExtensionsFromProfile(removedProfile: URI): Promise { - for (const key of [...this.allExtensions.keys()]) { - this.removeExtensionWithKey(key, removedProfile); - } - await this.uninstallExtensionsNotInProfiles(); - } - private async uninstallExtensionsNotInProfiles(toUninstall?: IExtension[]): Promise { if (!toUninstall) { const installed = await this.extensionManagementService.scanAllUserInstalledExtensions(); diff --git a/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts b/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts index 579929a017f..4b7ec18e8f4 100644 --- a/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts +++ b/src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts @@ -42,7 +42,7 @@ suite('ExtensionsProfileScannerService', () => { instantiationService.stub(IFileService, fileService); instantiationService.stub(ITelemetryService, NullTelemetryService); const uriIdentityService = instantiationService.stub(IUriIdentityService, new UriIdentityService(fileService)); - const environmentService = instantiationService.stub(IEnvironmentService, { userRoamingDataHome: ROOT }); + const environmentService = instantiationService.stub(IEnvironmentService, { userRoamingDataHome: ROOT, cacheHome: joinPath(ROOT, 'cache'), }); const userDataProfilesService = new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService); instantiationService.stub(IUserDataProfilesService, userDataProfilesService); }); diff --git a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts index d9c03ec6156..2e5d07d3105 100644 --- a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts +++ b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts @@ -11,7 +11,7 @@ import { INativeEnvironmentService } from 'vs/platform/environment/common/enviro import { IExtensionsProfileScannerService, IProfileExtensionsScanOptions } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; import { AbstractExtensionsScannerService, ExtensionScannerInput, IExtensionsScannerService, IScannedExtensionManifest, Translations } from 'vs/platform/extensionManagement/common/extensionsScannerService'; import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/node/extensionsProfileScannerService'; -import { ExtensionType, IExtensionManifest, MANIFEST_CACHE_FOLDER, TargetPlatform } from 'vs/platform/extensions/common/extensions'; +import { ExtensionType, IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; import { IFileService } from 'vs/platform/files/common/files'; import { FileService } from 'vs/platform/files/common/fileService'; import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; @@ -43,7 +43,7 @@ class ExtensionsScannerService extends AbstractExtensionsScannerService implemen URI.file(nativeEnvironmentService.builtinExtensionsPath), URI.file(nativeEnvironmentService.extensionsPath), joinPath(nativeEnvironmentService.userHome, '.vscode-oss-dev', 'extensions', 'control.json'), - joinPath(ROOT, MANIFEST_CACHE_FOLDER), + userDataProfilesService.defaultProfile, userDataProfilesService, extensionsProfileScannerService, fileService, logService, nativeEnvironmentService, productService, uriIdentityService, instantiationService); } @@ -74,6 +74,7 @@ suite('NativeExtensionsScanerService Test', () => { userRoamingDataHome: ROOT, builtinExtensionsPath: systemExtensionsLocation.fsPath, extensionsPath: userExtensionsLocation.fsPath, + cacheHome: joinPath(ROOT, 'cache'), }); instantiationService.stub(IProductService, { version: '1.66.0' }); const uriIdentityService = new UriIdentityService(fileService); diff --git a/src/vs/platform/extensionManagement/test/node/installGalleryExtensionTask.test.ts b/src/vs/platform/extensionManagement/test/node/installGalleryExtensionTask.test.ts index 1fe124f04f4..fec8c3ce3e7 100644 --- a/src/vs/platform/extensionManagement/test/node/installGalleryExtensionTask.test.ts +++ b/src/vs/platform/extensionManagement/test/node/installGalleryExtensionTask.test.ts @@ -17,8 +17,7 @@ import { mock } from 'vs/base/test/common/mock'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ExtensionVerificationStatus } from 'vs/platform/extensionManagement/common/abstractExtensionManagementService'; -import { ExtensionManagementError, ExtensionManagementErrorCode, getTargetPlatform, IExtensionGalleryService, IGalleryExtension, IGalleryExtensionAssets, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { getTargetPlatform, IExtensionGalleryService, IGalleryExtension, IGalleryExtensionAssets, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService'; @@ -84,7 +83,8 @@ class TestInstallGalleryExtensionTask extends InstallGalleryExtensionTask { userRoamingDataHome: ROOT, builtinExtensionsPath: systemExtensionsLocation.fsPath, extensionsPath: userExtensionsLocation.fsPath, - userDataPath: userExtensionsLocation.fsPath + userDataPath: userExtensionsLocation.fsPath, + cacheHome: ROOT, }); instantiationService.stub(IProductService, {}); instantiationService.stub(ITelemetryService, NullTelemetryService); @@ -135,7 +135,7 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Verified); + assert.strictEqual(testObject.verificationStatus, true); assert.strictEqual(testObject.installed, true); }); @@ -144,7 +144,7 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Verified); + assert.strictEqual(testObject.verificationStatus, true); assert.strictEqual(testObject.installed, true); }); @@ -153,7 +153,7 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Unverified); + assert.strictEqual(testObject.verificationStatus, false); assert.strictEqual(testObject.installed, true); }); @@ -162,7 +162,7 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Unverified); + assert.strictEqual(testObject.verificationStatus, false); assert.strictEqual(testObject.installed, true); }); @@ -172,27 +172,19 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Unverified); + assert.strictEqual(testObject.verificationStatus, errorCode); assert.strictEqual(testObject.installed, true); }); - test('if verification fails, the task throws', async () => { + test('if verification fails', async () => { const errorCode = 'IntegrityCheckFailed'; const testObject = new TestInstallGalleryExtensionTask(aGalleryExtension('a', { isSigned: true }), anExtensionsDownloader({ isSignatureVerificationEnabled: true, verificationResult: errorCode, didExecute: true })); - try { - await testObject.run(); - } catch (e) { - assert.ok(e instanceof ExtensionManagementError); - assert.strictEqual(e.code, ExtensionManagementErrorCode.Signature); - assert.strictEqual(e.message, errorCode); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Unverified); - assert.strictEqual(testObject.installed, false); - return; - } + await testObject.run(); - assert.fail('It should have thrown.'); + assert.strictEqual(testObject.verificationStatus, errorCode); + assert.strictEqual(testObject.installed, true); }); test('if verification succeeds, the task completes', async () => { @@ -200,7 +192,7 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Verified); + assert.strictEqual(testObject.verificationStatus, true); assert.strictEqual(testObject.installed, true); }); @@ -209,7 +201,7 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Unverified); + assert.strictEqual(testObject.verificationStatus, false); assert.strictEqual(testObject.installed, true); }); @@ -218,7 +210,7 @@ suite('InstallGalleryExtensionTask Tests', () => { await testObject.run(); - assert.strictEqual(testObject.verificationStatus, ExtensionVerificationStatus.Unverified); + assert.strictEqual(testObject.verificationStatus, false); assert.strictEqual(testObject.installed, true); }); diff --git a/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts b/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts index c3eff4b7a14..118cbf8d5ec 100644 --- a/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts +++ b/src/vs/platform/extensionRecommendations/common/extensionRecommendations.ts @@ -11,6 +11,13 @@ export const enum RecommendationSource { EXE = 3 } +export interface IExtensionRecommendations { + source: RecommendationSource; + extensions: string[]; + name: string; + searchValue?: string; +} + export function RecommendationSourceToString(source: RecommendationSource) { switch (source) { case RecommendationSource.FILE: return 'file'; @@ -35,7 +42,7 @@ export interface IExtensionRecommendationNotificationService { readonly ignoredRecommendations: string[]; hasToIgnoreRecommendationNotifications(): boolean; - promptImportantExtensionsInstallNotification(extensionIds: string[], message: string, searchValue: string, source: RecommendationSource): Promise; + promptImportantExtensionsInstallNotification(recommendations: IExtensionRecommendations): Promise; promptWorkspaceRecommendations(recommendations: string[]): Promise; } diff --git a/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts b/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts index 4f8e8949972..2298e4c2005 100644 --- a/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts +++ b/src/vs/platform/extensionRecommendations/common/extensionRecommendationsIpc.ts @@ -5,7 +5,7 @@ import { Event } from 'vs/base/common/event'; import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; -import { IExtensionRecommendationNotificationService, RecommendationsNotificationResult, RecommendationSource } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; +import { IExtensionRecommendationNotificationService, IExtensionRecommendations, RecommendationsNotificationResult } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; export class ExtensionRecommendationNotificationServiceChannelClient implements IExtensionRecommendationNotificationService { @@ -15,8 +15,8 @@ export class ExtensionRecommendationNotificationServiceChannelClient implements get ignoredRecommendations(): string[] { throw new Error('not supported'); } - promptImportantExtensionsInstallNotification(extensionIds: string[], message: string, searchValue: string, priority: RecommendationSource): Promise { - return this.channel.call('promptImportantExtensionsInstallNotification', [extensionIds, message, searchValue, priority]); + promptImportantExtensionsInstallNotification(extensionRecommendations: IExtensionRecommendations): Promise { + return this.channel.call('promptImportantExtensionsInstallNotification', [extensionRecommendations]); } promptWorkspaceRecommendations(recommendations: string[]): Promise { @@ -39,7 +39,7 @@ export class ExtensionRecommendationNotificationServiceChannel implements IServe call(_: unknown, command: string, args?: any): Promise { switch (command) { - case 'promptImportantExtensionsInstallNotification': return this.service.promptImportantExtensionsInstallNotification(args[0], args[1], args[2], args[3]); + case 'promptImportantExtensionsInstallNotification': return this.service.promptImportantExtensionsInstallNotification(args[0]); } throw new Error(`Call not found: ${command}`); diff --git a/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts b/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts index 8347b3dbbe0..e63c48d0c2f 100644 --- a/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts +++ b/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts @@ -18,6 +18,7 @@ import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; import { getTelemetryLevel, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; import { RemoteAuthorities } from 'vs/base/common/network'; import { getRemoteServerRootPath } from 'vs/platform/remote/common/remoteHosts'; +import { TargetPlatform } from 'vs/platform/extensions/common/extensions'; const WEB_EXTENSION_RESOURCE_END_POINT = 'web-extension-resource'; @@ -39,12 +40,28 @@ export interface IExtensionResourceLoaderService { */ readonly supportsExtensionGalleryResources: boolean; + /** + * Return true if the given URI is a extension gallery resource. + */ + isExtensionGalleryResource(uri: URI): boolean; + /** * Computes the URL of a extension gallery resource. Returns `undefined` if gallery does not provide extension resources. */ - getExtensionGalleryResourceURL(galleryExtension: { publisher: string; name: string; version: string }, path?: string): URI | undefined; + getExtensionGalleryResourceURL(galleryExtension: { publisher: string; name: string; version: string; targetPlatform?: TargetPlatform }, path?: string): URI | undefined; } +export function migratePlatformSpecificExtensionGalleryResourceURL(resource: URI, targetPlatform: TargetPlatform): URI | undefined { + if (resource.query !== `target=${targetPlatform}`) { + return undefined; + } + const paths = resource.path.split('/'); + if (!paths[3]) { + return undefined; + } + paths[3] = `${paths[3]}+${targetPlatform}`; + return resource.with({ query: null, path: paths.join('/') }); +} export abstract class AbstractExtensionResourceLoaderService implements IExtensionResourceLoaderService { @@ -72,19 +89,28 @@ export abstract class AbstractExtensionResourceLoaderService implements IExtensi return this._extensionGalleryResourceUrlTemplate !== undefined; } - public getExtensionGalleryResourceURL(galleryExtension: { publisher: string; name: string; version: string }, path?: string): URI | undefined { + public getExtensionGalleryResourceURL({ publisher, name, version, targetPlatform }: { publisher: string; name: string; version: string; targetPlatform?: TargetPlatform }, path?: string): URI | undefined { if (this._extensionGalleryResourceUrlTemplate) { - const uri = URI.parse(format2(this._extensionGalleryResourceUrlTemplate, { publisher: galleryExtension.publisher, name: galleryExtension.name, version: galleryExtension.version, path: 'extension' })); + const uri = URI.parse(format2(this._extensionGalleryResourceUrlTemplate, { + publisher, + name, + version: targetPlatform !== undefined + && targetPlatform !== TargetPlatform.UNDEFINED + && targetPlatform !== TargetPlatform.UNKNOWN + && targetPlatform !== TargetPlatform.UNIVERSAL + ? `${version}+${targetPlatform}` + : version, + path: 'extension' + })); return this._isWebExtensionResourceEndPoint(uri) ? uri.with({ scheme: RemoteAuthorities.getPreferredWebSchema() }) : uri; } return undefined; } - public abstract readExtensionResource(uri: URI): Promise; - protected isExtensionGalleryResource(uri: URI) { - return this._extensionGalleryAuthority && this._extensionGalleryAuthority === this._getExtensionGalleryAuthority(uri); + isExtensionGalleryResource(uri: URI): boolean { + return !!this._extensionGalleryAuthority && this._extensionGalleryAuthority === this._getExtensionGalleryAuthority(uri); } protected async getExtensionGalleryRequestHeaders(): Promise { diff --git a/src/vs/platform/extensions/common/extensionHostStarter.ts b/src/vs/platform/extensions/common/extensionHostStarter.ts index 5d2a9e3a83a..a5c71cc9b1a 100644 --- a/src/vs/platform/extensions/common/extensionHostStarter.ts +++ b/src/vs/platform/extensions/common/extensionHostStarter.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { SerializedError } from 'vs/base/common/errors'; import { Event } from 'vs/base/common/event'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; @@ -27,11 +26,9 @@ export interface IExtensionHostStarter { onDynamicStdout(id: string): Event; onDynamicStderr(id: string): Event; onDynamicMessage(id: string): Event; - onDynamicError(id: string): Event<{ error: SerializedError }>; onDynamicExit(id: string): Event<{ code: number; signal: string }>; - canUseUtilityProcess(): Promise; - createExtensionHost(useUtilityProcess: boolean): Promise<{ id: string }>; + createExtensionHost(): Promise<{ id: string }>; start(id: string, opts: IExtensionHostProcessOptions): Promise; enableInspectPort(id: string): Promise; kill(id: string): Promise; diff --git a/src/vs/platform/extensions/common/extensionValidator.ts b/src/vs/platform/extensions/common/extensionValidator.ts index 0a5e7d20d21..cee5eaeedef 100644 --- a/src/vs/platform/extensions/common/extensionValidator.ts +++ b/src/vs/platform/extensions/common/extensionValidator.ts @@ -273,7 +273,7 @@ export function validateExtensionManifest(productVersion: string, productDate: P return validations; } if (typeof extensionManifest.main === 'undefined' && typeof extensionManifest.browser === 'undefined') { - validations.push([Severity.Error, nls.localize('extensionDescription.activationEvents2', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'main')]); + validations.push([Severity.Error, nls.localize('extensionDescription.activationEvents2', "property `{0}` should be omitted if the extension doesn't have a `{1}` or `{2}` property.", 'activationEvents', 'main', 'browser')]); return validations; } } @@ -294,10 +294,6 @@ export function validateExtensionManifest(productVersion: string, productDate: P // not a failure case } } - if (typeof extensionManifest.activationEvents === 'undefined') { - validations.push([Severity.Error, nls.localize('extensionDescription.main3', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'main')]); - return validations; - } } if (typeof extensionManifest.browser !== 'undefined') { if (typeof extensionManifest.browser !== 'string') { @@ -310,10 +306,6 @@ export function validateExtensionManifest(productVersion: string, productDate: P // not a failure case } } - if (typeof extensionManifest.activationEvents === 'undefined') { - validations.push([Severity.Error, nls.localize('extensionDescription.browser3', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'browser')]); - return validations; - } } if (!semver.valid(extensionManifest.version)) { diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts index 660f206a81d..cfa0e3296f0 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts @@ -11,9 +11,8 @@ import { ExtensionKind } from 'vs/platform/environment/common/environment'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { getRemoteName } from 'vs/platform/remote/common/remoteHosts'; -export const MANIFEST_CACHE_FOLDER = 'CachedExtensions'; -export const USER_MANIFEST_CACHE_FILE = 'user'; -export const BUILTIN_MANIFEST_CACHE_FILE = 'builtin'; +export const USER_MANIFEST_CACHE_FILE = 'extensions.user.cache'; +export const BUILTIN_MANIFEST_CACHE_FILE = 'extensions.builtin.cache'; export const UNDEFINED_PUBLISHER = 'undefined_publisher'; export interface ICommand { @@ -322,7 +321,6 @@ export interface IExtension { readonly changelogUrl?: URI; readonly isValid: boolean; readonly validations: readonly [Severity, string][]; - readonly browserNlsBundleUris?: { [language: string]: URI }; } /** @@ -343,7 +341,12 @@ export interface IExtension { */ export class ExtensionIdentifier { public readonly value: string; - private readonly _lower: string; + + /** + * Do not use directly. This is public to avoid mangling and thus + * allow compatibility between running from source and a built version. + */ + readonly _lower: string; constructor(value: string) { this.value = value; @@ -455,7 +458,6 @@ export interface IRelaxedExtensionDescription extends IRelaxedExtensionManifest isUserBuiltin: boolean; isUnderDevelopment: boolean; extensionLocation: URI; - browserNlsBundleUris?: { [language: string]: URI }; } export type IExtensionDescription = Readonly; diff --git a/src/vs/platform/extensions/electron-main/extensionHostStarter.ts b/src/vs/platform/extensions/electron-main/extensionHostStarter.ts index fe838c2ba54..2d5a39fa1da 100644 --- a/src/vs/platform/extensions/electron-main/extensionHostStarter.ts +++ b/src/vs/platform/extensions/electron-main/extensionHostStarter.ts @@ -3,31 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { canceled, SerializedError, transformErrorForSerialization } from 'vs/base/common/errors'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; +import { canceled } from 'vs/base/common/errors'; +import { IDisposable } from 'vs/base/common/lifecycle'; import { IExtensionHostProcessOptions, IExtensionHostStarter } from 'vs/platform/extensions/common/extensionHostStarter'; -import { Emitter, Event } from 'vs/base/common/event'; +import { Event } from 'vs/base/common/event'; import { ILogService } from 'vs/platform/log/common/log'; import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; -import { StopWatch } from 'vs/base/common/stopwatch'; -import { ChildProcess, fork } from 'child_process'; -import { StringDecoder } from 'string_decoder'; -import { Promises, timeout } from 'vs/base/common/async'; -import { FileAccess } from 'vs/base/common/network'; -import { mixin } from 'vs/base/common/objects'; -import * as platform from 'vs/base/common/platform'; -import { cwd } from 'vs/base/common/process'; -import { canUseUtilityProcess } from 'vs/base/parts/sandbox/electron-main/electronTypes'; +import { Promises } from 'vs/base/common/async'; import { WindowUtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; export class ExtensionHostStarter implements IDisposable, IExtensionHostStarter { - _serviceBrand: undefined; + + readonly _serviceBrand: undefined; private static _lastId: number = 0; - protected readonly _extHosts: Map; + private readonly _extHosts = new Map(); private _shutdown = false; constructor( @@ -36,10 +29,9 @@ export class ExtensionHostStarter implements IDisposable, IExtensionHostStarter @IWindowsMainService private readonly _windowsMainService: IWindowsMainService, @ITelemetryService private readonly _telemetryService: ITelemetryService, ) { - this._extHosts = new Map(); // On shutdown: gracefully await extension host shutdowns - this._lifecycleMainService.onWillShutdown((e) => { + this._lifecycleMainService.onWillShutdown(e => { this._shutdown = true; e.join('extHostStarter', this._waitForAllExit(6000)); }); @@ -49,7 +41,7 @@ export class ExtensionHostStarter implements IDisposable, IExtensionHostStarter // Intentionally not killing the extension host processes } - private _getExtHost(id: string): ExtensionHostProcess | WindowUtilityProcess { + private _getExtHost(id: string): WindowUtilityProcess { const extHostProcess = this._extHosts.get(id); if (!extHostProcess) { throw new Error(`Unknown extension host!`); @@ -69,37 +61,16 @@ export class ExtensionHostStarter implements IDisposable, IExtensionHostStarter return this._getExtHost(id).onMessage; } - onDynamicError(id: string): Event<{ error: SerializedError }> { - const exthost = this._getExtHost(id); - if (exthost instanceof WindowUtilityProcess) { - return Event.None; - } - - return exthost.onError; - } - onDynamicExit(id: string): Event<{ code: number; signal: string }> { return this._getExtHost(id).onExit; } - async canUseUtilityProcess(): Promise { - return canUseUtilityProcess; - } - - async createExtensionHost(useUtilityProcess: boolean): Promise<{ id: string }> { + async createExtensionHost(): Promise<{ id: string }> { if (this._shutdown) { throw canceled(); } const id = String(++ExtensionHostStarter._lastId); - let extHost: WindowUtilityProcess | ExtensionHostProcess; - if (useUtilityProcess) { - if (!canUseUtilityProcess) { - throw new Error(`Cannot use UtilityProcess!`); - } - extHost = new WindowUtilityProcess(this._logService, this._windowsMainService, this._telemetryService, this._lifecycleMainService); - } else { - extHost = new ExtensionHostProcess(id, this._logService); - } + const extHost = new WindowUtilityProcess(this._logService, this._windowsMainService, this._telemetryService, this._lifecycleMainService); this._extHosts.set(id, extHost); extHost.onExit(({ pid, code, signal }) => { this._logService.info(`Extension host with pid ${pid} exited with code: ${code}, signal: ${signal}.`); @@ -122,6 +93,7 @@ export class ExtensionHostStarter implements IDisposable, IExtensionHostStarter args: ['--skipWorkspaceStorageLock'], execArgv: opts.execArgv, allowLoadingUnsignedLibraries: true, + forceAllocationsToV8Sandbox: true, correlationId: id }); } @@ -163,120 +135,3 @@ export class ExtensionHostStarter implements IDisposable, IExtensionHostStarter return Promises.settled(exitPromises).then(() => { }); } } - -class ExtensionHostProcess extends Disposable { - - readonly _onStdout = this._register(new Emitter()); - readonly onStdout = this._onStdout.event; - - readonly _onStderr = this._register(new Emitter()); - readonly onStderr = this._onStderr.event; - - readonly _onMessage = this._register(new Emitter()); - readonly onMessage = this._onMessage.event; - - readonly _onError = this._register(new Emitter<{ error: SerializedError }>()); - readonly onError = this._onError.event; - - readonly _onExit = this._register(new Emitter<{ pid: number; code: number; signal: string }>()); - readonly onExit = this._onExit.event; - - private _process: ChildProcess | null = null; - private _hasExited: boolean = false; - - constructor( - public readonly id: string, - @ILogService private readonly _logService: ILogService, - ) { - super(); - } - - start(opts: IExtensionHostProcessOptions): void { - if (platform.isCI) { - this._logService.info(`Calling fork to start extension host...`); - } - const sw = StopWatch.create(false); - this._process = fork( - FileAccess.asFileUri('bootstrap-fork').fsPath, - ['--type=extensionHost', '--skipWorkspaceStorageLock'], - mixin({ cwd: cwd() }, opts), - ); - const forkTime = sw.elapsed(); - const pid = this._process.pid!; - - this._logService.info(`Starting extension host with pid ${pid} (fork() took ${forkTime} ms).`); - - const stdoutDecoder = new StringDecoder('utf-8'); - this._process.stdout?.on('data', (chunk) => { - const strChunk = typeof chunk === 'string' ? chunk : stdoutDecoder.write(chunk); - this._onStdout.fire(strChunk); - }); - - const stderrDecoder = new StringDecoder('utf-8'); - this._process.stderr?.on('data', (chunk) => { - const strChunk = typeof chunk === 'string' ? chunk : stderrDecoder.write(chunk); - this._onStderr.fire(strChunk); - }); - - this._process.on('message', msg => { - this._onMessage.fire(msg); - }); - - this._process.on('error', (err) => { - this._onError.fire({ error: transformErrorForSerialization(err) }); - }); - - this._process.on('exit', (code: number, signal: string) => { - this._hasExited = true; - this._onExit.fire({ pid, code, signal }); - }); - } - - enableInspectPort(): boolean { - if (!this._process) { - return false; - } - - this._logService.info(`Enabling inspect port on extension host with pid ${this._process.pid}.`); - - interface ProcessExt { - _debugProcess?(n: number): any; - } - - if (typeof (process)._debugProcess === 'function') { - // use (undocumented) _debugProcess feature of node - (process)._debugProcess!(this._process.pid!); - return true; - } else if (!platform.isWindows) { - // use KILL USR1 on non-windows platforms (fallback) - this._process.kill('SIGUSR1'); - return true; - } else { - // not supported... - return false; - } - } - - kill(): void { - if (!this._process) { - return; - } - this._logService.info(`Killing extension host with pid ${this._process.pid}.`); - this._process.kill(); - } - - async waitForExit(maxWaitTimeMs: number): Promise { - if (!this._process) { - return; - } - const pid = this._process.pid; - this._logService.info(`Waiting for extension host with pid ${pid} to exit.`); - await Promise.race([Event.toPromise(this.onExit), timeout(maxWaitTimeMs)]); - - if (!this._hasExited) { - // looks like we timed out - this._logService.info(`Extension host with pid ${pid} did not exit within ${maxWaitTimeMs}ms.`); - this._process.kill(); - } - } -} diff --git a/src/vs/platform/externalServices/common/marketplace.ts b/src/vs/platform/externalServices/common/marketplace.ts index 4a5239870f6..abb5e379869 100644 --- a/src/vs/platform/externalServices/common/marketplace.ts +++ b/src/vs/platform/externalServices/common/marketplace.ts @@ -28,12 +28,11 @@ export async function resolveMarketplaceHeaders(version: string, if (supportsTelemetry(productService, environmentService) && getTelemetryLevel(configurationService) === TelemetryLevel.USAGE) { const serviceMachineId = await getServiceMachineId(environmentService, fileService, storageService); - const { machineId } = await telemetryService.getTelemetryInfo(); headers['X-Market-User-Id'] = serviceMachineId; // Send machineId as VSCode-SessionId so we can correlate telemetry events across different services // machineId can be undefined sometimes (eg: when launching from CLI), so send serviceMachineId instead otherwise // Marketplace will reject the request if there is no VSCode-SessionId header - headers['VSCode-SessionId'] = machineId || serviceMachineId; + headers['VSCode-SessionId'] = telemetryService.machineId || serviceMachineId; } return headers; diff --git a/src/vs/platform/externalTerminal/common/externalTerminal.ts b/src/vs/platform/externalTerminal/common/externalTerminal.ts index 822ccb24e37..290bb20fca3 100644 --- a/src/vs/platform/externalTerminal/common/externalTerminal.ts +++ b/src/vs/platform/externalTerminal/common/externalTerminal.ts @@ -29,7 +29,7 @@ export interface IExternalTerminalService { export interface IExternalTerminalConfiguration { terminal: { - explorerKind: 'integrated' | 'external'; + explorerKind: 'integrated' | 'external' | 'both'; external: IExternalTerminalSettings; }; } diff --git a/src/vs/platform/files/browser/htmlFileSystemProvider.ts b/src/vs/platform/files/browser/htmlFileSystemProvider.ts index 18ba6fdfc07..382bb7a7e6c 100644 --- a/src/vs/platform/files/browser/htmlFileSystemProvider.ts +++ b/src/vs/platform/files/browser/htmlFileSystemProvider.ts @@ -144,8 +144,7 @@ export class HTMLFileSystemProvider implements IFileSystemProviderWithFileReadWr // Entire file else { - // TODO@electron: duplicate type definitions originate from `@types/node/stream/consumers.d.ts` - const reader: ReadableStreamDefaultReader = (file.stream() as unknown as ReadableStream).getReader(); + const reader: ReadableStreamDefaultReader = file.stream().getReader(); let res = await reader.read(); while (!res.done) { @@ -270,8 +269,8 @@ export class HTMLFileSystemProvider implements IFileSystemProviderWithFileReadWr const file = await fileHandle.getFile(); const contents = new Uint8Array(await file.arrayBuffer()); - await this.writeFile(to, contents, { create: true, overwrite: opts.overwrite, unlock: false }); - await this.delete(from, { recursive: false, useTrash: false }); + await this.writeFile(to, contents, { create: true, overwrite: opts.overwrite, unlock: false, atomic: false }); + await this.delete(from, { recursive: false, useTrash: false, atomic: false }); } // File API does not support any real rename otherwise diff --git a/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts b/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts index c302162a78e..a83c046c715 100644 --- a/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts +++ b/src/vs/platform/files/browser/indexedDBFileSystemProvider.ts @@ -34,6 +34,7 @@ const ERR_FILE_NOT_FOUND = createFileSystemProviderError(localize('fileNotExists const ERR_FILE_IS_DIR = createFileSystemProviderError(localize('fileIsDirectory', "File is Directory"), FileSystemProviderErrorCode.FileIsADirectory); const ERR_FILE_NOT_DIR = createFileSystemProviderError(localize('fileNotDirectory', "File is not a directory"), FileSystemProviderErrorCode.FileNotADirectory); const ERR_DIR_NOT_EMPTY = createFileSystemProviderError(localize('dirIsNotEmpty', "Directory is not empty"), FileSystemProviderErrorCode.Unknown); +const ERR_FILE_EXCEEDS_STORAGE_QUOTA = createFileSystemProviderError(localize('fileExceedsStorageQuota', "File exceeds available storage quota"), FileSystemProviderErrorCode.FileExceedsStorageQuota); // Arbitrary Internal Errors const ERR_UNKNOWN_INTERNAL = (message: string) => createFileSystemProviderError(localize('internal', "Internal error occurred in IndexedDB File System Provider. ({0})", message), FileSystemProviderErrorCode.Unknown); @@ -310,7 +311,7 @@ export class IndexedDBFileSystemProvider extends Disposable implements IFileSyst throw createFileSystemProviderError('Cannot rename files with different types', FileSystemProviderErrorCode.Unknown); } // delete the target file if exists - await this.delete(to, { recursive: true, useTrash: false }); + await this.delete(to, { recursive: true, useTrash: false, atomic: false }); } const toTargetResource = (path: string): URI => this.extUri.joinPath(to, this.extUri.relativePath(from, from.with({ path })) || ''); @@ -338,7 +339,7 @@ export class IndexedDBFileSystemProvider extends Disposable implements IFileSyst await this.bulkWrite(targetFiles); } - await this.delete(from, { recursive: true, useTrash: false }); + await this.delete(from, { recursive: true, useTrash: false, atomic: false }); } async delete(resource: URI, opts: IFileDeleteOptions): Promise { @@ -427,7 +428,17 @@ export class IndexedDBFileSystemProvider extends Disposable implements IFileSyst private async writeMany() { if (this.fileWriteBatch.length) { const fileBatch = this.fileWriteBatch.splice(0, this.fileWriteBatch.length); - await this.indexedDB.runInTransaction(this.store, 'readwrite', objectStore => fileBatch.map(entry => objectStore.put(entry.content, entry.resource.path))); + try { + await this.indexedDB.runInTransaction(this.store, 'readwrite', objectStore => fileBatch.map(entry => { + return objectStore.put(entry.content, entry.resource.path); + })); + } catch (ex) { + if (ex instanceof DOMException && ex.name === 'QuotaExceededError') { + throw ERR_FILE_EXCEEDS_STORAGE_QUOTA; + } + + throw ex; + } } } diff --git a/src/vs/platform/files/common/diskFileSystemProviderClient.ts b/src/vs/platform/files/common/diskFileSystemProviderClient.ts index 4eeed662440..f277238bbd3 100644 --- a/src/vs/platform/files/common/diskFileSystemProviderClient.ts +++ b/src/vs/platform/files/common/diskFileSystemProviderClient.ts @@ -53,6 +53,8 @@ export class DiskFileSystemProviderClient extends Disposable implements FileSystemProviderCapabilities.FileFolderCopy | FileSystemProviderCapabilities.FileWriteUnlock | FileSystemProviderCapabilities.FileAtomicRead | + FileSystemProviderCapabilities.FileAtomicWrite | + FileSystemProviderCapabilities.FileAtomicDelete | FileSystemProviderCapabilities.FileClone; if (this.extraCapabilities.pathCaseSensitive) { diff --git a/src/vs/platform/files/common/fileService.ts b/src/vs/platform/files/common/fileService.ts index 28c71b42042..e88ff723b8b 100644 --- a/src/vs/platform/files/common/fileService.ts +++ b/src/vs/platform/files/common/fileService.ts @@ -14,7 +14,7 @@ import { Disposable, DisposableStore, dispose, IDisposable, toDisposable } from import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; import { Schemas } from 'vs/base/common/network'; import { mark } from 'vs/base/common/performance'; -import { extUri, extUriIgnorePathCase, IExtUri, isAbsolutePath } from 'vs/base/common/resources'; +import { basename, dirname, extUri, extUriIgnorePathCase, IExtUri, isAbsolutePath, joinPath } from 'vs/base/common/resources'; import { consumeStream, isReadableBufferedStream, isReadableStream, listenStream, newWriteableStream, peekReadable, peekStream, transform } from 'vs/base/common/stream'; import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; @@ -249,6 +249,7 @@ export class FileService extends Disposable implements IFileService { ctime: stat.ctime, size: stat.size, readonly: Boolean((stat.permissions ?? 0) & FilePermission.Readonly) || Boolean(provider.capabilities & FileSystemProviderCapabilities.Readonly), + locked: Boolean((stat.permissions ?? 0) & FilePermission.Locked), etag: etag({ mtime: stat.mtime, size: stat.size }), children: undefined }; @@ -395,7 +396,17 @@ export class FileService extends Disposable implements IFileService { // write file: buffered else { - await this.doWriteBuffered(provider, resource, options, bufferOrReadableOrStreamOrBufferedStream instanceof VSBuffer ? bufferToReadable(bufferOrReadableOrStreamOrBufferedStream) : bufferOrReadableOrStreamOrBufferedStream); + const contents = bufferOrReadableOrStreamOrBufferedStream instanceof VSBuffer ? bufferToReadable(bufferOrReadableOrStreamOrBufferedStream) : bufferOrReadableOrStreamOrBufferedStream; + + // atomic write + if (options?.atomic !== false && options?.atomic?.postfix) { + await this.doWriteBufferedAtomic(provider, resource, joinPath(dirname(resource), `${basename(resource)}${options.atomic.postfix}`), options, contents); + } + + // non-atomic write + else { + await this.doWriteBuffered(provider, resource, options, contents); + } } // events @@ -415,6 +426,18 @@ export class FileService extends Disposable implements IFileService { throw new Error(localize('writeFailedUnlockUnsupported', "Unable to unlock file '{0}' because provider does not support it.", this.resourceForError(resource))); } + // Validate atomic support + const atomic = !!options?.atomic; + if (atomic) { + if (!(provider.capabilities & FileSystemProviderCapabilities.FileAtomicWrite)) { + throw new Error(localize('writeFailedAtomicUnsupported', "Unable to atomically write file '{0}' because provider does not support it.", this.resourceForError(resource))); + } + + if (unlock) { + throw new Error(localize('writeFailedAtomicUnlock', "Unable to unlock file '{0}' because atomic write is enabled.", this.resourceForError(resource))); + } + } + // Validate via file stat meta data let stat: IStat | undefined = undefined; try { @@ -578,7 +601,7 @@ export class FileService extends Disposable implements IFileService { } if (error instanceof TooLargeFileOperationError) { - return new TooLargeFileOperationError(message, error.fileOperationResult, error.size, error.options); + return new TooLargeFileOperationError(message, error.fileOperationResult, error.size, error.options as IReadFileOptions); } return new FileOperationError(message, toFileOperationResult(error), options); @@ -663,20 +686,8 @@ export class FileService extends Disposable implements IFileService { } private validateReadFileLimits(resource: URI, size: number, options?: IReadFileStreamOptions): void { - if (options?.limits) { - let tooLargeErrorResult: FileOperationResult | undefined = undefined; - - if (typeof options.limits.memory === 'number' && size > options.limits.memory) { - tooLargeErrorResult = FileOperationResult.FILE_EXCEEDS_MEMORY_LIMIT; - } - - if (typeof options.limits.size === 'number' && size > options.limits.size) { - tooLargeErrorResult = FileOperationResult.FILE_TOO_LARGE; - } - - if (typeof tooLargeErrorResult === 'number') { - throw new TooLargeFileOperationError(localize('fileTooLargeError', "Unable to read file '{0}' that is too large to open", this.resourceForError(resource)), tooLargeErrorResult, size, options); - } + if (typeof options?.limits?.size === 'number' && size > options.limits.size) { + throw new TooLargeFileOperationError(localize('fileTooLargeError', "Unable to read file '{0}' that is too large to open", this.resourceForError(resource)), FileOperationResult.FILE_TOO_LARGE, size, options); } } @@ -970,6 +981,16 @@ export class FileService extends Disposable implements IFileService { throw new Error(localize('deleteFailedTrashUnsupported', "Unable to delete file '{0}' via trash because provider does not support it.", this.resourceForError(resource))); } + // Validate atomic support + const atomic = options?.atomic; + if (atomic && !(provider.capabilities & FileSystemProviderCapabilities.FileAtomicDelete)) { + throw new Error(localize('deleteFailedAtomicUnsupported', "Unable to delete file '{0}' atomically because provider does not support it.", this.resourceForError(resource))); + } + + if (useTrash && atomic) { + throw new Error(localize('deleteFailedTrashAndAtomicUnsupported', "Unable to atomically delete file '{0}' because using trash is enabled.", this.resourceForError(resource))); + } + // Validate delete let stat: IStat | undefined = undefined; try { @@ -1001,9 +1022,10 @@ export class FileService extends Disposable implements IFileService { const useTrash = !!options?.useTrash; const recursive = !!options?.recursive; + const atomic = options?.atomic ?? false; // Delete through provider - await provider.delete(resource, { recursive, useTrash }); + await provider.delete(resource, { recursive, useTrash, atomic }); // Events this._onDidRunOperation.fire(new FileOperationEvent(resource, FileOperation.DELETE)); @@ -1133,6 +1155,28 @@ export class FileService extends Disposable implements IFileService { private readonly writeQueue = this._register(new ResourceQueue()); + private async doWriteBufferedAtomic(provider: IFileSystemProviderWithOpenReadWriteCloseCapability, resource: URI, tempResource: URI, options: IWriteFileOptions | undefined, readableOrStreamOrBufferedStream: VSBufferReadable | VSBufferReadableStream | VSBufferReadableBufferedStream): Promise { + + // Write to temp resource first + await this.doWriteBuffered(provider, tempResource, options, readableOrStreamOrBufferedStream); + + try { + + // Rename over existing to ensure atomic replace + await provider.rename(tempResource, resource, { overwrite: true }); + } catch (error) { + + // Cleanup in case of rename error + try { + await provider.delete(tempResource, { recursive: false, useTrash: false, atomic: false }); + } catch (error) { + // ignore - we want the outer error to bubble up + } + + throw error; + } + } + private async doWriteBuffered(provider: IFileSystemProviderWithOpenReadWriteCloseCapability, resource: URI, options: IWriteFileOptions | undefined, readableOrStreamOrBufferedStream: VSBufferReadable | VSBufferReadableStream | VSBufferReadableBufferedStream): Promise { return this.writeQueue.queueFor(resource, this.getExtUri(provider).providerExtUri).queue(async () => { @@ -1248,7 +1292,7 @@ export class FileService extends Disposable implements IFileService { } // Write through the provider - await provider.writeFile(resource, buffer.buffer, { create: true, overwrite: true, unlock: options?.unlock ?? false }); + await provider.writeFile(resource, buffer.buffer, { create: true, overwrite: true, unlock: options?.unlock ?? false, atomic: options?.atomic ?? false }); } private async doPipeBuffered(sourceProvider: IFileSystemProviderWithOpenReadWriteCloseCapability, source: URI, targetProvider: IFileSystemProviderWithOpenReadWriteCloseCapability, target: URI): Promise { @@ -1302,7 +1346,7 @@ export class FileService extends Disposable implements IFileService { } private async doPipeUnbufferedQueued(sourceProvider: IFileSystemProviderWithFileReadWriteCapability, source: URI, targetProvider: IFileSystemProviderWithFileReadWriteCapability, target: URI): Promise { - return targetProvider.writeFile(target, await sourceProvider.readFile(source), { create: true, overwrite: true, unlock: false }); + return targetProvider.writeFile(target, await sourceProvider.readFile(source), { create: true, overwrite: true, unlock: false, atomic: false }); } private async doPipeUnbufferedToBuffered(sourceProvider: IFileSystemProviderWithFileReadWriteCapability, source: URI, targetProvider: IFileSystemProviderWithOpenReadWriteCloseCapability, target: URI): Promise { @@ -1336,7 +1380,7 @@ export class FileService extends Disposable implements IFileService { protected throwIfFileSystemIsReadonly(provider: T, resource: URI): T { if (provider.capabilities & FileSystemProviderCapabilities.Readonly) { - throw new FileOperationError(localize('err.readonly', "Unable to modify readonly file '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_PERMISSION_DENIED); + throw new FileOperationError(localize('err.readonly', "Unable to modify read-only file '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_PERMISSION_DENIED); } return provider; @@ -1344,7 +1388,7 @@ export class FileService extends Disposable implements IFileService { private throwIfFileIsReadonly(resource: URI, stat: IStat): void { if ((stat.permissions ?? 0) & FilePermission.Readonly) { - throw new FileOperationError(localize('err.readonly', "Unable to modify readonly file '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_PERMISSION_DENIED); + throw new FileOperationError(localize('err.readonly', "Unable to modify read-only file '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_PERMISSION_DENIED); } } diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index 3f93b8b8a07..4f7c149b6d6 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -18,6 +18,7 @@ import { localize } from 'vs/nls'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { isWeb } from 'vs/base/common/platform'; import { Schemas } from 'vs/base/common/network'; +import { IMarkdownString } from 'vs/base/common/htmlContent'; //#region file service & providers @@ -283,7 +284,44 @@ export interface IFileAtomicReadOptions { * to from a different process. If you need such atomic * operations, you better use a real database as storage. */ - readonly atomic: true; + readonly atomic: boolean; +} + +export interface IFileAtomicOptions { + + /** + * The postfix is used to create a temporary file based + * on the original resource. The resulting temporary + * file will be in the same folder as the resource and + * have `postfix` appended to the resource name. + * + * Example: given a file resource `file:///some/path/foo.txt` + * and a postfix `.vsctmp`, the temporary file will be + * created as `file:///some/path/foo.txt.vsctmp`. + */ + readonly postfix: string; +} + +export interface IFileAtomicWriteOptions { + + /** + * The optional `atomic` flag can be used to make sure + * the `writeFile` method updates the target file atomically + * by first writing to a temporary file in the same folder + * and then renaming it over the target. + */ + readonly atomic: IFileAtomicOptions | false; +} + +export interface IFileAtomicDeleteOptions { + + /** + * The optional `atomic` flag can be used to make sure + * the `delete` method deletes the target atomically by + * first renaming it to a temporary resource in the same + * folder and then deleting it. + */ + readonly atomic: IFileAtomicOptions | false; } export interface IFileReadLimits { @@ -293,12 +331,6 @@ export interface IFileReadLimits { * `FILE_TOO_LARGE` will be thrown. */ size?: number; - - /** - * If the file exceeds the given size, an error of kind - * `FILE_EXCEEDS_MEMORY_LIMIT` will be thrown. - */ - memory?: number; } export interface IFileReadStreamOptions { @@ -322,7 +354,7 @@ export interface IFileReadStreamOptions { readonly limits?: IFileReadLimits; } -export interface IFileWriteOptions extends IFileOverwriteOptions, IFileUnlockOptions { +export interface IFileWriteOptions extends IFileOverwriteOptions, IFileUnlockOptions, IFileAtomicWriteOptions { /** * Set to `true` to create a file when it does not exist. Will @@ -364,10 +396,21 @@ export interface IFileDeleteOptions { /** * Set to `true` to attempt to move the file to trash - * instead of deleting it permanently from disk. This - * option maybe not be supported on all providers. + * instead of deleting it permanently from disk. + * + * This option maybe not be supported on all providers. */ readonly useTrash: boolean; + + /** + * The optional `atomic` flag can be used to make sure + * the `delete` method deletes the target atomically by + * first renaming it to a temporary resource in the same + * folder and then deleting it. + * + * This option maybe not be supported on all providers. + */ + readonly atomic: IFileAtomicOptions | false; } export enum FileType { @@ -400,9 +443,17 @@ export enum FileType { export enum FilePermission { /** - * File is readonly. + * File is readonly. Components like editors should not + * offer to edit the contents. */ - Readonly = 1 + Readonly = 1, + + /** + * File is locked. Components like editors should offer + * to edit the contents and ask the user upon saving to + * remove the lock. + */ + Locked = 2 } export interface IStat { @@ -513,10 +564,21 @@ export const enum FileSystemProviderCapabilities { */ FileAtomicRead = 1 << 14, + /** + * Provider support to write files atomically. This implies the + * provider provides the `FileReadWrite` capability too. + */ + FileAtomicWrite = 1 << 15, + + /** + * Provider support to delete atomically. + */ + FileAtomicDelete = 1 << 16, + /** * Provider support to clone files atomically. */ - FileClone = 1 << 15 + FileClone = 1 << 17 } export interface IFileSystemProvider { @@ -605,12 +667,46 @@ export function hasFileAtomicReadCapability(provider: IFileSystemProvider): prov return !!(provider.capabilities & FileSystemProviderCapabilities.FileAtomicRead); } +export interface IFileSystemProviderWithFileAtomicWriteCapability extends IFileSystemProvider { + writeFile(resource: URI, contents: Uint8Array, opts?: IFileAtomicWriteOptions): Promise; +} + +export function hasFileAtomicWriteCapability(provider: IFileSystemProvider): provider is IFileSystemProviderWithFileAtomicWriteCapability { + if (!hasReadWriteCapability(provider)) { + return false; // we require the `FileReadWrite` capability too + } + + return !!(provider.capabilities & FileSystemProviderCapabilities.FileAtomicWrite); +} + +export interface IFileSystemProviderWithFileAtomicDeleteCapability extends IFileSystemProvider { + delete(resource: URI, opts: IFileAtomicDeleteOptions): Promise; +} + +export function hasFileAtomicDeleteCapability(provider: IFileSystemProvider): provider is IFileSystemProviderWithFileAtomicDeleteCapability { + return !!(provider.capabilities & FileSystemProviderCapabilities.FileAtomicDelete); +} + +export interface IFileSystemProviderWithReadonlyCapability extends IFileSystemProvider { + + readonly capabilities: FileSystemProviderCapabilities.Readonly & FileSystemProviderCapabilities; + + /** + * An optional message to show in the UI to explain why the file system is readonly. + */ + readonly readOnlyMessage?: IMarkdownString; +} + +export function hasReadonlyCapability(provider: IFileSystemProvider): provider is IFileSystemProviderWithReadonlyCapability { + return !!(provider.capabilities & FileSystemProviderCapabilities.Readonly); +} + export enum FileSystemProviderErrorCode { FileExists = 'EntryExists', FileNotFound = 'EntryNotFound', FileNotADirectory = 'EntryNotADirectory', FileIsADirectory = 'EntryIsADirectory', - FileExceedsMemoryLimit = 'EntryExceedsMemoryLimit', + FileExceedsStorageQuota = 'EntryExceedsStorageQuota', FileTooLarge = 'EntryTooLarge', FileWriteLocked = 'EntryWriteLocked', NoPermissions = 'NoPermissions', @@ -679,7 +775,6 @@ export function toFileSystemProviderErrorCode(error: Error | undefined | null): case FileSystemProviderErrorCode.FileIsADirectory: return FileSystemProviderErrorCode.FileIsADirectory; case FileSystemProviderErrorCode.FileNotADirectory: return FileSystemProviderErrorCode.FileNotADirectory; case FileSystemProviderErrorCode.FileNotFound: return FileSystemProviderErrorCode.FileNotFound; - case FileSystemProviderErrorCode.FileExceedsMemoryLimit: return FileSystemProviderErrorCode.FileExceedsMemoryLimit; case FileSystemProviderErrorCode.FileTooLarge: return FileSystemProviderErrorCode.FileTooLarge; case FileSystemProviderErrorCode.FileWriteLocked: return FileSystemProviderErrorCode.FileWriteLocked; case FileSystemProviderErrorCode.NoPermissions: return FileSystemProviderErrorCode.NoPermissions; @@ -710,8 +805,6 @@ export function toFileOperationResult(error: Error): FileOperationResult { return FileOperationResult.FILE_PERMISSION_DENIED; case FileSystemProviderErrorCode.FileExists: return FileOperationResult.FILE_MOVE_CONFLICT; - case FileSystemProviderErrorCode.FileExceedsMemoryLimit: - return FileOperationResult.FILE_EXCEEDS_MEMORY_LIMIT; case FileSystemProviderErrorCode.FileTooLarge: return FileOperationResult.FILE_TOO_LARGE; default: @@ -970,7 +1063,7 @@ export function isParent(path: string, candidate: string, ignoreCase?: boolean): return path.indexOf(candidate) === 0; } -interface IBaseFileStat { +export interface IBaseFileStat { /** * The unified resource identifier of this file or folder. @@ -1017,9 +1110,17 @@ interface IBaseFileStat { readonly etag?: string; /** - * The file is read-only. + * File is readonly. Components like editors should not + * offer to edit the contents. */ readonly readonly?: boolean; + + /** + * File is locked. Components like editors should offer + * to edit the contents and ask the user upon saving to + * remove the lock. + */ + readonly locked?: boolean; } export interface IBaseFileStatWithMetadata extends Required { } @@ -1059,6 +1160,7 @@ export interface IFileStatWithMetadata extends IFileStat, IBaseFileStatWithMetad readonly etag: string; readonly size: number; readonly readonly: boolean; + readonly locked: boolean; readonly children: IFileStatWithMetadata[] | undefined; } @@ -1138,6 +1240,14 @@ export interface IWriteFileOptions { * Whether to attempt to unlock a file before writing. */ readonly unlock?: boolean; + + /** + * The optional `atomic` flag can be used to make sure + * the `writeFile` method updates the target file atomically + * by first writing to a temporary file in the same folder + * and then renaming it over the target. + */ + readonly atomic?: IFileAtomicOptions | false; } export interface IResolveFileOptions { @@ -1177,7 +1287,7 @@ export class FileOperationError extends Error { constructor( message: string, readonly fileOperationResult: FileOperationResult, - readonly options?: IReadFileOptions & IWriteFileOptions & ICreateFileOptions + readonly options?: IReadFileOptions | IWriteFileOptions | ICreateFileOptions ) { super(message); } @@ -1186,7 +1296,7 @@ export class FileOperationError extends Error { export class TooLargeFileOperationError extends FileOperationError { constructor( message: string, - override readonly fileOperationResult: FileOperationResult.FILE_TOO_LARGE | FileOperationResult.FILE_EXCEEDS_MEMORY_LIMIT, + override readonly fileOperationResult: FileOperationResult.FILE_TOO_LARGE, readonly size: number, options?: IReadFileOptions ) { @@ -1215,7 +1325,6 @@ export const enum FileOperationResult { FILE_PERMISSION_DENIED, FILE_TOO_LARGE, FILE_INVALID_PATH, - FILE_EXCEEDS_MEMORY_LIMIT, FILE_NOT_DIRECTORY, FILE_OTHER_ERROR } @@ -1239,12 +1348,19 @@ export const HotExitConfiguration = { export const FILES_ASSOCIATIONS_CONFIG = 'files.associations'; export const FILES_EXCLUDE_CONFIG = 'files.exclude'; +export const FILES_READONLY_INCLUDE_CONFIG = 'files.readonlyInclude'; +export const FILES_READONLY_EXCLUDE_CONFIG = 'files.readonlyExclude'; +export const FILES_READONLY_FROM_PERMISSIONS_CONFIG = 'files.readonlyFromPermissions'; + +export interface IGlobPatterns { + [filepattern: string]: boolean; +} export interface IFilesConfiguration { files: { associations: { [filepattern: string]: string }; exclude: IExpression; - watcherExclude: { [filepattern: string]: boolean }; + watcherExclude: IGlobPatterns; watcherInclude: string[]; encoding: string; autoGuessEncoding: boolean; @@ -1256,6 +1372,9 @@ export interface IFilesConfiguration { enableTrash: boolean; hotExit: string; saveConflictResolution: 'askUser' | 'overwriteFileOnDisk'; + readonlyInclude: IGlobPatterns; + readonlyExclude: IGlobPatterns; + readonlyFromPermissions: boolean; }; } @@ -1299,12 +1418,6 @@ export async function whenProviderRegistered(file: URI, fileService: IFileServic }); } -/** - * Native only: limits for memory sizes - */ -export const MIN_MAX_MEMORY_SIZE_MB = 2048; -export const FALLBACK_MAX_MEMORY_SIZE_MB = 4096; - /** * Helper to format a raw byte size into a human readable label. */ @@ -1342,23 +1455,6 @@ export class ByteSize { // File limits -export interface IFileLimits { - readonly maxFileSize: number; - readonly maxHeapSize: number; -} - -export const enum Arch { - IA32, - OTHER -} - -export function getPlatformFileLimits(arch: Arch): IFileLimits { - return { - maxFileSize: arch === Arch.IA32 ? 300 * ByteSize.MB : 16 * ByteSize.GB, // https://github.com/microsoft/vscode/issues/30180 - maxHeapSize: arch === Arch.IA32 ? 700 * ByteSize.MB : 2 * 700 * ByteSize.MB, // https://github.com/v8/v8/blob/5918a23a3d571b9625e5cce246bdd5b46ff7cd8b/src/heap/heap.cc#L149 - }; -} - export function getLargeFileConfirmationLimit(remoteAuthority?: string): number; export function getLargeFileConfirmationLimit(uri?: URI): number; export function getLargeFileConfirmationLimit(arg?: string | URI): number { diff --git a/src/vs/platform/files/common/io.ts b/src/vs/platform/files/common/io.ts index a03975d71f6..2d9a5544a92 100644 --- a/src/vs/platform/files/common/io.ts +++ b/src/vs/platform/files/common/io.ts @@ -125,14 +125,8 @@ function throwIfCancelled(token: CancellationToken): boolean { function throwIfTooLarge(totalBytesRead: number, options: ICreateReadStreamOptions): boolean { // Return early if file is too large to load and we have configured limits - if (options?.limits) { - if (typeof options.limits.memory === 'number' && totalBytesRead > options.limits.memory) { - throw createFileSystemProviderError(localize('fileTooLargeForHeapError', "To open a file of this size, you need to restart and allow to use more memory"), FileSystemProviderErrorCode.FileExceedsMemoryLimit); - } - - if (typeof options.limits.size === 'number' && totalBytesRead > options.limits.size) { - throw createFileSystemProviderError(localize('fileTooLargeError', "File is too large to open"), FileSystemProviderErrorCode.FileTooLarge); - } + if (typeof options?.limits?.size === 'number' && totalBytesRead > options.limits.size) { + throw createFileSystemProviderError(localize('fileTooLargeError', "File is too large to open"), FileSystemProviderErrorCode.FileTooLarge); } return true; diff --git a/src/vs/platform/files/node/diskFileSystemProvider.ts b/src/vs/platform/files/node/diskFileSystemProvider.ts index fffaaec83d5..0142abfb605 100644 --- a/src/vs/platform/files/node/diskFileSystemProvider.ts +++ b/src/vs/platform/files/node/diskFileSystemProvider.ts @@ -12,14 +12,14 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { Event } from 'vs/base/common/event'; import { isEqual } from 'vs/base/common/extpath'; import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { basename, dirname } from 'vs/base/common/path'; +import { basename, dirname, join } from 'vs/base/common/path'; import { isLinux, isWindows } from 'vs/base/common/platform'; -import { extUriBiasedIgnorePathCase, joinPath } from 'vs/base/common/resources'; +import { extUriBiasedIgnorePathCase, joinPath, basename as resourcesBasename, dirname as resourcesDirname } from 'vs/base/common/resources'; import { newWriteableStream, ReadableStreamEvents } from 'vs/base/common/stream'; import { URI } from 'vs/base/common/uri'; import { IDirent, Promises, RimRafMode, SymlinkSupport } from 'vs/base/node/pfs'; import { localize } from 'vs/nls'; -import { createFileSystemProviderError, IFileAtomicReadOptions, IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileCloneCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, isFileOpenForWriteOptions, IStat } from 'vs/platform/files/common/files'; +import { createFileSystemProviderError, IFileAtomicReadOptions, IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileCloneCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, isFileOpenForWriteOptions, IStat, FilePermission, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileAtomicDeleteCapability } from 'vs/platform/files/common/files'; import { readFileIntoStream } from 'vs/platform/files/common/io'; import { AbstractNonRecursiveWatcherClient, AbstractUniversalWatcherClient, IDiskFileChange, ILogMessage } from 'vs/platform/files/common/watcher'; import { ILogService } from 'vs/platform/log/common/log'; @@ -46,6 +46,8 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileAtomicReadCapability, + IFileSystemProviderWithFileAtomicWriteCapability, + IFileSystemProviderWithFileAtomicDeleteCapability, IFileSystemProviderWithFileCloneCapability { private static TRACE_LOG_RESOURCE_LOCKS = false; // not enabled by default because very spammy @@ -71,6 +73,8 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple FileSystemProviderCapabilities.FileFolderCopy | FileSystemProviderCapabilities.FileWriteUnlock | FileSystemProviderCapabilities.FileAtomicRead | + FileSystemProviderCapabilities.FileAtomicWrite | + FileSystemProviderCapabilities.FileAtomicDelete | FileSystemProviderCapabilities.FileClone; if (isLinux) { @@ -93,13 +97,22 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple type: this.toType(stat, symbolicLink), ctime: stat.birthtime.getTime(), // intentionally not using ctime here, we want the creation time mtime: stat.mtime.getTime(), - size: stat.size + size: stat.size, + permissions: (stat.mode & 0o200) === 0 ? FilePermission.Locked : undefined }; } catch (error) { throw this.toFileSystemProviderError(error); } } + private async statIgnoreError(resource: URI): Promise { + try { + return await this.stat(resource); + } catch (error) { + return undefined; + } + } + async readdir(resource: URI): Promise<[string, FileType][]> { try { const children = await Promises.readdir(this.toFilePath(resource), { withFileTypes: true }); @@ -230,6 +243,37 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple } async writeFile(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise { + if (opts?.atomic !== false && opts?.atomic?.postfix) { + return this.doWriteFileAtomic(resource, joinPath(resourcesDirname(resource), `${resourcesBasename(resource)}${opts.atomic.postfix}`), content, opts); + } else { + return this.doWriteFile(resource, content, opts); + } + } + + private async doWriteFileAtomic(resource: URI, tempResource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise { + + // Write to temp resource first + await this.doWriteFile(tempResource, content, opts); + + try { + + // Rename over existing to ensure atomic replace + await this.rename(tempResource, resource, { overwrite: true }); + + } catch (error) { + + // Cleanup in case of rename error + try { + await this.delete(tempResource, { recursive: false, useTrash: false, atomic: false }); + } catch (error) { + // ignore - we want the outer error to bubble up + } + + throw error; + } + } + + private async doWriteFile(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise { let handle: number | undefined = undefined; try { const filePath = this.toFilePath(resource); @@ -287,7 +331,7 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple let fd: number | undefined = undefined; try { - // Determine wether to unlock the file (write only) + // Determine whether to unlock the file (write only) if (isFileOpenForWriteOptions(opts) && opts.unlock) { try { const { stat } = await SymlinkSupport.stat(filePath); @@ -295,7 +339,9 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple await Promises.chmod(filePath, stat.mode | 0o200); } } catch (error) { - this.logService.trace(error); // ignore any errors here and try to just write + if (error.code !== 'ENOENT') { + this.logService.trace(error); // ignore any errors here and try to just write + } } } @@ -540,11 +586,41 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple async delete(resource: URI, opts: IFileDeleteOptions): Promise { try { const filePath = this.toFilePath(resource); - if (opts.recursive) { - await Promises.rm(filePath, RimRafMode.MOVE); + let rmMoveToPath: string | undefined = undefined; + if (opts?.atomic !== false && opts.atomic.postfix) { + rmMoveToPath = join(dirname(filePath), `${basename(filePath)}${opts.atomic.postfix}`); + } + + await Promises.rm(filePath, RimRafMode.MOVE, rmMoveToPath); } else { - await Promises.unlink(filePath); + try { + await Promises.unlink(filePath); + } catch (unlinkError) { + + // `fs.unlink` will throw when used on directories + // we try to detect this error and then see if the + // provided resource is actually a directory. in that + // case we use `fs.rmdir` to delete the directory. + + if (unlinkError.code === 'EPERM' || unlinkError.code === 'EISDIR') { + let isDirectory = false; + try { + const { stat, symbolicLink } = await SymlinkSupport.stat(filePath); + isDirectory = stat.isDirectory() && !symbolicLink; + } catch (statError) { + // ignore + } + + if (isDirectory) { + await Promises.rmdir(filePath); + } else { + throw unlinkError; + } + } else { + throw unlinkError; + } + } } } catch (error) { throw this.toFileSystemProviderError(error); @@ -561,8 +637,8 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple try { - // Ensure target does not exist - await this.validateTargetDeleted(from, to, 'move', opts.overwrite); + // Validate the move operation can perform + await this.validateMoveCopy(from, to, 'move', opts.overwrite); // Move await Promises.move(fromFilePath, toFilePath); @@ -588,8 +664,8 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple try { - // Ensure target does not exist - await this.validateTargetDeleted(from, to, 'copy', opts.overwrite); + // Validate the copy operation can perform + await this.validateMoveCopy(from, to, 'copy', opts.overwrite); // Copy await Promises.copy(fromFilePath, toFilePath, { preserveSymlinks: true }); @@ -605,7 +681,7 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple } } - private async validateTargetDeleted(from: URI, to: URI, mode: 'move' | 'copy', overwrite?: boolean): Promise { + private async validateMoveCopy(from: URI, to: URI, mode: 'move' | 'copy', overwrite?: boolean): Promise { const fromFilePath = this.toFilePath(from); const toFilePath = this.toFilePath(to); @@ -615,18 +691,44 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple isSameResourceWithDifferentPathCase = isEqual(fromFilePath, toFilePath, true /* ignore case */); } - if (isSameResourceWithDifferentPathCase && mode === 'copy') { - throw createFileSystemProviderError(localize('fileCopyErrorPathCase', "'File cannot be copied to same path with different path case"), FileSystemProviderErrorCode.FileExists); - } + if (isSameResourceWithDifferentPathCase) { - // Handle existing target (unless this is a case change) - if (!isSameResourceWithDifferentPathCase && await Promises.exists(toFilePath)) { - if (!overwrite) { - throw createFileSystemProviderError(localize('fileCopyErrorExists', "File at target already exists"), FileSystemProviderErrorCode.FileExists); + // You cannot copy the same file to the same location with different + // path case unless you are on a case sensitive file system + if (mode === 'copy') { + throw createFileSystemProviderError(localize('fileCopyErrorPathCase', "File cannot be copied to same path with different path case"), FileSystemProviderErrorCode.FileExists); } - // Delete target - await this.delete(to, { recursive: true, useTrash: false }); + // You can move the same file to the same location with different + // path case on case insensitive file systems + else if (mode === 'move') { + return; + } + } + + // Here we have to see if the target to move/copy to exists or not. + // We need to respect the `overwrite` option to throw in case the + // target exists. + + const fromStat = await this.statIgnoreError(from); + if (!fromStat) { + throw createFileSystemProviderError(localize('fileMoveCopyErrorNotFound', "File to move/copy does not exist"), FileSystemProviderErrorCode.FileNotFound); + } + + const toStat = await this.statIgnoreError(to); + if (!toStat) { + return; // target does not exist so we are good + } + + if (!overwrite) { + throw createFileSystemProviderError(localize('fileMoveCopyErrorExists', "File at target already exists and thus will not be moved/copied to unless overwrite is specified"), FileSystemProviderErrorCode.FileExists); + } + + // Handle existing target for move/copy + if ((fromStat.type & FileType.File) !== 0 && (toStat.type & FileType.File) !== 0) { + return; // node.js can move/copy a file over an existing file without having to delete it first + } else { + await this.delete(to, { recursive: true, useTrash: false, atomic: false }); } } @@ -707,6 +809,7 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple return error; // avoid double conversion } + let resultError: Error | string = error; let code: FileSystemProviderErrorCode; switch (error.code) { case 'ENOENT': @@ -725,11 +828,15 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple case 'EACCES': code = FileSystemProviderErrorCode.NoPermissions; break; + case 'ERR_UNC_HOST_NOT_ALLOWED': + resultError = `${error.message}. Please update the 'security.allowedUNCHosts' setting if you want to allow this host.`; + code = FileSystemProviderErrorCode.Unknown; + break; default: code = FileSystemProviderErrorCode.Unknown; } - return createFileSystemProviderError(error, code); + return createFileSystemProviderError(resultError, code); } private async toFileSystemProviderWriteError(resource: URI | undefined, error: NodeJS.ErrnoException): Promise { diff --git a/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts b/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts index a12b43189f0..e88991ab7fc 100644 --- a/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts +++ b/src/vs/platform/files/test/browser/indexedDBFileService.integrationTest.ts @@ -82,7 +82,7 @@ flakySuite('IndexedDBFileSystemProvider', function () { test('root is always present', async () => { assert.strictEqual((await userdataFileProvider.stat(userdataURIFromPaths([]))).type, FileType.Directory); - await userdataFileProvider.delete(userdataURIFromPaths([]), { recursive: true, useTrash: false }); + await userdataFileProvider.delete(userdataURIFromPaths([]), { recursive: true, useTrash: false, atomic: false }); assert.strictEqual((await userdataFileProvider.stat(userdataURIFromPaths([]))).type, FileType.Directory); }); @@ -230,7 +230,7 @@ flakySuite('IndexedDBFileSystemProvider', function () { let creationPromises: Promise | undefined = undefined; return { async create() { - return creationPromises = Promise.all(batch.map(entry => userdataFileProvider.writeFile(entry.resource, VSBuffer.fromString(entry.contents).buffer, { create: true, overwrite: true, unlock: false }))); + return creationPromises = Promise.all(batch.map(entry => userdataFileProvider.writeFile(entry.resource, VSBuffer.fromString(entry.contents).buffer, { create: true, overwrite: true, unlock: false, atomic: false }))); }, async assertContentsCorrect() { if (!creationPromises) { throw Error('read called before create'); } diff --git a/src/vs/platform/files/test/node/diskFileService.test.ts b/src/vs/platform/files/test/node/diskFileService.integrationTest.ts similarity index 96% rename from src/vs/platform/files/test/node/diskFileService.test.ts rename to src/vs/platform/files/test/node/diskFileService.integrationTest.ts index e44548e3985..fdf58c22472 100644 --- a/src/vs/platform/files/test/node/diskFileService.test.ts +++ b/src/vs/platform/files/test/node/diskFileService.integrationTest.ts @@ -16,7 +16,7 @@ import { joinPath } from 'vs/base/common/resources'; import { URI } from 'vs/base/common/uri'; import { Promises } from 'vs/base/node/pfs'; import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { etag, IFileAtomicReadOptions, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FilePermission, FileSystemProviderCapabilities, hasFileAtomicReadCapability, hasOpenReadWriteCloseCapability, IFileStat, IFileStatWithMetadata, IReadFileOptions, IStat, NotModifiedSinceFileOperationError, TooLargeFileOperationError } from 'vs/platform/files/common/files'; +import { etag, IFileAtomicReadOptions, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FilePermission, FileSystemProviderCapabilities, hasFileAtomicReadCapability, hasOpenReadWriteCloseCapability, IFileStat, IFileStatWithMetadata, IReadFileOptions, IStat, NotModifiedSinceFileOperationError, TooLargeFileOperationError, IFileAtomicOptions } from 'vs/platform/files/common/files'; import { FileService } from 'vs/platform/files/common/fileService'; import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; import { NullLogService } from 'vs/platform/log/common/log'; @@ -70,6 +70,8 @@ export class TestDiskFileSystemProvider extends DiskFileSystemProvider { FileSystemProviderCapabilities.FileFolderCopy | FileSystemProviderCapabilities.FileWriteUnlock | FileSystemProviderCapabilities.FileAtomicRead | + FileSystemProviderCapabilities.FileAtomicWrite | + FileSystemProviderCapabilities.FileAtomicDelete | FileSystemProviderCapabilities.FileClone; if (isLinux) { @@ -489,23 +491,27 @@ flakySuite('Disk File Service', function () { assert.ok(result.ctime! > 0); }); - test('deleteFile', async () => { - return testDeleteFile(false); + test('deleteFile (non recursive)', async () => { + return testDeleteFile(false, false); + }); + + test('deleteFile (recursive)', async () => { + return testDeleteFile(false, true); }); (isLinux /* trash is unreliable on Linux */ ? test.skip : test)('deleteFile (useTrash)', async () => { - return testDeleteFile(true); + return testDeleteFile(true, false); }); - async function testDeleteFile(useTrash: boolean): Promise { + async function testDeleteFile(useTrash: boolean, recursive: boolean): Promise { let event: FileOperationEvent; disposables.add(service.onDidRunOperation(e => event = e)); const resource = URI.file(join(testDir, 'deep', 'conway.js')); const source = await service.resolve(resource); - assert.strictEqual(await service.canDelete(source.resource, { useTrash }), true); - await service.del(source.resource, { useTrash }); + assert.strictEqual(await service.canDelete(source.resource, { useTrash, recursive }), true); + await service.del(source.resource, { useTrash, recursive }); assert.strictEqual(existsSync(source.resource.fsPath), false); @@ -515,7 +521,7 @@ flakySuite('Disk File Service', function () { let error: Error | undefined = undefined; try { - await service.del(source.resource, { useTrash }); + await service.del(source.resource, { useTrash, recursive }); } catch (e) { error = e; } @@ -565,22 +571,26 @@ flakySuite('Disk File Service', function () { }); test('deleteFolder (recursive)', async () => { - return testDeleteFolderRecursive(false); + return testDeleteFolderRecursive(false, false); + }); + + test('deleteFolder (recursive, atomic)', async () => { + return testDeleteFolderRecursive(false, { postfix: '.vsctmp' }); }); (isLinux /* trash is unreliable on Linux */ ? test.skip : test)('deleteFolder (recursive, useTrash)', async () => { - return testDeleteFolderRecursive(true); + return testDeleteFolderRecursive(true, false); }); - async function testDeleteFolderRecursive(useTrash: boolean): Promise { + async function testDeleteFolderRecursive(useTrash: boolean, atomic: IFileAtomicOptions | false): Promise { let event: FileOperationEvent; disposables.add(service.onDidRunOperation(e => event = e)); const resource = URI.file(join(testDir, 'deep')); const source = await service.resolve(resource); - assert.strictEqual(await service.canDelete(source.resource, { recursive: true, useTrash }), true); - await service.del(source.resource, { recursive: true, useTrash }); + assert.strictEqual(await service.canDelete(source.resource, { recursive: true, useTrash, atomic }), true); + await service.del(source.resource, { recursive: true, useTrash, atomic }); assert.strictEqual(existsSync(source.resource.fsPath), false); assert.ok(event!); @@ -604,6 +614,22 @@ flakySuite('Disk File Service', function () { assert.ok(error); }); + test('deleteFolder empty folder (recursive)', () => { + return testDeleteEmptyFolder(true); + }); + + test('deleteFolder empty folder (non recursive)', () => { + return testDeleteEmptyFolder(false); + }); + + async function testDeleteEmptyFolder(recursive: boolean): Promise { + const { resource } = await service.createFolder(URI.file(join(testDir, 'deep', 'empty'))); + + await service.del(resource, { recursive }); + + assert.strictEqual(await service.exists(resource), false); + } + test('move', async () => { let event: FileOperationEvent; disposables.add(service.onDidRunOperation(e => event = e)); @@ -1620,54 +1646,6 @@ flakySuite('Disk File Service', function () { assert.ok(!error); }); - test('readFile - FILE_EXCEEDS_MEMORY_LIMIT - default', async () => { - return testFileExceedsMemoryLimit(); - }); - - test('readFile - FILE_EXCEEDS_MEMORY_LIMIT - buffered', async () => { - setCapabilities(fileProvider, FileSystemProviderCapabilities.FileOpenReadWriteClose); - - return testFileExceedsMemoryLimit(); - }); - - test('readFile - FILE_EXCEEDS_MEMORY_LIMIT - unbuffered', async () => { - setCapabilities(fileProvider, FileSystemProviderCapabilities.FileReadWrite); - - return testFileExceedsMemoryLimit(); - }); - - test('readFile - FILE_EXCEEDS_MEMORY_LIMIT - streamed', async () => { - setCapabilities(fileProvider, FileSystemProviderCapabilities.FileReadStream); - - return testFileExceedsMemoryLimit(); - }); - - async function testFileExceedsMemoryLimit() { - await doTestFileExceedsMemoryLimit(false); - - // Also test when the stat size is wrong - fileProvider.setSmallStatSize(true); - return doTestFileExceedsMemoryLimit(true); - } - - async function doTestFileExceedsMemoryLimit(statSizeWrong: boolean) { - const resource = URI.file(join(testDir, 'index.html')); - - let error: FileOperationError | undefined = undefined; - try { - await service.readFile(resource, { limits: { memory: 10 } }); - } catch (err) { - error = err; - } - - assert.ok(error); - if (!statSizeWrong) { - assert.ok(error instanceof TooLargeFileOperationError); - assert.ok(typeof error.size === 'number'); - } - assert.strictEqual(error!.fileOperationResult, FileOperationResult.FILE_EXCEEDS_MEMORY_LIMIT); - } - test('readFile - FILE_TOO_LARGE - default', async () => { return testFileTooLarge(); }); @@ -1800,13 +1778,13 @@ flakySuite('Disk File Service', function () { }); test('writeFile - default', async () => { - return testWriteFile(); + return testWriteFile(false); }); test('writeFile - flush on write', async () => { DiskFileSystemProvider.configureFlushOnWrite(true); try { - return await testWriteFile(); + return await testWriteFile(false); } finally { DiskFileSystemProvider.configureFlushOnWrite(false); } @@ -1815,16 +1793,41 @@ flakySuite('Disk File Service', function () { test('writeFile - buffered', async () => { setCapabilities(fileProvider, FileSystemProviderCapabilities.FileOpenReadWriteClose); - return testWriteFile(); + return testWriteFile(false); }); test('writeFile - unbuffered', async () => { setCapabilities(fileProvider, FileSystemProviderCapabilities.FileReadWrite); - return testWriteFile(); + return testWriteFile(false); }); - async function testWriteFile() { + test('writeFile - default (atomic)', async () => { + return testWriteFile(true); + }); + + test('writeFile - flush on write (atomic)', async () => { + DiskFileSystemProvider.configureFlushOnWrite(true); + try { + return await testWriteFile(true); + } finally { + DiskFileSystemProvider.configureFlushOnWrite(false); + } + }); + + test('writeFile - buffered (atomic)', async () => { + setCapabilities(fileProvider, FileSystemProviderCapabilities.FileOpenReadWriteClose | FileSystemProviderCapabilities.FileAtomicWrite); + + return testWriteFile(true); + }); + + test('writeFile - unbuffered (atomic)', async () => { + setCapabilities(fileProvider, FileSystemProviderCapabilities.FileReadWrite | FileSystemProviderCapabilities.FileAtomicWrite); + + return testWriteFile(true); + }); + + async function testWriteFile(atomic: boolean) { let event: FileOperationEvent; disposables.add(service.onDidRunOperation(e => event = e)); @@ -1834,7 +1837,7 @@ flakySuite('Disk File Service', function () { assert.strictEqual(content, 'Small File'); const newContent = 'Updates to the small file'; - await service.writeFile(resource, VSBuffer.fromString(newContent)); + await service.writeFile(resource, VSBuffer.fromString(newContent), { atomic: atomic ? { postfix: '.vsctmp' } : false }); assert.ok(event!); assert.strictEqual(event!.resource.fsPath, resource.fsPath); @@ -1844,28 +1847,44 @@ flakySuite('Disk File Service', function () { } test('writeFile (large file) - default', async () => { - return testWriteFileLarge(); + return testWriteFileLarge(false); }); test('writeFile (large file) - buffered', async () => { setCapabilities(fileProvider, FileSystemProviderCapabilities.FileOpenReadWriteClose); - return testWriteFileLarge(); + return testWriteFileLarge(false); }); test('writeFile (large file) - unbuffered', async () => { setCapabilities(fileProvider, FileSystemProviderCapabilities.FileReadWrite); - return testWriteFileLarge(); + return testWriteFileLarge(false); }); - async function testWriteFileLarge() { + test('writeFile (large file) - default (atomic)', async () => { + return testWriteFileLarge(true); + }); + + test('writeFile (large file) - buffered (atomic)', async () => { + setCapabilities(fileProvider, FileSystemProviderCapabilities.FileOpenReadWriteClose | FileSystemProviderCapabilities.FileAtomicWrite); + + return testWriteFileLarge(true); + }); + + test('writeFile (large file) - unbuffered (atomic)', async () => { + setCapabilities(fileProvider, FileSystemProviderCapabilities.FileReadWrite | FileSystemProviderCapabilities.FileAtomicWrite); + + return testWriteFileLarge(true); + }); + + async function testWriteFileLarge(atomic: boolean) { const resource = URI.file(join(testDir, 'lorem.txt')); const content = readFileSync(resource.fsPath); const newContent = content.toString() + content.toString(); - const fileStat = await service.writeFile(resource, VSBuffer.fromString(newContent)); + const fileStat = await service.writeFile(resource, VSBuffer.fromString(newContent), { atomic: atomic ? { postfix: '.vsctmp' } : false }); assert.strictEqual(fileStat.name, 'lorem.txt'); assert.strictEqual(readFileSync(resource.fsPath).toString(), newContent); @@ -2223,11 +2242,15 @@ flakySuite('Disk File Service', function () { async function testLockedFiles(expectError: boolean) { const lockedFile = URI.file(join(testDir, 'my-locked-file')); - await service.writeFile(lockedFile, VSBuffer.fromString('Locked File')); + const content = await service.writeFile(lockedFile, VSBuffer.fromString('Locked File')); + assert.strictEqual(content.locked, false); const stats = await Promises.stat(lockedFile.fsPath); await Promises.chmod(lockedFile.fsPath, stats.mode & ~0o200); + let stat = await service.stat(lockedFile); + assert.strictEqual(stat.locked, true); + let error; const newContent = 'Updates to locked file'; try { @@ -2250,6 +2273,9 @@ flakySuite('Disk File Service', function () { } else { await service.writeFile(lockedFile, VSBuffer.fromString(newContent), { unlock: true }); assert.strictEqual(readFileSync(lockedFile.fsPath).toString(), newContent); + + stat = await service.stat(lockedFile); + assert.strictEqual(stat.locked, false); } } diff --git a/src/vs/platform/files/test/node/fixtures/resolver/index.html b/src/vs/platform/files/test/node/fixtures/resolver/index.html index bccd24d9272..8fc5f33ee2e 100644 --- a/src/vs/platform/files/test/node/fixtures/resolver/index.html +++ b/src/vs/platform/files/test/node/fixtures/resolver/index.html @@ -1,7 +1,6 @@ - Strada @@ -42,12 +41,12 @@ } @@ -42,12 +41,12 @@ } diff --git a/src/vs/workbench/contrib/webview/browser/pre/index.html b/src/vs/workbench/contrib/webview/browser/pre/index.html index dc31b55273f..9eefb7f0d14 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/index.html +++ b/src/vs/workbench/contrib/webview/browser/pre/index.html @@ -5,13 +5,11 @@ + content="default-src 'none'; script-src 'sha256-7Y08cqii1UgeZbSST9r8UPSownOSMa3/PiKe77avh7I=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> - - @@ -35,6 +33,7 @@ const ID = searchParams.get('id'); const webviewOrigin = searchParams.get('origin'); const onElectron = searchParams.get('platform') === 'electron'; + const disableServiceWorker = searchParams.has('disableServiceWorker'); const expectedWorkerVersion = parseInt(searchParams.get('swVersion')); /** @@ -131,21 +130,16 @@ } kbd { - color: var(--vscode-editor-foreground); + background-color: var(--vscode-keybindingLabel-background); + color: var(--vscode-keybindingLabel-foreground); + border-style: solid; + border-width: 1px; border-radius: 3px; + border-color: var(--vscode-keybindingLabel-border); + border-bottom-color: var(--vscode-keybindingLabel-bottomBorder); + box-shadow: inset 0 -1px 0 var(--vscode-widget-shadow); vertical-align: middle; padding: 1px 3px; - - background-color: hsla(0,0%,50%,.17); - border: 1px solid rgba(71,71,71,.4); - border-bottom-color: rgba(88,88,88,.4); - box-shadow: inset 0 -1px 0 rgba(88,88,88,.4); - } - .vscode-light kbd { - background-color: hsla(0,0%,87%,.5); - border: 1px solid hsla(0,0%,80%,.7); - border-bottom-color: hsla(0,0%,73%,.7); - box-shadow: inset 0 -1px 0 hsla(0,0%,73%,.7); } ::-webkit-scrollbar { @@ -219,13 +213,16 @@ /** @type {Promise} */ const workerReady = new Promise((resolve, reject) => { + if (disableServiceWorker) { + return resolve(); + } + if (!areServiceWorkersEnabled()) { return reject(new Error('Service Workers are not enabled. Webviews will not work. Try disabling private/incognito mode.')); } - const swPath = `service-worker.js?v=${expectedWorkerVersion}&vscode-resource-base-authority=${searchParams.get('vscode-resource-base-authority')}&remoteAuthority=${searchParams.get('remoteAuthority') ?? ''}`; + const swPath = encodeURI(`service-worker.js?v=${expectedWorkerVersion}&vscode-resource-base-authority=${searchParams.get('vscode-resource-base-authority')}&remoteAuthority=${searchParams.get('remoteAuthority') ?? ''}`); navigator.serviceWorker.register(swPath) - .then(() => navigator.serviceWorker.ready) .then(async registration => { /** * @param {MessageEvent} event @@ -247,7 +244,6 @@ // `unregister` and `register` here. return registration.unregister() .then(() => navigator.serviceWorker.register(swPath)) - .then(() => navigator.serviceWorker.ready) .finally(() => { resolve(); }); } }; @@ -266,16 +262,29 @@ // service worker already loaded & ready to receive messages postVersionMessage(currentController); } else { - // either there's no controlling service worker, or it's an old one: - // wait for it to change before posting the message + if (currentController) { + console.log(`Found unexpected service worker controller. Found: ${currentController.scriptURL}. Expected: ${swPath}. Waiting for controllerchange.`); + } else { + console.log(`No service worker controller found. Waiting for controllerchange.`); + } + + // Either there's no controlling service worker, or it's an old one. + // Wait for it to change before posting the message const onControllerChange = () => { navigator.serviceWorker.removeEventListener('controllerchange', onControllerChange); - postVersionMessage(navigator.serviceWorker.controller); + if (navigator.serviceWorker.controller) { + postVersionMessage(navigator.serviceWorker.controller); + } else { + return reject(new Error('No controller found.')); + } }; navigator.serviceWorker.addEventListener('controllerchange', onControllerChange); } }).catch(error => { - reject(new Error(`Could not register service workers: ${error}.`)); + if (!onElectron && error instanceof Error && error.message.includes('user denied permission')) { + return reject(new Error(`Could not register service worker. Please make sure third party cookies are enabled: ${error}`)); + } + return reject(new Error(`Could not register service worker: ${error}.`)); }); }); @@ -439,26 +448,25 @@ reduceMotion: false, }; - hostMessaging.onMessage('did-load-resource', (_event, data) => { - navigator.serviceWorker.ready.then(registration => { - assertIsDefined(registration.active).postMessage({ channel: 'did-load-resource', data }, data.data?.buffer ? [data.data.buffer] : []); + if (!disableServiceWorker) { + hostMessaging.onMessage('did-load-resource', (_event, data) => { + assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel: 'did-load-resource', data }, data.data?.buffer ? [data.data.buffer] : []); }); - }); - hostMessaging.onMessage('did-load-localhost', (_event, data) => { - navigator.serviceWorker.ready.then(registration => { - assertIsDefined(registration.active).postMessage({ channel: 'did-load-localhost', data }); + hostMessaging.onMessage('did-load-localhost', (_event, data) => { + assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel: 'did-load-localhost', data }); }); - }); - navigator.serviceWorker.addEventListener('message', event => { - switch (event.data.channel) { - case 'load-resource': - case 'load-localhost': - hostMessaging.postMessage(event.data.channel, event.data); - return; - } - }); + navigator.serviceWorker.addEventListener('message', event => { + switch (event.data.channel) { + case 'load-resource': + case 'load-localhost': + hostMessaging.postMessage(event.data.channel, event.data); + return; + } + }); + } + /** * @param {HTMLDocument?} document * @param {HTMLElement?} body @@ -604,7 +612,7 @@ /** * @param {KeyboardEvent} e */ - const handleInnerUp = (e) => { + const handleInnerKeyup = (e) => { hostMessaging.postMessage('did-keyup', { key: e.key, keyCode: e.keyCode, @@ -623,8 +631,10 @@ */ function isCopyPasteOrCut(e) { const hasMeta = e.ctrlKey || e.metaKey; - const shiftInsert = e.shiftKey && e.key.toLowerCase() === 'insert'; - return (hasMeta && ['c', 'v', 'x'].includes(e.key.toLowerCase())) || shiftInsert; + // 45: keyCode of "Insert" + const shiftInsert = e.shiftKey && e.keyCode === 45; + // 67, 86, 88: keyCode of "C", "V", "X" + return (hasMeta && [67, 86, 88].includes(e.keyCode)) || shiftInsert; } /** @@ -633,7 +643,8 @@ */ function isUndoRedo(e) { const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && ['z', 'y'].includes(e.key.toLowerCase()); + // 90, 89: keyCode of "Z", "Y" + return hasMeta && [90, 89].includes(e.keyCode); } /** @@ -642,7 +653,8 @@ */ function isPrint(e) { const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && e.key.toLowerCase() === 'p'; + // 80: keyCode of "P" + return hasMeta && e.keyCode === 80; } /** @@ -651,7 +663,8 @@ */ function isFindEvent(e) { const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && e.key.toLowerCase() === 'f'; + // 70: keyCode of "F" + return hasMeta && e.keyCode === 70; } /** @@ -660,7 +673,8 @@ */ function isSaveEvent(e) { const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && e.key.toLowerCase() === 's'; + // 83: keyCode of "S" + return hasMeta && e.keyCode === 83; } /** @@ -669,7 +683,8 @@ */ function isCloseTab(e) { const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && e.key.toLowerCase() === 'w'; + // 87: keyCode of "W" + return hasMeta && e.keyCode === 87; } /** @@ -678,7 +693,8 @@ */ function isNewWindow(e) { const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && e.key.toLowerCase() === 'n'; + // 78: keyCode of "N" + return hasMeta && e.keyCode === 78; } let isHandlingScroll = false; @@ -833,6 +849,12 @@ return '\n' + newDocument.documentElement.outerHTML; } + // Also forward events before the contents of the webview have loaded + window.addEventListener('keydown', handleInnerKeydown); + window.addEventListener('keyup', handleInnerKeyup); + window.addEventListener('dragenter', handleInnerDragStartEvent); + window.addEventListener('dragover', handleInnerDragStartEvent); + onDomReady(() => { if (!document.body) { return; @@ -963,6 +985,9 @@ newFrame.style.cssText = 'display: block; margin: 0; overflow: hidden; position: absolute; width: 100%; height: 100%; visibility: hidden'; document.body.appendChild(newFrame); + newFrame.contentWindow.addEventListener('keydown', handleInnerKeydown); + newFrame.contentWindow.addEventListener('keyup', handleInnerKeyup); + /** * @param {Document} contentDocument */ @@ -1070,7 +1095,7 @@ contentWindow.addEventListener('click', handleInnerClick); contentWindow.addEventListener('auxclick', handleAuxClick); contentWindow.addEventListener('keydown', handleInnerKeydown); - contentWindow.addEventListener('keyup', handleInnerUp); + contentWindow.addEventListener('keyup', handleInnerKeyup); contentWindow.addEventListener('contextmenu', e => { if (e.defaultPrevented) { // Extension code has already handled this event @@ -1118,6 +1143,14 @@ } }); + // propagate vscode-context-menu-visible class + hostMessaging.onMessage('set-context-menu-visible', (_event, data) => { + const target = getActiveFrame(); + if (target && target.contentDocument) { + target.contentDocument.body.classList.toggle('vscode-context-menu-visible', data.visible); + } + }); + hostMessaging.onMessage('set-title', async (_event, data) => { const target = getActiveFrame(); if (target) { @@ -1211,11 +1244,6 @@ } }; - // Also forward events before the contents of the webview have loaded - window.addEventListener('keydown', handleInnerKeydown); - window.addEventListener('dragenter', handleInnerDragStartEvent); - window.addEventListener('dragover', handleInnerDragStartEvent); - hostMessaging.signalReady(); }); diff --git a/src/vs/workbench/contrib/webview/browser/resourceLoading.ts b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts index 602e3610c1b..065187469ca 100644 --- a/src/vs/workbench/contrib/webview/browser/resourceLoading.ts +++ b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts @@ -9,7 +9,7 @@ import { isUNC } from 'vs/base/common/extpath'; import { Schemas } from 'vs/base/common/network'; import { normalize, sep } from 'vs/base/common/path'; import { URI } from 'vs/base/common/uri'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; +import { FileOperationError, FileOperationResult, IFileService, IWriteFileOptions } from 'vs/platform/files/common/files'; import { ILogService } from 'vs/platform/log/common/log'; import { getWebviewContentMimeType } from 'vs/platform/webview/common/mimeTypes'; @@ -73,7 +73,7 @@ export async function loadLocalResource( // NotModified status is expected and can be handled gracefully if (result === FileOperationResult.FILE_NOT_MODIFIED_SINCE) { - return new WebviewResourceResponse.NotModified(mime, err.options?.mtime); + return new WebviewResourceResponse.NotModified(mime, (err.options as IWriteFileOptions | undefined)?.mtime); } } diff --git a/src/vs/workbench/contrib/webview/browser/webview.ts b/src/vs/workbench/contrib/webview/browser/webview.ts index e6601363e3f..2a9158a46d1 100644 --- a/src/vs/workbench/contrib/webview/browser/webview.ts +++ b/src/vs/workbench/contrib/webview/browser/webview.ts @@ -94,6 +94,12 @@ export interface WebviewOptions { readonly purpose?: WebviewContentPurpose; readonly customClasses?: string; readonly enableFindWidget?: boolean; + + /** + * Disable the service worker used for loading local resources in the webview. + */ + readonly disableServiceWorker?: boolean; + readonly tryRestoreScrollPosition?: boolean; readonly retainContextWhenHidden?: boolean; transformCssVariables?(styles: WebviewStyles): WebviewStyles; @@ -215,16 +221,27 @@ export interface IWebview extends IDisposable { readonly onDidFocus: Event; readonly onDidBlur: Event; + + /** + * Fired when the webview is disposed of. + */ readonly onDidDispose: Event; readonly onDidClickLink: Event; readonly onDidScroll: Event<{ readonly scrollYPercentage: number }>; readonly onDidWheel: Event; + readonly onDidUpdateState: Event; readonly onDidReload: Event; - readonly onMessage: Event; + + /** + * Fired when the webview cannot be loaded or is now in a non-functional state. + */ + readonly onFatalError: Event<{ readonly message: string }>; readonly onMissingCsp: Event; + readonly onMessage: Event; + postMessage(message: any, transfer?: readonly ArrayBuffer[]): Promise; focus(): void; diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts index 93f2b6bff57..535da4b66c8 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -261,6 +261,7 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD this._register(this.on('fatal-error', (e) => { notificationService.error(localize('fatalErrorMessage', "Error loading webview: {0}", e.message)); + this._onFatalError.fire({ message: e.message }); })); this._register(this.on('did-keydown', (data) => { @@ -325,6 +326,8 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD this._register(Event.runAndSubscribe(webviewThemeDataProvider.onThemeDataChanged, () => this.style())); this._register(_accessibilityService.onDidChangeReducedMotion(() => this.style())); this._register(_accessibilityService.onDidChangeScreenReaderOptimized(() => this.style())); + this._register(contextMenuService.onDidShowContextMenu(() => this._send('set-context-menu-visible', { visible: true }))); + this._register(contextMenuService.onDidHideContextMenu(() => this._send('set-context-menu-visible', { visible: false }))); this._confirmBeforeClose = configurationService.getValue('window.confirmBeforeClose'); @@ -403,6 +406,9 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD private readonly _onDidBlur = this._register(new Emitter()); public readonly onDidBlur = this._onDidBlur.event; + private readonly _onFatalError = this._register(new Emitter<{ readonly message: string }>()); + public readonly onFatalError = this._onFatalError.event; + private readonly _onDidDispose = this._register(new Emitter()); public readonly onDidDispose = this._onDidDispose.event; @@ -458,6 +464,10 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD parentOrigin: window.origin, }; + if (this._options.disableServiceWorker) { + params.disableServiceWorker = 'true'; + } + if (this._environmentService.remoteAuthority) { params.remoteAuthority = this._environmentService.remoteAuthority; } diff --git a/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts b/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts index 396c9ce35b7..848fcd1fbe5 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts @@ -33,7 +33,7 @@ export class WebviewFindWidget extends SimpleFindWidget { @IContextKeyService contextKeyService: IContextKeyService, @IKeybindingService keybindingService: IKeybindingService ) { - super(undefined, { showCommonFindToggles: false, checkImeCompletionState: _delegate.checkImeCompletionState }, contextViewService, contextKeyService, keybindingService); + super({ showCommonFindToggles: false, checkImeCompletionState: _delegate.checkImeCompletionState }, contextViewService, contextKeyService, keybindingService); this._findWidgetFocused = KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED.bindTo(contextKeyService); this._register(_delegate.hasFindResult(hasResult => { diff --git a/src/vs/workbench/contrib/webview/browser/webviewMessages.d.ts b/src/vs/workbench/contrib/webview/browser/webviewMessages.d.ts index c294fd1a651..eae9c80fa68 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewMessages.d.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewMessages.d.ts @@ -66,6 +66,7 @@ export type ToWebviewMessage = { location: string | undefined; }; 'set-confirm-before-close': string; + 'set-context-menu-visible': { visible: boolean }; 'initial-scroll-position': number; 'content': UpdateContentEvent; 'set-title': string | undefined; diff --git a/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts b/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts index 5c828b5141f..a373e1f2e27 100644 --- a/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts +++ b/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts @@ -10,7 +10,7 @@ import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/ import { isWeb } from 'vs/base/common/platform'; import { generateUuid } from 'vs/base/common/uuid'; import * as nls from 'vs/nls'; -import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { IContextKeyService, IScopedContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IEditorOptions } from 'vs/platform/editor/common/editor'; import { IStorageService } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -50,7 +50,7 @@ export class WebviewEditor extends EditorPane { private readonly _onDidFocusWebview = this._register(new Emitter()); public override get onDidFocus(): Event { return this._onDidFocusWebview.event; } - private readonly _scopedContextKeyService = this._register(new MutableDisposable()); + private readonly _scopedContextKeyService = this._register(new MutableDisposable()); constructor( @ITelemetryService telemetryService: ITelemetryService, @@ -65,7 +65,12 @@ export class WebviewEditor extends EditorPane { ) { super(WebviewEditor.ID, telemetryService, themeService, storageService); - this._register(editorGroupsService.onDidScroll(() => { + this._register(Event.any( + editorGroupsService.onDidScroll, + editorGroupsService.onDidAddGroup, + editorGroupsService.onDidRemoveGroup, + editorGroupsService.onDidMoveGroup, + )(() => { if (this.webview && this._visible) { this.synchronizeWebviewContainerDimensions(this.webview); } @@ -192,7 +197,7 @@ export class WebviewEditor extends EditorPane { } private synchronizeWebviewContainerDimensions(webview: IOverlayWebview, dimension?: DOM.Dimension) { - if (!this._element) { + if (!this._element?.isConnected) { return; } const rootContainer = this._workbenchLayoutService.getContainer(Parts.EDITOR_PART); diff --git a/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts b/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts index d484930222e..263649a8b74 100644 --- a/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts +++ b/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts @@ -3,6 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +/* eslint-disable local/code-no-native-private */ + import { CancelablePromise, createCancelablePromise, DeferredPromise } from 'vs/base/common/async'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { memoize } from 'vs/base/common/decorators'; diff --git a/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts b/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts index d1b480f1f9a..6565826cb11 100644 --- a/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts +++ b/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts @@ -84,7 +84,7 @@ export class WebviewViewPane extends ViewPane { @IWebviewService private readonly webviewService: IWebviewService, @IWebviewViewService private readonly webviewViewService: IWebviewViewService, ) { - super({ ...options, titleMenuId: MenuId.ViewTitle }, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); + super({ ...options, titleMenuId: MenuId.ViewTitle, showActionsAlways: true }, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); this.extensionId = options.fromExtensionId; this.defaultTitle = this.title; diff --git a/src/vs/workbench/contrib/welcomeDialog/browser/media/welcomeWidget.css b/src/vs/workbench/contrib/welcomeDialog/browser/media/welcomeWidget.css new file mode 100644 index 00000000000..79dade268d9 --- /dev/null +++ b/src/vs/workbench/contrib/welcomeDialog/browser/media/welcomeWidget.css @@ -0,0 +1,23 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +.monaco-dialog-box { + border-radius: 6px; +} + +.dialog-message-detail-title > div > p > .codicon[class*='codicon-']::before{ + position: relative; + color: var(--vscode-textLink-foreground); + padding-right: 10px; + font-size: larger; +} + +.dialog-message-detail-title { + height: 22px; + font-size: large; +} + +.monaco-dialog-box .monaco-action-bar .actions-container { + justify-content: flex-end; +} diff --git a/src/vs/workbench/contrib/welcomeDialog/browser/welcomeDialog.contribution.ts b/src/vs/workbench/contrib/welcomeDialog/browser/welcomeDialog.contribution.ts new file mode 100644 index 00000000000..9fcc7bb449f --- /dev/null +++ b/src/vs/workbench/contrib/welcomeDialog/browser/welcomeDialog.contribution.ts @@ -0,0 +1,111 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry, IWorkbenchContribution } from 'vs/workbench/common/contributions'; +import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; +import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { ICommandService } from 'vs/platform/commands/common/commands'; +import { WelcomeWidget } from 'vs/workbench/contrib/welcomeDialog/browser/welcomeWidget'; +import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; +import { localize } from 'vs/nls'; +import { applicationConfigurationNodeBase } from 'vs/workbench/common/configuration'; +import { RunOnceScheduler } from 'vs/base/common/async'; +import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; + +const configurationKey = 'workbench.welcome.experimental.dialog'; + +class WelcomeDialogContribution extends Disposable implements IWorkbenchContribution { + + private isRendered = false; + + constructor( + @IStorageService storageService: IStorageService, + @IBrowserWorkbenchEnvironmentService environmentService: IBrowserWorkbenchEnvironmentService, + @IConfigurationService configurationService: IConfigurationService, + @IContextKeyService readonly contextService: IContextKeyService, + @ICodeEditorService readonly codeEditorService: ICodeEditorService, + @IInstantiationService readonly instantiationService: IInstantiationService, + @ICommandService readonly commandService: ICommandService, + @ITelemetryService readonly telemetryService: ITelemetryService, + @IOpenerService readonly openerService: IOpenerService, + @IEditorService readonly editorService: IEditorService + ) { + super(); + + if (!storageService.isNew(StorageScope.APPLICATION)) { + return; // do not show if this is not the first session + } + + const setting = configurationService.inspect(configurationKey); + if (!setting.value) { + return; + } + + const welcomeDialog = environmentService.options?.welcomeDialog; + if (!welcomeDialog) { + return; + } + + this._register(editorService.onDidActiveEditorChange(() => { + if (!this.isRendered) { + + const codeEditor = codeEditorService.getActiveCodeEditor(); + if (codeEditor?.hasModel()) { + const scheduler = new RunOnceScheduler(() => { + const notificationsVisible = contextService.contextMatchesRules(ContextKeyExpr.deserialize('notificationCenterVisible')) || + contextService.contextMatchesRules(ContextKeyExpr.deserialize('notificationToastsVisible')); + if (codeEditor === codeEditorService.getActiveCodeEditor() && !notificationsVisible) { + this.isRendered = true; + + const welcomeWidget = new WelcomeWidget( + codeEditor, + instantiationService, + commandService, + telemetryService, + openerService); + + welcomeWidget.render(welcomeDialog.title, + welcomeDialog.message, + welcomeDialog.buttonText, + welcomeDialog.buttonCommand); + } + }, 3000); + + this._register(codeEditor.onDidChangeModelContent((e) => { + if (!this.isRendered) { + scheduler.schedule(); + } + })); + } + } + })); + } +} + +Registry.as(WorkbenchExtensions.Workbench) + .registerWorkbenchContribution(WelcomeDialogContribution, LifecyclePhase.Eventually); + +const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); +configurationRegistry.registerConfiguration({ + ...applicationConfigurationNodeBase, + properties: { + 'workbench.welcome.experimental.dialog': { + scope: ConfigurationScope.APPLICATION, + type: 'boolean', + default: false, + tags: ['experimental'], + description: localize('workbench.welcome.dialog', "When enabled, a welcome widget is shown in the editor") + } + } +}); diff --git a/src/vs/workbench/contrib/welcomeDialog/browser/welcomeWidget.ts b/src/vs/workbench/contrib/welcomeDialog/browser/welcomeWidget.ts new file mode 100644 index 00000000000..38ef2e32529 --- /dev/null +++ b/src/vs/workbench/contrib/welcomeDialog/browser/welcomeWidget.ts @@ -0,0 +1,218 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import 'vs/css!./media/welcomeWidget'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; +import { $, append, hide } from 'vs/base/browser/dom'; +import { MarkdownString } from 'vs/base/common/htmlContent'; +import { MarkdownRenderer } from 'vs/editor/contrib/markdownRenderer/browser/markdownRenderer'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { ButtonBar } from 'vs/base/browser/ui/button/button'; +import { mnemonicButtonLabel } from 'vs/base/common/labels'; +import { ICommandService } from 'vs/platform/commands/common/commands'; +import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles'; +import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { Action, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions'; +import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; +import { localize } from 'vs/nls'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { Codicon } from 'vs/base/common/codicons'; +import { LinkedText, parseLinkedText } from 'vs/base/common/linkedText'; +import { Link } from 'vs/platform/opener/browser/link'; +import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels'; +import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; +import { Color } from 'vs/base/common/color'; +import { contrastBorder, editorWidgetBackground, editorWidgetForeground, widgetBorder, widgetShadow } from 'vs/platform/theme/common/colorRegistry'; + +export class WelcomeWidget extends Disposable implements IOverlayWidget { + + private readonly _rootDomNode: HTMLElement; + private readonly element: HTMLElement; + private readonly messageContainer: HTMLElement; + private readonly markdownRenderer = this.instantiationService.createInstance(MarkdownRenderer, {}); + + constructor( + private readonly _editor: ICodeEditor, + private readonly instantiationService: IInstantiationService, + private readonly commandService: ICommandService, + private readonly telemetryService: ITelemetryService, + private readonly openerService: IOpenerService + ) { + super(); + this._rootDomNode = document.createElement('div'); + this._rootDomNode.className = 'welcome-widget'; + + this.element = this._rootDomNode.appendChild($('.monaco-dialog-box')); + this.element.setAttribute('role', 'dialog'); + + hide(this._rootDomNode); + + this.messageContainer = this.element.appendChild($('.dialog-message-container')); + } + + async executeCommand(commandId: string, ...args: string[]) { + try { + await this.commandService.executeCommand(commandId, ...args); + this.telemetryService.publicLog2('workbenchActionExecuted', { + id: commandId, + from: 'welcomeWidget' + }); + } + catch (ex) { + } + } + + public async render(title: string, message: string, buttonText: string, buttonAction: string) { + if (!this._editor._getViewModel()) { + return; + } + + await this.buildWidgetContent(title, message, buttonText, buttonAction); + this._editor.addOverlayWidget(this); + this._show(); + this.telemetryService.publicLog2('workbenchActionExecuted', { + id: 'welcomeWidgetRendered', + from: 'welcomeWidget' + }); + } + + private async buildWidgetContent(title: string, message: string, buttonText: string, buttonAction: string) { + + const actionBar = this._register(new ActionBar(this.element, {})); + + const action = this._register(new Action('dialog.close', localize('dialogClose', "Close Dialog"), ThemeIcon.asClassName(Codicon.dialogClose), true, async () => { + this._hide(); + })); + actionBar.push(action, { icon: true, label: false }); + + const renderBody = (message: string, icon: string): MarkdownString => { + const mds = new MarkdownString(undefined, { supportThemeIcons: true, supportHtml: true }); + mds.appendMarkdown(`$(${icon})`); + mds.appendMarkdown(message); + return mds; + }; + + const titleElement = this.messageContainer.appendChild($('#monaco-dialog-message-detail.dialog-message-detail-title')); + const titleElementMdt = this.markdownRenderer.render(renderBody(title, 'zap')); + titleElement.appendChild(titleElementMdt.element); + + this.buildStepMarkdownDescription(this.messageContainer, message.split('\n').filter(x => x).map(text => parseLinkedText(text))); + + const buttonsRowElement = this.messageContainer.appendChild($('.dialog-buttons-row')); + const buttonContainer = buttonsRowElement.appendChild($('.dialog-buttons')); + + const buttonBar = this._register(new ButtonBar(buttonContainer)); + const primaryButton = this._register(buttonBar.addButtonWithDescription({ title: true, secondary: false, ...defaultButtonStyles })); + primaryButton.label = mnemonicButtonLabel(buttonText, true); + + this._register(primaryButton.onDidClick(async () => { + await this.executeCommand(buttonAction); + })); + + buttonBar.buttons[0].focus(); + } + + private buildStepMarkdownDescription(container: HTMLElement, text: LinkedText[]) { + for (const linkedText of text) { + const p = append(container, $('p')); + for (const node of linkedText.nodes) { + if (typeof node === 'string') { + const labelWithIcon = renderLabelWithIcons(node); + for (const element of labelWithIcon) { + if (typeof element === 'string') { + p.appendChild(renderFormattedText(element, { inline: true, renderCodeSegments: true })); + } else { + p.appendChild(element); + } + } + } else { + const link = this.instantiationService.createInstance(Link, p, node, { + opener: (href: string) => { + this.telemetryService.publicLog2('workbenchActionExecuted', { + id: 'welcomeWidetLinkAction', + from: 'welcomeWidget' + }); + this.openerService.open(href, { allowCommands: true }); + } + }); + this._register(link); + } + } + } + return container; + } + + getId(): string { + return 'editor.contrib.welcomeWidget'; + } + + getDomNode(): HTMLElement { + return this._rootDomNode; + } + + getPosition(): IOverlayWidgetPosition | null { + return { + preference: OverlayWidgetPositionPreference.TOP_RIGHT_CORNER + }; + } + + private _isVisible: boolean = false; + + private _show(): void { + if (this._isVisible) { + return; + } + this._isVisible = true; + this._rootDomNode.style.display = 'block'; + } + + private _hide(): void { + if (!this._isVisible) { + return; + } + + this._isVisible = true; + this._rootDomNode.style.display = 'none'; + this._editor.removeOverlayWidget(this); + this.telemetryService.publicLog2('workbenchActionExecuted', { + id: 'welcomeWidgetDismissed', + from: 'welcomeWidget' + }); + } +} + +registerThemingParticipant((theme, collector) => { + const addBackgroundColorRule = (selector: string, color: Color | undefined): void => { + if (color) { + collector.addRule(`.monaco-editor ${selector} { background-color: ${color}; }`); + } + }; + + const widgetBackground = theme.getColor(editorWidgetBackground); + addBackgroundColorRule('.welcome-widget', widgetBackground); + + const widgetShadowColor = theme.getColor(widgetShadow); + if (widgetShadowColor) { + collector.addRule(`.welcome-widget { box-shadow: 0 0 8px 2px ${widgetShadowColor}; }`); + } + + const widgetBorderColor = theme.getColor(widgetBorder); + if (widgetBorderColor) { + collector.addRule(`.welcome-widget { border-left: 1px solid ${widgetBorderColor}; border-right: 1px solid ${widgetBorderColor}; border-bottom: 1px solid ${widgetBorderColor}; }`); + } + + const hcBorder = theme.getColor(contrastBorder); + if (hcBorder) { + collector.addRule(`.welcome-widget { border: 1px solid ${hcBorder}; }`); + } + + const foreground = theme.getColor(editorWidgetForeground); + if (foreground) { + collector.addRule(`.welcome-widget { color: ${foreground}; }`); + } +}); diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/featuredExtensionService.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/featuredExtensionService.ts new file mode 100644 index 00000000000..d36253420a8 --- /dev/null +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/featuredExtensionService.ts @@ -0,0 +1,197 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IExtensionGalleryService, IExtensionManagementService, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { IProductService } from 'vs/platform/product/common/productService'; +import { IFeaturedExtension } from 'vs/base/common/product'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { localize } from 'vs/nls'; +import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; +import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; + +type FeaturedExtensionStorageData = { title: string; description: string; imagePath: string; date: number }; + +export const IFeaturedExtensionsService = createDecorator('featuredExtensionsService'); + +export interface IFeaturedExtensionsService { + _serviceBrand: undefined; + + getExtensions(): Promise; + title: string; +} + +const enum FeaturedExtensionMetadataType { + Title, + Description, + ImagePath +} + +export class FeaturedExtensionsService extends Disposable implements IFeaturedExtensionsService { + declare readonly _serviceBrand: undefined; + + private ignoredExtensions: Set = new Set(); + private _isInitialized: boolean = false; + + private static readonly STORAGE_KEY = 'workbench.welcomePage.extensionMetadata'; + + constructor( + @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, + @IExtensionService private readonly extensionService: IExtensionService, + @IStorageService private readonly storageService: IStorageService, + @IProductService private readonly productService: IProductService, + @IExtensionGalleryService private readonly galleryService: IExtensionGalleryService, + ) { + super(); + this.title = localize('gettingStarted.featuredTitle', 'Recommended'); + } + + title: string; + + async getExtensions(): Promise { + + await this._init(); + + const featuredExtensions: IFeaturedExtension[] = []; + for (const extension of this.productService.featuredExtensions?.filter(e => !this.ignoredExtensions.has(e.id)) ?? []) { + const resolvedExtension = await this.resolveExtension(extension); + if (resolvedExtension) { + featuredExtensions.push(resolvedExtension); + } + } + + return featuredExtensions; + } + + private async _init(): Promise { + + if (this._isInitialized) { + return; + } + + const featuredExtensions = this.productService.featuredExtensions; + if (!featuredExtensions) { + this._isInitialized = true; + return; + } + + await this.extensionService.whenInstalledExtensionsRegistered(); + const installed = await this.extensionManagementService.getInstalled(); + for (const extension of featuredExtensions) { + if (installed.some(e => ExtensionIdentifier.equals(e.identifier.id, extension.id))) { + this.ignoredExtensions.add(extension.id); + } + else { + let galleryExtension: IGalleryExtension | undefined; + try { + galleryExtension = (await this.galleryService.getExtensions([{ id: extension.id }], CancellationToken.None))[0]; + } catch (err) { + continue; + } + if (!await this.extensionManagementService.canInstall(galleryExtension)) { + this.ignoredExtensions.add(extension.id); + } + } + } + this._isInitialized = true; + } + + private async resolveExtension(productMetadata: IFeaturedExtension): Promise { + + const title = productMetadata.title ?? await this.getMetadata(productMetadata.id, FeaturedExtensionMetadataType.Title); + const description = productMetadata.description ?? await this.getMetadata(productMetadata.id, FeaturedExtensionMetadataType.Description); + const imagePath = productMetadata.imagePath ?? await this.getMetadata(productMetadata.id, FeaturedExtensionMetadataType.ImagePath); + + if (title && description && imagePath) { + return { + id: productMetadata.id, + title: title, + description: description, + imagePath: imagePath, + }; + } + return undefined; + } + + private async getMetadata(extensionId: string, key: FeaturedExtensionMetadataType): Promise { + + const storageMetadata = this.getStorageData(extensionId); + if (storageMetadata) { + switch (key) { + case FeaturedExtensionMetadataType.Title: { + return storageMetadata.title; + } + case FeaturedExtensionMetadataType.Description: { + return storageMetadata.description; + } + case FeaturedExtensionMetadataType.ImagePath: { + return storageMetadata.imagePath; + } + default: + return undefined; + } + } + + return await this.getGalleryMetadata(extensionId, key); + } + + private getStorageData(extensionId: string): FeaturedExtensionStorageData | undefined { + const metadata = this.storageService.get(FeaturedExtensionsService.STORAGE_KEY + '.' + extensionId, StorageScope.APPLICATION); + if (metadata) { + const value = JSON.parse(metadata) as FeaturedExtensionStorageData; + const lastUpdateDate = new Date().getTime() - value.date; + if (lastUpdateDate < 1000 * 60 * 60 * 24 * 7) { + return value; + } + } + return undefined; + } + + private async getGalleryMetadata(extensionId: string, key: FeaturedExtensionMetadataType): Promise { + + const storageKey = FeaturedExtensionsService.STORAGE_KEY + '.' + extensionId; + this.storageService.remove(storageKey, StorageScope.APPLICATION); + let metadata: string | undefined; + + let galleryExtension: IGalleryExtension | undefined; + try { + galleryExtension = (await this.galleryService.getExtensions([{ id: extensionId }], CancellationToken.None))[0]; + } catch (err) { + } + + if (!galleryExtension) { + return metadata; + } + + switch (key) { + case FeaturedExtensionMetadataType.Title: { + metadata = galleryExtension.displayName; + break; + } + case FeaturedExtensionMetadataType.Description: { + metadata = galleryExtension.description; + break; + } + case FeaturedExtensionMetadataType.ImagePath: { + metadata = galleryExtension.assets.icon?.uri; + break; + } + } + + this.storageService.store(storageKey, JSON.stringify({ + title: galleryExtension.displayName, + description: galleryExtension.description, + imagePath: galleryExtension.assets.icon?.uri, + date: new Date().getTime() + }), StorageScope.APPLICATION, StorageTarget.MACHINE); + + return metadata; + } +} + +registerSingleton(IFeaturedExtensionsService, FeaturedExtensionsService, InstantiationType.Delayed); diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts index 166921e8b6c..074ecfeb359 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts @@ -16,7 +16,7 @@ import { KeyCode } from 'vs/base/common/keyCodes'; import { EditorPaneDescriptor, IEditorPaneRegistry } from 'vs/workbench/browser/editor'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { IWalkthroughsService } from 'vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService'; -import { GettingStartedInput } from 'vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedInput'; +import { GettingStartedEditorOptions, GettingStartedInput } from 'vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedInput'; import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions'; import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; import { ConfigurationScope, Extensions as ConfigurationExtensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; @@ -32,7 +32,6 @@ import { StartupPageContribution, } from 'vs/workbench/contrib/welcomeGettingSta import { ExtensionsInput } from 'vs/workbench/contrib/extensions/common/extensionsInput'; import { Categories } from 'vs/platform/action/common/actionCommonCategories'; - export * as icons from 'vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedIcons'; registerAction2(class extends Action2 { @@ -63,6 +62,7 @@ registerAction2(class extends Action2 { if (walkthroughID) { const selectedCategory = typeof walkthroughID === 'string' ? walkthroughID : walkthroughID.category; const selectedStep = typeof walkthroughID === 'string' ? undefined : walkthroughID.step; + // Try first to select the walkthrough on an active welcome page with no selected walkthrough for (const group of editorGroupsService.groups) { if (group.activeEditor instanceof GettingStartedInput) { @@ -94,20 +94,22 @@ registerAction2(class extends Action2 { return; } - const gettingStartedInput = instantiationService.createInstance(GettingStartedInput, { selectedCategory: selectedCategory, selectedStep: selectedStep }); // If it's the extension install page then lets replace it with the getting started page if (activeEditor instanceof ExtensionsInput) { const activeGroup = editorGroupsService.activeGroup; activeGroup.replaceEditors([{ editor: activeEditor, - replacement: gettingStartedInput + replacement: instantiationService.createInstance(GettingStartedInput, { selectedCategory: selectedCategory, selectedStep: selectedStep }) }]); } else { // else open respecting toSide - editorService.openEditor(gettingStartedInput, { preserveFocus: toSide ?? false }, toSide ? SIDE_GROUP : undefined); + editorService.openEditor({ + resource: GettingStartedInput.RESOURCE, + options: { selectedCategory: selectedCategory, selectedStep: selectedStep, preserveFocus: toSide ?? false } + }, toSide ? SIDE_GROUP : undefined); } } else { - editorService.openEditor(new GettingStartedInput({}), {}); + editorService.openEditor({ resource: GettingStartedInput.RESOURCE }); } } }); @@ -206,11 +208,11 @@ registerAction2(class extends Action2 { }); } - private getQuickPickItems( + private async getQuickPickItems( contextService: IContextKeyService, gettingStartedService: IWalkthroughsService - ): IQuickPickItem[] { - const categories = gettingStartedService.getWalkthroughs(); + ): Promise { + const categories = await gettingStartedService.getWalkthroughs(); return categories .filter(c => contextService.contextMatchesRules(c.when)) .map(x => ({ @@ -233,7 +235,7 @@ registerAction2(class extends Action2 { quickPick.matchOnDescription = true; quickPick.matchOnDetail = true; quickPick.placeholder = localize('pickWalkthroughs', 'Select a walkthrough to open'); - quickPick.items = this.getQuickPickItems(contextService, gettingStartedService); + quickPick.items = await this.getQuickPickItems(contextService, gettingStartedService); quickPick.busy = true; quickPick.onDidAccept(() => { const selection = quickPick.selectedItems[0]; @@ -243,11 +245,12 @@ registerAction2(class extends Action2 { quickPick.hide(); }); quickPick.onDidHide(() => quickPick.dispose()); - quickPick.show(); await extensionService.whenInstalledExtensionsRegistered(); + gettingStartedService.onDidAddWalkthrough(async () => { + quickPick.items = await this.getQuickPickItems(contextService, gettingStartedService); + }); + quickPick.show(); quickPick.busy = false; - await gettingStartedService.installedExtensionsRegistered; - quickPick.items = this.getQuickPickItems(contextService, gettingStartedService); } }); @@ -288,7 +291,6 @@ class WorkspacePlatformContribution { Registry.as(WorkbenchExtensions.Workbench) .registerWorkbenchContribution(WorkspacePlatformContribution, LifecyclePhase.Restored); - const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); configurationRegistry.registerConfiguration({ ...workbenchConfigurationNodeBase, @@ -299,18 +301,6 @@ configurationRegistry.registerConfiguration({ default: true, description: localize('workbench.welcomePage.walkthroughs.openOnInstall', "When enabled, an extension's walkthrough will open upon install of the extension.") }, - 'workbench.welcomePage.experimental.videoTutorials': { - scope: ConfigurationScope.MACHINE, - type: 'string', - enum: [ - 'off', - 'on', - 'experimental' - ], - tags: ['experimental'], - default: 'off', - description: localize('workbench.welcomePage.videoTutorials', "When enabled, the get started page has additional links to video tutorials.") - }, 'workbench.startupEditor': { 'scope': ConfigurationScope.RESOURCE, 'type': 'string', @@ -335,6 +325,5 @@ configurationRegistry.registerConfiguration({ } }); - Registry.as(WorkbenchExtensions.Workbench) .registerWorkbenchContribution(StartupPageContribution, LifecyclePhase.Restored); diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts index bf09fb17c71..a371f7fa64f 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts @@ -28,11 +28,10 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ContextKeyExpr, ContextKeyExpression, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IRecentFolder, IRecentlyOpened, IRecentWorkspace, isRecentFolder, isRecentWorkspace, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { onUnexpectedError } from 'vs/base/common/errors'; +import { IWorkspaceContextService, UNKNOWN_EMPTY_WINDOW_WORKSPACE } from 'vs/platform/workspace/common/workspace'; import { ILabelService, Verbosity } from 'vs/platform/label/common/label'; import { IWindowOpenable } from 'vs/platform/window/common/window'; -import { splitName } from 'vs/base/common/labels'; +import { splitRecentLabel } from 'vs/base/common/labels'; import { IHostService } from 'vs/workbench/services/host/browser/host'; import { isMacintosh } from 'vs/base/common/platform'; import { Delayer, Throttler } from 'vs/base/common/async'; @@ -43,7 +42,7 @@ import { ILink, LinkedText } from 'vs/base/common/linkedText'; import { Button } from 'vs/base/browser/ui/button/button'; import { Link } from 'vs/platform/opener/browser/link'; import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer'; -import { IWebviewService } from 'vs/workbench/contrib/webview/browser/webview'; +import { IWebviewElement, IWebviewService } from 'vs/workbench/contrib/webview/browser/webview'; import { ILanguageService } from 'vs/editor/common/languages/language'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { generateUuid } from 'vs/base/common/uuid'; @@ -61,7 +60,7 @@ import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { KeyCode } from 'vs/base/common/keyCodes'; import { getTelemetryLevel } from 'vs/platform/telemetry/common/telemetryUtils'; import { WorkbenchStateContext } from 'vs/workbench/common/contextkeys'; -import { OpenFolderViaWorkspaceAction } from 'vs/workbench/browser/actions/workspaceActions'; +import { OpenFolderAction, OpenFileFolderAction, OpenFolderViaWorkspaceAction } from 'vs/workbench/browser/actions/workspaceActions'; import { OpenRecentAction } from 'vs/workbench/browser/actions/windowActions'; import { Toggle } from 'vs/base/browser/ui/toggle/toggle'; import { Codicon } from 'vs/base/common/codicons'; @@ -70,13 +69,17 @@ import { GettingStartedDetailsRenderer } from 'vs/workbench/contrib/welcomeGetti import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels'; import { defaultButtonStyles, defaultToggleStyles } from 'vs/platform/theme/browser/defaultStyles'; +import { IFeaturedExtensionsService } from 'vs/workbench/contrib/welcomeGettingStarted/browser/featuredExtensionService'; +import { IFeaturedExtension } from 'vs/base/common/product'; +import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; +import { onUnexpectedError } from 'vs/base/common/errors'; const SLIDE_TRANSITION_TIME_MS = 250; const configurationKey = 'workbench.startupEditor'; export const allWalkthroughsHiddenContext = new RawContextKey('allWalkthroughsHidden', false); export const inWelcomeContext = new RawContextKey('inWelcome', false); -export const embedderIdentifierContext = new RawContextKey('embedderIdentifier', undefined); export interface IWelcomePageStartEntry { id: string; @@ -125,8 +128,14 @@ export class GettingStartedPage extends EditorPane { private dispatchListeners: DisposableStore = new DisposableStore(); private stepDisposables: DisposableStore = new DisposableStore(); private detailsPageDisposables: DisposableStore = new DisposableStore(); + private mediaDisposables: DisposableStore = new DisposableStore(); + + // Ensure that the these are initialized before use. + // Currently initialized before use in buildCategoriesSlide and scrollToCategory + private recentlyOpened!: Promise; + private gettingStartedCategories!: IResolvedWalkthrough[]; + private featuredExtensions!: Promise; - private gettingStartedCategories: IResolvedWalkthrough[]; private currentWalkthrough: IResolvedWalkthrough | undefined; private categoriesPageScrollbar: DomScrollableElement | undefined; @@ -140,16 +149,17 @@ export class GettingStartedPage extends EditorPane { private contextService: IContextKeyService; - private recentlyOpened: Promise; private hasScrolledToFirstCategory = false; private recentlyOpenedList?: GettingStartedIndexList; private startList?: GettingStartedIndexList; private gettingStartedList?: GettingStartedIndexList; + private featuredExtensionsList?: GettingStartedIndexList; private stepsSlide!: HTMLElement; private categoriesSlide!: HTMLElement; private stepsContent!: HTMLElement; private stepMediaComponent!: HTMLElement; + private webview!: IWebviewElement; private layoutMarkdown: (() => void) | undefined; @@ -162,6 +172,7 @@ export class GettingStartedPage extends EditorPane { @IProductService private readonly productService: IProductService, @IKeybindingService private readonly keybindingService: IKeybindingService, @IWalkthroughsService private readonly gettingStartedService: IWalkthroughsService, + @IFeaturedExtensionsService private readonly featuredExtensionService: IFeaturedExtensionsService, @IConfigurationService private readonly configurationService: IConfigurationService, @ITelemetryService telemetryService: ITelemetryService, @ILanguageService private readonly languageService: ILanguageService, @@ -175,13 +186,13 @@ export class GettingStartedPage extends EditorPane { @IEditorGroupsService private readonly groupsService: IEditorGroupsService, @IContextKeyService contextService: IContextKeyService, @IQuickInputService private quickInputService: IQuickInputService, - @IWorkspacesService workspacesService: IWorkspacesService, + @IWorkspacesService private readonly workspacesService: IWorkspacesService, @ILabelService private readonly labelService: ILabelService, @IHostService private readonly hostService: IHostService, @IWebviewService private readonly webviewService: IWebviewService, @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, @IAccessibilityService private readonly accessibilityService: IAccessibilityService, - ) { + @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService) { super(GettingStartedPage.ID, telemetryService, themeService, storageService); @@ -200,31 +211,38 @@ export class GettingStartedPage extends EditorPane { this.contextService = this._register(contextService.createScoped(this.container)); inWelcomeContext.bindTo(this.contextService).set(true); - embedderIdentifierContext.bindTo(this.contextService).set(productService.embedderIdentifier); this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); + this.featuredExtensions = this.featuredExtensionService.getExtensions(); + this._register(this.dispatchListeners); this.buildSlideThrottle = new Throttler(); const rerender = () => { this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); - if (this.currentWalkthrough) { - const existingSteps = this.currentWalkthrough.steps.map(step => step.id); - const newCategory = this.gettingStartedCategories.find(category => this.currentWalkthrough?.id === category.id); - if (newCategory) { - const newSteps = newCategory.steps.map(step => step.id); - if (!equals(newSteps, existingSteps)) { - this.buildSlideThrottle.queue(() => this.buildCategoriesSlide()); - } - } - } else { - this.buildSlideThrottle.queue(() => this.buildCategoriesSlide()); - } + this.featuredExtensions = this.featuredExtensionService.getExtensions(); + + this.buildSlideThrottle.queue(async () => await this.buildCategoriesSlide()); }; + this._register(this.extensionManagementService.onDidInstallExtensions(async (result) => { + for (const e of result) { + const installedFeaturedExtension = (await this.featuredExtensions)?.find(ext => ExtensionIdentifier.equals(ext.id, e.identifier.id)); + if (installedFeaturedExtension) { + this.hideExtension(e.identifier.id); + } + } + })); + this._register(this.gettingStartedService.onDidAddWalkthrough(rerender)); this._register(this.gettingStartedService.onDidRemoveWalkthrough(rerender)); + this.recentlyOpened = this.workspacesService.getRecentlyOpened(); + this._register(workspacesService.onDidChangeRecentlyOpened(() => { + this.recentlyOpened = workspacesService.getRecentlyOpened(); + rerender(); + })); + this._register(this.gettingStartedService.onDidChangeWalkthrough(category => { const ourCategory = this.gettingStartedCategories.find(c => c.id === category.id); if (!ourCategory) { return; } @@ -273,12 +291,6 @@ export class GettingStartedPage extends EditorPane { } this.updateCategoryProgress(); })); - - this.recentlyOpened = workspacesService.getRecentlyOpened(); - this._register(workspacesService.onDidChangeRecentlyOpened(() => { - this.recentlyOpened = workspacesService.getRecentlyOpened(); - rerender(); - })); } // remove when 'workbench.welcomePage.preferReducedMotion' deprecated @@ -311,16 +323,6 @@ export class GettingStartedPage extends EditorPane { } async makeCategoryVisibleWhenAvailable(categoryID: string, stepId?: string) { - if (!this.gettingStartedCategories.some(c => c.id === categoryID)) { - await this.gettingStartedService.installedExtensionsRegistered; - this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); - } - - const ourCategory = this.gettingStartedCategories.find(c => c.id === categoryID); - if (!ourCategory) { - throw Error('Could not find category with ID: ' + categoryID); - } - this.scrollToCategory(categoryID, stepId); } @@ -377,12 +379,8 @@ export class GettingStartedPage extends EditorPane { break; } case 'selectCategory': { - const selectedCategory = this.gettingStartedCategories.find(category => category.id === argument); - if (!selectedCategory) { throw Error('Could not find category with ID ' + argument); } - - this.gettingStartedService.markWalkthroughOpened(argument); - this.gettingStartedList?.setEntries(this.gettingStartedService.getWalkthroughs()); this.scrollToCategory(argument); + this.gettingStartedService.markWalkthroughOpened(argument); break; } case 'selectStartEntry': { @@ -420,6 +418,14 @@ export class GettingStartedPage extends EditorPane { } break; } + case 'openExtensionPage': { + this.commandService.executeCommand('extension.open', argument); + break; + } + case 'hideExtension': { + this.hideExtension(argument); + break; + } default: { console.error('Dispatch to', command, argument, 'not defined'); break; @@ -434,6 +440,12 @@ export class GettingStartedPage extends EditorPane { this.gettingStartedList?.rerender(); } + private hideExtension(extensionId: string) { + this.setHiddenCategories([...this.getHiddenCategories().add(extensionId)]); + this.featuredExtensionsList?.rerender(); + this.registerDispatchListeners(); + } + private markAllStepsComplete() { if (this.currentWalkthrough) { this.currentWalkthrough?.steps.forEach(step => { @@ -484,6 +496,7 @@ export class GettingStartedPage extends EditorPane { } private currentMediaComponent: string | undefined = undefined; + private currentMediaType: string | undefined = undefined; private async buildMediaComponent(stepId: string) { if (!this.currentWalkthrough) { throw Error('no walkthrough selected'); @@ -497,11 +510,29 @@ export class GettingStartedPage extends EditorPane { this.stepDisposables.add({ dispose: () => { - clearNode(this.stepMediaComponent); this.currentMediaComponent = undefined; } }); + if (this.currentMediaType !== stepToExpand.media.type) { + + this.currentMediaType = stepToExpand.media.type; + + this.mediaDisposables.add(toDisposable(() => { + this.currentMediaType = undefined; + })); + + clearNode(this.stepMediaComponent); + + if (stepToExpand.media.type === 'svg') { + this.webview = this.mediaDisposables.add(this.webviewService.createWebviewElement({ title: undefined, options: { disableServiceWorker: true }, contentOptions: {}, extension: undefined })); + this.webview.mountTo(this.stepMediaComponent); + } else if (stepToExpand.media.type === 'markdown') { + this.webview = this.mediaDisposables.add(this.webviewService.createWebviewElement({ options: {}, contentOptions: { localResourceRoots: [stepToExpand.media.root], allowScripts: true }, title: '', extension: undefined })); + this.webview.mountTo(this.stepMediaComponent); + } + } + if (stepToExpand.media.type === 'image') { this.stepsContent.classList.add('image'); @@ -509,6 +540,7 @@ export class GettingStartedPage extends EditorPane { const media = stepToExpand.media; const mediaElement = $('img'); + clearNode(this.stepMediaComponent); this.stepMediaComponent.appendChild(mediaElement); mediaElement.setAttribute('alt', media.altText); this.updateMediaSourceForColorMode(mediaElement, media.path); @@ -532,10 +564,7 @@ export class GettingStartedPage extends EditorPane { this.stepsContent.classList.remove('markdown'); const media = stepToExpand.media; - const webview = this.stepDisposables.add(this.webviewService.createWebviewElement({ title: undefined, options: {}, contentOptions: {}, extension: undefined })); - webview.mountTo(this.stepMediaComponent); - - webview.setHtml(await this.detailsRenderer.renderSVG(media.path)); + this.webview.setHtml(await this.detailsRenderer.renderSVG(media.path)); let isDisposed = false; this.stepDisposables.add(toDisposable(() => { isDisposed = true; })); @@ -544,7 +573,7 @@ export class GettingStartedPage extends EditorPane { // Render again since color vars change const body = await this.detailsRenderer.renderSVG(media.path); if (!isDisposed) { // Make sure we weren't disposed of in the meantime - webview.setHtml(body); + this.webview.setHtml(body); } })); @@ -559,7 +588,7 @@ export class GettingStartedPage extends EditorPane { } })); - this.stepDisposables.add(webview.onDidClickLink(link => { + this.stepDisposables.add(this.webview.onDidClickLink(link => { if (matchesScheme(link, Schemas.https) || matchesScheme(link, Schemas.http) || (matchesScheme(link, Schemas.command))) { this.openerService.open(link, { allowCommands: true }); } @@ -573,11 +602,8 @@ export class GettingStartedPage extends EditorPane { const media = stepToExpand.media; - const webview = this.stepDisposables.add(this.webviewService.createWebviewElement({ options: {}, contentOptions: { localResourceRoots: [media.root], allowScripts: true }, title: '', extension: undefined })); - webview.mountTo(this.stepMediaComponent); - const rawHTML = await this.detailsRenderer.renderMarkdown(media.path, media.base); - webview.setHtml(rawHTML); + this.webview.setHtml(rawHTML); const serializedContextKeyExprs = rawHTML.match(/checked-on=\"([^'][^"]*)\"/g)?.map(attr => attr.slice('checked-on="'.length, -1) .replace(/'/g, '\'') @@ -586,7 +612,7 @@ export class GettingStartedPage extends EditorPane { const postTrueKeysMessage = () => { const enabledContextKeys = serializedContextKeyExprs?.filter(expr => this.contextService.contextMatchesRules(ContextKeyExpr.deserialize(expr))); if (enabledContextKeys) { - webview.postMessage({ + this.webview.postMessage({ enabledContextKeys }); } @@ -604,7 +630,7 @@ export class GettingStartedPage extends EditorPane { let isDisposed = false; this.stepDisposables.add(toDisposable(() => { isDisposed = true; })); - this.stepDisposables.add(webview.onDidClickLink(link => { + this.stepDisposables.add(this.webview.onDidClickLink(link => { if (matchesScheme(link, Schemas.https) || matchesScheme(link, Schemas.http) || (matchesScheme(link, Schemas.command))) { this.openerService.open(link, { allowCommands: true }); } @@ -615,7 +641,7 @@ export class GettingStartedPage extends EditorPane { this.stepDisposables.add(this.themeService.onDidColorThemeChange(async () => { const body = await this.detailsRenderer.renderMarkdown(media.path, media.base); if (!isDisposed) { // Make sure we weren't disposed of in the meantime - webview.setHtml(body); + this.webview.setHtml(body); postTrueKeysMessage(); } })); @@ -625,7 +651,7 @@ export class GettingStartedPage extends EditorPane { this.layoutMarkdown = () => { layoutDelayer.trigger(() => { - webview.postMessage({ layoutMeNow: true }); + this.webview.postMessage({ layoutMeNow: true }); }); }; @@ -634,7 +660,7 @@ export class GettingStartedPage extends EditorPane { postTrueKeysMessage(); - this.stepDisposables.add(webview.onMessage(e => { + this.stepDisposables.add(this.webview.onMessage(e => { const message: string = e.message as string; if (message.startsWith('command:')) { this.openerService.open(message, { allowCommands: true }); @@ -657,9 +683,7 @@ export class GettingStartedPage extends EditorPane { } } - private async selectStep(id: string | undefined, delayFocus = true, forceRebuild = false) { - if (id && this.editorInput.selectedStep === id && !forceRebuild) { return; } - + private async selectStep(id: string | undefined, delayFocus = true) { if (id) { let stepElement = this.container.querySelector(`[data-step-id="${id}"]`); if (!stepElement) { @@ -721,11 +745,11 @@ export class GettingStartedPage extends EditorPane { this.categoriesPageScrollbar.scanDomNode(); this.detailsPageScrollbar.scanDomNode(); - parent.appendChild(this.container); } private async buildCategoriesSlide() { + this.categoriesSlideDisposables.clear(); const showOnStartupCheckbox = new Toggle({ icon: Codicon.check, @@ -759,12 +783,12 @@ export class GettingStartedPage extends EditorPane { $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); - const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); const startList = this.buildStartList(); const recentList = this.buildRecentlyOpenedList(); + const featuredExtensionList = this.buildFeaturedExtensionsList(); const gettingStartedList = this.buildGettingStartedWalkthroughsList(); const footer = $('.footer', {}, @@ -776,19 +800,42 @@ export class GettingStartedPage extends EditorPane { const layoutLists = () => { if (gettingStartedList.itemCount) { this.container.classList.remove('noWalkthroughs'); - reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); - reset(rightColumn, gettingStartedList.getDomElement()); - recentList.setLimit(5); + reset(rightColumn, featuredExtensionList.getDomElement(), gettingStartedList.getDomElement()); } else { this.container.classList.add('noWalkthroughs'); - reset(leftColumn, startList.getDomElement()); - reset(rightColumn, recentList.getDomElement()); - recentList.setLimit(10); + reset(rightColumn, featuredExtensionList.getDomElement()); } setTimeout(() => this.categoriesPageScrollbar?.scanDomNode(), 50); + layoutRecentList(); }; + const layoutFeaturedExtension = () => { + if (featuredExtensionList.itemCount) { + this.container.classList.remove('noExtensions'); + reset(rightColumn, featuredExtensionList.getDomElement(), gettingStartedList.getDomElement()); + } + else { + this.container.classList.add('noExtensions'); + reset(rightColumn, gettingStartedList.getDomElement()); + } + setTimeout(() => this.categoriesPageScrollbar?.scanDomNode(), 50); + layoutRecentList(); + }; + + const layoutRecentList = () => { + if (this.container.classList.contains('noWalkthroughs') && this.container.classList.contains('noExtensions')) { + recentList.setLimit(10); + reset(leftColumn, startList.getDomElement()); + reset(rightColumn, recentList.getDomElement()); + } else { + recentList.setLimit(5); + reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); + } + }; + + featuredExtensionList.onDidChange(layoutFeaturedExtension); + layoutFeaturedExtension(); gettingStartedList.onDidChange(layoutLists); layoutLists(); @@ -802,9 +849,6 @@ export class GettingStartedPage extends EditorPane { this.currentWalkthrough = this.gettingStartedCategories.find(category => category.id === this.editorInput.selectedCategory); if (!this.currentWalkthrough) { - this.container.classList.add('loading'); - await this.gettingStartedService.installedExtensionsRegistered; - this.container.classList.remove('loading'); this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); this.currentWalkthrough = this.gettingStartedCategories.find(category => category.id === this.editorInput.selectedCategory); } @@ -858,7 +902,7 @@ export class GettingStartedPage extends EditorPane { windowOpenable = { workspaceUri: recent.workspace.configPath }; } - const { name, parentPath } = splitName(fullPath); + const { name, parentPath } = splitRecentLabel(fullPath); const li = $('li'); const link = $('button.button-link'); @@ -910,7 +954,6 @@ export class GettingStartedPage extends EditorPane { }); recentlyOpenedList.onDidChange(() => this.registerDispatchListeners()); - this.recentlyOpened.then(({ workspaces }) => { // Filter out the current workspace const workspacesWithID = workspaces @@ -922,7 +965,6 @@ export class GettingStartedPage extends EditorPane { }; updateEntries(); - recentlyOpenedList.register(this.labelService.onDidChangeFormatters(() => updateEntries())); }).catch(onUnexpectedError); @@ -1041,10 +1083,64 @@ export class GettingStartedPage extends EditorPane { gettingStartedList.setEntries(this.gettingStartedCategories); allWalkthroughsHiddenContext.bindTo(this.contextService).set(gettingStartedList.itemCount === 0); - return gettingStartedList; } + private buildFeaturedExtensionsList(): GettingStartedIndexList { + + const renderFeaturedExtensions = (entry: IFeaturedExtension): HTMLElement => { + + const descriptionContent = $('.featured-description-content', {},); + + reset(descriptionContent, ...renderLabelWithIcons(entry.description)); + + const titleContent = $('h3.category-title.max-lines-3', { 'x-category-title-for': entry.id }); + reset(titleContent, ...renderLabelWithIcons(entry.title)); + + return $('button.getting-started-category', + { + 'x-dispatch': 'openExtensionPage:' + entry.id, + 'title': entry.description + }, + $('.main-content', {}, + $('img.featured-icon.icon-widget', { src: entry.imagePath }), + titleContent, + $('a.codicon.codicon-close.hide-category-button', { + 'tabindex': 0, + 'x-dispatch': 'hideExtension:' + entry.id, + 'title': localize('close', "Hide"), + 'role': 'button', + 'aria-label': localize('closeAriaLabel', "Hide"), + }), + ), + descriptionContent); + }; + + if (this.featuredExtensionsList) { + this.featuredExtensionsList.dispose(); + } + + const featuredExtensionsList = this.featuredExtensionsList = new GettingStartedIndexList( + { + title: this.featuredExtensionService.title, + klass: 'featured-extensions', + limit: 5, + renderElement: renderFeaturedExtensions, + rankElement: (extension) => { if (this.getHiddenCategories().has(extension.id)) { return null; } return 0; }, + contextService: this.contextService, + }); + + this.featuredExtensions?.then(extensions => { + featuredExtensionsList.setEntries(extensions); + }); + + this.featuredExtensionsList?.onDidChange(() => { + this.registerDispatchListeners(); + }); + + return featuredExtensionsList; + } + layout(size: Dimension) { this.detailsScrollbar?.scanDomNode(); @@ -1053,13 +1149,24 @@ export class GettingStartedPage extends EditorPane { this.startList?.layout(size); this.gettingStartedList?.layout(size); + this.featuredExtensionsList?.layout(size); this.recentlyOpenedList?.layout(size); + if (this.editorInput?.selectedStep && this.currentMediaType) { + this.mediaDisposables.clear(); + this.stepDisposables.clear(); + this.buildMediaComponent(this.editorInput.selectedStep); + } + this.layoutMarkdown?.(); this.container.classList.toggle('height-constrained', size.height <= 600); this.container.classList.toggle('width-constrained', size.width <= 400); this.container.classList.toggle('width-semi-constrained', size.width <= 800); + + this.categoriesPageScrollbar?.scanDomNode(); + this.detailsPageScrollbar?.scanDomNode(); + this.detailsScrollbar?.scanDomNode(); } private updateCategoryProgress() { @@ -1077,7 +1184,6 @@ export class GettingStartedPage extends EditorPane { const progress = (stats.stepsComplete / stats.stepsTotal) * 100; bar.style.width = `${progress}%`; - (element.parentElement as HTMLElement).classList.toggle('no-progress', stats.stepsComplete === 0); if (stats.stepsTotal === stats.stepsComplete) { @@ -1090,11 +1196,21 @@ export class GettingStartedPage extends EditorPane { } private async scrollToCategory(categoryID: string, stepId?: string) { + + if (!this.gettingStartedCategories.some(c => c.id === categoryID)) { + this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); + } + + const ourCategory = this.gettingStartedCategories.find(c => c.id === categoryID); + if (!ourCategory) { + throw Error('Could not find category with ID: ' + categoryID); + } + this.inProgressScroll = this.inProgressScroll.then(async () => { reset(this.stepsContent); this.editorInput.selectedCategory = categoryID; this.editorInput.selectedStep = stepId; - this.currentWalkthrough = this.gettingStartedCategories.find(category => category.id === categoryID); + this.currentWalkthrough = ourCategory; this.buildCategorySlide(categoryID); this.setSlide('details'); }); @@ -1150,6 +1266,28 @@ export class GettingStartedPage extends EditorPane { if (!Array.isArray(args)) { args = [args]; } + + // If a step is requesting the OpenFolder action to be executed in an empty workspace... + if ((commandURI.path === OpenFileFolderAction.ID.toString() || + commandURI.path === OpenFolderAction.ID.toString()) && + this.workspaceContextService.getWorkspace().folders.length === 0) { + + const selectedStepIndex = this.currentWalkthrough?.steps.findIndex(step => step.id === this.editorInput.selectedStep); + + // and there are a few more steps after this step which are yet to be completed... + if (selectedStepIndex !== undefined && + selectedStepIndex > -1 && + this.currentWalkthrough?.steps.slice(selectedStepIndex + 1).some(step => !step.done)) { + const restoreData: RestoreWalkthroughsConfigurationValue = { folder: UNKNOWN_EMPTY_WINDOW_WORKSPACE.id, category: this.editorInput.selectedCategory, step: this.editorInput.selectedStep }; + + // save state to restore after reload + this.storageService.store( + restoreWalkthroughsConfigurationKey, + JSON.stringify(restoreData), + StorageScope.PROFILE, StorageTarget.MACHINE); + } + } + this.commandService.executeCommand(commandURI.path, ...args).then(result => { const toOpen: URI = result?.openFolder; if (toOpen) { @@ -1237,9 +1375,12 @@ export class GettingStartedPage extends EditorPane { }); this.detailsPageDisposables.clear(); + this.mediaDisposables.clear(); const category = this.gettingStartedCategories.find(category => category.id === categoryID); - if (!category) { throw Error('could not find category with ID ' + categoryID); } + if (!category) { + throw Error('could not find category with ID ' + categoryID); + } const categoryDescriptorComponent = $('.getting-started-category', @@ -1259,13 +1400,13 @@ export class GettingStartedPage extends EditorPane { if (event.keyCode === KeyCode.UpArrow) { const toExpand = category.steps.filter((step, index) => index < currentStepIndex() && this.contextService.contextMatchesRules(step.when)); if (toExpand.length) { - this.selectStep(toExpand[toExpand.length - 1].id, false, false); + this.selectStep(toExpand[toExpand.length - 1].id, false); } } if (event.keyCode === KeyCode.DownArrow) { const toExpand = category.steps.find((step, index) => index > currentStepIndex() && this.contextService.contextMatchesRules(step.when)); if (toExpand) { - this.selectStep(toExpand.id, false, false); + this.selectStep(toExpand.id, false); } } })); @@ -1275,6 +1416,8 @@ export class GettingStartedPage extends EditorPane { const contextKeysToWatch = new Set(category.steps.flatMap(step => step.when.keys())); const buildStepList = () => { + + category.steps.sort((a, b) => a.order - b.order); const toRender = category.steps .filter(step => this.contextService.contextMatchesRules(step.when)); @@ -1330,7 +1473,7 @@ export class GettingStartedPage extends EditorPane { if (e.affectsSome(contextKeysToWatch)) { buildStepList(); this.registerDispatchListeners(); - this.selectStep(this.editorInput.selectedStep, false, true); + this.selectStep(this.editorInput.selectedStep, false); } })); @@ -1357,7 +1500,7 @@ export class GettingStartedPage extends EditorPane { reset(this.stepsContent, categoryDescriptorComponent, stepListComponent, this.stepMediaComponent, categoryFooter); const toExpand = category.steps.find(step => this.contextService.contextMatchesRules(step.when) && !step.done) ?? category.steps[0]; - this.selectStep(selectedStep ?? toExpand.id, !selectedStep, true); + this.selectStep(selectedStep ?? toExpand.id, !selectedStep); this.detailsScrollbar.scanDomNode(); this.detailsPageScrollbar?.scanDomNode(); @@ -1420,12 +1563,14 @@ export class GettingStartedPage extends EditorPane { if (toEnable === 'categories') { slideManager.classList.remove('showDetails'); slideManager.classList.add('showCategories'); + this.container.querySelector('.prev-button.button-link')!.style.display = 'none'; this.container.querySelector('.gettingStartedSlideDetails')!.querySelectorAll('button').forEach(button => button.disabled = true); this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('button').forEach(button => button.disabled = false); this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('input').forEach(button => button.disabled = false); } else { slideManager.classList.add('showDetails'); slideManager.classList.remove('showCategories'); + this.container.querySelector('.prev-button.button-link')!.style.display = 'block'; this.container.querySelector('.gettingStartedSlideDetails')!.querySelectorAll('button').forEach(button => button.disabled = false); this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('button').forEach(button => button.disabled = true); this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('input').forEach(button => button.disabled = true); @@ -1433,7 +1578,18 @@ export class GettingStartedPage extends EditorPane { } override focus() { - this.container.focus(); + const active = document.activeElement; + + let parent = this.container.parentElement; + while (parent && parent !== active) { + parent = parent.parentElement; + } + + if (parent) { + // Only set focus if there is no other focued element outside this chain. + // This prevents us from stealing back focus from other focused elements such as quick pick due to delayed load. + this.container.focus(); + } } } diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedDetailsRenderer.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedDetailsRenderer.ts index 0c77dad4cb4..869f44526b4 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedDetailsRenderer.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedDetailsRenderer.ts @@ -20,8 +20,8 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten export class GettingStartedDetailsRenderer { - private mdCache = new ResourceMap>(); - private svgCache = new ResourceMap>(); + private mdCache = new ResourceMap(); + private svgCache = new ResourceMap(); constructor( @IFileService private readonly fileService: IFileService, @@ -125,6 +125,7 @@ export class GettingStartedDetailsRenderer { @@ -42,12 +41,12 @@ } - - - - - - -

TypeScript

-
- - -
- - -
- -
Press 'run' to execute code...
-
...write your results into #results...
-
- - - diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem.txt deleted file mode 100644 index 9d348ac0901..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem.txt +++ /dev/null @@ -1,283 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vulputate, ipsum quis interdum fermentum, lorem sem fermentum eros, vitae auctor neque lacus in nisi. Suspendisse potenti. Maecenas et scelerisque elit, in tincidunt quam. Sed eu tincidunt quam. Nullam justo ex, imperdiet a imperdiet et, fermentum sit amet eros. Aenean quis tempus sem. Pellentesque accumsan magna mi, ut mollis velit sagittis id. Etiam quis ipsum orci. Fusce purus ante, accumsan a lobortis at, venenatis eu nisl. Praesent ornare sed ante placerat accumsan. Suspendisse tempus dignissim fermentum. Nunc a leo ac lacus sodales iaculis eu vitae mi. In feugiat ante at massa finibus cursus. Suspendisse posuere fringilla ornare. Mauris elementum ac quam id convallis. Vestibulum non elit quis urna volutpat aliquam a eu lacus. - -Aliquam vestibulum imperdiet neque, suscipit aliquam elit ultrices bibendum. Suspendisse ultrices pulvinar cursus. Morbi risus nisi, cursus consequat rutrum vitae, molestie sed dui. Fusce posuere, augue quis dignissim aliquam, nisi ipsum porttitor ante, quis fringilla nisl turpis ac nisi. Nulla varius enim eget lorem vehicula gravida. Donec finibus malesuada leo nec semper. Proin ac enim eros. Vivamus non tincidunt nisi, vel tristique lorem. - -Nunc consequat ex id eros dignissim, id rutrum risus laoreet. Sed euismod non erat eu ultricies. Etiam vehicula gravida lacus ut porta. Vestibulum eu eros quis nunc aliquet luctus. Cras quis semper ligula. Nullam gravida vehicula quam sed porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In porta cursus vulputate. Quisque porta a nisi eget cursus. Aliquam risus leo, luctus ac magna in, efficitur cursus magna. In condimentum non mi id semper. Donec interdum ante eget commodo maximus. - -Vivamus sit amet vestibulum lectus. Fusce tincidunt mi sapien, dictum sollicitudin diam vulputate in. Integer fringilla consequat mollis. Cras aliquet consequat felis eget feugiat. Nunc tempor cursus arcu, vitae ornare nunc varius et. Vestibulum et tortor vel ante viverra porttitor. Nam at tortor ullamcorper, facilisis augue quis, tristique erat. Aenean ut euismod nibh. Quisque eu tincidunt est, nec euismod eros. - -Proin vehicula nibh non viverra egestas. Phasellus sem dolor, ultricies ac sagittis tristique, lacinia a purus. Vestibulum in ante eros. Pellentesque lacus nulla, tristique vitae interdum vel, malesuada ac diam. Aenean bibendum posuere turpis in accumsan. Ut est nulla, ullamcorper quis turpis at, viverra sagittis mauris. Sed in interdum purus. Praesent scelerisque nibh eget sem euismod, ut imperdiet mi venenatis. Vivamus pulvinar orci sed dapibus auctor. Nulla facilisi. Vestibulum tincidunt erat nec porttitor egestas. Mauris quis risus ante. Nulla facilisi. - -Aliquam ullamcorper ornare lobortis. Phasellus quis sem et ipsum mollis malesuada sed in ex. Ut aliquam ex eget metus finibus maximus. Proin suscipit mauris eu nibh lacinia, quis feugiat dui dapibus. Nam sed libero est. Aenean vulputate orci sit amet diam faucibus, eu sagittis sapien volutpat. Nam imperdiet felis turpis, at pretium odio pulvinar in. Sed vestibulum id eros nec ultricies. Sed quis aliquam tortor, vitae ullamcorper tellus. Donec egestas laoreet eros, id suscipit est rutrum nec. Sed auctor nulla eget metus aliquam, ut condimentum enim elementum. - -Aliquam suscipit non turpis sit amet bibendum. Fusce velit ligula, euismod et maximus at, luctus sed neque. Quisque pretium, nisl at ullamcorper finibus, lectus leo mattis sapien, vel euismod mauris diam ullamcorper ex. Nulla ut risus finibus, lacinia ligula at, auctor erat. Mauris consectetur sagittis ligula vel dapibus. Nullam libero libero, lobortis aliquam libero vel, venenatis ultricies leo. Duis porttitor, nibh congue fermentum posuere, erat libero pulvinar tortor, a pellentesque nunc ipsum vel sem. Nullam volutpat, eros sit amet facilisis consectetur, ipsum est vehicula massa, non vestibulum neque elit in mauris. Nunc hendrerit ipsum non enim bibendum, vitae rhoncus mi egestas. Etiam ullamcorper massa vel nisl sagittis, nec bibendum arcu malesuada. Aenean aliquet turpis justo, a consectetur arcu mollis convallis. Etiam tellus ipsum, ultricies vitae lorem et, ornare facilisis orci. Praesent fringilla justo urna, vel mollis neque pulvinar vestibulum. - -Donec non iaculis erat. Aliquam et mi sed nunc pulvinar ultricies in ut ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent feugiat lacus ac dignissim semper. Phasellus vitae quam nisi. Morbi vel diam ultricies risus lobortis ornare. Fusce maximus et ligula quis iaculis. Sed congue ex eget felis convallis, sit amet hendrerit elit tempor. Donec vehicula blandit ante eget commodo. Vestibulum eleifend diam at feugiat euismod. Etiam magna tellus, dignissim eget fermentum vel, vestibulum vitae mauris. Nam accumsan et erat id sagittis. Donec lacinia, odio ut ornare ultricies, dolor velit accumsan tortor, non finibus erat tellus quis ligula. Nunc quis metus in leo volutpat ornare vulputate eu nisl. - -Donec quis viverra ex. Nullam id feugiat mauris, eu fringilla nulla. Vestibulum id maximus elit. Cras elementum elit sed felis lobortis, eget sagittis nisi hendrerit. Vivamus vitae elit neque. Donec vulputate lacus ut libero ultrices accumsan. Vivamus accumsan nulla orci, in dignissim est laoreet sagittis. Proin at commodo velit. Curabitur in velit felis. Aliquam erat volutpat. Sed consequat, nulla et cursus sodales, nisi lacus mattis risus, quis eleifend erat ex nec turpis. Sed suscipit ultrices lorem in hendrerit. - -Morbi vitae lacus nec libero ornare tempus eu et diam. Suspendisse magna ipsum, fermentum vel odio quis, molestie aliquam urna. Fusce mollis turpis a eros accumsan porttitor. Pellentesque rhoncus dolor sit amet magna rutrum, et dapibus justo tempor. Sed purus nisi, maximus vitae fringilla eu, molestie nec urna. Fusce malesuada finibus pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sed aliquet eros. Pellentesque luctus diam ante, eget euismod nisl aliquet eu. Sed accumsan elit purus, tempor varius ligula tempus nec. Curabitur ornare leo suscipit suscipit fermentum. Morbi eget nulla est. Maecenas faucibus interdum tristique. - -Etiam ut elit eros. Nulla pharetra suscipit molestie. Nulla facilisis bibendum nisl non molestie. Curabitur turpis lectus, facilisis vel diam non, vulputate ultrices mauris. Aenean placerat aliquam convallis. Suspendisse sed scelerisque tellus. Vivamus lacinia neque eget risus cursus suscipit. Proin consequat dolor vel neque tempor, eu aliquam sem scelerisque. Duis non eros a purus malesuada pharetra non et nulla. Suspendisse potenti. Mauris libero eros, finibus vel nulla id, sagittis dapibus ante. Proin iaculis sed nunc et cursus. - -Quisque accumsan lorem sit amet lorem aliquet euismod. Curabitur fermentum rutrum posuere. Etiam ultricies, sem id pellentesque suscipit, urna magna lacinia eros, quis efficitur risus nisl at lacus. Nulla quis lacus tortor. Mauris placerat ex in dolor tincidunt, vel aliquet nisi pretium. Cras iaculis risus vitae pellentesque aliquet. Quisque a enim imperdiet, ullamcorper arcu vitae, rutrum risus. Nullam consectetur libero at felis fringilla, nec congue nibh dignissim. Nam et lobortis felis, eu pellentesque ligula. Aenean facilisis, ligula non imperdiet maximus, massa orci gravida sapien, at sagittis lacus nisl in lacus. Nulla quis mauris luctus, scelerisque felis consequat, tempus risus. Fusce auctor nisl non nulla luctus molestie. Maecenas sapien nisl, auctor non dolor et, iaculis scelerisque lorem. Suspendisse egestas enim aliquet, accumsan mauris nec, posuere quam. Nulla iaculis dui dui, sit amet vestibulum erat ultricies ac. - -Cras eget dolor erat. Proin at nisl ut leo consectetur ultricies vel ut arcu. Nulla in felis malesuada, ullamcorper tortor et, convallis massa. Nunc urna justo, ornare in nibh vitae, hendrerit condimentum libero. Etiam vitae libero in purus venenatis fringilla. Nullam velit nulla, consequat ut turpis non, egestas hendrerit nibh. Duis tortor turpis, interdum non ante ac, cursus accumsan lectus. Cras pharetra bibendum augue quis dictum. Sed euismod vestibulum justo. Proin porta lobortis purus. Duis venenatis diam tortor, sit amet condimentum eros rhoncus a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc at magna nec diam lobortis efficitur sit amet ut lacus. Nulla quis orci tortor. Pellentesque tempus velit a odio finibus porta. - -Proin feugiat mauris a tellus scelerisque convallis. Maecenas libero magna, blandit nec ultrices id, congue vel mi. Aliquam lacinia, quam vel condimentum convallis, tortor turpis aliquam odio, sed blandit libero lacus et eros. In eleifend iaculis magna ac finibus. Praesent auctor facilisis tellus in congue. Sed molestie lobortis dictum. Nam quis dignissim augue, vel euismod lorem. Curabitur posuere dapibus luctus. Donec ultricies dictum lectus, quis blandit arcu commodo ac. Aenean tincidunt ligula in nunc imperdiet dignissim. Curabitur egestas sollicitudin sapien ut semper. Aenean nec dignissim lacus. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec aliquam dictum vehicula. Donec tortor est, volutpat non nisi nec, varius gravida ex. Nunc vel tristique nunc, vitae mattis nisi. Nunc nec luctus ex, vitae tincidunt lectus. In hac habitasse platea dictumst. Curabitur lobortis ex eget tincidunt tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut a vehicula mi. - -Fusce eu libero finibus, interdum nulla a, placerat neque. Cras bibendum tempor libero nec feugiat. Cras ut sodales eros. Proin viverra, massa sit amet viverra egestas, neque nisl porta ex, sit amet hendrerit libero ligula vel urna. Mauris suscipit lacus id justo rhoncus suscipit. Etiam vel libero tellus. Maecenas non diam molestie, condimentum tellus a, bibendum enim. Mauris aliquet imperdiet tellus, eget sagittis dolor. Sed blandit in neque et luctus. Cras elementum sagittis nunc, vel mollis lorem euismod et. Donec posuere at lacus eget suscipit. - -Nulla nunc mi, pretium non massa vel, tempor semper magna. Nunc a leo pulvinar, tincidunt nunc at, dignissim mi. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut viverra nulla a nisl finibus, at hendrerit ligula ullamcorper. Donec a lorem semper, tempor magna et, lobortis libero. Mauris id sapien leo. Donec dignissim, quam vitae porttitor dignissim, quam justo mattis dui, vel consequat odio elit quis orci. Etiam nec pretium neque, sit amet pretium orci. Duis ac tortor venenatis, feugiat purus non, feugiat nunc. Proin scelerisque nisl in turpis aliquam vulputate. - -Praesent sed est semper, fringilla lorem vitae, tincidunt nibh. Cras eros metus, auctor at mauris sit amet, sodales semper orci. Nunc a ornare ex. Curabitur bibendum arcu congue urna vulputate egestas. Vestibulum finibus id risus et accumsan. Aenean ut volutpat tellus. Aenean tincidunt malesuada urna sit amet vestibulum. Mauris vel tellus dictum, varius lacus quis, dictum arcu. - -Aenean quis metus eu erat feugiat cursus vel at ligula. Proin dapibus sodales urna, id euismod lectus tempus id. Pellentesque ex ligula, convallis et erat vel, vulputate condimentum nisl. Pellentesque pharetra nulla quis massa eleifend hendrerit. Praesent sed massa ipsum. Maecenas vehicula dolor massa, id sodales urna faucibus et. Mauris ac quam non massa tincidunt feugiat et at lacus. Fusce libero massa, vulputate vel scelerisque non, mollis in leo. Ut sit amet ultricies odio. Suspendisse in sapien viverra, facilisis purus ut, pretium libero. - -Vivamus tristique pharetra molestie. Nam a volutpat purus. Praesent consequat gravida nisi, ac blandit nisi suscipit ut. Quisque posuere, ligula a ultrices laoreet, ligula nunc vulputate libero, ut rutrum erat odio tincidunt justo. Sed vitae leo at leo fringilla bibendum. Vestibulum ut augue nec dolor auctor accumsan. Praesent laoreet id eros pulvinar commodo. Suspendisse potenti. Ut pharetra, mauris vitae blandit fringilla, odio ante tincidunt lorem, sit amet tempor metus diam ut turpis. - -Praesent quis egestas arcu. Nullam at porta arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi vulputate ligula malesuada ligula luctus, vulputate tempus erat bibendum. Nunc ullamcorper non lectus at euismod. Etiam nibh felis, tincidunt a metus vel, pellentesque rhoncus neque. Etiam at diam in erat luctus interdum. Nunc vel ipsum pulvinar, sollicitudin lacus ac, tempus urna. Etiam vel lacinia sapien. Pellentesque sagittis velit vel mi efficitur iaculis. Integer euismod sit amet urna in sagittis. Cras eleifend ut nibh in facilisis. Donec et lacus vitae nunc placerat sodales. Nulla sed hendrerit ligula, at dapibus sapien. - -Praesent at iaculis ex. Curabitur est purus, cursus a faucibus quis, dictum id velit. Donec dignissim fringilla viverra. Nunc mauris felis, laoreet sit amet sagittis at, vestibulum in libero. Maecenas quis orci turpis. Quisque ut nibh vitae magna mollis consequat id at mauris. Aliquam eu odio eget nulla bibendum sodales. Quisque vel orci eleifend nisi pretium lacinia. Suspendisse eget risus eget mi volutpat molestie eget quis lacus. Duis nisi libero, tincidunt nec nulla id, faucibus cursus felis. - -Donec tempor eget risus pellentesque molestie. Phasellus porta neque vel arcu egestas, nec blandit velit fringilla. Nullam porta faucibus justo vitae laoreet. Pellentesque viverra id nunc eu varius. Nulla pulvinar lobortis iaculis. Etiam vestibulum odio nec velit tristique, a tristique nisi mattis. In sed fringilla orci, vitae efficitur odio. Quisque dui odio, ornare eget velit at, lacinia consequat libero. Quisque lectus nulla, aliquet eu leo in, porta rutrum diam. Donec nec mattis neque. Nam rutrum, odio ac eleifend bibendum, dolor arcu rutrum neque, eget porta elit tellus a lacus. Sed massa metus, sollicitudin et sapien eu, finibus tempus orci. Proin et sapien sit amet erat molestie interdum. In quis rutrum velit, faucibus ultrices tellus. - -Sed sagittis sed justo eget tincidunt. Maecenas ut leo sagittis, feugiat magna et, viverra velit. Maecenas ex arcu, feugiat at consequat vitae, auctor eu massa. Integer egestas, enim vitae maximus convallis, est lectus pretium mauris, ac posuere lectus nisl quis quam. Aliquam tempus laoreet mi, vitae dapibus dolor varius dapibus. Suspendisse potenti. Donec sit amet purus nec libero dapibus tristique. Pellentesque viverra bibendum ligula. Donec sed felis et ex lobortis laoreet. Phasellus a fringilla libero, vitae malesuada nulla. Pellentesque blandit mattis lacus, et blandit tortor laoreet consequat. Suspendisse libero nunc, viverra sed fermentum in, accumsan egestas arcu. Proin in placerat elit. Sed interdum imperdiet malesuada. Suspendisse aliquet quis mauris eget sollicitudin. - -Vivamus accumsan tellus non erat volutpat, quis dictum dolor feugiat. Praesent rutrum nunc ac est mollis cursus. Fusce semper volutpat dui ut egestas. Curabitur sit amet posuere massa. Cras tincidunt nulla et mi mollis imperdiet. Suspendisse scelerisque ex id sodales vulputate. In nunc augue, pharetra in placerat eu, mattis id tellus. Vivamus cursus efficitur vehicula. Nulla aliquet vehicula aliquet. - -Sed cursus tellus sed porta pulvinar. Sed vitae nisi neque. Nullam aliquet, lorem et efficitur scelerisque, arcu diam aliquam felis, sed pulvinar lorem odio et turpis. Praesent convallis pulvinar turpis eu iaculis. Aliquam nec gravida mi. Curabitur eu nibh tempor, blandit justo in, ultrices felis. Fusce placerat metus non mi sagittis rutrum. Morbi sed dui fringilla, sagittis mauris eget, imperdiet nunc. Phasellus hendrerit sem elit, id hendrerit libero auctor sit amet. Integer sodales elit sit amet consequat cursus. - -Nam semper est eget nunc mollis, in pellentesque lectus fringilla. In finibus vel diam id semper. Nunc mattis quis erat eu consectetur. In hac habitasse platea dictumst. Nullam et ipsum vestibulum ex pulvinar ultricies sit amet id velit. Aenean suscipit mi tortor, a lobortis magna viverra non. Nulla condimentum aliquet ante et ullamcorper. Pellentesque porttitor arcu a posuere tempus. Aenean lacus quam, imperdiet eu justo vitae, pretium efficitur ex. Duis id purus id magna rhoncus ultrices id eu risus. Nunc dignissim et libero id dictum. - -Quisque a tincidunt neque. Phasellus commodo mi sit amet tempor fringilla. Ut rhoncus, neque non porttitor elementum, libero nulla egestas augue, sed fringilla sapien felis ac velit. Phasellus viverra rhoncus mollis. Nam ullamcorper leo vel erat laoreet luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus semper a metus a cursus. Nulla sed orci egestas, efficitur purus ac, malesuada tellus. Aenean rutrum velit at tellus fermentum mollis. Aliquam eleifend euismod metus. - -In hac habitasse platea dictumst. Vestibulum volutpat neque vitae porttitor laoreet. Nam at tellus consequat, sodales quam in, pulvinar arcu. Maecenas varius convallis diam, ac lobortis tellus pellentesque quis. Maecenas eget augue massa. Nullam volutpat nibh ac justo rhoncus, ut iaculis tellus rutrum. Fusce efficitur efficitur libero quis condimentum. Curabitur congue neque non tincidunt tristique. Fusce eget tempor ex, at pellentesque odio. Praesent luctus dictum vestibulum. Etiam non orci nunc. Vivamus vitae laoreet purus, a lobortis velit. Curabitur tincidunt purus ac lectus elementum pellentesque. Quisque sed tincidunt est. - -Sed vel ultrices massa, vitae ultricies justo. Cras finibus mauris nec lacus tempus dignissim. Cras faucibus maximus velit, eget faucibus orci luctus vehicula. Nulla massa nunc, porta ac consequat eget, rhoncus non tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed maximus metus, vel imperdiet ipsum. Ut scelerisque lectus at blandit porttitor. Ut vulputate nunc pharetra, aliquet sapien ac, sollicitudin sapien. Aenean eget ante lorem. Nam accumsan venenatis tellus id dignissim. - -Curabitur fringilla, magna non maximus dapibus, nulla sapien vestibulum lectus, sit amet semper dolor neque vitae nisl. Nunc ultrices vehicula augue sed iaculis. Maecenas nec diam mollis, suscipit orci et, vestibulum ante. Pellentesque eu nisl tortor. Nunc eleifend, lacus quis volutpat volutpat, nisi mi molestie sem, quis mollis ipsum libero a tellus. Ut viverra dolor mattis convallis interdum. Sed tempus nisl at nunc scelerisque aliquet. Quisque tempor tempor lorem id feugiat. Nullam blandit lectus velit, vitae porta lacus tincidunt a. Vivamus sit amet arcu ultrices, tincidunt mi quis, viverra quam. Aenean fringilla libero elementum lorem semper, quis pulvinar eros gravida. Nullam sodales blandit mauris, sed fermentum velit fermentum sit amet. Donec malesuada mauris in augue sodales vulputate. Vestibulum gravida turpis id elit rhoncus dignissim. Integer non congue lorem, eu viverra orci. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec at dolor magna. Aliquam consectetur erat augue, id iaculis velit pharetra ac. Integer rutrum venenatis dignissim. Integer non sodales elit. Curabitur ut magna ut nibh feugiat aliquam ac ut risus. Morbi nibh quam, aliquam id placerat nec, vestibulum eget velit. Suspendisse at dignissim quam. Vivamus aliquet sem sed nisl volutpat, ut cursus orci ultrices. Aliquam ultrices lacinia enim, vitae aliquet neque. - -Quisque scelerisque finibus diam in mattis. Cras cursus auctor velit. Aliquam sem leo, fermentum et maximus et, molestie a libero. Aenean justo elit, rutrum a ornare id, egestas eget enim. Aenean auctor tristique erat. Curabitur condimentum libero lacus, nec consequat orci vestibulum sed. Fusce elit ligula, blandit vitae sapien vitae, dictum ultrices risus. Nam laoreet suscipit sapien, at interdum velit faucibus sit amet. Duis quis metus egestas lectus elementum posuere non nec libero. Aliquam a dolor bibendum, facilisis nunc a, maximus diam. Vestibulum suscipit tristique magna, non dignissim turpis sodales sed. Nunc ornare, velit ac facilisis fringilla, dolor mi consectetur lorem, vitae finibus erat justo suscipit urna. Maecenas sit amet eros erat. Nunc non arcu ornare, suscipit lorem eget, sodales mauris. Aliquam tincidunt, quam nec mollis lacinia, nisi orci fermentum libero, consequat eleifend lectus quam et sapien. Vestibulum a quam urna. - -Cras arcu leo, euismod ac ullamcorper at, faucibus sed massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor velit in enim interdum, non commodo metus ornare. Morbi vel lorem quis nisl luctus tristique quis vitae nisl. Suspendisse condimentum tortor enim, nec eleifend ipsum euismod et. Sed gravida quam ut tristique lacinia. Mauris eu interdum ipsum, ac ultrices odio. Nullam auctor tellus a risus porttitor vehicula. Nulla blandit euismod dictum. In pharetra, enim iaculis pulvinar interdum, dui nunc placerat nunc, sit amet pretium lectus nulla vitae quam. Phasellus quis enim sollicitudin, varius nulla id, ornare purus. Donec quam lacus, vestibulum quis nunc ac, mollis dictum nisi. Cras ut mollis elit. Maecenas ultrices ligula at risus faucibus scelerisque. Etiam vitae porttitor purus. Curabitur blandit lectus urna, ut hendrerit tortor feugiat ut. - -Phasellus fringilla, sapien pellentesque commodo pharetra, ante libero aliquam tellus, ut consectetur augue libero a sapien. Maecenas blandit luctus nisl eget aliquet. Maecenas vitae porta dolor, faucibus laoreet sapien. Suspendisse lobortis, ipsum sed vehicula aliquam, elit purus scelerisque dui, rutrum consectetur diam odio et lorem. In nec lacinia metus. Donec viverra libero est, vel bibendum erat condimentum quis. Donec feugiat purus leo. In laoreet vitae felis a porttitor. Mauris ullamcorper, lacus id condimentum suscipit, neque magna pellentesque arcu, eget cursus neque tellus id metus. Curabitur volutpat ac orci vel ultricies. - -Sed ut finibus erat. Sed diam purus, varius non tincidunt quis, ultrices sit amet ipsum. Donec et egestas nulla. Suspendisse placerat nisi at dui laoreet iaculis. Aliquam aliquet leo at augue faucibus molestie. Nullam lacus augue, hendrerit sed nisi eu, faucibus porta est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ut leo aliquet sem fermentum rutrum quis ac justo. Integer placerat aliquam nisl ut sagittis. Proin erat orci, lobortis et sem eget, eleifend fringilla augue. Mauris varius laoreet arcu, sed tincidunt felis. Pellentesque venenatis lorem odio, id pulvinar velit molestie feugiat. Donec mattis lacus sed eleifend pulvinar. - -Sed condimentum ex in tincidunt hendrerit. Etiam eget risus lacinia, euismod nibh eu, pellentesque quam. Proin elit eros, convallis id mauris ac, bibendum ultrices lectus. Morbi venenatis, purus id fermentum consequat, nunc libero tincidunt ligula, non dictum ligula orci nec quam. Nulla nec ultrices lorem. Aenean maximus augue vel dictum pharetra. Etiam turpis urna, pellentesque quis malesuada eu, molestie faucibus felis. - -Vestibulum pharetra augue ut quam blandit congue in nec risus. Proin eu nibh eu dui eleifend porta vitae id lectus. Proin lacus nibh, lobortis sed ligula vitae, interdum lobortis erat. Suspendisse potenti. In sollicitudin quis sapien ut aliquet. Mauris ac nulla arcu. Fusce tristique justo quis lectus mollis, eu volutpat lectus finibus. Vivamus venenatis facilisis ex ut vestibulum. - -Etiam varius lobortis purus, in hendrerit elit tristique at. In tempus, augue vestibulum fermentum gravida, ligula tellus vulputate arcu, eu molestie ex sapien at purus. Vestibulum nec egestas metus. Duis pulvinar quam nec consequat interdum. Aenean non dapibus lacus. Aliquam sit amet aliquet nulla. Sed venenatis volutpat purus nec convallis. Phasellus aliquet semper sodales. Cras risus sapien, condimentum auctor urna a, pulvinar ornare nisl. Sed tincidunt felis elit, ut elementum est bibendum ac. Morbi interdum justo vel dui faucibus condimentum. - -Sed convallis eu sem at tincidunt. Nullam at auctor est, et ullamcorper ipsum. Pellentesque eget ante ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer euismod, sapien sed dapibus ornare, nibh enim maximus lacus, lacinia placerat urna quam quis felis. Morbi accumsan id nisl ut condimentum. Donec bibendum nisi est, sed volutpat lorem rhoncus in. Vestibulum ac lacinia nunc, eget volutpat magna. Integer aliquam pharetra ipsum, id placerat nunc volutpat quis. Etiam urna diam, rhoncus sit amet varius vel, euismod vel sem. Nullam vel molestie urna. Vivamus ornare erat at venenatis euismod. Suspendisse potenti. Fusce diam justo, tincidunt vel sem at, commodo faucibus nisl. Duis gravida efficitur diam, vel sagittis erat pulvinar ut. - -Quisque vel pharetra felis. Duis efficitur tortor dolor, vitae porttitor erat fermentum sed. Sed eu mi purus. Etiam dignissim tortor eu tempus molestie. Aenean pretium erat enim, in hendrerit ante hendrerit at. Sed ut risus vel nunc venenatis ultricies quis in lacus. Pellentesque vitae purus euismod, placerat risus non, ullamcorper augue. Quisque varius quam ligula, nec aliquet ex faucibus vitae. Quisque rhoncus sit amet leo tincidunt mattis. Cras id mauris eget purus pretium gravida sit amet eu augue. Aliquam dapibus odio augue, id lacinia velit pulvinar eu. - -Mauris fringilla, tellus nec pharetra iaculis, neque nisi ultrices massa, et tincidunt sem dui sed mi. Curabitur erat lorem, venenatis quis tempus lacinia, tempus sit amet nunc. Aliquam at neque ac metus commodo dictum quis vitae justo. Phasellus eget lacus tempus, blandit lorem vel, rutrum est. Aenean pharetra sem ut augue lobortis dignissim. Sed rhoncus at nulla id ultrices. Cras id condimentum felis. In suscipit luctus vulputate. Donec tincidunt lacus nec enim tincidunt sollicitudin ut quis enim. Nam at libero urna. Praesent sit amet massa vitae massa ullamcorper vehicula. - -Nullam bibendum augue ut turpis condimentum bibendum. Proin sit amet urna hendrerit, sodales tortor a, lobortis lectus. Integer sagittis velit turpis, et tincidunt nisi commodo eget. Duis tincidunt elit finibus accumsan cursus. Aenean dignissim scelerisque felis vel lacinia. Nunc lacinia maximus luctus. In hac habitasse platea dictumst. Vestibulum eget urna et enim tempor tempor. Nam feugiat, felis vel vestibulum tempus, orci justo viverra diam, id dapibus lorem justo in ligula. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ac pellentesque sem. Vestibulum lacinia magna dui, eu lacinia augue placerat et. Maecenas pulvinar congue est. Pellentesque commodo dui non pulvinar scelerisque. Etiam interdum est posuere sem bibendum, ac commodo magna dictum. Cras ipsum turpis, rhoncus nec posuere vitae, laoreet a arcu. Integer ac massa sit amet enim placerat lacinia sed ultrices arcu. Suspendisse sem nibh, luctus sit amet volutpat in, pellentesque eu metus. Ut gravida neque eget mi accumsan tempus. Nam sit amet aliquet nibh. - -Pellentesque a purus cursus nulla hendrerit congue quis et odio. Aenean hendrerit, leo ullamcorper sagittis hendrerit, erat dui molestie quam, sed condimentum lacus risus sed tellus. Morbi a dapibus lectus, ut feugiat ex. Phasellus pretium quam et sapien mollis, vel iaculis dui dignissim. Sed ullamcorper est turpis, a viverra lorem consectetur in. Aenean aliquet nibh non cursus rutrum. Suspendisse at tristique urna, id lobortis urna. In hac habitasse platea dictumst. Phasellus libero velit, rutrum sed tellus nec, dapibus tincidunt ligula. Quisque vel dui venenatis, consequat nisl ut, lacinia ipsum. Phasellus vitae magna pellentesque, lobortis est id, faucibus quam. Nam eleifend faucibus dui vel pellentesque. - -Etiam ut est non lacus tincidunt interdum. Maecenas sed massa urna. Quisque ut nibh tortor. Pellentesque felis ipsum, tempor finibus ipsum et, euismod pretium metus. Donec sit amet est ipsum. Quisque rhoncus justo non finibus elementum. Nulla nec lectus ac tortor placerat fringilla. Phasellus ac ultrices nunc, eu efficitur nisl. Nulla rhoncus nunc vitae ante dictum tincidunt. Nunc ultrices, massa sit amet malesuada dignissim, lectus lacus consequat sapien, non eleifend metus sem in eros. Phasellus mauris ante, dictum sit amet suscipit ac, rhoncus eget nisi. Phasellus at orci mollis, imperdiet neque eget, faucibus nulla. In at purus massa. Pellentesque quis rutrum lectus. - -Integer eu faucibus turpis, sit amet mollis massa. Vestibulum id nulla commodo, rutrum ipsum sed, semper ante. Phasellus condimentum orci nec nibh convallis, ac maximus orci ullamcorper. Maecenas vitae sollicitudin mi. Integer et finibus lectus, et condimentum ligula. Donec elementum tristique quam vitae dapibus. Morbi euismod ipsum in tristique ullamcorper. - -Duis fermentum non enim eu auctor. Quisque lacinia nibh vehicula nibh posuere, eu volutpat turpis facilisis. Ut ac faucibus nulla. Sed eleifend quis ex et pellentesque. Vestibulum sollicitudin in libero id fringilla. Phasellus dignissim purus consequat, condimentum dui sit amet, condimentum ante. Pellentesque ac consectetur massa, quis sagittis est. Nulla maximus tristique risus accumsan convallis. Curabitur imperdiet ac lacus a ultrices. Nulla facilisi. Sed quis quam quis lectus placerat lobortis vel sed turpis. In mollis dui id neque iaculis, ut aliquet tellus malesuada. Proin at luctus odio, vel blandit sapien. Praesent dignissim tortor vehicula libero fringilla, nec ultrices erat suscipit. Maecenas scelerisque purus in dapibus fermentum. - -Curabitur magna odio, mattis in tortor ut, porttitor congue est. Vestibulum mollis lacinia elementum. Fusce maximus erat vitae nunc rutrum lobortis. Integer ligula eros, auctor vel elit non, posuere luctus lacus. Maecenas quis auctor massa. Ut ipsum lacus, efficitur posuere euismod et, hendrerit efficitur est. Phasellus fringilla, quam id tincidunt pretium, nunc dui sollicitudin orci, eu dignissim nisi metus ut magna. Integer lobortis interdum dolor, non bibendum purus posuere et. Donec non lectus aliquet, pretium dolor eu, cursus massa. Sed ut dui sapien. In sed vestibulum massa. Pellentesque blandit, dui non sodales vehicula, orci metus mollis nunc, non pharetra ex tellus ac est. Mauris sagittis metus et fermentum pretium. Nulla facilisi. Quisque quis ante ut nulla placerat mattis ut quis nisi. - -Sed quis nulla ligula. Quisque dignissim ligula urna, sed aliquam purus semper at. Suspendisse potenti. Nunc massa lectus, pharetra vehicula arcu bibendum, imperdiet sodales ipsum. Nam ac sapien diam. Mauris iaculis fringilla mattis. Pellentesque tempus eros sit amet justo volutpat mollis. Phasellus ac turpis ipsum. Morbi vel ante elit. Aenean posuere quam consequat velit varius suscipit. Donec tempor quam ut nibh cursus efficitur. - -Morbi molestie dolor nec sem egestas suscipit. Etiam placerat pharetra lectus, et ullamcorper risus tristique in. Sed faucibus ullamcorper lectus eget fringilla. Maecenas malesuada hendrerit congue. Sed eget neque a erat placerat tincidunt. Aliquam vitae dignissim turpis. Fusce at placerat magna, a laoreet lectus. Maecenas a purus nec diam gravida fringilla. Nam malesuada euismod ante non vehicula. In faucibus bibendum leo, faucibus posuere nisl pretium quis. Fusce finibus bibendum finibus. Vestibulum eu justo maximus, hendrerit diam nec, dignissim sapien. Aenean dolor lacus, malesuada quis vestibulum ac, venenatis ac ipsum. Cras a est id nunc finibus facilisis. Cras lacinia neque et interdum vehicula. Suspendisse vulputate tellus elit, eget tempor dui finibus vel. - -Cras sed pretium odio. Proin hendrerit elementum felis in tincidunt. Nam sed turpis vel justo molestie accumsan condimentum eu nunc. Praesent lobortis euismod rhoncus. Nulla vitae euismod nibh, quis mattis mi. Fusce ultrices placerat porttitor. Duis sem ipsum, pellentesque sit amet odio a, molestie vulputate mauris. - -Duis blandit mollis ligula, sit amet mattis ligula finibus sit amet. Nunc a leo molestie, placerat diam et, vestibulum leo. Suspendisse facilisis neque purus, nec pellentesque ligula fermentum nec. Aenean malesuada mauris lorem, eu blandit arcu pulvinar quis. Duis laoreet urna lacus, non maximus arcu rutrum ultricies. Nulla augue dolor, suscipit eu mollis eu, aliquam condimentum diam. Ut semper orci luctus, pharetra turpis at, euismod mi. Nulla leo diam, finibus sit amet purus sed, maximus dictum lorem. Integer eu mi id turpis laoreet rhoncus. - -Integer a mauris tincidunt, finibus orci ut, pretium mauris. Nulla molestie nunc mi, id finibus lorem elementum sed. Proin quis laoreet ante. Integer nulla augue, commodo id molestie quis, rutrum ut turpis. Suspendisse et tortor turpis. Sed ut pharetra massa. Pellentesque elementum blandit sem, ut elementum tellus egestas a. Fusce eu purus nibh. - -Cras dignissim ligula scelerisque magna faucibus ullamcorper. Proin at condimentum risus, auctor malesuada quam. Nullam interdum interdum egestas. Nulla aliquam nisi vitae felis mollis dictum. Suspendisse dapibus consectetur tortor. Ut ut nisi non sem bibendum tincidunt. Vivamus suscipit leo quis gravida dignissim. - -Aliquam interdum, leo id vehicula mollis, eros eros rhoncus diam, non mollis ligula mi eu mauris. Sed ultrices vel velit sollicitudin tincidunt. Nunc auctor metus at ligula gravida elementum. Praesent interdum eu elit et mollis. Duis egestas quam sit amet velit dignissim consequat. Aliquam ac turpis nec nunc convallis sagittis. Fusce blandit, erat ac fringilla consectetur, dolor eros sodales leo, vel aliquet risus nisl et diam. Aliquam luctus felis vitae est eleifend euismod facilisis et lacus. Sed leo tellus, auctor eu arcu in, volutpat sagittis nisl. Pellentesque nisl ligula, placerat vel ullamcorper at, vulputate ac odio. Morbi ac faucibus orci, et tempus nulla. Proin rhoncus rutrum dolor, in venenatis mauris. Suspendisse a fermentum augue, non semper mi. Nunc eget pretium neque. Phasellus augue erat, feugiat ac aliquam congue, rutrum non sapien. Pellentesque ac diam gravida, consectetur felis at, ornare neque. - -Nullam interdum mattis sapien quis porttitor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus aliquet rutrum ipsum id euismod. Maecenas consectetur massa et mi porta viverra. Nunc quam nibh, dignissim vitae maximus et, ullamcorper nec lorem. Nunc vitae justo dapibus, luctus lacus vitae, pretium elit. Maecenas et efficitur leo. Curabitur mauris lectus, placerat quis vehicula vitae, auctor ut urna. Quisque rhoncus pharetra luctus. In hac habitasse platea dictumst. Integer sit amet metus nec eros malesuada aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi hendrerit mi ac leo aliquam, sit amet ultricies libero commodo. Mauris dapibus purus metus, sit amet viverra nibh imperdiet et. Nullam porta nulla tellus, quis vehicula diam imperdiet non. Vivamus enim massa, bibendum in fermentum in, ultrices at ex. - -Suspendisse fermentum id nibh eget accumsan. Duis dapibus bibendum erat ut sollicitudin. Aliquam nec felis risus. Pellentesque rhoncus ligula id sem maximus mollis sed nec massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ipsum ipsum, sodales sed enim id, convallis faucibus eros. Donec ultricies dictum tincidunt. Cras vitae nibh arcu. Pellentesque cursus, sapien nec consequat fermentum, ipsum ante suscipit dui, imperdiet hendrerit est nisl eu massa. Quisque vitae sem ligula. Aenean iaculis metus ut mauris interdum laoreet. Vivamus sed gravida dolor. - -Morbi nulla metus, porttitor sed eros sit amet, efficitur efficitur est. In vel nisl urna. Ut aliquet tellus at congue convallis. Phasellus imperdiet lobortis sollicitudin. Integer sodales, sem eu ultricies pharetra, erat erat porttitor odio, eget dapibus libero ipsum eget velit. Phasellus gravida nulla nisl, eu pharetra mi auctor vel. Sed blandit pharetra velit, ut egestas libero placerat non. Aliquam a interdum quam. Proin at tortor nec dui sollicitudin tempus sed vestibulum elit. Nunc non sollicitudin velit. - -Aenean consequat diam velit, sed rutrum tortor faucibus dictum. Quisque at semper augue. Duis ut est eget mi ornare bibendum id et ligula. Phasellus consequat tortor non leo pulvinar posuere. Proin vestibulum eleifend felis, in hendrerit tortor sollicitudin eu. Phasellus hendrerit, lacus vel laoreet interdum, dui tortor consequat justo, commodo ultricies arcu felis vitae enim. Vivamus eu sapien at leo suscipit rutrum eu at justo. Aenean et dolor a libero ullamcorper posuere. Integer laoreet placerat nisi in vulputate. Mauris laoreet eget risus sed cursus. Donec scelerisque neque a libero eleifend hendrerit. Nulla varius condimentum nunc sit amet fermentum. Aliquam lorem ex, varius nec mollis ut, ultrices in neque. Morbi sit amet porta leo. Integer iaculis fermentum lacus in vestibulum. - -Ut gravida, tellus ut maximus ultrices, erat est venenatis nisl, vitae pretium massa ex ac magna. Sed non purus eget ligula aliquet volutpat non quis arcu. Nam aliquam tincidunt risus, sit amet fringilla sapien vulputate ut. Mauris luctus suscipit pellentesque. Nunc porttitor dapibus ex quis tempus. Ut ullamcorper metus a eros vulputate, vitae viverra lectus convallis. Mauris semper imperdiet augue quis tincidunt. Integer porta pretium magna, sed cursus sem scelerisque sollicitudin. Nam efficitur, nibh pretium eleifend vestibulum, purus diam posuere sem, in egestas mauris augue sit amet urna. - -Vestibulum tincidunt euismod massa in congue. Duis interdum metus non laoreet fringilla. Donec at ligula congue, tincidunt nunc non, scelerisque nunc. Donec bibendum magna non est scelerisque feugiat at nec neque. Ut orci tortor, tempus eget massa non, dignissim faucibus dolor. Nam odio risus, accumsan pretium neque eget, accumsan dignissim dui. In ut neque auctor, scelerisque tellus sed, ullamcorper nisi. Suspendisse varius cursus quam at hendrerit. Vivamus elit libero, sagittis vitae sem ac, vulputate iaculis ligula. - -Sed lobortis laoreet purus sit amet rutrum. Pellentesque feugiat non leo vel lacinia. Quisque feugiat nisl a orci bibendum vestibulum. In et sollicitudin urna. Morbi a arcu ac metus faucibus tempus. Nam eu imperdiet sapien, suscipit mattis tortor. Aenean blandit ipsum nisi, a eleifend ligula euismod at. Integer tincidunt pharetra felis, mollis placerat mauris hendrerit at. Curabitur convallis, est sit amet luctus volutpat, massa lacus cursus augue, sed eleifend magna quam et risus. Aliquam lobortis tincidunt metus vitae porttitor. Suspendisse potenti. Aenean ullamcorper, neque id commodo luctus, nulla nunc lobortis quam, id dapibus neque dui nec mauris. Etiam quis lorem quis elit commodo ornare. Ut pharetra purus ultricies enim ultrices efficitur. Proin vehicula tincidunt molestie. Mauris et placerat sem. - -Aliquam erat volutpat. Suspendisse velit turpis, posuere ac lacus eu, lacinia laoreet velit. Sed interdum felis neque, id blandit sem malesuada sit amet. Ut sagittis justo erat, efficitur semper orci tempor sed. Donec enim massa, posuere varius lectus egestas, pellentesque posuere mi. Cras tincidunt ut libero sed mattis. Suspendisse quis magna et tellus posuere interdum vel at purus. Pellentesque fringilla tristique neque, id aliquet tellus ultricies non. Duis ut tellus vel odio lobortis vulputate. - -Integer at magna ac erat convallis vestibulum. Sed lobortis porttitor mauris. Fusce varius lorem et volutpat pulvinar. Aenean ac vulputate lectus, vitae consequat velit. Suspendisse ex dui, varius ut risus ut, dictum scelerisque sem. Vivamus urna orci, volutpat ut convallis ac, venenatis vitae urna. In hac habitasse platea dictumst. Etiam eu purus arcu. Aenean vulputate leo urna, vel tristique dui sagittis euismod. Suspendisse non tellus efficitur ante rhoncus volutpat at et sapien. - -Sed dapibus accumsan porttitor. Phasellus facilisis lectus finibus ligula dignissim, id pulvinar lectus feugiat. Nullam egestas commodo nisi posuere aliquet. Morbi sit amet tortor sagittis, rutrum dui nec, dapibus sapien. Sed posuere tortor tortor, interdum auctor magna varius vitae. Vestibulum id sagittis augue. Curabitur fermentum arcu sem, eu condimentum quam rutrum non. Phasellus rutrum nibh quis lectus rhoncus pretium. Curabitur dictum interdum elit. Vestibulum maximus sodales imperdiet. Mauris auctor nec purus sed venenatis. In in urna purus. - -Duis placerat molestie suscipit. Morbi a elit id purus efficitur consequat. Nunc ac commodo turpis. Etiam sit amet lacus a ipsum tempus venenatis sed vel nibh. Duis elementum aliquam mi sed tristique. Morbi ligula tortor, semper ac est vel, lobortis maximus erat. Curabitur ipsum felis, laoreet vel condimentum eget, ullamcorper sit amet mauris. Nulla facilisi. Nam at purus sed mi egestas placerat vitae vel magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse at dignissim diam. Phasellus consectetur eget neque vel viverra. Donec sollicitudin mattis dolor vel malesuada. Vivamus vehicula leo neque, vitae fermentum leo posuere et. Praesent dui est, finibus sit amet tristique quis, pharetra vel nibh. - -Duis nulla leo, accumsan eu odio eget, sagittis semper orci. Quisque ullamcorper ligula quam, commodo porttitor mauris ullamcorper eu. Cras varius sagittis felis in aliquam. Duis sodales risus ac justo vehicula, nec mattis diam lacinia. Cras eget lectus ipsum. Ut commodo, enim vitae malesuada hendrerit, ex dolor egestas lectus, sit amet hendrerit metus diam nec est. Vestibulum tortor metus, lobortis sit amet ante eget, tempor molestie lacus. In molestie et urna et semper. Mauris mollis, sem non hendrerit condimentum, sapien nisi cursus est, non suscipit quam justo non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam enim est, porta ac feugiat vitae, rutrum in lorem. Duis vehicula tortor ut posuere maximus. - -Nullam vestibulum non tellus sed commodo. Quisque mattis elit sit amet sapien sollicitudin, ut condimentum nisl congue. Aenean sagittis massa vel elit faucibus fermentum. Donec tincidunt nisi nec nisl sodales pellentesque. Mauris congue congue ligula ut suscipit. Vivamus velit tortor, tempor et gravida eget, fermentum sit amet ante. Nullam fringilla, lorem at ultrices cursus, urna neque ornare dolor, eu lacinia orci enim sed nibh. Ut a ullamcorper lectus, id mattis purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus sollicitudin posuere. Nunc at augue lacus. Aenean efficitur leo sit amet lacinia efficitur. - -Quisque venenatis quam mi, in pharetra odio vulputate eu. In vel nisl pulvinar, pulvinar ligula ut, sodales risus. Sed efficitur lectus at vestibulum tincidunt. Vestibulum eu ullamcorper elit. Fusce vestibulum magna enim, et tempor lacus posuere vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer leo elit, luctus nec mattis sit amet, sollicitudin in turpis. - -Proin convallis venenatis leo, vitae tristique erat iaculis nec. Nulla facilisi. Duis porttitor, sapien et bibendum vulputate, sem libero sodales lacus, non malesuada felis erat ut libero. Nam non felis semper, finibus est a, mattis mauris. Praesent nec eros quam. Nulla hendrerit, augue consectetur eleifend ultricies, purus mi condimentum nulla, eget dapibus est nunc sed libero. Nullam elementum dui erat, vitae luctus libero sollicitudin et. Nulla odio magna, placerat in augue eu, dapibus imperdiet odio. Suspendisse imperdiet metus sit amet rhoncus dapibus. Cras at enim et urna vehicula cursus eu a mauris. Integer magna ante, eleifend ac placerat vitae, porta at nisi. Cras eget malesuada orci. Curabitur nunc est, vulputate id viverra et, dignissim sed odio. Curabitur non mattis sem. Sed bibendum, turpis vitae vehicula faucibus, nunc quam ultricies lectus, vitae viverra felis turpis at libero. - -Nullam ut egestas ligula. Proin hendrerit justo a lectus commodo venenatis. Nulla facilisi. Ut cursus lorem quis est bibendum condimentum. Aenean in tristique odio. Fusce tempor hendrerit ipsum. Curabitur mollis felis justo, quis dapibus erat auctor vel. Sed augue lectus, finibus ut urna quis, ullamcorper vestibulum dui. Etiam molestie aliquam tempor. Integer mattis sollicitudin erat, et tristique elit varius vel. Mauris a ex justo. - -Nam eros est, imperdiet non volutpat rutrum, pellentesque accumsan ligula. Duis sit amet turpis metus. Aenean in rhoncus metus, ac fringilla ex. Suspendisse condimentum egestas purus, ut pharetra odio vulputate vel. Duis tincidunt massa a placerat ultrices. Mauris ultricies nibh sit amet condimentum malesuada. Duis tincidunt id ipsum sed congue. - -Praesent eu ex augue. Nullam in porta ligula. In tincidunt accumsan arcu, in pellentesque magna tristique in. Mauris eleifend libero ac nisl viverra faucibus. Nam sollicitudin dolor in commodo hendrerit. Cras at orci metus. Ut quis laoreet orci. Vivamus ultrices leo pellentesque tempor aliquet. Maecenas ut eros vitae purus placerat vestibulum. Etiam vitae gravida dolor, quis rhoncus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. - -Suspendisse fringilla lacinia sagittis. Integer tincidunt consectetur tristique. Morbi non orci convallis, congue sapien quis, vulputate nunc. Donec a libero vel magna elementum facilisis non quis mi. Mauris posuere tellus non ipsum ultrices elementum. Vivamus massa velit, facilisis quis placerat aliquet, aliquet nec leo. Praesent a maximus sem. Sed neque elit, feugiat vel quam non, molestie sagittis nunc. Etiam luctus nunc ac mauris scelerisque, nec rhoncus lacus convallis. Nunc pharetra, nunc ac pulvinar aliquam, ex ipsum euismod augue, nec porttitor lacus turpis vitae neque. Fusce bibendum odio id tortor faucibus pellentesque. Sed ac porta nibh, eu gravida erat. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis ullamcorper felis. Nulla mattis sagittis ante ac tincidunt. Integer ac felis efficitur, viverra libero et, facilisis ligula. Suspendisse a metus a massa rhoncus posuere. Phasellus suscipit ligula ut lacus facilisis, ac pellentesque ex tempor. Quisque consectetur massa mi, ac molestie libero dictum quis. Proin porttitor ligula quis erat tincidunt venenatis. Proin congue nunc sed elit gravida, nec consectetur lectus sodales. Etiam tincidunt convallis ipsum at vestibulum. Quisque maximus enim et mauris porttitor, et molestie magna tristique. Morbi vitae metus elit. Maecenas sed volutpat turpis. Aliquam vitae dolor vestibulum, elementum purus eget, dapibus nibh. Nullam egestas dui ac rutrum semper. - -Etiam hendrerit est metus, et condimentum metus aliquam ac. Pellentesque id neque id ipsum rhoncus vulputate. Aliquam erat nisl, posuere sit amet ligula ac, fermentum blandit felis. Vivamus fermentum mi risus, non lacinia purus viverra id. Aenean ac sapien consequat, finibus mauris nec, porta sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis consectetur ex, dignissim bibendum nulla. Phasellus ac libero at quam vehicula euismod non eu leo. Phasellus a sapien augue. - -Maecenas ligula dui, bibendum vitae mauris et, auctor laoreet felis. Duis non libero a mi semper mattis. Quisque consequat luctus massa, quis tristique eros auctor feugiat. Maecenas sodales euismod neque vitae facilisis. Nullam laoreet imperdiet velit at pellentesque. Etiam massa odio, facilisis a consequat vitae, placerat vel magna. Nunc sagittis eros nec urna fringilla, pulvinar vestibulum nibh scelerisque. Sed magna metus, cursus eu consequat et, pharetra a est. Suspendisse elementum neque a dui malesuada lacinia. Donec sed ipsum volutpat, cursus urna id, ullamcorper arcu. Maecenas laoreet nisl eget velit egestas sollicitudin. Etiam nisl turpis, mollis id dignissim vitae, tristique vehicula ante. Maecenas eget placerat est, at rutrum augue. Vivamus faucibus lacinia ullamcorper. Sed pulvinar urna sodales ante sodales, at gravida leo dictum. - -Morbi maximus, quam a lobortis bibendum, enim felis varius elit, ac vehicula elit nisl ut lacus. Quisque ut arcu augue. Praesent id turpis quam. Sed sed arcu eros. Maecenas at cursus lorem, ac eleifend nisi. Fusce mattis felis at commodo pharetra. Praesent ac commodo ipsum. Quisque finibus et eros vitae tincidunt. In hac habitasse platea dictumst. Praesent purus ipsum, luctus lobortis ornare quis, auctor eget justo. Nam vel enim sollicitudin, faucibus tortor eu, sagittis eros. Ut nec consectetur erat. Donec ultricies malesuada ligula, a hendrerit sapien volutpat in. Maecenas sed enim vitae sapien pulvinar faucibus. - -Proin semper nunc nibh, non consequat neque ullamcorper vel. Maecenas lobortis sagittis blandit. Aenean et arcu ultricies turpis malesuada malesuada. Ut quam ex, laoreet ut blandit cursus, feugiat vitae dolor. Etiam ex lacus, scelerisque vel erat vel, efficitur tincidunt magna. Morbi tristique lacinia dolor, in egestas magna ultrices vitae. Integer ultrices leo ac tempus venenatis. Praesent ac porta tortor. Vivamus ornare blandit tristique. Nulla rutrum finibus pellentesque. In non dui elementum, fermentum ipsum vel, varius magna. Pellentesque euismod tortor risus, ac pellentesque nisl faucibus eget. - -Vivamus eu enim purus. Cras ultrices rutrum egestas. Sed mollis erat nibh, at posuere nisl luctus nec. Nunc vulputate, sapien id auctor molestie, nisi diam tristique ante, non convallis tellus nibh at orci. Morbi a posuere purus, in ullamcorper ligula. Etiam elementum sit amet dui imperdiet iaculis. Proin vitae tincidunt ipsum, sit amet placerat lectus. Curabitur commodo sapien quam, et accumsan lectus fringilla non. Nullam eget accumsan enim, ac pharetra mauris. Sed quis tristique velit, vitae commodo nisi. Duis turpis dui, maximus ut risus at, finibus consequat nunc. Maecenas sed est accumsan, aliquet diam in, facilisis risus. Curabitur vehicula rutrum auctor. Nam iaculis risus pulvinar maximus viverra. Nulla vel augue et ex sagittis blandit. - -Ut sem nulla, porta ac ante ac, posuere laoreet eros. Donec sodales posuere justo a auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras mollis at orci hendrerit porta. Nullam sodales tortor tortor, non lacinia diam finibus id. Duis libero orci, suscipit ac odio et, dictum consequat ipsum. Pellentesque eu ligula sagittis, volutpat eros at, lacinia lorem. Cras euismod tellus in iaculis tempor. Quisque accumsan, magna a congue venenatis, ante ipsum aliquam lectus, at egestas enim nunc at justo. Quisque sem purus, viverra ut tristique ut, maximus id enim. Etiam quis placerat sem. In sollicitudin, lacus eu rutrum mollis, nulla eros luctus elit, vel dapibus urna purus nec urna. Phasellus egestas massa quam, ac molestie erat hendrerit a. Praesent ultrices neque ut turpis molestie auctor. Etiam molestie placerat purus, et euismod erat aliquam in. Morbi id suscipit justo. - -Proin est ante, consequat at varius a, mattis quis felis. Sed accumsan nibh sit amet ipsum elementum posuere. Vestibulum bibendum id diam sit amet gravida. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi nec dolor vel ipsum dignissim hendrerit vel non ipsum. Praesent facilisis orci quis elit auctor lobortis. Phasellus cursus risus lectus, vel lobortis libero dapibus in. Quisque tristique tempus leo a pulvinar. Pellentesque a magna tincidunt, pellentesque massa nec, laoreet orci. Morbi congue ornare dolor quis commodo. Phasellus massa nisi, tincidunt at eros dictum, hendrerit lobortis urna. Maecenas porta, magna id mattis molestie, nibh tellus lobortis sem, eget tincidunt ipsum quam eu turpis. - -Ut gravida orci risus, vel rutrum mauris vehicula id. Etiam bibendum, neque a placerat condimentum, ex orci imperdiet lectus, quis dapibus arcu lacus eget lectus. Sed consequat non mi sit amet venenatis. Fusce vestibulum erat libero, eget hendrerit risus vulputate sollicitudin. Integer sed eleifend felis. Donec commodo, sem eu mattis placerat, urna odio aliquam tellus, et laoreet justo tellus eget erat. Fusce sed suscipit tortor. Nam hendrerit nibh ac nunc auctor lacinia. Pellentesque placerat condimentum ipsum, eget semper tortor hendrerit vel. Nullam non urna eu lacus pellentesque congue ut id eros. - -Nunc finibus leo in rhoncus tristique. Sed eu ipsum nec nisl egestas faucibus eget a felis. Pellentesque vitae nisi in nulla accumsan fermentum. Sed venenatis feugiat eleifend. Fusce porttitor varius placerat. Aliquam aliquet lacus sit amet mattis mollis. Sed vel nulla quis dolor suscipit vehicula ac viverra lorem. Duis viverra ipsum eget nulla ullamcorper fermentum. Mauris tincidunt arcu quis quam fringilla ornare. Donec et iaculis tortor. Nam ultricies libero vel ipsum aliquet efficitur. Morbi eget dolor aliquam, tempus sapien eget, viverra ante. Donec varius mollis ex, sed efficitur purus euismod interdum. Quisque vel sapien non neque tincidunt semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Suspendisse sit amet purus leo. Fusce lectus lorem, aliquam ac nulla eget, imperdiet ornare eros. Nullam sem augue, varius in nisi non, sollicitudin pellentesque ante. Etiam eu odio condimentum, tempor libero et, egestas arcu. Cras pellentesque eleifend aliquet. Pellentesque non blandit ligula. Ut congue viverra rhoncus. Phasellus mattis mi ac eros placerat, eu feugiat tellus ultrices. Aenean mollis laoreet libero eu imperdiet. Cras sed pulvinar mi, ac vehicula ligula. Vestibulum sit amet ex massa. In a egestas eros. - -Mauris pretium ipsum risus, venenatis cursus ante imperdiet id. Praesent eu turpis nec risus feugiat maximus ullamcorper ac lectus. Integer placerat at mi vel dapibus. Vestibulum fermentum turpis sit amet turpis viverra, id aliquet diam suscipit. Nam nec ex sed ante ullamcorper pharetra quis sit amet risus. Sed ac faucibus velit, id feugiat nibh. Nullam eget ipsum ex. Vivamus tincidunt non nunc non faucibus. Quisque bibendum viverra facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at nisi hendrerit quam suscipit egestas. Curabitur laoreet maximus ultricies. Duis ut tellus ac augue molestie dictum. - -Suspendisse rhoncus iaculis erat, ut ullamcorper est tristique eget. Donec auctor nec risus at gravida. Vivamus volutpat vulputate tellus, vel ultricies eros suscipit eget. Ut pulvinar id mi eu tempus. Morbi malesuada augue in dui varius, nec blandit neque vehicula. Donec ornare nec nisl in mollis. Morbi enim nisi, rhoncus nec est id, dapibus tempus urna. Ut id elit a felis vestibulum consectetur. Duis lectus quam, pharetra sit amet diam sed, posuere vestibulum erat. Fusce vitae maximus massa. Nullam id metus tempus, iaculis risus eu, lobortis urna. Quisque in congue urna. Pellentesque placerat neque in augue dapibus, non varius ex malesuada. Curabitur ut eleifend libero. Fusce vitae ligula luctus, fermentum enim vitae, ultrices erat. - -Sed viverra augue turpis, scelerisque egestas sapien mattis eu. Duis laoreet magna at ex pharetra dapibus. Praesent eget odio vel quam venenatis dictum. Nulla in sollicitudin dolor. Mauris lobortis nec eros vel rhoncus. Vestibulum porta viverra venenatis. Curabitur vel scelerisque quam, a egestas velit. Praesent volutpat tincidunt magna at laoreet. - -Cras nec lorem odio. Pellentesque quis dui urna. Praesent at tellus ac lectus scelerisque placerat nec eu risus. Vestibulum sit amet mattis ligula. Vivamus sed nisi at leo elementum accumsan at sit amet arcu. Aenean mattis tellus nec leo gravida, eget hendrerit nisl faucibus. Mauris pellentesque luctus condimentum. Maecenas pretium sapien nunc, eget commodo dolor maximus id. Mauris vestibulum accumsan massa a dictum. Phasellus interdum quam ligula, ut maximus diam blandit aliquam. Nunc vitae ex eu erat condimentum consectetur. Maecenas interdum condimentum volutpat. - -Donec et enim a libero rutrum laoreet. Praesent a condimentum sem, at tincidunt quam. In vel molestie risus. Sed urna dui, molestie vitae mollis laoreet, tempor quis lectus. Praesent vitae auctor est, et aliquet nunc. Curabitur vulputate blandit nulla, at gravida metus. Maecenas gravida dui eu iaculis tristique. Pellentesque posuere turpis nec auctor eleifend. Suspendisse bibendum diam eu tellus lobortis, et laoreet quam congue. In hac habitasse platea dictumst. Morbi dictum neque velit, eget rutrum eros ultrices sit amet. - -Phasellus fermentum risus pharetra consectetur bibendum. Donec magna tortor, lacinia vitae nibh quis, aliquet pretium lorem. Donec turpis nisi, pretium eu enim volutpat, mattis malesuada augue. Nullam vel tellus iaculis, sollicitudin elit eget, tincidunt lacus. Fusce elementum elementum felis et iaculis. Suspendisse porta eros nec neque malesuada, in malesuada ante sollicitudin. Vivamus bibendum viverra molestie. - -Integer feugiat, erat nec convallis aliquam, velit felis congue erat, molestie eleifend tellus erat in tellus. Nunc et justo purus. Donec egestas fermentum dui non feugiat. Quisque in sapien sagittis, gravida quam id, iaculis lectus. Cras sagittis rhoncus bibendum. Fusce quis metus in velit scelerisque tincidunt at non ipsum. Vivamus efficitur ante eu odio vulputate, vitae ultricies risus vehicula. Proin eget odio eu sem tincidunt feugiat vel id lorem. - -Vestibulum sit amet nulla dignissim, euismod mi in, fermentum tortor. Donec ut aliquet libero, lacinia accumsan velit. Donec et nulla quam. Nullam laoreet odio nec nunc imperdiet, a congue eros venenatis. Quisque nec tellus sit amet neque interdum posuere. Duis quis mi gravida, tincidunt diam convallis, ultricies augue. Mauris consequat risus non porttitor congue. Ut in ligula consequat, viverra nunc a, eleifend enim. Duis ligula urna, imperdiet nec facilisis et, ornare eu ex. Proin lobortis lectus a lobortis porttitor. Nulla leo metus, egestas eu libero sed, pretium faucibus felis. Vestibulum non sem tortor. Nam cursus est leo. Vivamus luctus enim odio, non interdum sem dapibus a. Aenean accumsan consequat lectus in imperdiet. - -Donec vehicula laoreet ipsum in posuere. Quisque vel quam imperdiet, sollicitudin nisi quis, suscipit velit. Morbi id sodales mauris. Curabitur tellus arcu, feugiat sed dui sit amet, sodales sagittis libero. Aenean vel suscipit metus, non placerat leo. Vestibulum quis nulla elit. Proin scelerisque non ante ut commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed non urna dolor. Suspendisse convallis mi porta pulvinar ultrices. Suspendisse quam ipsum, hendrerit non scelerisque molestie, interdum dictum nunc. Morbi condimentum condimentum turpis eu luctus. Pellentesque sagittis sollicitudin odio, sed ultricies felis ornare sit amet. Sed ultrices ex leo, a tincidunt nisl gravida sed. Nullam ornare accumsan porta. Praesent consectetur id est nec sollicitudin. - -In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed ultrices nibh. Duis accumsan suscipit eros, a dictum odio tempus sit amet. Aenean imperdiet erat ac lacus finibus, scelerisque cursus massa imperdiet. Mauris molestie risus ut lacinia posuere. Nulla et sodales purus. Maecenas orci erat, placerat in tristique quis, placerat in mi. - -Donec sollicitudin pellentesque odio in feugiat. Morbi eu dolor ut mauris congue sollicitudin. Aliquam erat volutpat. Nulla id varius dui. Curabitur finibus urna ante, consectetur interdum nisi volutpat a. Quisque quis mi tristique, consequat tellus eget, rutrum sapien. Vivamus vitae tellus vulputate, rutrum ex eu, vulputate sem. Suspendisse viverra lorem tellus, vel interdum orci gravida quis. Ut laoreet arcu at mi ullamcorper finibus. Duis porta sagittis vestibulum. Sed commodo nisl vitae urna sollicitudin, nec lacinia est sodales. Curabitur imperdiet sodales dui sed iaculis. Sed ac tellus maximus, eleifend quam sit amet, feugiat elit. Aenean viverra, dui at mattis varius, est odio vestibulum sapien, sit amet mollis libero massa nec velit. Etiam quis sodales justo. - -Ut ultricies, sem eget sodales feugiat, nunc arcu congue elit, ac tempor justo massa nec purus. Maecenas enim nunc, pharetra eget dictum sit amet, tempus pellentesque velit. Suspendisse venenatis ligula in nulla mattis, et imperdiet ex tincidunt. Etiam vulputate, tellus et ultrices suscipit, enim velit laoreet massa, vitae congue odio enim ac urna. Morbi quam lorem, iaculis ac varius sagittis, euismod quis dolor. In ut dui eu purus feugiat consectetur. Vestibulum cursus velit quis lacus pellentesque iaculis. Cras in risus sed mauris porta rutrum. Nulla facilisi. Nullam eu bibendum est, non pellentesque lectus. Sed imperdiet feugiat lorem, quis convallis ante auctor in. Maecenas justo magna, scelerisque sit amet tellus eget, varius elementum risus. Duis placerat et quam sed varius. - -Duis nec nibh vitae nibh dignissim mollis quis sed felis. Curabitur vitae quam placerat, venenatis purus ut, euismod nisl. Curabitur porttitor nibh eu pulvinar ullamcorper. Suspendisse posuere nec ipsum ac dapibus. Cras convallis consectetur urna. Phasellus a nibh in dolor lacinia posuere id eget augue. In eu pharetra lorem, vitae cursus lacus. Aliquam tincidunt nibh lectus. Aenean facilisis ultricies posuere. Sed ut placerat orci. Curabitur scelerisque gravida blandit. Maecenas placerat ligula eget suscipit fringilla. Mauris a tortor justo. Aliquam hendrerit semper mollis. Phasellus et tincidunt libero. Etiam vel quam libero. - -Quisque aliquet tempor ex. Ut ante sem, vehicula at enim vel, gravida porta elit. Etiam vitae lacus a neque lobortis consectetur. Mauris sed interdum odio. Mauris elementum ex blandit tempor cursus. Integer in enim in leo viverra elementum. Fusce consectetur metus et sem rutrum, mattis euismod diam semper. Nunc sed ipsum vel urna consequat vehicula. Donec cursus pretium lorem, vestibulum pretium felis commodo sit amet. Nam blandit felis enim, eget gravida ex faucibus a. In nec neque massa. Etiam laoreet posuere ipsum. Praesent volutpat nunc dolor, ac vulputate magna facilisis non. Aenean congue turpis vel lectus sollicitudin tristique. Sed nec consequat purus, non vehicula quam. Etiam ultricies, est ac dictum tincidunt, turpis turpis pretium massa, a vulputate libero justo at nibh. - -Aliquam erat volutpat. Cras ultrices augue ac sollicitudin lobortis. Curabitur et aliquet purus. Duis feugiat semper facilisis. Phasellus lobortis cursus velit, a sollicitudin tortor. Nam feugiat sapien non dapibus condimentum. Morbi at mi bibendum, commodo quam at, laoreet enim. Integer eu ultrices enim. Sed vestibulum eu urna ut dictum. Curabitur at mattis leo, sed cursus massa. Aliquam porttitor, felis quis fermentum porttitor, justo velit feugiat nulla, eget condimentum sem dui ut sapien. - -In fringilla elit eu orci aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eget fringilla tellus. Curabitur fermentum, mi et condimentum suscipit, elit neque bibendum dui, et hendrerit nunc metus id ipsum. Morbi placerat mi in hendrerit congue. Ut feugiat mauris eget scelerisque viverra. Vivamus sit amet erat dictum, sagittis lectus nec, pulvinar lorem. Sed non enim ac dui sollicitudin aliquet. Quisque ut lacus dolor. Fusce hendrerit malesuada euismod. Nulla faucibus vel mauris eu mollis. Mauris est diam, fringilla ac arcu feugiat, efficitur volutpat turpis. Aliquam venenatis cursus massa sed porttitor. Ut ac finibus enim, in tincidunt sapien. - -Nunc faucibus semper turpis a lacinia. Phasellus gravida, libero vel pulvinar ornare, ex sem tincidunt lectus, sit amet convallis augue risus at tortor. Quisque sit amet ipsum id nulla posuere vestibulum. Pellentesque scelerisque mauris vel leo viverra sodales. Nulla viverra aliquam ex, ut rutrum enim fermentum venenatis. Aenean eget dapibus ex, eget faucibus metus. Vestibulum volutpat leo in diam semper, eget porta magna suscipit. Sed sit amet nulla blandit, aliquam dolor ac, gravida velit. Sed vel velit viverra, maximus est id, convallis justo. - -Curabitur nulla ante, vulputate at libero vel, ullamcorper rutrum nibh. Pellentesque porttitor eu mauris id mattis. Duis vulputate augue elit, eget interdum justo pretium vel. Maecenas eu vulputate arcu, eget posuere purus. Suspendisse viverra a velit dictum eleifend. Suspendisse vitae dapibus diam. Donec vehicula justo in ante interdum, eu luctus diam placerat. Vivamus convallis ipsum eu orci suscipit, sed fermentum enim euismod. Maecenas faucibus elit vitae ex ornare tristique. Donec vestibulum nec elit sit amet porttitor. Aenean tempor lectus eget tortor hendrerit luctus. Nullam interdum vitae lectus vel feugiat. Cras in risus non magna consectetur lobortis. Sed faucibus enim quis gravida convallis. - -Phasellus eget massa sit amet libero ultrices suscipit. Vivamus at risus sapien. Nam mollis nunc eget velit dictum maximus. Sed pellentesque, nunc ac fringilla lacinia, quam enim mattis ex, sed euismod tortor metus eu neque. Ut mattis nisl ut lectus rhoncus, sodales bibendum eros porta. Nulla porttitor enim nec diam sagittis, eget porta velit efficitur. Vestibulum ultricies eros neque. Phasellus rutrum suscipit enim, in interdum ante gravida vitae. Sed in sagittis diam, non commodo velit. - -Morbi hendrerit odio orci, nec tincidunt odio rhoncus nec. Mauris neque velit, vehicula a lorem at, suscipit tristique dui. Sed finibus, nisl in mattis convallis, turpis neque sodales lacus, eu porta enim magna non diam. Nam commodo sodales risus consectetur malesuada. In eget elementum justo. Phasellus sit amet massa imperdiet, dapibus nunc sit amet, suscipit orci. Fusce condimentum laoreet feugiat. Ut ut viverra ante. Praesent bibendum interdum commodo. Nulla mollis nisi a est ornare volutpat. Sed at ligula eu nisi dapibus tempus. Proin cursus vestibulum justo, nec efficitur justo dignissim vel. Nunc quis maximus eros. - -Cras viverra, diam a tristique mattis, libero felis vulputate tellus, a ornare felis leo a dui. Nulla ante nulla, finibus ut tellus ut, blandit pharetra nibh. Proin eleifend fermentum ex, eget auctor libero vulputate in. Nullam ultricies, mauris placerat pretium placerat, leo urna lobortis leo, vel placerat arcu libero sed mauris. Aliquam mauris ligula, ornare at urna at, eleifend gravida ligula. Vestibulum consectetur ut nulla non scelerisque. Donec ornare, sem nec elementum aliquam, urna nulla bibendum metus, eu euismod dui ligula ac est. Fusce laoreet erat eu ex lobortis, quis bibendum ligula interdum. Sed vel mi erat. Vivamus id lacus ac enim mattis tempor. Nunc ultricies pellentesque enim sed euismod. Fusce tincidunt convallis elit quis aliquam. Mauris nulla ipsum, sollicitudin quis diam ac, feugiat volutpat tellus. In nibh nibh, vulputate quis tincidunt quis, pulvinar eget magna. Pellentesque quis finibus dolor. Suspendisse viverra vitae lectus non eleifend. - -Nunc ut orci et sapien maximus semper. Nulla dignissim sem urna, ac varius lectus ultricies id. Quisque aliquet pulvinar pretium. In ultricies molestie tellus vehicula porta. Nam enim lorem, aliquam eget ex et, hendrerit volutpat quam. Maecenas diam lacus, pellentesque eget tempus ac, pharetra eu elit. Donec vel eros a sem facilisis vulputate. Nullam ac nisi vulputate, laoreet nisl ac, eleifend sem. Nullam mi massa, rhoncus sed pharetra interdum, tincidunt eget nunc. Aliquam viverra mattis posuere. Mauris et dui sed nisl sollicitudin fermentum quis ut arcu. Nam placerat eget orci at tincidunt. Curabitur vel turpis metus. Phasellus nibh nulla, fermentum scelerisque sem vel, gravida tincidunt velit. Pellentesque vel quam tempor, finibus massa pellentesque, condimentum dui. - -Donec at mattis neque. Etiam velit diam, consequat auctor mauris id, hendrerit faucibus metus. Maecenas ullamcorper eros a est sodales, ac consectetur odio scelerisque. Donec leo metus, imperdiet at pellentesque vel, feugiat id erat. Suspendisse at magna enim. Vestibulum placerat sodales lorem id sollicitudin. Aenean at euismod ligula, eget mollis diam. Phasellus pulvinar, orci nec pretium condimentum, est erat facilisis purus, quis feugiat augue elit aliquam nulla. Aenean vitae tortor id risus congue tincidunt. Sed dolor enim, mattis a ullamcorper id, volutpat ac leo. - -Proin vehicula feugiat augue, id feugiat quam sodales quis. Donec et ultricies massa, a lacinia nulla. Duis aliquam augue ornare euismod viverra. Ut lectus risus, rutrum sit amet efficitur a, luctus nec nisl. Cras volutpat ullamcorper congue. Sed vitae odio metus. Phasellus aliquet euismod varius. - -Nullam sem ex, malesuada ut magna ut, pretium mollis arcu. Nam porttitor eros cursus mi lacinia faucibus. Suspendisse aliquet eleifend iaculis. Maecenas sit amet viverra tortor. Nunc a mollis risus. Etiam tempus dolor in tortor malesuada mattis. Ut tincidunt venenatis est sit amet dignissim. Vestibulum massa enim, tristique sed scelerisque eu, fringilla ac velit. Donec efficitur quis urna sit amet malesuada. Vestibulum consequat ac ligula in dapibus. Maecenas massa massa, molestie non posuere nec, elementum ut magna. In nisi erat, mollis non venenatis eu, faucibus in justo. Morbi gravida non ex non egestas. Pellentesque finibus laoreet diam, eu commodo augue congue vitae. - -Aenean sem mi, ullamcorper dapibus lobortis vitae, interdum tincidunt tortor. Vivamus eget vulputate libero. Ut bibendum posuere lectus, vel tincidunt tortor aliquet at. Phasellus malesuada orci et bibendum accumsan. Aliquam quis libero vel leo mollis porta. Sed sagittis leo ac lacus dictum, ac malesuada elit finibus. Suspendisse pharetra luctus commodo. Vivamus ultricies a odio non interdum. Vivamus scelerisque tincidunt turpis quis tempor. Pellentesque tortor ligula, varius non nunc eu, blandit sollicitudin neque. Nunc imperdiet, diam et tristique luctus, ipsum ex condimentum nunc, sit amet aliquam justo velit sed libero. Duis vel suscipit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tincidunt neque vel massa ultricies, id dictum leo consequat. Curabitur lobortis ultricies tellus, eget mattis nisl aliquam sit amet. - -Proin at suscipit justo. Vivamus ut vestibulum nisl. Pellentesque enim odio, pharetra non magna sed, efficitur auctor magna. Praesent tincidunt ante quis ante hendrerit viverra. Pellentesque vel ipsum id magna vulputate efficitur. Sed nec neque accumsan, pulvinar sapien quis, euismod mauris. Donec condimentum laoreet sapien quis gravida. Quisque sed mattis purus. Vestibulum placerat vel neque maximus scelerisque. - -Vestibulum mattis quam quis efficitur elementum. Duis dictum dolor ac scelerisque commodo. Fusce sollicitudin nisi sit amet dictum placerat. Suspendisse euismod pharetra eleifend. In eros nisl, porttitor sed mauris at, consectetur aliquet mauris. Donec euismod viverra neque sed fermentum. Phasellus libero magna, accumsan ut ultricies vitae, dignissim eget metus. Donec tellus turpis, interdum eget maximus nec, hendrerit eget massa. Curabitur auctor ligula in iaculis auctor. In ultrices quam suscipit cursus finibus. Aenean id mi at dolor interdum iaculis vitae ut lorem. Nullam sed nibh fringilla, lacinia odio nec, placerat erat. In dui libero, viverra ac viverra ac, pellentesque sit amet turpis. - -Nulla in enim ex. Sed feugiat est et consectetur venenatis. Cras varius facilisis dui vel convallis. Vestibulum et elit eget tellus feugiat pellentesque. In ut ante eu purus aliquet posuere. Nulla nec ornare sem, sed luctus lorem. Nam varius iaculis odio, eget faucibus nisl ullamcorper in. Sed eget cursus felis, nec efficitur nisi. - -Vivamus commodo et sem quis pulvinar. Pellentesque libero ante, venenatis vitae ligula sit amet, ornare sollicitudin nulla. Mauris eget tellus hendrerit, pulvinar metus quis, tempor nisi. Proin magna ex, laoreet sed tortor quis, varius fermentum enim. Integer eu dolor dictum, vulputate tortor et, aliquet ligula. Vestibulum vitae justo id mauris luctus sollicitudin. Suspendisse eget auctor neque, sodales egestas lorem. Vestibulum lacinia egestas metus vitae euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ex tellus, volutpat nec pulvinar sit amet, condimentum vitae dui. Curabitur vel felis sodales, lacinia nunc iaculis, ullamcorper augue. Pellentesque consequat dolor quis eros efficitur malesuada. Nulla ut malesuada lectus. - -Morbi et tristique ante. Aliquam erat volutpat. Vivamus vitae dui nec turpis pellentesque fermentum. Quisque eget velit massa. Pellentesque tristique aliquam nisl, eu sollicitudin justo venenatis sed. Duis eleifend sem eros, ut aliquam libero porttitor id. Sed non nunc consequat, rhoncus diam eu, commodo erat. Praesent fermentum in lectus id blandit. Donec quis ipsum at justo volutpat finibus. Nulla blandit justo nulla, at mollis lacus consequat eget. Aenean sollicitudin quis eros ut ullamcorper. - -Pellentesque venenatis nulla ut mi aliquet feugiat. Cras semper vel magna nec pharetra. Integer mattis felis et sapien commodo imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis quis luctus felis. Vestibulum justo nibh, aliquam non lectus vitae, molestie placerat justo. Donec lorem nibh, gravida sit amet hendrerit ac, maximus id ipsum. Nunc ac libero sodales risus eleifend sagittis. Phasellus est massa, lobortis elementum ex sed, scelerisque consectetur neque. Nunc faucibus neque id lorem malesuada, eget convallis ex mattis. - -Sed turpis tortor, fermentum non turpis id, posuere varius nibh. Donec iaculis lorem dui. Etiam eros ante, sodales eget venenatis at, consectetur eget risus. Curabitur non aliquam ante, a pretium justo. Maecenas tempor nisl tortor, vitae dictum nisi ultrices eu. Duis eget dui ultrices, porttitor lacus sed, lobortis purus. Quisque mattis elit nec neque sagittis, sed commodo leo blandit. Mauris sodales interdum eleifend. Vestibulum condimentum consectetur augue, id luctus diam convallis et. - -Nunc suscipit risus in justo accumsan, a placerat magna tincidunt. Proin a nisl ipsum. Sed libero dui, tristique in augue quis, auctor tristique risus. Sed porttitor ex augue, eu porta augue molestie a. Duis rhoncus purus libero, eu tempus turpis condimentum at. Sed mollis nisi id lectus placerat tincidunt. Maecenas non scelerisque elit, quis rutrum orci. Donec in tellus pharetra urna ornare lobortis. Phasellus id risus at nisi varius rutrum eu ut turpis. - -Duis dictum justo quis nisl porta, eget tincidunt magna suscipit. Sed velit massa, ullamcorper eu sodales ac, pretium a massa. Duis et rutrum tortor. Nulla accumsan hendrerit sapien, cursus volutpat eros egestas eget. Donec sollicitudin at ante quis sollicitudin. Aenean blandit feugiat diam, id feugiat eros faucibus eget. Donec viverra dolor vel justo scelerisque dignissim. Nulla semper sem nunc, rhoncus semper tellus ultricies sed. Duis in ornare diam. Donec vehicula feugiat varius. Maecenas ut suscipit est. Vivamus sem sem, finibus at dolor sit amet, euismod dapibus ligula. Vestibulum fringilla odio dapibus, congue massa eget, congue sem. Donec feugiat magna eget tortor lacinia scelerisque non et ipsum. - -Suspendisse potenti. Nunc convallis sollicitudin ex eget venenatis. Sed iaculis nibh ex, vel ornare ligula congue dignissim. Quisque sollicitudin dolor ac dui vestibulum, sit amet molestie nisi aliquet. Donec at risus felis. Aenean sollicitudin metus a feugiat porta. Aenean a tortor ut dolor cursus sagittis. Vivamus consectetur porttitor nunc in facilisis. Proin sit amet mi vel lectus consectetur ultrices. - -Sed cursus lectus vitae nunc tristique, nec commodo turpis dapibus. Pellentesque luctus ex id facilisis ornare. Morbi quis placerat dolor. Donec in lectus in arcu mattis porttitor ac sit amet metus. Cras congue mauris non risus sodales, vitae feugiat ipsum bibendum. Nulla venenatis urna sed libero elementum, a cursus lorem commodo. Mauris faucibus lobortis eros nec commodo. - -Nullam suscipit ligula ullamcorper lorem commodo blandit. Nulla porta nibh quis pulvinar placerat. Vivamus eu arcu justo. Vestibulum imperdiet est ut fermentum porttitor. Pellentesque consectetur libero in sapien efficitur scelerisque. Curabitur ac erat sit amet odio aliquet dignissim. Pellentesque mi sem, rhoncus et luctus at, porttitor rutrum lectus. Vestibulum sollicitudin sollicitudin suscipit. Aenean efficitur dolor non ultrices imperdiet. Donec vel sem ex. - -Sed convallis mauris aliquam rutrum cursus. Ut tempor porttitor sodales. Etiam eu risus ac augue gravida egestas et eu dolor. Proin id magna ex. Suspendisse quis lectus quis lorem ultricies tempus. Donec porttitor velit vitae tincidunt faucibus. Aliquam vitae semper nisi. Morbi ultrices, leo non pretium dapibus, dui libero pellentesque ex, vel placerat enim ante vitae dui. Nunc varius, sem sit amet sagittis lobortis, lectus odio scelerisque mauris, ut vestibulum orci magna quis neque. Sed id congue justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris congue nisi est, malesuada mollis elit tincidunt sed. Curabitur sed ex sit amet felis tristique elementum vitae vel nibh. - -Etiam mollis pretium lobortis. Mauris augue lacus, efficitur at lacus sed, mollis tincidunt lectus. Aliquam erat volutpat. Donec at euismod elit, et mattis felis. Sed id lobortis urna. Morbi imperdiet vestibulum leo, sed maximus leo blandit eu. Aliquam semper lorem neque, nec euismod turpis mattis mollis. Quisque lobortis urna ultrices odio pretium, ac venenatis orci faucibus. Suspendisse bibendum odio ligula, sed lobortis massa pharetra nec. Donec turpis justo, iaculis at dictum ac, finibus eu libero. Maecenas quis porttitor mi, sit amet aliquet neque. - -Vivamus auctor vulputate ante, at egestas lorem. Donec eu risus in nulla mollis ultricies at et urna. Duis accumsan porta egestas. Ut vel euismod augue. Fusce convallis nulla ante, nec fringilla velit aliquet at. Nam malesuada dapibus ligula, a aliquam nibh scelerisque ac. Praesent malesuada neque et pellentesque interdum. Curabitur volutpat at turpis vitae tristique. Vivamus porttitor semper congue. Quisque suscipit lacus mi, rhoncus ultrices tortor auctor quis. Maecenas neque neque, molestie ac facilisis eget, luctus ac lorem. In ut odio ut lacus suscipit pulvinar vitae sed elit. Nulla imperdiet, sem quis euismod sagittis, dui erat luctus dolor, faucibus faucibus erat sem eget nunc. Nam accumsan placerat malesuada. Maecenas convallis finibus pulvinar. - -Cras at placerat tortor. Morbi facilisis auctor felis sit amet molestie. Donec sodales sed lorem vitae suscipit. Etiam fermentum pharetra ipsum, nec luctus orci gravida eu. Pellentesque gravida, est non condimentum tempus, mauris ligula molestie est, in congue dolor nisl vel sapien. Duis congue tempor augue, id rutrum eros porta dapibus. Etiam rutrum eget est eget vestibulum. Aenean mollis arcu vel consequat varius. Praesent at condimentum felis. Duis nec interdum nisl. Donec commodo lorem sed sapien scelerisque malesuada non eu urna. In blandit non ipsum at porta. Nam lobortis leo vitae dui auctor, non feugiat quam bibendum. Donec auctor lectus sagittis laoreet maximus. Maecenas rhoncus laoreet porttitor. Vestibulum porttitor augue ut lectus hendrerit, eget posuere mi gravida. - -Sed mattis ex in erat pulvinar, eu imperdiet magna dapibus. Etiam nisi nibh, tempus non tellus sit amet, mattis tempor odio. Quisque nec lorem feugiat, lobortis odio et, commodo nunc. Maecenas semper purus nisi, nec vehicula nibh eleifend vitae. Nulla fermentum a lectus at maximus. Phasellus finibus metus non euismod ultrices. Etiam a pulvinar ante. Quisque convallis nec metus sit amet facilisis. Praesent laoreet massa et sollicitudin laoreet. Vestibulum in mauris aliquet, convallis mi ut, elementum purus. Nulla purus nulla, sodales at hendrerit quis, tempus sed lectus. - -Nam ut laoreet neque, ut maximus nibh. Maecenas quis justo pellentesque, sollicitudin elit at, venenatis velit. Aenean nunc velit, vehicula scelerisque odio at, consectetur laoreet purus. Duis dui purus, malesuada quis ipsum sit amet, tempor interdum libero. Curabitur porta scelerisque sapien, vitae cursus diam condimentum eu. Phasellus sed orci quam. Nullam vitae dui quis purus tincidunt vestibulum. Curabitur quis nulla porta, cursus arcu non, auctor enim. Etiam sollicitudin ex id sem vehicula mollis. Morbi viverra laoreet tincidunt. Praesent ut semper dui. Nam sit amet pretium neque. Mauris vitae luctus diam, in lacinia purus. Maecenas ut placerat justo, ut porta felis. Integer eu mauris ante. - -Aenean porttitor tellus diam, tempor consequat metus efficitur id. Suspendisse ut felis at erat tempor dictum at nec sapien. Sed vestibulum interdum felis, ac mattis mauris porta in. Nunc et condimentum massa. Sed cursus dictum justo et luctus. Integer convallis enim nisl, a rutrum lectus ultricies in. Donec dapibus lacus at nulla dapibus, id sollicitudin velit hendrerit. Fusce a magna at orci mollis rutrum ac a dolor. Aliquam erat volutpat. Morbi varius porta nunc, sit amet sodales ex hendrerit commodo. Donec tincidunt tortor sapien, vitae egestas sapien vehicula eget. - -Suspendisse potenti. Donec pulvinar felis nec leo malesuada interdum. Integer posuere placerat maximus. Donec nibh ipsum, tincidunt vitae luctus vitae, bibendum at leo. Sed cursus nisl ut ex faucibus aliquet sed nec eros. Curabitur molestie posuere felis. Integer faucibus velit eget consequat iaculis. Mauris sed vulputate odio. Phasellus maximus, elit a pharetra egestas, lorem magna semper tellus, vestibulum semper diam felis at sapien. Suspendisse facilisis, nisl sit amet euismod vehicula, libero nulla vehicula dolor, quis fermentum nibh elit sit amet diam. - -Morbi lorem enim, euismod eu varius ut, scelerisque quis odio. Nam tempus vitae eros id molestie. Nunc pretium in nulla eget accumsan. Quisque mattis est ut semper aliquet. Maecenas eget diam elementum, fermentum ipsum a, euismod sapien. Duis quam ligula, cursus et velit nec, ullamcorper tincidunt magna. Donec vulputate nisl est, et ullamcorper urna tempor sit amet. - -Proin lacinia dui non turpis congue pretium. Morbi posuere metus vel purus imperdiet interdum. Morbi venenatis vel eros non ultricies. Nulla vel semper elit. Ut quis purus tincidunt, auctor justo ut, faucibus turpis. Proin quis mattis erat, at faucibus ligula. Mauris in mauris enim. Donec facilisis enim at est feugiat hendrerit. Nam vel nisi lorem. Fusce ultricies convallis diam, in feugiat tortor luctus quis. Donec tempor, leo vitae volutpat aliquam, magna elit feugiat leo, quis placerat sapien felis eget arcu. Donec ornare fermentum eleifend. Integer a est orci. - -Proin rhoncus egestas leo. Nulla ultricies porta elit quis ornare. Nunc fermentum interdum vehicula. In in ligula lorem. Donec nec arcu sit amet orci lobortis iaculis. Mauris at mollis erat, sit amet mollis tortor. Mauris laoreet justo ullamcorper porttitor auctor. Aenean sit amet aliquam lectus, id fermentum eros. Praesent urna sem, vehicula ac fermentum id, dapibus ut purus. Vestibulum vitae tempus nunc. Donec at nunc ornare metus volutpat porta at eget magna. Donec varius aliquet metus, eu lobortis risus aliquam sed. Ut dapibus fermentum velit, ac tincidunt libero faucibus at. - -In in purus auctor, feugiat massa quis, facilisis nisi. Donec dolor purus, gravida eget dolor ac, porttitor imperdiet urna. Donec faucibus placerat erat, a sagittis ante finibus ac. Sed venenatis dignissim elit, in iaculis felis posuere faucibus. Praesent sed viverra dolor. Mauris sed nulla consectetur nunc laoreet molestie in ut metus. Proin ac ex sit amet magna vulputate hendrerit ac condimentum urna. Proin ligula metus, gravida et sollicitudin facilisis, iaculis ut odio. Cras tincidunt urna et augue varius, ut facilisis urna consequat. Aenean vehicula finibus quam. Ut iaculis eu diam ac mollis. Nam mi lorem, tristique eget varius at, sodales at urna. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vitae dictum erat, et auctor ipsum. Nullam nunc nunc, sollicitudin quis magna a, vestibulum fermentum mauris. Praesent at erat dolor. Proin laoreet tristique nulla vel efficitur. Nam sed ultrices nibh, id rutrum nunc. Curabitur eleifend a erat sit amet sollicitudin. Nullam metus quam, laoreet vitae dapibus id, placerat sed leo. Aliquam erat volutpat. Donec turpis nisl, cursus eu ex sit amet, lacinia pellentesque nisl. Sed id ipsum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec interdum scelerisque lorem eu mattis. - -Vivamus ac tristique massa, nec facilisis nisl. Nam ipsum neque, tincidunt vel urna in, cursus imperdiet enim. Nam pellentesque egestas tempus. Morbi facilisis imperdiet libero vitae fringilla. Nam lacinia ligula at sapien facilisis malesuada. Nullam accumsan pulvinar sem, et cursus libero porta sit amet. Curabitur vulputate erat elit, ut pulvinar erat maximus vel. - -Cras aliquet metus ut purus sagittis, vel venenatis ante consectetur. Pellentesque nulla lacus, viverra viverra mattis non, placerat vitae nibh. Donec enim turpis, accumsan sit amet tincidunt eu, imperdiet non metus. Morbi ipsum eros, tincidunt vel est ac, tristique porttitor nibh. Praesent ut ullamcorper mauris. Sed laoreet sit amet diam congue venenatis. Integer porta purus nec orci sagittis posuere. - -Donec vehicula mauris eget lacus mollis venenatis et sed nibh. Nam sodales ligula ipsum, scelerisque lacinia ligula sagittis in. Nam sit amet ipsum at erat malesuada congue. Aenean ut sollicitudin sapien. Etiam at tempor odio. Mauris vitae purus ut magna suscipit consequat. Vivamus quis sapien neque. Nulla vulputate sem sit amet massa pellentesque, eleifend tristique ligula egestas. Suspendisse tincidunt gravida mi, in pulvinar lectus egestas non. Aenean imperdiet ex sit amet nunc sollicitudin porta. Integer justo odio, ultricies at interdum in, rhoncus vitae sem. Sed porttitor arcu quis purus aliquet hendrerit. Praesent tempor tortor at dolor dictum pulvinar. Nulla aliquet nunc non ligula scelerisque accumsan. Donec nulla justo, congue vitae massa in, faucibus hendrerit magna. Donec non egestas purus. - -Vivamus iaculis, lacus efficitur faucibus porta, dui nulla facilisis ligula, ut sodales odio nunc id sapien. Cras viverra auctor ipsum, dapibus mattis neque dictum sed. Sed convallis fermentum molestie. Nulla facilisi turpis duis. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_big5.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_big5.txt deleted file mode 100644 index 91b79941f16..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_big5.txt +++ /dev/null @@ -1,283 +0,0 @@ -¤¤¤åabc Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vulputate, ipsum quis interdum fermentum, lorem sem fermentum eros, vitae auctor neque lacus in nisi. Suspendisse potenti. Maecenas et scelerisque elit, in tincidunt quam. Sed eu tincidunt quam. Nullam justo ex, imperdiet a imperdiet et, fermentum sit amet eros. Aenean quis tempus sem. Pellentesque accumsan magna mi, ut mollis velit sagittis id. Etiam quis ipsum orci. Fusce purus ante, accumsan a lobortis at, venenatis eu nisl. Praesent ornare sed ante placerat accumsan. Suspendisse tempus dignissim fermentum. Nunc a leo ac lacus sodales iaculis eu vitae mi. In feugiat ante at massa finibus cursus. Suspendisse posuere fringilla ornare. Mauris elementum ac quam id convallis. Vestibulum non elit quis urna volutpat aliquam a eu lacus. - -Aliquam vestibulum imperdiet neque, suscipit aliquam elit ultrices bibendum. Suspendisse ultrices pulvinar cursus. Morbi risus nisi, cursus consequat rutrum vitae, molestie sed dui. Fusce posuere, augue quis dignissim aliquam, nisi ipsum porttitor ante, quis fringilla nisl turpis ac nisi. Nulla varius enim eget lorem vehicula gravida. Donec finibus malesuada leo nec semper. Proin ac enim eros. Vivamus non tincidunt nisi, vel tristique lorem. - -Nunc consequat ex id eros dignissim, id rutrum risus laoreet. Sed euismod non erat eu ultricies. Etiam vehicula gravida lacus ut porta. Vestibulum eu eros quis nunc aliquet luctus. Cras quis semper ligula. Nullam gravida vehicula quam sed porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In porta cursus vulputate. Quisque porta a nisi eget cursus. Aliquam risus leo, luctus ac magna in, efficitur cursus magna. In condimentum non mi id semper. Donec interdum ante eget commodo maximus. - -Vivamus sit amet vestibulum lectus. Fusce tincidunt mi sapien, dictum sollicitudin diam vulputate in. Integer fringilla consequat mollis. Cras aliquet consequat felis eget feugiat. Nunc tempor cursus arcu, vitae ornare nunc varius et. Vestibulum et tortor vel ante viverra porttitor. Nam at tortor ullamcorper, facilisis augue quis, tristique erat. Aenean ut euismod nibh. Quisque eu tincidunt est, nec euismod eros. - -Proin vehicula nibh non viverra egestas. Phasellus sem dolor, ultricies ac sagittis tristique, lacinia a purus. Vestibulum in ante eros. Pellentesque lacus nulla, tristique vitae interdum vel, malesuada ac diam. Aenean bibendum posuere turpis in accumsan. Ut est nulla, ullamcorper quis turpis at, viverra sagittis mauris. Sed in interdum purus. Praesent scelerisque nibh eget sem euismod, ut imperdiet mi venenatis. Vivamus pulvinar orci sed dapibus auctor. Nulla facilisi. Vestibulum tincidunt erat nec porttitor egestas. Mauris quis risus ante. Nulla facilisi. - -Aliquam ullamcorper ornare lobortis. Phasellus quis sem et ipsum mollis malesuada sed in ex. Ut aliquam ex eget metus finibus maximus. Proin suscipit mauris eu nibh lacinia, quis feugiat dui dapibus. Nam sed libero est. Aenean vulputate orci sit amet diam faucibus, eu sagittis sapien volutpat. Nam imperdiet felis turpis, at pretium odio pulvinar in. Sed vestibulum id eros nec ultricies. Sed quis aliquam tortor, vitae ullamcorper tellus. Donec egestas laoreet eros, id suscipit est rutrum nec. Sed auctor nulla eget metus aliquam, ut condimentum enim elementum. - -Aliquam suscipit non turpis sit amet bibendum. Fusce velit ligula, euismod et maximus at, luctus sed neque. Quisque pretium, nisl at ullamcorper finibus, lectus leo mattis sapien, vel euismod mauris diam ullamcorper ex. Nulla ut risus finibus, lacinia ligula at, auctor erat. Mauris consectetur sagittis ligula vel dapibus. Nullam libero libero, lobortis aliquam libero vel, venenatis ultricies leo. Duis porttitor, nibh congue fermentum posuere, erat libero pulvinar tortor, a pellentesque nunc ipsum vel sem. Nullam volutpat, eros sit amet facilisis consectetur, ipsum est vehicula massa, non vestibulum neque elit in mauris. Nunc hendrerit ipsum non enim bibendum, vitae rhoncus mi egestas. Etiam ullamcorper massa vel nisl sagittis, nec bibendum arcu malesuada. Aenean aliquet turpis justo, a consectetur arcu mollis convallis. Etiam tellus ipsum, ultricies vitae lorem et, ornare facilisis orci. Praesent fringilla justo urna, vel mollis neque pulvinar vestibulum. - -Donec non iaculis erat. Aliquam et mi sed nunc pulvinar ultricies in ut ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent feugiat lacus ac dignissim semper. Phasellus vitae quam nisi. Morbi vel diam ultricies risus lobortis ornare. Fusce maximus et ligula quis iaculis. Sed congue ex eget felis convallis, sit amet hendrerit elit tempor. Donec vehicula blandit ante eget commodo. Vestibulum eleifend diam at feugiat euismod. Etiam magna tellus, dignissim eget fermentum vel, vestibulum vitae mauris. Nam accumsan et erat id sagittis. Donec lacinia, odio ut ornare ultricies, dolor velit accumsan tortor, non finibus erat tellus quis ligula. Nunc quis metus in leo volutpat ornare vulputate eu nisl. - -Donec quis viverra ex. Nullam id feugiat mauris, eu fringilla nulla. Vestibulum id maximus elit. Cras elementum elit sed felis lobortis, eget sagittis nisi hendrerit. Vivamus vitae elit neque. Donec vulputate lacus ut libero ultrices accumsan. Vivamus accumsan nulla orci, in dignissim est laoreet sagittis. Proin at commodo velit. Curabitur in velit felis. Aliquam erat volutpat. Sed consequat, nulla et cursus sodales, nisi lacus mattis risus, quis eleifend erat ex nec turpis. Sed suscipit ultrices lorem in hendrerit. - -Morbi vitae lacus nec libero ornare tempus eu et diam. Suspendisse magna ipsum, fermentum vel odio quis, molestie aliquam urna. Fusce mollis turpis a eros accumsan porttitor. Pellentesque rhoncus dolor sit amet magna rutrum, et dapibus justo tempor. Sed purus nisi, maximus vitae fringilla eu, molestie nec urna. Fusce malesuada finibus pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sed aliquet eros. Pellentesque luctus diam ante, eget euismod nisl aliquet eu. Sed accumsan elit purus, tempor varius ligula tempus nec. Curabitur ornare leo suscipit suscipit fermentum. Morbi eget nulla est. Maecenas faucibus interdum tristique. - -Etiam ut elit eros. Nulla pharetra suscipit molestie. Nulla facilisis bibendum nisl non molestie. Curabitur turpis lectus, facilisis vel diam non, vulputate ultrices mauris. Aenean placerat aliquam convallis. Suspendisse sed scelerisque tellus. Vivamus lacinia neque eget risus cursus suscipit. Proin consequat dolor vel neque tempor, eu aliquam sem scelerisque. Duis non eros a purus malesuada pharetra non et nulla. Suspendisse potenti. Mauris libero eros, finibus vel nulla id, sagittis dapibus ante. Proin iaculis sed nunc et cursus. - -Quisque accumsan lorem sit amet lorem aliquet euismod. Curabitur fermentum rutrum posuere. Etiam ultricies, sem id pellentesque suscipit, urna magna lacinia eros, quis efficitur risus nisl at lacus. Nulla quis lacus tortor. Mauris placerat ex in dolor tincidunt, vel aliquet nisi pretium. Cras iaculis risus vitae pellentesque aliquet. Quisque a enim imperdiet, ullamcorper arcu vitae, rutrum risus. Nullam consectetur libero at felis fringilla, nec congue nibh dignissim. Nam et lobortis felis, eu pellentesque ligula. Aenean facilisis, ligula non imperdiet maximus, massa orci gravida sapien, at sagittis lacus nisl in lacus. Nulla quis mauris luctus, scelerisque felis consequat, tempus risus. Fusce auctor nisl non nulla luctus molestie. Maecenas sapien nisl, auctor non dolor et, iaculis scelerisque lorem. Suspendisse egestas enim aliquet, accumsan mauris nec, posuere quam. Nulla iaculis dui dui, sit amet vestibulum erat ultricies ac. - -Cras eget dolor erat. Proin at nisl ut leo consectetur ultricies vel ut arcu. Nulla in felis malesuada, ullamcorper tortor et, convallis massa. Nunc urna justo, ornare in nibh vitae, hendrerit condimentum libero. Etiam vitae libero in purus venenatis fringilla. Nullam velit nulla, consequat ut turpis non, egestas hendrerit nibh. Duis tortor turpis, interdum non ante ac, cursus accumsan lectus. Cras pharetra bibendum augue quis dictum. Sed euismod vestibulum justo. Proin porta lobortis purus. Duis venenatis diam tortor, sit amet condimentum eros rhoncus a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc at magna nec diam lobortis efficitur sit amet ut lacus. Nulla quis orci tortor. Pellentesque tempus velit a odio finibus porta. - -Proin feugiat mauris a tellus scelerisque convallis. Maecenas libero magna, blandit nec ultrices id, congue vel mi. Aliquam lacinia, quam vel condimentum convallis, tortor turpis aliquam odio, sed blandit libero lacus et eros. In eleifend iaculis magna ac finibus. Praesent auctor facilisis tellus in congue. Sed molestie lobortis dictum. Nam quis dignissim augue, vel euismod lorem. Curabitur posuere dapibus luctus. Donec ultricies dictum lectus, quis blandit arcu commodo ac. Aenean tincidunt ligula in nunc imperdiet dignissim. Curabitur egestas sollicitudin sapien ut semper. Aenean nec dignissim lacus. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec aliquam dictum vehicula. Donec tortor est, volutpat non nisi nec, varius gravida ex. Nunc vel tristique nunc, vitae mattis nisi. Nunc nec luctus ex, vitae tincidunt lectus. In hac habitasse platea dictumst. Curabitur lobortis ex eget tincidunt tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut a vehicula mi. - -Fusce eu libero finibus, interdum nulla a, placerat neque. Cras bibendum tempor libero nec feugiat. Cras ut sodales eros. Proin viverra, massa sit amet viverra egestas, neque nisl porta ex, sit amet hendrerit libero ligula vel urna. Mauris suscipit lacus id justo rhoncus suscipit. Etiam vel libero tellus. Maecenas non diam molestie, condimentum tellus a, bibendum enim. Mauris aliquet imperdiet tellus, eget sagittis dolor. Sed blandit in neque et luctus. Cras elementum sagittis nunc, vel mollis lorem euismod et. Donec posuere at lacus eget suscipit. - -Nulla nunc mi, pretium non massa vel, tempor semper magna. Nunc a leo pulvinar, tincidunt nunc at, dignissim mi. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut viverra nulla a nisl finibus, at hendrerit ligula ullamcorper. Donec a lorem semper, tempor magna et, lobortis libero. Mauris id sapien leo. Donec dignissim, quam vitae porttitor dignissim, quam justo mattis dui, vel consequat odio elit quis orci. Etiam nec pretium neque, sit amet pretium orci. Duis ac tortor venenatis, feugiat purus non, feugiat nunc. Proin scelerisque nisl in turpis aliquam vulputate. - -Praesent sed est semper, fringilla lorem vitae, tincidunt nibh. Cras eros metus, auctor at mauris sit amet, sodales semper orci. Nunc a ornare ex. Curabitur bibendum arcu congue urna vulputate egestas. Vestibulum finibus id risus et accumsan. Aenean ut volutpat tellus. Aenean tincidunt malesuada urna sit amet vestibulum. Mauris vel tellus dictum, varius lacus quis, dictum arcu. - -Aenean quis metus eu erat feugiat cursus vel at ligula. Proin dapibus sodales urna, id euismod lectus tempus id. Pellentesque ex ligula, convallis et erat vel, vulputate condimentum nisl. Pellentesque pharetra nulla quis massa eleifend hendrerit. Praesent sed massa ipsum. Maecenas vehicula dolor massa, id sodales urna faucibus et. Mauris ac quam non massa tincidunt feugiat et at lacus. Fusce libero massa, vulputate vel scelerisque non, mollis in leo. Ut sit amet ultricies odio. Suspendisse in sapien viverra, facilisis purus ut, pretium libero. - -Vivamus tristique pharetra molestie. Nam a volutpat purus. Praesent consequat gravida nisi, ac blandit nisi suscipit ut. Quisque posuere, ligula a ultrices laoreet, ligula nunc vulputate libero, ut rutrum erat odio tincidunt justo. Sed vitae leo at leo fringilla bibendum. Vestibulum ut augue nec dolor auctor accumsan. Praesent laoreet id eros pulvinar commodo. Suspendisse potenti. Ut pharetra, mauris vitae blandit fringilla, odio ante tincidunt lorem, sit amet tempor metus diam ut turpis. - -Praesent quis egestas arcu. Nullam at porta arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi vulputate ligula malesuada ligula luctus, vulputate tempus erat bibendum. Nunc ullamcorper non lectus at euismod. Etiam nibh felis, tincidunt a metus vel, pellentesque rhoncus neque. Etiam at diam in erat luctus interdum. Nunc vel ipsum pulvinar, sollicitudin lacus ac, tempus urna. Etiam vel lacinia sapien. Pellentesque sagittis velit vel mi efficitur iaculis. Integer euismod sit amet urna in sagittis. Cras eleifend ut nibh in facilisis. Donec et lacus vitae nunc placerat sodales. Nulla sed hendrerit ligula, at dapibus sapien. - -Praesent at iaculis ex. Curabitur est purus, cursus a faucibus quis, dictum id velit. Donec dignissim fringilla viverra. Nunc mauris felis, laoreet sit amet sagittis at, vestibulum in libero. Maecenas quis orci turpis. Quisque ut nibh vitae magna mollis consequat id at mauris. Aliquam eu odio eget nulla bibendum sodales. Quisque vel orci eleifend nisi pretium lacinia. Suspendisse eget risus eget mi volutpat molestie eget quis lacus. Duis nisi libero, tincidunt nec nulla id, faucibus cursus felis. - -Donec tempor eget risus pellentesque molestie. Phasellus porta neque vel arcu egestas, nec blandit velit fringilla. Nullam porta faucibus justo vitae laoreet. Pellentesque viverra id nunc eu varius. Nulla pulvinar lobortis iaculis. Etiam vestibulum odio nec velit tristique, a tristique nisi mattis. In sed fringilla orci, vitae efficitur odio. Quisque dui odio, ornare eget velit at, lacinia consequat libero. Quisque lectus nulla, aliquet eu leo in, porta rutrum diam. Donec nec mattis neque. Nam rutrum, odio ac eleifend bibendum, dolor arcu rutrum neque, eget porta elit tellus a lacus. Sed massa metus, sollicitudin et sapien eu, finibus tempus orci. Proin et sapien sit amet erat molestie interdum. In quis rutrum velit, faucibus ultrices tellus. - -Sed sagittis sed justo eget tincidunt. Maecenas ut leo sagittis, feugiat magna et, viverra velit. Maecenas ex arcu, feugiat at consequat vitae, auctor eu massa. Integer egestas, enim vitae maximus convallis, est lectus pretium mauris, ac posuere lectus nisl quis quam. Aliquam tempus laoreet mi, vitae dapibus dolor varius dapibus. Suspendisse potenti. Donec sit amet purus nec libero dapibus tristique. Pellentesque viverra bibendum ligula. Donec sed felis et ex lobortis laoreet. Phasellus a fringilla libero, vitae malesuada nulla. Pellentesque blandit mattis lacus, et blandit tortor laoreet consequat. Suspendisse libero nunc, viverra sed fermentum in, accumsan egestas arcu. Proin in placerat elit. Sed interdum imperdiet malesuada. Suspendisse aliquet quis mauris eget sollicitudin. - -Vivamus accumsan tellus non erat volutpat, quis dictum dolor feugiat. Praesent rutrum nunc ac est mollis cursus. Fusce semper volutpat dui ut egestas. Curabitur sit amet posuere massa. Cras tincidunt nulla et mi mollis imperdiet. Suspendisse scelerisque ex id sodales vulputate. In nunc augue, pharetra in placerat eu, mattis id tellus. Vivamus cursus efficitur vehicula. Nulla aliquet vehicula aliquet. - -Sed cursus tellus sed porta pulvinar. Sed vitae nisi neque. Nullam aliquet, lorem et efficitur scelerisque, arcu diam aliquam felis, sed pulvinar lorem odio et turpis. Praesent convallis pulvinar turpis eu iaculis. Aliquam nec gravida mi. Curabitur eu nibh tempor, blandit justo in, ultrices felis. Fusce placerat metus non mi sagittis rutrum. Morbi sed dui fringilla, sagittis mauris eget, imperdiet nunc. Phasellus hendrerit sem elit, id hendrerit libero auctor sit amet. Integer sodales elit sit amet consequat cursus. - -Nam semper est eget nunc mollis, in pellentesque lectus fringilla. In finibus vel diam id semper. Nunc mattis quis erat eu consectetur. In hac habitasse platea dictumst. Nullam et ipsum vestibulum ex pulvinar ultricies sit amet id velit. Aenean suscipit mi tortor, a lobortis magna viverra non. Nulla condimentum aliquet ante et ullamcorper. Pellentesque porttitor arcu a posuere tempus. Aenean lacus quam, imperdiet eu justo vitae, pretium efficitur ex. Duis id purus id magna rhoncus ultrices id eu risus. Nunc dignissim et libero id dictum. - -Quisque a tincidunt neque. Phasellus commodo mi sit amet tempor fringilla. Ut rhoncus, neque non porttitor elementum, libero nulla egestas augue, sed fringilla sapien felis ac velit. Phasellus viverra rhoncus mollis. Nam ullamcorper leo vel erat laoreet luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus semper a metus a cursus. Nulla sed orci egestas, efficitur purus ac, malesuada tellus. Aenean rutrum velit at tellus fermentum mollis. Aliquam eleifend euismod metus. - -In hac habitasse platea dictumst. Vestibulum volutpat neque vitae porttitor laoreet. Nam at tellus consequat, sodales quam in, pulvinar arcu. Maecenas varius convallis diam, ac lobortis tellus pellentesque quis. Maecenas eget augue massa. Nullam volutpat nibh ac justo rhoncus, ut iaculis tellus rutrum. Fusce efficitur efficitur libero quis condimentum. Curabitur congue neque non tincidunt tristique. Fusce eget tempor ex, at pellentesque odio. Praesent luctus dictum vestibulum. Etiam non orci nunc. Vivamus vitae laoreet purus, a lobortis velit. Curabitur tincidunt purus ac lectus elementum pellentesque. Quisque sed tincidunt est. - -Sed vel ultrices massa, vitae ultricies justo. Cras finibus mauris nec lacus tempus dignissim. Cras faucibus maximus velit, eget faucibus orci luctus vehicula. Nulla massa nunc, porta ac consequat eget, rhoncus non tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed maximus metus, vel imperdiet ipsum. Ut scelerisque lectus at blandit porttitor. Ut vulputate nunc pharetra, aliquet sapien ac, sollicitudin sapien. Aenean eget ante lorem. Nam accumsan venenatis tellus id dignissim. - -Curabitur fringilla, magna non maximus dapibus, nulla sapien vestibulum lectus, sit amet semper dolor neque vitae nisl. Nunc ultrices vehicula augue sed iaculis. Maecenas nec diam mollis, suscipit orci et, vestibulum ante. Pellentesque eu nisl tortor. Nunc eleifend, lacus quis volutpat volutpat, nisi mi molestie sem, quis mollis ipsum libero a tellus. Ut viverra dolor mattis convallis interdum. Sed tempus nisl at nunc scelerisque aliquet. Quisque tempor tempor lorem id feugiat. Nullam blandit lectus velit, vitae porta lacus tincidunt a. Vivamus sit amet arcu ultrices, tincidunt mi quis, viverra quam. Aenean fringilla libero elementum lorem semper, quis pulvinar eros gravida. Nullam sodales blandit mauris, sed fermentum velit fermentum sit amet. Donec malesuada mauris in augue sodales vulputate. Vestibulum gravida turpis id elit rhoncus dignissim. Integer non congue lorem, eu viverra orci. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec at dolor magna. Aliquam consectetur erat augue, id iaculis velit pharetra ac. Integer rutrum venenatis dignissim. Integer non sodales elit. Curabitur ut magna ut nibh feugiat aliquam ac ut risus. Morbi nibh quam, aliquam id placerat nec, vestibulum eget velit. Suspendisse at dignissim quam. Vivamus aliquet sem sed nisl volutpat, ut cursus orci ultrices. Aliquam ultrices lacinia enim, vitae aliquet neque. - -Quisque scelerisque finibus diam in mattis. Cras cursus auctor velit. Aliquam sem leo, fermentum et maximus et, molestie a libero. Aenean justo elit, rutrum a ornare id, egestas eget enim. Aenean auctor tristique erat. Curabitur condimentum libero lacus, nec consequat orci vestibulum sed. Fusce elit ligula, blandit vitae sapien vitae, dictum ultrices risus. Nam laoreet suscipit sapien, at interdum velit faucibus sit amet. Duis quis metus egestas lectus elementum posuere non nec libero. Aliquam a dolor bibendum, facilisis nunc a, maximus diam. Vestibulum suscipit tristique magna, non dignissim turpis sodales sed. Nunc ornare, velit ac facilisis fringilla, dolor mi consectetur lorem, vitae finibus erat justo suscipit urna. Maecenas sit amet eros erat. Nunc non arcu ornare, suscipit lorem eget, sodales mauris. Aliquam tincidunt, quam nec mollis lacinia, nisi orci fermentum libero, consequat eleifend lectus quam et sapien. Vestibulum a quam urna. - -Cras arcu leo, euismod ac ullamcorper at, faucibus sed massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor velit in enim interdum, non commodo metus ornare. Morbi vel lorem quis nisl luctus tristique quis vitae nisl. Suspendisse condimentum tortor enim, nec eleifend ipsum euismod et. Sed gravida quam ut tristique lacinia. Mauris eu interdum ipsum, ac ultrices odio. Nullam auctor tellus a risus porttitor vehicula. Nulla blandit euismod dictum. In pharetra, enim iaculis pulvinar interdum, dui nunc placerat nunc, sit amet pretium lectus nulla vitae quam. Phasellus quis enim sollicitudin, varius nulla id, ornare purus. Donec quam lacus, vestibulum quis nunc ac, mollis dictum nisi. Cras ut mollis elit. Maecenas ultrices ligula at risus faucibus scelerisque. Etiam vitae porttitor purus. Curabitur blandit lectus urna, ut hendrerit tortor feugiat ut. - -Phasellus fringilla, sapien pellentesque commodo pharetra, ante libero aliquam tellus, ut consectetur augue libero a sapien. Maecenas blandit luctus nisl eget aliquet. Maecenas vitae porta dolor, faucibus laoreet sapien. Suspendisse lobortis, ipsum sed vehicula aliquam, elit purus scelerisque dui, rutrum consectetur diam odio et lorem. In nec lacinia metus. Donec viverra libero est, vel bibendum erat condimentum quis. Donec feugiat purus leo. In laoreet vitae felis a porttitor. Mauris ullamcorper, lacus id condimentum suscipit, neque magna pellentesque arcu, eget cursus neque tellus id metus. Curabitur volutpat ac orci vel ultricies. - -Sed ut finibus erat. Sed diam purus, varius non tincidunt quis, ultrices sit amet ipsum. Donec et egestas nulla. Suspendisse placerat nisi at dui laoreet iaculis. Aliquam aliquet leo at augue faucibus molestie. Nullam lacus augue, hendrerit sed nisi eu, faucibus porta est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ut leo aliquet sem fermentum rutrum quis ac justo. Integer placerat aliquam nisl ut sagittis. Proin erat orci, lobortis et sem eget, eleifend fringilla augue. Mauris varius laoreet arcu, sed tincidunt felis. Pellentesque venenatis lorem odio, id pulvinar velit molestie feugiat. Donec mattis lacus sed eleifend pulvinar. - -Sed condimentum ex in tincidunt hendrerit. Etiam eget risus lacinia, euismod nibh eu, pellentesque quam. Proin elit eros, convallis id mauris ac, bibendum ultrices lectus. Morbi venenatis, purus id fermentum consequat, nunc libero tincidunt ligula, non dictum ligula orci nec quam. Nulla nec ultrices lorem. Aenean maximus augue vel dictum pharetra. Etiam turpis urna, pellentesque quis malesuada eu, molestie faucibus felis. - -Vestibulum pharetra augue ut quam blandit congue in nec risus. Proin eu nibh eu dui eleifend porta vitae id lectus. Proin lacus nibh, lobortis sed ligula vitae, interdum lobortis erat. Suspendisse potenti. In sollicitudin quis sapien ut aliquet. Mauris ac nulla arcu. Fusce tristique justo quis lectus mollis, eu volutpat lectus finibus. Vivamus venenatis facilisis ex ut vestibulum. - -Etiam varius lobortis purus, in hendrerit elit tristique at. In tempus, augue vestibulum fermentum gravida, ligula tellus vulputate arcu, eu molestie ex sapien at purus. Vestibulum nec egestas metus. Duis pulvinar quam nec consequat interdum. Aenean non dapibus lacus. Aliquam sit amet aliquet nulla. Sed venenatis volutpat purus nec convallis. Phasellus aliquet semper sodales. Cras risus sapien, condimentum auctor urna a, pulvinar ornare nisl. Sed tincidunt felis elit, ut elementum est bibendum ac. Morbi interdum justo vel dui faucibus condimentum. - -Sed convallis eu sem at tincidunt. Nullam at auctor est, et ullamcorper ipsum. Pellentesque eget ante ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer euismod, sapien sed dapibus ornare, nibh enim maximus lacus, lacinia placerat urna quam quis felis. Morbi accumsan id nisl ut condimentum. Donec bibendum nisi est, sed volutpat lorem rhoncus in. Vestibulum ac lacinia nunc, eget volutpat magna. Integer aliquam pharetra ipsum, id placerat nunc volutpat quis. Etiam urna diam, rhoncus sit amet varius vel, euismod vel sem. Nullam vel molestie urna. Vivamus ornare erat at venenatis euismod. Suspendisse potenti. Fusce diam justo, tincidunt vel sem at, commodo faucibus nisl. Duis gravida efficitur diam, vel sagittis erat pulvinar ut. - -Quisque vel pharetra felis. Duis efficitur tortor dolor, vitae porttitor erat fermentum sed. Sed eu mi purus. Etiam dignissim tortor eu tempus molestie. Aenean pretium erat enim, in hendrerit ante hendrerit at. Sed ut risus vel nunc venenatis ultricies quis in lacus. Pellentesque vitae purus euismod, placerat risus non, ullamcorper augue. Quisque varius quam ligula, nec aliquet ex faucibus vitae. Quisque rhoncus sit amet leo tincidunt mattis. Cras id mauris eget purus pretium gravida sit amet eu augue. Aliquam dapibus odio augue, id lacinia velit pulvinar eu. - -Mauris fringilla, tellus nec pharetra iaculis, neque nisi ultrices massa, et tincidunt sem dui sed mi. Curabitur erat lorem, venenatis quis tempus lacinia, tempus sit amet nunc. Aliquam at neque ac metus commodo dictum quis vitae justo. Phasellus eget lacus tempus, blandit lorem vel, rutrum est. Aenean pharetra sem ut augue lobortis dignissim. Sed rhoncus at nulla id ultrices. Cras id condimentum felis. In suscipit luctus vulputate. Donec tincidunt lacus nec enim tincidunt sollicitudin ut quis enim. Nam at libero urna. Praesent sit amet massa vitae massa ullamcorper vehicula. - -Nullam bibendum augue ut turpis condimentum bibendum. Proin sit amet urna hendrerit, sodales tortor a, lobortis lectus. Integer sagittis velit turpis, et tincidunt nisi commodo eget. Duis tincidunt elit finibus accumsan cursus. Aenean dignissim scelerisque felis vel lacinia. Nunc lacinia maximus luctus. In hac habitasse platea dictumst. Vestibulum eget urna et enim tempor tempor. Nam feugiat, felis vel vestibulum tempus, orci justo viverra diam, id dapibus lorem justo in ligula. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ac pellentesque sem. Vestibulum lacinia magna dui, eu lacinia augue placerat et. Maecenas pulvinar congue est. Pellentesque commodo dui non pulvinar scelerisque. Etiam interdum est posuere sem bibendum, ac commodo magna dictum. Cras ipsum turpis, rhoncus nec posuere vitae, laoreet a arcu. Integer ac massa sit amet enim placerat lacinia sed ultrices arcu. Suspendisse sem nibh, luctus sit amet volutpat in, pellentesque eu metus. Ut gravida neque eget mi accumsan tempus. Nam sit amet aliquet nibh. - -Pellentesque a purus cursus nulla hendrerit congue quis et odio. Aenean hendrerit, leo ullamcorper sagittis hendrerit, erat dui molestie quam, sed condimentum lacus risus sed tellus. Morbi a dapibus lectus, ut feugiat ex. Phasellus pretium quam et sapien mollis, vel iaculis dui dignissim. Sed ullamcorper est turpis, a viverra lorem consectetur in. Aenean aliquet nibh non cursus rutrum. Suspendisse at tristique urna, id lobortis urna. In hac habitasse platea dictumst. Phasellus libero velit, rutrum sed tellus nec, dapibus tincidunt ligula. Quisque vel dui venenatis, consequat nisl ut, lacinia ipsum. Phasellus vitae magna pellentesque, lobortis est id, faucibus quam. Nam eleifend faucibus dui vel pellentesque. - -Etiam ut est non lacus tincidunt interdum. Maecenas sed massa urna. Quisque ut nibh tortor. Pellentesque felis ipsum, tempor finibus ipsum et, euismod pretium metus. Donec sit amet est ipsum. Quisque rhoncus justo non finibus elementum. Nulla nec lectus ac tortor placerat fringilla. Phasellus ac ultrices nunc, eu efficitur nisl. Nulla rhoncus nunc vitae ante dictum tincidunt. Nunc ultrices, massa sit amet malesuada dignissim, lectus lacus consequat sapien, non eleifend metus sem in eros. Phasellus mauris ante, dictum sit amet suscipit ac, rhoncus eget nisi. Phasellus at orci mollis, imperdiet neque eget, faucibus nulla. In at purus massa. Pellentesque quis rutrum lectus. - -Integer eu faucibus turpis, sit amet mollis massa. Vestibulum id nulla commodo, rutrum ipsum sed, semper ante. Phasellus condimentum orci nec nibh convallis, ac maximus orci ullamcorper. Maecenas vitae sollicitudin mi. Integer et finibus lectus, et condimentum ligula. Donec elementum tristique quam vitae dapibus. Morbi euismod ipsum in tristique ullamcorper. - -Duis fermentum non enim eu auctor. Quisque lacinia nibh vehicula nibh posuere, eu volutpat turpis facilisis. Ut ac faucibus nulla. Sed eleifend quis ex et pellentesque. Vestibulum sollicitudin in libero id fringilla. Phasellus dignissim purus consequat, condimentum dui sit amet, condimentum ante. Pellentesque ac consectetur massa, quis sagittis est. Nulla maximus tristique risus accumsan convallis. Curabitur imperdiet ac lacus a ultrices. Nulla facilisi. Sed quis quam quis lectus placerat lobortis vel sed turpis. In mollis dui id neque iaculis, ut aliquet tellus malesuada. Proin at luctus odio, vel blandit sapien. Praesent dignissim tortor vehicula libero fringilla, nec ultrices erat suscipit. Maecenas scelerisque purus in dapibus fermentum. - -Curabitur magna odio, mattis in tortor ut, porttitor congue est. Vestibulum mollis lacinia elementum. Fusce maximus erat vitae nunc rutrum lobortis. Integer ligula eros, auctor vel elit non, posuere luctus lacus. Maecenas quis auctor massa. Ut ipsum lacus, efficitur posuere euismod et, hendrerit efficitur est. Phasellus fringilla, quam id tincidunt pretium, nunc dui sollicitudin orci, eu dignissim nisi metus ut magna. Integer lobortis interdum dolor, non bibendum purus posuere et. Donec non lectus aliquet, pretium dolor eu, cursus massa. Sed ut dui sapien. In sed vestibulum massa. Pellentesque blandit, dui non sodales vehicula, orci metus mollis nunc, non pharetra ex tellus ac est. Mauris sagittis metus et fermentum pretium. Nulla facilisi. Quisque quis ante ut nulla placerat mattis ut quis nisi. - -Sed quis nulla ligula. Quisque dignissim ligula urna, sed aliquam purus semper at. Suspendisse potenti. Nunc massa lectus, pharetra vehicula arcu bibendum, imperdiet sodales ipsum. Nam ac sapien diam. Mauris iaculis fringilla mattis. Pellentesque tempus eros sit amet justo volutpat mollis. Phasellus ac turpis ipsum. Morbi vel ante elit. Aenean posuere quam consequat velit varius suscipit. Donec tempor quam ut nibh cursus efficitur. - -Morbi molestie dolor nec sem egestas suscipit. Etiam placerat pharetra lectus, et ullamcorper risus tristique in. Sed faucibus ullamcorper lectus eget fringilla. Maecenas malesuada hendrerit congue. Sed eget neque a erat placerat tincidunt. Aliquam vitae dignissim turpis. Fusce at placerat magna, a laoreet lectus. Maecenas a purus nec diam gravida fringilla. Nam malesuada euismod ante non vehicula. In faucibus bibendum leo, faucibus posuere nisl pretium quis. Fusce finibus bibendum finibus. Vestibulum eu justo maximus, hendrerit diam nec, dignissim sapien. Aenean dolor lacus, malesuada quis vestibulum ac, venenatis ac ipsum. Cras a est id nunc finibus facilisis. Cras lacinia neque et interdum vehicula. Suspendisse vulputate tellus elit, eget tempor dui finibus vel. - -Cras sed pretium odio. Proin hendrerit elementum felis in tincidunt. Nam sed turpis vel justo molestie accumsan condimentum eu nunc. Praesent lobortis euismod rhoncus. Nulla vitae euismod nibh, quis mattis mi. Fusce ultrices placerat porttitor. Duis sem ipsum, pellentesque sit amet odio a, molestie vulputate mauris. - -Duis blandit mollis ligula, sit amet mattis ligula finibus sit amet. Nunc a leo molestie, placerat diam et, vestibulum leo. Suspendisse facilisis neque purus, nec pellentesque ligula fermentum nec. Aenean malesuada mauris lorem, eu blandit arcu pulvinar quis. Duis laoreet urna lacus, non maximus arcu rutrum ultricies. Nulla augue dolor, suscipit eu mollis eu, aliquam condimentum diam. Ut semper orci luctus, pharetra turpis at, euismod mi. Nulla leo diam, finibus sit amet purus sed, maximus dictum lorem. Integer eu mi id turpis laoreet rhoncus. - -Integer a mauris tincidunt, finibus orci ut, pretium mauris. Nulla molestie nunc mi, id finibus lorem elementum sed. Proin quis laoreet ante. Integer nulla augue, commodo id molestie quis, rutrum ut turpis. Suspendisse et tortor turpis. Sed ut pharetra massa. Pellentesque elementum blandit sem, ut elementum tellus egestas a. Fusce eu purus nibh. - -Cras dignissim ligula scelerisque magna faucibus ullamcorper. Proin at condimentum risus, auctor malesuada quam. Nullam interdum interdum egestas. Nulla aliquam nisi vitae felis mollis dictum. Suspendisse dapibus consectetur tortor. Ut ut nisi non sem bibendum tincidunt. Vivamus suscipit leo quis gravida dignissim. - -Aliquam interdum, leo id vehicula mollis, eros eros rhoncus diam, non mollis ligula mi eu mauris. Sed ultrices vel velit sollicitudin tincidunt. Nunc auctor metus at ligula gravida elementum. Praesent interdum eu elit et mollis. Duis egestas quam sit amet velit dignissim consequat. Aliquam ac turpis nec nunc convallis sagittis. Fusce blandit, erat ac fringilla consectetur, dolor eros sodales leo, vel aliquet risus nisl et diam. Aliquam luctus felis vitae est eleifend euismod facilisis et lacus. Sed leo tellus, auctor eu arcu in, volutpat sagittis nisl. Pellentesque nisl ligula, placerat vel ullamcorper at, vulputate ac odio. Morbi ac faucibus orci, et tempus nulla. Proin rhoncus rutrum dolor, in venenatis mauris. Suspendisse a fermentum augue, non semper mi. Nunc eget pretium neque. Phasellus augue erat, feugiat ac aliquam congue, rutrum non sapien. Pellentesque ac diam gravida, consectetur felis at, ornare neque. - -Nullam interdum mattis sapien quis porttitor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus aliquet rutrum ipsum id euismod. Maecenas consectetur massa et mi porta viverra. Nunc quam nibh, dignissim vitae maximus et, ullamcorper nec lorem. Nunc vitae justo dapibus, luctus lacus vitae, pretium elit. Maecenas et efficitur leo. Curabitur mauris lectus, placerat quis vehicula vitae, auctor ut urna. Quisque rhoncus pharetra luctus. In hac habitasse platea dictumst. Integer sit amet metus nec eros malesuada aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi hendrerit mi ac leo aliquam, sit amet ultricies libero commodo. Mauris dapibus purus metus, sit amet viverra nibh imperdiet et. Nullam porta nulla tellus, quis vehicula diam imperdiet non. Vivamus enim massa, bibendum in fermentum in, ultrices at ex. - -Suspendisse fermentum id nibh eget accumsan. Duis dapibus bibendum erat ut sollicitudin. Aliquam nec felis risus. Pellentesque rhoncus ligula id sem maximus mollis sed nec massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ipsum ipsum, sodales sed enim id, convallis faucibus eros. Donec ultricies dictum tincidunt. Cras vitae nibh arcu. Pellentesque cursus, sapien nec consequat fermentum, ipsum ante suscipit dui, imperdiet hendrerit est nisl eu massa. Quisque vitae sem ligula. Aenean iaculis metus ut mauris interdum laoreet. Vivamus sed gravida dolor. - -Morbi nulla metus, porttitor sed eros sit amet, efficitur efficitur est. In vel nisl urna. Ut aliquet tellus at congue convallis. Phasellus imperdiet lobortis sollicitudin. Integer sodales, sem eu ultricies pharetra, erat erat porttitor odio, eget dapibus libero ipsum eget velit. Phasellus gravida nulla nisl, eu pharetra mi auctor vel. Sed blandit pharetra velit, ut egestas libero placerat non. Aliquam a interdum quam. Proin at tortor nec dui sollicitudin tempus sed vestibulum elit. Nunc non sollicitudin velit. - -Aenean consequat diam velit, sed rutrum tortor faucibus dictum. Quisque at semper augue. Duis ut est eget mi ornare bibendum id et ligula. Phasellus consequat tortor non leo pulvinar posuere. Proin vestibulum eleifend felis, in hendrerit tortor sollicitudin eu. Phasellus hendrerit, lacus vel laoreet interdum, dui tortor consequat justo, commodo ultricies arcu felis vitae enim. Vivamus eu sapien at leo suscipit rutrum eu at justo. Aenean et dolor a libero ullamcorper posuere. Integer laoreet placerat nisi in vulputate. Mauris laoreet eget risus sed cursus. Donec scelerisque neque a libero eleifend hendrerit. Nulla varius condimentum nunc sit amet fermentum. Aliquam lorem ex, varius nec mollis ut, ultrices in neque. Morbi sit amet porta leo. Integer iaculis fermentum lacus in vestibulum. - -Ut gravida, tellus ut maximus ultrices, erat est venenatis nisl, vitae pretium massa ex ac magna. Sed non purus eget ligula aliquet volutpat non quis arcu. Nam aliquam tincidunt risus, sit amet fringilla sapien vulputate ut. Mauris luctus suscipit pellentesque. Nunc porttitor dapibus ex quis tempus. Ut ullamcorper metus a eros vulputate, vitae viverra lectus convallis. Mauris semper imperdiet augue quis tincidunt. Integer porta pretium magna, sed cursus sem scelerisque sollicitudin. Nam efficitur, nibh pretium eleifend vestibulum, purus diam posuere sem, in egestas mauris augue sit amet urna. - -Vestibulum tincidunt euismod massa in congue. Duis interdum metus non laoreet fringilla. Donec at ligula congue, tincidunt nunc non, scelerisque nunc. Donec bibendum magna non est scelerisque feugiat at nec neque. Ut orci tortor, tempus eget massa non, dignissim faucibus dolor. Nam odio risus, accumsan pretium neque eget, accumsan dignissim dui. In ut neque auctor, scelerisque tellus sed, ullamcorper nisi. Suspendisse varius cursus quam at hendrerit. Vivamus elit libero, sagittis vitae sem ac, vulputate iaculis ligula. - -Sed lobortis laoreet purus sit amet rutrum. Pellentesque feugiat non leo vel lacinia. Quisque feugiat nisl a orci bibendum vestibulum. In et sollicitudin urna. Morbi a arcu ac metus faucibus tempus. Nam eu imperdiet sapien, suscipit mattis tortor. Aenean blandit ipsum nisi, a eleifend ligula euismod at. Integer tincidunt pharetra felis, mollis placerat mauris hendrerit at. Curabitur convallis, est sit amet luctus volutpat, massa lacus cursus augue, sed eleifend magna quam et risus. Aliquam lobortis tincidunt metus vitae porttitor. Suspendisse potenti. Aenean ullamcorper, neque id commodo luctus, nulla nunc lobortis quam, id dapibus neque dui nec mauris. Etiam quis lorem quis elit commodo ornare. Ut pharetra purus ultricies enim ultrices efficitur. Proin vehicula tincidunt molestie. Mauris et placerat sem. - -Aliquam erat volutpat. Suspendisse velit turpis, posuere ac lacus eu, lacinia laoreet velit. Sed interdum felis neque, id blandit sem malesuada sit amet. Ut sagittis justo erat, efficitur semper orci tempor sed. Donec enim massa, posuere varius lectus egestas, pellentesque posuere mi. Cras tincidunt ut libero sed mattis. Suspendisse quis magna et tellus posuere interdum vel at purus. Pellentesque fringilla tristique neque, id aliquet tellus ultricies non. Duis ut tellus vel odio lobortis vulputate. - -Integer at magna ac erat convallis vestibulum. Sed lobortis porttitor mauris. Fusce varius lorem et volutpat pulvinar. Aenean ac vulputate lectus, vitae consequat velit. Suspendisse ex dui, varius ut risus ut, dictum scelerisque sem. Vivamus urna orci, volutpat ut convallis ac, venenatis vitae urna. In hac habitasse platea dictumst. Etiam eu purus arcu. Aenean vulputate leo urna, vel tristique dui sagittis euismod. Suspendisse non tellus efficitur ante rhoncus volutpat at et sapien. - -Sed dapibus accumsan porttitor. Phasellus facilisis lectus finibus ligula dignissim, id pulvinar lectus feugiat. Nullam egestas commodo nisi posuere aliquet. Morbi sit amet tortor sagittis, rutrum dui nec, dapibus sapien. Sed posuere tortor tortor, interdum auctor magna varius vitae. Vestibulum id sagittis augue. Curabitur fermentum arcu sem, eu condimentum quam rutrum non. Phasellus rutrum nibh quis lectus rhoncus pretium. Curabitur dictum interdum elit. Vestibulum maximus sodales imperdiet. Mauris auctor nec purus sed venenatis. In in urna purus. - -Duis placerat molestie suscipit. Morbi a elit id purus efficitur consequat. Nunc ac commodo turpis. Etiam sit amet lacus a ipsum tempus venenatis sed vel nibh. Duis elementum aliquam mi sed tristique. Morbi ligula tortor, semper ac est vel, lobortis maximus erat. Curabitur ipsum felis, laoreet vel condimentum eget, ullamcorper sit amet mauris. Nulla facilisi. Nam at purus sed mi egestas placerat vitae vel magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse at dignissim diam. Phasellus consectetur eget neque vel viverra. Donec sollicitudin mattis dolor vel malesuada. Vivamus vehicula leo neque, vitae fermentum leo posuere et. Praesent dui est, finibus sit amet tristique quis, pharetra vel nibh. - -Duis nulla leo, accumsan eu odio eget, sagittis semper orci. Quisque ullamcorper ligula quam, commodo porttitor mauris ullamcorper eu. Cras varius sagittis felis in aliquam. Duis sodales risus ac justo vehicula, nec mattis diam lacinia. Cras eget lectus ipsum. Ut commodo, enim vitae malesuada hendrerit, ex dolor egestas lectus, sit amet hendrerit metus diam nec est. Vestibulum tortor metus, lobortis sit amet ante eget, tempor molestie lacus. In molestie et urna et semper. Mauris mollis, sem non hendrerit condimentum, sapien nisi cursus est, non suscipit quam justo non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam enim est, porta ac feugiat vitae, rutrum in lorem. Duis vehicula tortor ut posuere maximus. - -Nullam vestibulum non tellus sed commodo. Quisque mattis elit sit amet sapien sollicitudin, ut condimentum nisl congue. Aenean sagittis massa vel elit faucibus fermentum. Donec tincidunt nisi nec nisl sodales pellentesque. Mauris congue congue ligula ut suscipit. Vivamus velit tortor, tempor et gravida eget, fermentum sit amet ante. Nullam fringilla, lorem at ultrices cursus, urna neque ornare dolor, eu lacinia orci enim sed nibh. Ut a ullamcorper lectus, id mattis purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus sollicitudin posuere. Nunc at augue lacus. Aenean efficitur leo sit amet lacinia efficitur. - -Quisque venenatis quam mi, in pharetra odio vulputate eu. In vel nisl pulvinar, pulvinar ligula ut, sodales risus. Sed efficitur lectus at vestibulum tincidunt. Vestibulum eu ullamcorper elit. Fusce vestibulum magna enim, et tempor lacus posuere vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer leo elit, luctus nec mattis sit amet, sollicitudin in turpis. - -Proin convallis venenatis leo, vitae tristique erat iaculis nec. Nulla facilisi. Duis porttitor, sapien et bibendum vulputate, sem libero sodales lacus, non malesuada felis erat ut libero. Nam non felis semper, finibus est a, mattis mauris. Praesent nec eros quam. Nulla hendrerit, augue consectetur eleifend ultricies, purus mi condimentum nulla, eget dapibus est nunc sed libero. Nullam elementum dui erat, vitae luctus libero sollicitudin et. Nulla odio magna, placerat in augue eu, dapibus imperdiet odio. Suspendisse imperdiet metus sit amet rhoncus dapibus. Cras at enim et urna vehicula cursus eu a mauris. Integer magna ante, eleifend ac placerat vitae, porta at nisi. Cras eget malesuada orci. Curabitur nunc est, vulputate id viverra et, dignissim sed odio. Curabitur non mattis sem. Sed bibendum, turpis vitae vehicula faucibus, nunc quam ultricies lectus, vitae viverra felis turpis at libero. - -Nullam ut egestas ligula. Proin hendrerit justo a lectus commodo venenatis. Nulla facilisi. Ut cursus lorem quis est bibendum condimentum. Aenean in tristique odio. Fusce tempor hendrerit ipsum. Curabitur mollis felis justo, quis dapibus erat auctor vel. Sed augue lectus, finibus ut urna quis, ullamcorper vestibulum dui. Etiam molestie aliquam tempor. Integer mattis sollicitudin erat, et tristique elit varius vel. Mauris a ex justo. - -Nam eros est, imperdiet non volutpat rutrum, pellentesque accumsan ligula. Duis sit amet turpis metus. Aenean in rhoncus metus, ac fringilla ex. Suspendisse condimentum egestas purus, ut pharetra odio vulputate vel. Duis tincidunt massa a placerat ultrices. Mauris ultricies nibh sit amet condimentum malesuada. Duis tincidunt id ipsum sed congue. - -Praesent eu ex augue. Nullam in porta ligula. In tincidunt accumsan arcu, in pellentesque magna tristique in. Mauris eleifend libero ac nisl viverra faucibus. Nam sollicitudin dolor in commodo hendrerit. Cras at orci metus. Ut quis laoreet orci. Vivamus ultrices leo pellentesque tempor aliquet. Maecenas ut eros vitae purus placerat vestibulum. Etiam vitae gravida dolor, quis rhoncus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. - -Suspendisse fringilla lacinia sagittis. Integer tincidunt consectetur tristique. Morbi non orci convallis, congue sapien quis, vulputate nunc. Donec a libero vel magna elementum facilisis non quis mi. Mauris posuere tellus non ipsum ultrices elementum. Vivamus massa velit, facilisis quis placerat aliquet, aliquet nec leo. Praesent a maximus sem. Sed neque elit, feugiat vel quam non, molestie sagittis nunc. Etiam luctus nunc ac mauris scelerisque, nec rhoncus lacus convallis. Nunc pharetra, nunc ac pulvinar aliquam, ex ipsum euismod augue, nec porttitor lacus turpis vitae neque. Fusce bibendum odio id tortor faucibus pellentesque. Sed ac porta nibh, eu gravida erat. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis ullamcorper felis. Nulla mattis sagittis ante ac tincidunt. Integer ac felis efficitur, viverra libero et, facilisis ligula. Suspendisse a metus a massa rhoncus posuere. Phasellus suscipit ligula ut lacus facilisis, ac pellentesque ex tempor. Quisque consectetur massa mi, ac molestie libero dictum quis. Proin porttitor ligula quis erat tincidunt venenatis. Proin congue nunc sed elit gravida, nec consectetur lectus sodales. Etiam tincidunt convallis ipsum at vestibulum. Quisque maximus enim et mauris porttitor, et molestie magna tristique. Morbi vitae metus elit. Maecenas sed volutpat turpis. Aliquam vitae dolor vestibulum, elementum purus eget, dapibus nibh. Nullam egestas dui ac rutrum semper. - -Etiam hendrerit est metus, et condimentum metus aliquam ac. Pellentesque id neque id ipsum rhoncus vulputate. Aliquam erat nisl, posuere sit amet ligula ac, fermentum blandit felis. Vivamus fermentum mi risus, non lacinia purus viverra id. Aenean ac sapien consequat, finibus mauris nec, porta sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis consectetur ex, dignissim bibendum nulla. Phasellus ac libero at quam vehicula euismod non eu leo. Phasellus a sapien augue. - -Maecenas ligula dui, bibendum vitae mauris et, auctor laoreet felis. Duis non libero a mi semper mattis. Quisque consequat luctus massa, quis tristique eros auctor feugiat. Maecenas sodales euismod neque vitae facilisis. Nullam laoreet imperdiet velit at pellentesque. Etiam massa odio, facilisis a consequat vitae, placerat vel magna. Nunc sagittis eros nec urna fringilla, pulvinar vestibulum nibh scelerisque. Sed magna metus, cursus eu consequat et, pharetra a est. Suspendisse elementum neque a dui malesuada lacinia. Donec sed ipsum volutpat, cursus urna id, ullamcorper arcu. Maecenas laoreet nisl eget velit egestas sollicitudin. Etiam nisl turpis, mollis id dignissim vitae, tristique vehicula ante. Maecenas eget placerat est, at rutrum augue. Vivamus faucibus lacinia ullamcorper. Sed pulvinar urna sodales ante sodales, at gravida leo dictum. - -Morbi maximus, quam a lobortis bibendum, enim felis varius elit, ac vehicula elit nisl ut lacus. Quisque ut arcu augue. Praesent id turpis quam. Sed sed arcu eros. Maecenas at cursus lorem, ac eleifend nisi. Fusce mattis felis at commodo pharetra. Praesent ac commodo ipsum. Quisque finibus et eros vitae tincidunt. In hac habitasse platea dictumst. Praesent purus ipsum, luctus lobortis ornare quis, auctor eget justo. Nam vel enim sollicitudin, faucibus tortor eu, sagittis eros. Ut nec consectetur erat. Donec ultricies malesuada ligula, a hendrerit sapien volutpat in. Maecenas sed enim vitae sapien pulvinar faucibus. - -Proin semper nunc nibh, non consequat neque ullamcorper vel. Maecenas lobortis sagittis blandit. Aenean et arcu ultricies turpis malesuada malesuada. Ut quam ex, laoreet ut blandit cursus, feugiat vitae dolor. Etiam ex lacus, scelerisque vel erat vel, efficitur tincidunt magna. Morbi tristique lacinia dolor, in egestas magna ultrices vitae. Integer ultrices leo ac tempus venenatis. Praesent ac porta tortor. Vivamus ornare blandit tristique. Nulla rutrum finibus pellentesque. In non dui elementum, fermentum ipsum vel, varius magna. Pellentesque euismod tortor risus, ac pellentesque nisl faucibus eget. - -Vivamus eu enim purus. Cras ultrices rutrum egestas. Sed mollis erat nibh, at posuere nisl luctus nec. Nunc vulputate, sapien id auctor molestie, nisi diam tristique ante, non convallis tellus nibh at orci. Morbi a posuere purus, in ullamcorper ligula. Etiam elementum sit amet dui imperdiet iaculis. Proin vitae tincidunt ipsum, sit amet placerat lectus. Curabitur commodo sapien quam, et accumsan lectus fringilla non. Nullam eget accumsan enim, ac pharetra mauris. Sed quis tristique velit, vitae commodo nisi. Duis turpis dui, maximus ut risus at, finibus consequat nunc. Maecenas sed est accumsan, aliquet diam in, facilisis risus. Curabitur vehicula rutrum auctor. Nam iaculis risus pulvinar maximus viverra. Nulla vel augue et ex sagittis blandit. - -Ut sem nulla, porta ac ante ac, posuere laoreet eros. Donec sodales posuere justo a auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras mollis at orci hendrerit porta. Nullam sodales tortor tortor, non lacinia diam finibus id. Duis libero orci, suscipit ac odio et, dictum consequat ipsum. Pellentesque eu ligula sagittis, volutpat eros at, lacinia lorem. Cras euismod tellus in iaculis tempor. Quisque accumsan, magna a congue venenatis, ante ipsum aliquam lectus, at egestas enim nunc at justo. Quisque sem purus, viverra ut tristique ut, maximus id enim. Etiam quis placerat sem. In sollicitudin, lacus eu rutrum mollis, nulla eros luctus elit, vel dapibus urna purus nec urna. Phasellus egestas massa quam, ac molestie erat hendrerit a. Praesent ultrices neque ut turpis molestie auctor. Etiam molestie placerat purus, et euismod erat aliquam in. Morbi id suscipit justo. - -Proin est ante, consequat at varius a, mattis quis felis. Sed accumsan nibh sit amet ipsum elementum posuere. Vestibulum bibendum id diam sit amet gravida. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi nec dolor vel ipsum dignissim hendrerit vel non ipsum. Praesent facilisis orci quis elit auctor lobortis. Phasellus cursus risus lectus, vel lobortis libero dapibus in. Quisque tristique tempus leo a pulvinar. Pellentesque a magna tincidunt, pellentesque massa nec, laoreet orci. Morbi congue ornare dolor quis commodo. Phasellus massa nisi, tincidunt at eros dictum, hendrerit lobortis urna. Maecenas porta, magna id mattis molestie, nibh tellus lobortis sem, eget tincidunt ipsum quam eu turpis. - -Ut gravida orci risus, vel rutrum mauris vehicula id. Etiam bibendum, neque a placerat condimentum, ex orci imperdiet lectus, quis dapibus arcu lacus eget lectus. Sed consequat non mi sit amet venenatis. Fusce vestibulum erat libero, eget hendrerit risus vulputate sollicitudin. Integer sed eleifend felis. Donec commodo, sem eu mattis placerat, urna odio aliquam tellus, et laoreet justo tellus eget erat. Fusce sed suscipit tortor. Nam hendrerit nibh ac nunc auctor lacinia. Pellentesque placerat condimentum ipsum, eget semper tortor hendrerit vel. Nullam non urna eu lacus pellentesque congue ut id eros. - -Nunc finibus leo in rhoncus tristique. Sed eu ipsum nec nisl egestas faucibus eget a felis. Pellentesque vitae nisi in nulla accumsan fermentum. Sed venenatis feugiat eleifend. Fusce porttitor varius placerat. Aliquam aliquet lacus sit amet mattis mollis. Sed vel nulla quis dolor suscipit vehicula ac viverra lorem. Duis viverra ipsum eget nulla ullamcorper fermentum. Mauris tincidunt arcu quis quam fringilla ornare. Donec et iaculis tortor. Nam ultricies libero vel ipsum aliquet efficitur. Morbi eget dolor aliquam, tempus sapien eget, viverra ante. Donec varius mollis ex, sed efficitur purus euismod interdum. Quisque vel sapien non neque tincidunt semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Suspendisse sit amet purus leo. Fusce lectus lorem, aliquam ac nulla eget, imperdiet ornare eros. Nullam sem augue, varius in nisi non, sollicitudin pellentesque ante. Etiam eu odio condimentum, tempor libero et, egestas arcu. Cras pellentesque eleifend aliquet. Pellentesque non blandit ligula. Ut congue viverra rhoncus. Phasellus mattis mi ac eros placerat, eu feugiat tellus ultrices. Aenean mollis laoreet libero eu imperdiet. Cras sed pulvinar mi, ac vehicula ligula. Vestibulum sit amet ex massa. In a egestas eros. - -Mauris pretium ipsum risus, venenatis cursus ante imperdiet id. Praesent eu turpis nec risus feugiat maximus ullamcorper ac lectus. Integer placerat at mi vel dapibus. Vestibulum fermentum turpis sit amet turpis viverra, id aliquet diam suscipit. Nam nec ex sed ante ullamcorper pharetra quis sit amet risus. Sed ac faucibus velit, id feugiat nibh. Nullam eget ipsum ex. Vivamus tincidunt non nunc non faucibus. Quisque bibendum viverra facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at nisi hendrerit quam suscipit egestas. Curabitur laoreet maximus ultricies. Duis ut tellus ac augue molestie dictum. - -Suspendisse rhoncus iaculis erat, ut ullamcorper est tristique eget. Donec auctor nec risus at gravida. Vivamus volutpat vulputate tellus, vel ultricies eros suscipit eget. Ut pulvinar id mi eu tempus. Morbi malesuada augue in dui varius, nec blandit neque vehicula. Donec ornare nec nisl in mollis. Morbi enim nisi, rhoncus nec est id, dapibus tempus urna. Ut id elit a felis vestibulum consectetur. Duis lectus quam, pharetra sit amet diam sed, posuere vestibulum erat. Fusce vitae maximus massa. Nullam id metus tempus, iaculis risus eu, lobortis urna. Quisque in congue urna. Pellentesque placerat neque in augue dapibus, non varius ex malesuada. Curabitur ut eleifend libero. Fusce vitae ligula luctus, fermentum enim vitae, ultrices erat. - -Sed viverra augue turpis, scelerisque egestas sapien mattis eu. Duis laoreet magna at ex pharetra dapibus. Praesent eget odio vel quam venenatis dictum. Nulla in sollicitudin dolor. Mauris lobortis nec eros vel rhoncus. Vestibulum porta viverra venenatis. Curabitur vel scelerisque quam, a egestas velit. Praesent volutpat tincidunt magna at laoreet. - -Cras nec lorem odio. Pellentesque quis dui urna. Praesent at tellus ac lectus scelerisque placerat nec eu risus. Vestibulum sit amet mattis ligula. Vivamus sed nisi at leo elementum accumsan at sit amet arcu. Aenean mattis tellus nec leo gravida, eget hendrerit nisl faucibus. Mauris pellentesque luctus condimentum. Maecenas pretium sapien nunc, eget commodo dolor maximus id. Mauris vestibulum accumsan massa a dictum. Phasellus interdum quam ligula, ut maximus diam blandit aliquam. Nunc vitae ex eu erat condimentum consectetur. Maecenas interdum condimentum volutpat. - -Donec et enim a libero rutrum laoreet. Praesent a condimentum sem, at tincidunt quam. In vel molestie risus. Sed urna dui, molestie vitae mollis laoreet, tempor quis lectus. Praesent vitae auctor est, et aliquet nunc. Curabitur vulputate blandit nulla, at gravida metus. Maecenas gravida dui eu iaculis tristique. Pellentesque posuere turpis nec auctor eleifend. Suspendisse bibendum diam eu tellus lobortis, et laoreet quam congue. In hac habitasse platea dictumst. Morbi dictum neque velit, eget rutrum eros ultrices sit amet. - -Phasellus fermentum risus pharetra consectetur bibendum. Donec magna tortor, lacinia vitae nibh quis, aliquet pretium lorem. Donec turpis nisi, pretium eu enim volutpat, mattis malesuada augue. Nullam vel tellus iaculis, sollicitudin elit eget, tincidunt lacus. Fusce elementum elementum felis et iaculis. Suspendisse porta eros nec neque malesuada, in malesuada ante sollicitudin. Vivamus bibendum viverra molestie. - -Integer feugiat, erat nec convallis aliquam, velit felis congue erat, molestie eleifend tellus erat in tellus. Nunc et justo purus. Donec egestas fermentum dui non feugiat. Quisque in sapien sagittis, gravida quam id, iaculis lectus. Cras sagittis rhoncus bibendum. Fusce quis metus in velit scelerisque tincidunt at non ipsum. Vivamus efficitur ante eu odio vulputate, vitae ultricies risus vehicula. Proin eget odio eu sem tincidunt feugiat vel id lorem. - -Vestibulum sit amet nulla dignissim, euismod mi in, fermentum tortor. Donec ut aliquet libero, lacinia accumsan velit. Donec et nulla quam. Nullam laoreet odio nec nunc imperdiet, a congue eros venenatis. Quisque nec tellus sit amet neque interdum posuere. Duis quis mi gravida, tincidunt diam convallis, ultricies augue. Mauris consequat risus non porttitor congue. Ut in ligula consequat, viverra nunc a, eleifend enim. Duis ligula urna, imperdiet nec facilisis et, ornare eu ex. Proin lobortis lectus a lobortis porttitor. Nulla leo metus, egestas eu libero sed, pretium faucibus felis. Vestibulum non sem tortor. Nam cursus est leo. Vivamus luctus enim odio, non interdum sem dapibus a. Aenean accumsan consequat lectus in imperdiet. - -Donec vehicula laoreet ipsum in posuere. Quisque vel quam imperdiet, sollicitudin nisi quis, suscipit velit. Morbi id sodales mauris. Curabitur tellus arcu, feugiat sed dui sit amet, sodales sagittis libero. Aenean vel suscipit metus, non placerat leo. Vestibulum quis nulla elit. Proin scelerisque non ante ut commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed non urna dolor. Suspendisse convallis mi porta pulvinar ultrices. Suspendisse quam ipsum, hendrerit non scelerisque molestie, interdum dictum nunc. Morbi condimentum condimentum turpis eu luctus. Pellentesque sagittis sollicitudin odio, sed ultricies felis ornare sit amet. Sed ultrices ex leo, a tincidunt nisl gravida sed. Nullam ornare accumsan porta. Praesent consectetur id est nec sollicitudin. - -In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed ultrices nibh. Duis accumsan suscipit eros, a dictum odio tempus sit amet. Aenean imperdiet erat ac lacus finibus, scelerisque cursus massa imperdiet. Mauris molestie risus ut lacinia posuere. Nulla et sodales purus. Maecenas orci erat, placerat in tristique quis, placerat in mi. - -Donec sollicitudin pellentesque odio in feugiat. Morbi eu dolor ut mauris congue sollicitudin. Aliquam erat volutpat. Nulla id varius dui. Curabitur finibus urna ante, consectetur interdum nisi volutpat a. Quisque quis mi tristique, consequat tellus eget, rutrum sapien. Vivamus vitae tellus vulputate, rutrum ex eu, vulputate sem. Suspendisse viverra lorem tellus, vel interdum orci gravida quis. Ut laoreet arcu at mi ullamcorper finibus. Duis porta sagittis vestibulum. Sed commodo nisl vitae urna sollicitudin, nec lacinia est sodales. Curabitur imperdiet sodales dui sed iaculis. Sed ac tellus maximus, eleifend quam sit amet, feugiat elit. Aenean viverra, dui at mattis varius, est odio vestibulum sapien, sit amet mollis libero massa nec velit. Etiam quis sodales justo. - -Ut ultricies, sem eget sodales feugiat, nunc arcu congue elit, ac tempor justo massa nec purus. Maecenas enim nunc, pharetra eget dictum sit amet, tempus pellentesque velit. Suspendisse venenatis ligula in nulla mattis, et imperdiet ex tincidunt. Etiam vulputate, tellus et ultrices suscipit, enim velit laoreet massa, vitae congue odio enim ac urna. Morbi quam lorem, iaculis ac varius sagittis, euismod quis dolor. In ut dui eu purus feugiat consectetur. Vestibulum cursus velit quis lacus pellentesque iaculis. Cras in risus sed mauris porta rutrum. Nulla facilisi. Nullam eu bibendum est, non pellentesque lectus. Sed imperdiet feugiat lorem, quis convallis ante auctor in. Maecenas justo magna, scelerisque sit amet tellus eget, varius elementum risus. Duis placerat et quam sed varius. - -Duis nec nibh vitae nibh dignissim mollis quis sed felis. Curabitur vitae quam placerat, venenatis purus ut, euismod nisl. Curabitur porttitor nibh eu pulvinar ullamcorper. Suspendisse posuere nec ipsum ac dapibus. Cras convallis consectetur urna. Phasellus a nibh in dolor lacinia posuere id eget augue. In eu pharetra lorem, vitae cursus lacus. Aliquam tincidunt nibh lectus. Aenean facilisis ultricies posuere. Sed ut placerat orci. Curabitur scelerisque gravida blandit. Maecenas placerat ligula eget suscipit fringilla. Mauris a tortor justo. Aliquam hendrerit semper mollis. Phasellus et tincidunt libero. Etiam vel quam libero. - -Quisque aliquet tempor ex. Ut ante sem, vehicula at enim vel, gravida porta elit. Etiam vitae lacus a neque lobortis consectetur. Mauris sed interdum odio. Mauris elementum ex blandit tempor cursus. Integer in enim in leo viverra elementum. Fusce consectetur metus et sem rutrum, mattis euismod diam semper. Nunc sed ipsum vel urna consequat vehicula. Donec cursus pretium lorem, vestibulum pretium felis commodo sit amet. Nam blandit felis enim, eget gravida ex faucibus a. In nec neque massa. Etiam laoreet posuere ipsum. Praesent volutpat nunc dolor, ac vulputate magna facilisis non. Aenean congue turpis vel lectus sollicitudin tristique. Sed nec consequat purus, non vehicula quam. Etiam ultricies, est ac dictum tincidunt, turpis turpis pretium massa, a vulputate libero justo at nibh. - -Aliquam erat volutpat. Cras ultrices augue ac sollicitudin lobortis. Curabitur et aliquet purus. Duis feugiat semper facilisis. Phasellus lobortis cursus velit, a sollicitudin tortor. Nam feugiat sapien non dapibus condimentum. Morbi at mi bibendum, commodo quam at, laoreet enim. Integer eu ultrices enim. Sed vestibulum eu urna ut dictum. Curabitur at mattis leo, sed cursus massa. Aliquam porttitor, felis quis fermentum porttitor, justo velit feugiat nulla, eget condimentum sem dui ut sapien. - -In fringilla elit eu orci aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eget fringilla tellus. Curabitur fermentum, mi et condimentum suscipit, elit neque bibendum dui, et hendrerit nunc metus id ipsum. Morbi placerat mi in hendrerit congue. Ut feugiat mauris eget scelerisque viverra. Vivamus sit amet erat dictum, sagittis lectus nec, pulvinar lorem. Sed non enim ac dui sollicitudin aliquet. Quisque ut lacus dolor. Fusce hendrerit malesuada euismod. Nulla faucibus vel mauris eu mollis. Mauris est diam, fringilla ac arcu feugiat, efficitur volutpat turpis. Aliquam venenatis cursus massa sed porttitor. Ut ac finibus enim, in tincidunt sapien. - -Nunc faucibus semper turpis a lacinia. Phasellus gravida, libero vel pulvinar ornare, ex sem tincidunt lectus, sit amet convallis augue risus at tortor. Quisque sit amet ipsum id nulla posuere vestibulum. Pellentesque scelerisque mauris vel leo viverra sodales. Nulla viverra aliquam ex, ut rutrum enim fermentum venenatis. Aenean eget dapibus ex, eget faucibus metus. Vestibulum volutpat leo in diam semper, eget porta magna suscipit. Sed sit amet nulla blandit, aliquam dolor ac, gravida velit. Sed vel velit viverra, maximus est id, convallis justo. - -Curabitur nulla ante, vulputate at libero vel, ullamcorper rutrum nibh. Pellentesque porttitor eu mauris id mattis. Duis vulputate augue elit, eget interdum justo pretium vel. Maecenas eu vulputate arcu, eget posuere purus. Suspendisse viverra a velit dictum eleifend. Suspendisse vitae dapibus diam. Donec vehicula justo in ante interdum, eu luctus diam placerat. Vivamus convallis ipsum eu orci suscipit, sed fermentum enim euismod. Maecenas faucibus elit vitae ex ornare tristique. Donec vestibulum nec elit sit amet porttitor. Aenean tempor lectus eget tortor hendrerit luctus. Nullam interdum vitae lectus vel feugiat. Cras in risus non magna consectetur lobortis. Sed faucibus enim quis gravida convallis. - -Phasellus eget massa sit amet libero ultrices suscipit. Vivamus at risus sapien. Nam mollis nunc eget velit dictum maximus. Sed pellentesque, nunc ac fringilla lacinia, quam enim mattis ex, sed euismod tortor metus eu neque. Ut mattis nisl ut lectus rhoncus, sodales bibendum eros porta. Nulla porttitor enim nec diam sagittis, eget porta velit efficitur. Vestibulum ultricies eros neque. Phasellus rutrum suscipit enim, in interdum ante gravida vitae. Sed in sagittis diam, non commodo velit. - -Morbi hendrerit odio orci, nec tincidunt odio rhoncus nec. Mauris neque velit, vehicula a lorem at, suscipit tristique dui. Sed finibus, nisl in mattis convallis, turpis neque sodales lacus, eu porta enim magna non diam. Nam commodo sodales risus consectetur malesuada. In eget elementum justo. Phasellus sit amet massa imperdiet, dapibus nunc sit amet, suscipit orci. Fusce condimentum laoreet feugiat. Ut ut viverra ante. Praesent bibendum interdum commodo. Nulla mollis nisi a est ornare volutpat. Sed at ligula eu nisi dapibus tempus. Proin cursus vestibulum justo, nec efficitur justo dignissim vel. Nunc quis maximus eros. - -Cras viverra, diam a tristique mattis, libero felis vulputate tellus, a ornare felis leo a dui. Nulla ante nulla, finibus ut tellus ut, blandit pharetra nibh. Proin eleifend fermentum ex, eget auctor libero vulputate in. Nullam ultricies, mauris placerat pretium placerat, leo urna lobortis leo, vel placerat arcu libero sed mauris. Aliquam mauris ligula, ornare at urna at, eleifend gravida ligula. Vestibulum consectetur ut nulla non scelerisque. Donec ornare, sem nec elementum aliquam, urna nulla bibendum metus, eu euismod dui ligula ac est. Fusce laoreet erat eu ex lobortis, quis bibendum ligula interdum. Sed vel mi erat. Vivamus id lacus ac enim mattis tempor. Nunc ultricies pellentesque enim sed euismod. Fusce tincidunt convallis elit quis aliquam. Mauris nulla ipsum, sollicitudin quis diam ac, feugiat volutpat tellus. In nibh nibh, vulputate quis tincidunt quis, pulvinar eget magna. Pellentesque quis finibus dolor. Suspendisse viverra vitae lectus non eleifend. - -Nunc ut orci et sapien maximus semper. Nulla dignissim sem urna, ac varius lectus ultricies id. Quisque aliquet pulvinar pretium. In ultricies molestie tellus vehicula porta. Nam enim lorem, aliquam eget ex et, hendrerit volutpat quam. Maecenas diam lacus, pellentesque eget tempus ac, pharetra eu elit. Donec vel eros a sem facilisis vulputate. Nullam ac nisi vulputate, laoreet nisl ac, eleifend sem. Nullam mi massa, rhoncus sed pharetra interdum, tincidunt eget nunc. Aliquam viverra mattis posuere. Mauris et dui sed nisl sollicitudin fermentum quis ut arcu. Nam placerat eget orci at tincidunt. Curabitur vel turpis metus. Phasellus nibh nulla, fermentum scelerisque sem vel, gravida tincidunt velit. Pellentesque vel quam tempor, finibus massa pellentesque, condimentum dui. - -Donec at mattis neque. Etiam velit diam, consequat auctor mauris id, hendrerit faucibus metus. Maecenas ullamcorper eros a est sodales, ac consectetur odio scelerisque. Donec leo metus, imperdiet at pellentesque vel, feugiat id erat. Suspendisse at magna enim. Vestibulum placerat sodales lorem id sollicitudin. Aenean at euismod ligula, eget mollis diam. Phasellus pulvinar, orci nec pretium condimentum, est erat facilisis purus, quis feugiat augue elit aliquam nulla. Aenean vitae tortor id risus congue tincidunt. Sed dolor enim, mattis a ullamcorper id, volutpat ac leo. - -Proin vehicula feugiat augue, id feugiat quam sodales quis. Donec et ultricies massa, a lacinia nulla. Duis aliquam augue ornare euismod viverra. Ut lectus risus, rutrum sit amet efficitur a, luctus nec nisl. Cras volutpat ullamcorper congue. Sed vitae odio metus. Phasellus aliquet euismod varius. - -Nullam sem ex, malesuada ut magna ut, pretium mollis arcu. Nam porttitor eros cursus mi lacinia faucibus. Suspendisse aliquet eleifend iaculis. Maecenas sit amet viverra tortor. Nunc a mollis risus. Etiam tempus dolor in tortor malesuada mattis. Ut tincidunt venenatis est sit amet dignissim. Vestibulum massa enim, tristique sed scelerisque eu, fringilla ac velit. Donec efficitur quis urna sit amet malesuada. Vestibulum consequat ac ligula in dapibus. Maecenas massa massa, molestie non posuere nec, elementum ut magna. In nisi erat, mollis non venenatis eu, faucibus in justo. Morbi gravida non ex non egestas. Pellentesque finibus laoreet diam, eu commodo augue congue vitae. - -Aenean sem mi, ullamcorper dapibus lobortis vitae, interdum tincidunt tortor. Vivamus eget vulputate libero. Ut bibendum posuere lectus, vel tincidunt tortor aliquet at. Phasellus malesuada orci et bibendum accumsan. Aliquam quis libero vel leo mollis porta. Sed sagittis leo ac lacus dictum, ac malesuada elit finibus. Suspendisse pharetra luctus commodo. Vivamus ultricies a odio non interdum. Vivamus scelerisque tincidunt turpis quis tempor. Pellentesque tortor ligula, varius non nunc eu, blandit sollicitudin neque. Nunc imperdiet, diam et tristique luctus, ipsum ex condimentum nunc, sit amet aliquam justo velit sed libero. Duis vel suscipit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tincidunt neque vel massa ultricies, id dictum leo consequat. Curabitur lobortis ultricies tellus, eget mattis nisl aliquam sit amet. - -Proin at suscipit justo. Vivamus ut vestibulum nisl. Pellentesque enim odio, pharetra non magna sed, efficitur auctor magna. Praesent tincidunt ante quis ante hendrerit viverra. Pellentesque vel ipsum id magna vulputate efficitur. Sed nec neque accumsan, pulvinar sapien quis, euismod mauris. Donec condimentum laoreet sapien quis gravida. Quisque sed mattis purus. Vestibulum placerat vel neque maximus scelerisque. - -Vestibulum mattis quam quis efficitur elementum. Duis dictum dolor ac scelerisque commodo. Fusce sollicitudin nisi sit amet dictum placerat. Suspendisse euismod pharetra eleifend. In eros nisl, porttitor sed mauris at, consectetur aliquet mauris. Donec euismod viverra neque sed fermentum. Phasellus libero magna, accumsan ut ultricies vitae, dignissim eget metus. Donec tellus turpis, interdum eget maximus nec, hendrerit eget massa. Curabitur auctor ligula in iaculis auctor. In ultrices quam suscipit cursus finibus. Aenean id mi at dolor interdum iaculis vitae ut lorem. Nullam sed nibh fringilla, lacinia odio nec, placerat erat. In dui libero, viverra ac viverra ac, pellentesque sit amet turpis. - -Nulla in enim ex. Sed feugiat est et consectetur venenatis. Cras varius facilisis dui vel convallis. Vestibulum et elit eget tellus feugiat pellentesque. In ut ante eu purus aliquet posuere. Nulla nec ornare sem, sed luctus lorem. Nam varius iaculis odio, eget faucibus nisl ullamcorper in. Sed eget cursus felis, nec efficitur nisi. - -Vivamus commodo et sem quis pulvinar. Pellentesque libero ante, venenatis vitae ligula sit amet, ornare sollicitudin nulla. Mauris eget tellus hendrerit, pulvinar metus quis, tempor nisi. Proin magna ex, laoreet sed tortor quis, varius fermentum enim. Integer eu dolor dictum, vulputate tortor et, aliquet ligula. Vestibulum vitae justo id mauris luctus sollicitudin. Suspendisse eget auctor neque, sodales egestas lorem. Vestibulum lacinia egestas metus vitae euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ex tellus, volutpat nec pulvinar sit amet, condimentum vitae dui. Curabitur vel felis sodales, lacinia nunc iaculis, ullamcorper augue. Pellentesque consequat dolor quis eros efficitur malesuada. Nulla ut malesuada lectus. - -Morbi et tristique ante. Aliquam erat volutpat. Vivamus vitae dui nec turpis pellentesque fermentum. Quisque eget velit massa. Pellentesque tristique aliquam nisl, eu sollicitudin justo venenatis sed. Duis eleifend sem eros, ut aliquam libero porttitor id. Sed non nunc consequat, rhoncus diam eu, commodo erat. Praesent fermentum in lectus id blandit. Donec quis ipsum at justo volutpat finibus. Nulla blandit justo nulla, at mollis lacus consequat eget. Aenean sollicitudin quis eros ut ullamcorper. - -Pellentesque venenatis nulla ut mi aliquet feugiat. Cras semper vel magna nec pharetra. Integer mattis felis et sapien commodo imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis quis luctus felis. Vestibulum justo nibh, aliquam non lectus vitae, molestie placerat justo. Donec lorem nibh, gravida sit amet hendrerit ac, maximus id ipsum. Nunc ac libero sodales risus eleifend sagittis. Phasellus est massa, lobortis elementum ex sed, scelerisque consectetur neque. Nunc faucibus neque id lorem malesuada, eget convallis ex mattis. - -Sed turpis tortor, fermentum non turpis id, posuere varius nibh. Donec iaculis lorem dui. Etiam eros ante, sodales eget venenatis at, consectetur eget risus. Curabitur non aliquam ante, a pretium justo. Maecenas tempor nisl tortor, vitae dictum nisi ultrices eu. Duis eget dui ultrices, porttitor lacus sed, lobortis purus. Quisque mattis elit nec neque sagittis, sed commodo leo blandit. Mauris sodales interdum eleifend. Vestibulum condimentum consectetur augue, id luctus diam convallis et. - -Nunc suscipit risus in justo accumsan, a placerat magna tincidunt. Proin a nisl ipsum. Sed libero dui, tristique in augue quis, auctor tristique risus. Sed porttitor ex augue, eu porta augue molestie a. Duis rhoncus purus libero, eu tempus turpis condimentum at. Sed mollis nisi id lectus placerat tincidunt. Maecenas non scelerisque elit, quis rutrum orci. Donec in tellus pharetra urna ornare lobortis. Phasellus id risus at nisi varius rutrum eu ut turpis. - -Duis dictum justo quis nisl porta, eget tincidunt magna suscipit. Sed velit massa, ullamcorper eu sodales ac, pretium a massa. Duis et rutrum tortor. Nulla accumsan hendrerit sapien, cursus volutpat eros egestas eget. Donec sollicitudin at ante quis sollicitudin. Aenean blandit feugiat diam, id feugiat eros faucibus eget. Donec viverra dolor vel justo scelerisque dignissim. Nulla semper sem nunc, rhoncus semper tellus ultricies sed. Duis in ornare diam. Donec vehicula feugiat varius. Maecenas ut suscipit est. Vivamus sem sem, finibus at dolor sit amet, euismod dapibus ligula. Vestibulum fringilla odio dapibus, congue massa eget, congue sem. Donec feugiat magna eget tortor lacinia scelerisque non et ipsum. - -Suspendisse potenti. Nunc convallis sollicitudin ex eget venenatis. Sed iaculis nibh ex, vel ornare ligula congue dignissim. Quisque sollicitudin dolor ac dui vestibulum, sit amet molestie nisi aliquet. Donec at risus felis. Aenean sollicitudin metus a feugiat porta. Aenean a tortor ut dolor cursus sagittis. Vivamus consectetur porttitor nunc in facilisis. Proin sit amet mi vel lectus consectetur ultrices. - -Sed cursus lectus vitae nunc tristique, nec commodo turpis dapibus. Pellentesque luctus ex id facilisis ornare. Morbi quis placerat dolor. Donec in lectus in arcu mattis porttitor ac sit amet metus. Cras congue mauris non risus sodales, vitae feugiat ipsum bibendum. Nulla venenatis urna sed libero elementum, a cursus lorem commodo. Mauris faucibus lobortis eros nec commodo. - -Nullam suscipit ligula ullamcorper lorem commodo blandit. Nulla porta nibh quis pulvinar placerat. Vivamus eu arcu justo. Vestibulum imperdiet est ut fermentum porttitor. Pellentesque consectetur libero in sapien efficitur scelerisque. Curabitur ac erat sit amet odio aliquet dignissim. Pellentesque mi sem, rhoncus et luctus at, porttitor rutrum lectus. Vestibulum sollicitudin sollicitudin suscipit. Aenean efficitur dolor non ultrices imperdiet. Donec vel sem ex. - -Sed convallis mauris aliquam rutrum cursus. Ut tempor porttitor sodales. Etiam eu risus ac augue gravida egestas et eu dolor. Proin id magna ex. Suspendisse quis lectus quis lorem ultricies tempus. Donec porttitor velit vitae tincidunt faucibus. Aliquam vitae semper nisi. Morbi ultrices, leo non pretium dapibus, dui libero pellentesque ex, vel placerat enim ante vitae dui. Nunc varius, sem sit amet sagittis lobortis, lectus odio scelerisque mauris, ut vestibulum orci magna quis neque. Sed id congue justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris congue nisi est, malesuada mollis elit tincidunt sed. Curabitur sed ex sit amet felis tristique elementum vitae vel nibh. - -Etiam mollis pretium lobortis. Mauris augue lacus, efficitur at lacus sed, mollis tincidunt lectus. Aliquam erat volutpat. Donec at euismod elit, et mattis felis. Sed id lobortis urna. Morbi imperdiet vestibulum leo, sed maximus leo blandit eu. Aliquam semper lorem neque, nec euismod turpis mattis mollis. Quisque lobortis urna ultrices odio pretium, ac venenatis orci faucibus. Suspendisse bibendum odio ligula, sed lobortis massa pharetra nec. Donec turpis justo, iaculis at dictum ac, finibus eu libero. Maecenas quis porttitor mi, sit amet aliquet neque. - -Vivamus auctor vulputate ante, at egestas lorem. Donec eu risus in nulla mollis ultricies at et urna. Duis accumsan porta egestas. Ut vel euismod augue. Fusce convallis nulla ante, nec fringilla velit aliquet at. Nam malesuada dapibus ligula, a aliquam nibh scelerisque ac. Praesent malesuada neque et pellentesque interdum. Curabitur volutpat at turpis vitae tristique. Vivamus porttitor semper congue. Quisque suscipit lacus mi, rhoncus ultrices tortor auctor quis. Maecenas neque neque, molestie ac facilisis eget, luctus ac lorem. In ut odio ut lacus suscipit pulvinar vitae sed elit. Nulla imperdiet, sem quis euismod sagittis, dui erat luctus dolor, faucibus faucibus erat sem eget nunc. Nam accumsan placerat malesuada. Maecenas convallis finibus pulvinar. - -Cras at placerat tortor. Morbi facilisis auctor felis sit amet molestie. Donec sodales sed lorem vitae suscipit. Etiam fermentum pharetra ipsum, nec luctus orci gravida eu. Pellentesque gravida, est non condimentum tempus, mauris ligula molestie est, in congue dolor nisl vel sapien. Duis congue tempor augue, id rutrum eros porta dapibus. Etiam rutrum eget est eget vestibulum. Aenean mollis arcu vel consequat varius. Praesent at condimentum felis. Duis nec interdum nisl. Donec commodo lorem sed sapien scelerisque malesuada non eu urna. In blandit non ipsum at porta. Nam lobortis leo vitae dui auctor, non feugiat quam bibendum. Donec auctor lectus sagittis laoreet maximus. Maecenas rhoncus laoreet porttitor. Vestibulum porttitor augue ut lectus hendrerit, eget posuere mi gravida. - -Sed mattis ex in erat pulvinar, eu imperdiet magna dapibus. Etiam nisi nibh, tempus non tellus sit amet, mattis tempor odio. Quisque nec lorem feugiat, lobortis odio et, commodo nunc. Maecenas semper purus nisi, nec vehicula nibh eleifend vitae. Nulla fermentum a lectus at maximus. Phasellus finibus metus non euismod ultrices. Etiam a pulvinar ante. Quisque convallis nec metus sit amet facilisis. Praesent laoreet massa et sollicitudin laoreet. Vestibulum in mauris aliquet, convallis mi ut, elementum purus. Nulla purus nulla, sodales at hendrerit quis, tempus sed lectus. - -Nam ut laoreet neque, ut maximus nibh. Maecenas quis justo pellentesque, sollicitudin elit at, venenatis velit. Aenean nunc velit, vehicula scelerisque odio at, consectetur laoreet purus. Duis dui purus, malesuada quis ipsum sit amet, tempor interdum libero. Curabitur porta scelerisque sapien, vitae cursus diam condimentum eu. Phasellus sed orci quam. Nullam vitae dui quis purus tincidunt vestibulum. Curabitur quis nulla porta, cursus arcu non, auctor enim. Etiam sollicitudin ex id sem vehicula mollis. Morbi viverra laoreet tincidunt. Praesent ut semper dui. Nam sit amet pretium neque. Mauris vitae luctus diam, in lacinia purus. Maecenas ut placerat justo, ut porta felis. Integer eu mauris ante. - -Aenean porttitor tellus diam, tempor consequat metus efficitur id. Suspendisse ut felis at erat tempor dictum at nec sapien. Sed vestibulum interdum felis, ac mattis mauris porta in. Nunc et condimentum massa. Sed cursus dictum justo et luctus. Integer convallis enim nisl, a rutrum lectus ultricies in. Donec dapibus lacus at nulla dapibus, id sollicitudin velit hendrerit. Fusce a magna at orci mollis rutrum ac a dolor. Aliquam erat volutpat. Morbi varius porta nunc, sit amet sodales ex hendrerit commodo. Donec tincidunt tortor sapien, vitae egestas sapien vehicula eget. - -Suspendisse potenti. Donec pulvinar felis nec leo malesuada interdum. Integer posuere placerat maximus. Donec nibh ipsum, tincidunt vitae luctus vitae, bibendum at leo. Sed cursus nisl ut ex faucibus aliquet sed nec eros. Curabitur molestie posuere felis. Integer faucibus velit eget consequat iaculis. Mauris sed vulputate odio. Phasellus maximus, elit a pharetra egestas, lorem magna semper tellus, vestibulum semper diam felis at sapien. Suspendisse facilisis, nisl sit amet euismod vehicula, libero nulla vehicula dolor, quis fermentum nibh elit sit amet diam. - -Morbi lorem enim, euismod eu varius ut, scelerisque quis odio. Nam tempus vitae eros id molestie. Nunc pretium in nulla eget accumsan. Quisque mattis est ut semper aliquet. Maecenas eget diam elementum, fermentum ipsum a, euismod sapien. Duis quam ligula, cursus et velit nec, ullamcorper tincidunt magna. Donec vulputate nisl est, et ullamcorper urna tempor sit amet. - -Proin lacinia dui non turpis congue pretium. Morbi posuere metus vel purus imperdiet interdum. Morbi venenatis vel eros non ultricies. Nulla vel semper elit. Ut quis purus tincidunt, auctor justo ut, faucibus turpis. Proin quis mattis erat, at faucibus ligula. Mauris in mauris enim. Donec facilisis enim at est feugiat hendrerit. Nam vel nisi lorem. Fusce ultricies convallis diam, in feugiat tortor luctus quis. Donec tempor, leo vitae volutpat aliquam, magna elit feugiat leo, quis placerat sapien felis eget arcu. Donec ornare fermentum eleifend. Integer a est orci. - -Proin rhoncus egestas leo. Nulla ultricies porta elit quis ornare. Nunc fermentum interdum vehicula. In in ligula lorem. Donec nec arcu sit amet orci lobortis iaculis. Mauris at mollis erat, sit amet mollis tortor. Mauris laoreet justo ullamcorper porttitor auctor. Aenean sit amet aliquam lectus, id fermentum eros. Praesent urna sem, vehicula ac fermentum id, dapibus ut purus. Vestibulum vitae tempus nunc. Donec at nunc ornare metus volutpat porta at eget magna. Donec varius aliquet metus, eu lobortis risus aliquam sed. Ut dapibus fermentum velit, ac tincidunt libero faucibus at. - -In in purus auctor, feugiat massa quis, facilisis nisi. Donec dolor purus, gravida eget dolor ac, porttitor imperdiet urna. Donec faucibus placerat erat, a sagittis ante finibus ac. Sed venenatis dignissim elit, in iaculis felis posuere faucibus. Praesent sed viverra dolor. Mauris sed nulla consectetur nunc laoreet molestie in ut metus. Proin ac ex sit amet magna vulputate hendrerit ac condimentum urna. Proin ligula metus, gravida et sollicitudin facilisis, iaculis ut odio. Cras tincidunt urna et augue varius, ut facilisis urna consequat. Aenean vehicula finibus quam. Ut iaculis eu diam ac mollis. Nam mi lorem, tristique eget varius at, sodales at urna. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vitae dictum erat, et auctor ipsum. Nullam nunc nunc, sollicitudin quis magna a, vestibulum fermentum mauris. Praesent at erat dolor. Proin laoreet tristique nulla vel efficitur. Nam sed ultrices nibh, id rutrum nunc. Curabitur eleifend a erat sit amet sollicitudin. Nullam metus quam, laoreet vitae dapibus id, placerat sed leo. Aliquam erat volutpat. Donec turpis nisl, cursus eu ex sit amet, lacinia pellentesque nisl. Sed id ipsum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec interdum scelerisque lorem eu mattis. - -Vivamus ac tristique massa, nec facilisis nisl. Nam ipsum neque, tincidunt vel urna in, cursus imperdiet enim. Nam pellentesque egestas tempus. Morbi facilisis imperdiet libero vitae fringilla. Nam lacinia ligula at sapien facilisis malesuada. Nullam accumsan pulvinar sem, et cursus libero porta sit amet. Curabitur vulputate erat elit, ut pulvinar erat maximus vel. - -Cras aliquet metus ut purus sagittis, vel venenatis ante consectetur. Pellentesque nulla lacus, viverra viverra mattis non, placerat vitae nibh. Donec enim turpis, accumsan sit amet tincidunt eu, imperdiet non metus. Morbi ipsum eros, tincidunt vel est ac, tristique porttitor nibh. Praesent ut ullamcorper mauris. Sed laoreet sit amet diam congue venenatis. Integer porta purus nec orci sagittis posuere. - -Donec vehicula mauris eget lacus mollis venenatis et sed nibh. Nam sodales ligula ipsum, scelerisque lacinia ligula sagittis in. Nam sit amet ipsum at erat malesuada congue. Aenean ut sollicitudin sapien. Etiam at tempor odio. Mauris vitae purus ut magna suscipit consequat. Vivamus quis sapien neque. Nulla vulputate sem sit amet massa pellentesque, eleifend tristique ligula egestas. Suspendisse tincidunt gravida mi, in pulvinar lectus egestas non. Aenean imperdiet ex sit amet nunc sollicitudin porta. Integer justo odio, ultricies at interdum in, rhoncus vitae sem. Sed porttitor arcu quis purus aliquet hendrerit. Praesent tempor tortor at dolor dictum pulvinar. Nulla aliquet nunc non ligula scelerisque accumsan. Donec nulla justo, congue vitae massa in, faucibus hendrerit magna. Donec non egestas purus. - -¤¤¤åabc Vivamus iaculis, lacus efficitur faucibus porta, dui nulla facilisis ligula, ut sodales odio nunc id sapien. Cras viverra auctor ipsum, dapibus mattis neque dictum sed. Sed convallis fermentum molestie. Nulla facilisi turpis duis. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_cp1252.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_cp1252.txt deleted file mode 100644 index f56b7cf1fcb..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_cp1252.txt +++ /dev/null @@ -1,283 +0,0 @@ -öäüß Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vulputate, ipsum quis interdum fermentum, lorem sem fermentum eros, vitae auctor neque lacus in nisi. Suspendisse potenti. Maecenas et scelerisque elit, in tincidunt quam. Sed eu tincidunt quam. Nullam justo ex, imperdiet a imperdiet et, fermentum sit amet eros. Aenean quis tempus sem. Pellentesque accumsan magna mi, ut mollis velit sagittis id. Etiam quis ipsum orci. Fusce purus ante, accumsan a lobortis at, venenatis eu nisl. Praesent ornare sed ante placerat accumsan. Suspendisse tempus dignissim fermentum. Nunc a leo ac lacus sodales iaculis eu vitae mi. In feugiat ante at massa finibus cursus. Suspendisse posuere fringilla ornare. Mauris elementum ac quam id convallis. Vestibulum non elit quis urna volutpat aliquam a eu lacus. - -Aliquam vestibulum imperdiet neque, suscipit aliquam elit ultrices bibendum. Suspendisse ultrices pulvinar cursus. Morbi risus nisi, cursus consequat rutrum vitae, molestie sed dui. Fusce posuere, augue quis dignissim aliquam, nisi ipsum porttitor ante, quis fringilla nisl turpis ac nisi. Nulla varius enim eget lorem vehicula gravida. Donec finibus malesuada leo nec semper. Proin ac enim eros. Vivamus non tincidunt nisi, vel tristique lorem. - -Nunc consequat ex id eros dignissim, id rutrum risus laoreet. Sed euismod non erat eu ultricies. Etiam vehicula gravida lacus ut porta. Vestibulum eu eros quis nunc aliquet luctus. Cras quis semper ligula. Nullam gravida vehicula quam sed porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In porta cursus vulputate. Quisque porta a nisi eget cursus. Aliquam risus leo, luctus ac magna in, efficitur cursus magna. In condimentum non mi id semper. Donec interdum ante eget commodo maximus. - -Vivamus sit amet vestibulum lectus. Fusce tincidunt mi sapien, dictum sollicitudin diam vulputate in. Integer fringilla consequat mollis. Cras aliquet consequat felis eget feugiat. Nunc tempor cursus arcu, vitae ornare nunc varius et. Vestibulum et tortor vel ante viverra porttitor. Nam at tortor ullamcorper, facilisis augue quis, tristique erat. Aenean ut euismod nibh. Quisque eu tincidunt est, nec euismod eros. - -Proin vehicula nibh non viverra egestas. Phasellus sem dolor, ultricies ac sagittis tristique, lacinia a purus. Vestibulum in ante eros. Pellentesque lacus nulla, tristique vitae interdum vel, malesuada ac diam. Aenean bibendum posuere turpis in accumsan. Ut est nulla, ullamcorper quis turpis at, viverra sagittis mauris. Sed in interdum purus. Praesent scelerisque nibh eget sem euismod, ut imperdiet mi venenatis. Vivamus pulvinar orci sed dapibus auctor. Nulla facilisi. Vestibulum tincidunt erat nec porttitor egestas. Mauris quis risus ante. Nulla facilisi. - -Aliquam ullamcorper ornare lobortis. Phasellus quis sem et ipsum mollis malesuada sed in ex. Ut aliquam ex eget metus finibus maximus. Proin suscipit mauris eu nibh lacinia, quis feugiat dui dapibus. Nam sed libero est. Aenean vulputate orci sit amet diam faucibus, eu sagittis sapien volutpat. Nam imperdiet felis turpis, at pretium odio pulvinar in. Sed vestibulum id eros nec ultricies. Sed quis aliquam tortor, vitae ullamcorper tellus. Donec egestas laoreet eros, id suscipit est rutrum nec. Sed auctor nulla eget metus aliquam, ut condimentum enim elementum. - -Aliquam suscipit non turpis sit amet bibendum. Fusce velit ligula, euismod et maximus at, luctus sed neque. Quisque pretium, nisl at ullamcorper finibus, lectus leo mattis sapien, vel euismod mauris diam ullamcorper ex. Nulla ut risus finibus, lacinia ligula at, auctor erat. Mauris consectetur sagittis ligula vel dapibus. Nullam libero libero, lobortis aliquam libero vel, venenatis ultricies leo. Duis porttitor, nibh congue fermentum posuere, erat libero pulvinar tortor, a pellentesque nunc ipsum vel sem. Nullam volutpat, eros sit amet facilisis consectetur, ipsum est vehicula massa, non vestibulum neque elit in mauris. Nunc hendrerit ipsum non enim bibendum, vitae rhoncus mi egestas. Etiam ullamcorper massa vel nisl sagittis, nec bibendum arcu malesuada. Aenean aliquet turpis justo, a consectetur arcu mollis convallis. Etiam tellus ipsum, ultricies vitae lorem et, ornare facilisis orci. Praesent fringilla justo urna, vel mollis neque pulvinar vestibulum. - -Donec non iaculis erat. Aliquam et mi sed nunc pulvinar ultricies in ut ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent feugiat lacus ac dignissim semper. Phasellus vitae quam nisi. Morbi vel diam ultricies risus lobortis ornare. Fusce maximus et ligula quis iaculis. Sed congue ex eget felis convallis, sit amet hendrerit elit tempor. Donec vehicula blandit ante eget commodo. Vestibulum eleifend diam at feugiat euismod. Etiam magna tellus, dignissim eget fermentum vel, vestibulum vitae mauris. Nam accumsan et erat id sagittis. Donec lacinia, odio ut ornare ultricies, dolor velit accumsan tortor, non finibus erat tellus quis ligula. Nunc quis metus in leo volutpat ornare vulputate eu nisl. - -Donec quis viverra ex. Nullam id feugiat mauris, eu fringilla nulla. Vestibulum id maximus elit. Cras elementum elit sed felis lobortis, eget sagittis nisi hendrerit. Vivamus vitae elit neque. Donec vulputate lacus ut libero ultrices accumsan. Vivamus accumsan nulla orci, in dignissim est laoreet sagittis. Proin at commodo velit. Curabitur in velit felis. Aliquam erat volutpat. Sed consequat, nulla et cursus sodales, nisi lacus mattis risus, quis eleifend erat ex nec turpis. Sed suscipit ultrices lorem in hendrerit. - -Morbi vitae lacus nec libero ornare tempus eu et diam. Suspendisse magna ipsum, fermentum vel odio quis, molestie aliquam urna. Fusce mollis turpis a eros accumsan porttitor. Pellentesque rhoncus dolor sit amet magna rutrum, et dapibus justo tempor. Sed purus nisi, maximus vitae fringilla eu, molestie nec urna. Fusce malesuada finibus pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sed aliquet eros. Pellentesque luctus diam ante, eget euismod nisl aliquet eu. Sed accumsan elit purus, tempor varius ligula tempus nec. Curabitur ornare leo suscipit suscipit fermentum. Morbi eget nulla est. Maecenas faucibus interdum tristique. - -Etiam ut elit eros. Nulla pharetra suscipit molestie. Nulla facilisis bibendum nisl non molestie. Curabitur turpis lectus, facilisis vel diam non, vulputate ultrices mauris. Aenean placerat aliquam convallis. Suspendisse sed scelerisque tellus. Vivamus lacinia neque eget risus cursus suscipit. Proin consequat dolor vel neque tempor, eu aliquam sem scelerisque. Duis non eros a purus malesuada pharetra non et nulla. Suspendisse potenti. Mauris libero eros, finibus vel nulla id, sagittis dapibus ante. Proin iaculis sed nunc et cursus. - -Quisque accumsan lorem sit amet lorem aliquet euismod. Curabitur fermentum rutrum posuere. Etiam ultricies, sem id pellentesque suscipit, urna magna lacinia eros, quis efficitur risus nisl at lacus. Nulla quis lacus tortor. Mauris placerat ex in dolor tincidunt, vel aliquet nisi pretium. Cras iaculis risus vitae pellentesque aliquet. Quisque a enim imperdiet, ullamcorper arcu vitae, rutrum risus. Nullam consectetur libero at felis fringilla, nec congue nibh dignissim. Nam et lobortis felis, eu pellentesque ligula. Aenean facilisis, ligula non imperdiet maximus, massa orci gravida sapien, at sagittis lacus nisl in lacus. Nulla quis mauris luctus, scelerisque felis consequat, tempus risus. Fusce auctor nisl non nulla luctus molestie. Maecenas sapien nisl, auctor non dolor et, iaculis scelerisque lorem. Suspendisse egestas enim aliquet, accumsan mauris nec, posuere quam. Nulla iaculis dui dui, sit amet vestibulum erat ultricies ac. - -Cras eget dolor erat. Proin at nisl ut leo consectetur ultricies vel ut arcu. Nulla in felis malesuada, ullamcorper tortor et, convallis massa. Nunc urna justo, ornare in nibh vitae, hendrerit condimentum libero. Etiam vitae libero in purus venenatis fringilla. Nullam velit nulla, consequat ut turpis non, egestas hendrerit nibh. Duis tortor turpis, interdum non ante ac, cursus accumsan lectus. Cras pharetra bibendum augue quis dictum. Sed euismod vestibulum justo. Proin porta lobortis purus. Duis venenatis diam tortor, sit amet condimentum eros rhoncus a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc at magna nec diam lobortis efficitur sit amet ut lacus. Nulla quis orci tortor. Pellentesque tempus velit a odio finibus porta. - -Proin feugiat mauris a tellus scelerisque convallis. Maecenas libero magna, blandit nec ultrices id, congue vel mi. Aliquam lacinia, quam vel condimentum convallis, tortor turpis aliquam odio, sed blandit libero lacus et eros. In eleifend iaculis magna ac finibus. Praesent auctor facilisis tellus in congue. Sed molestie lobortis dictum. Nam quis dignissim augue, vel euismod lorem. Curabitur posuere dapibus luctus. Donec ultricies dictum lectus, quis blandit arcu commodo ac. Aenean tincidunt ligula in nunc imperdiet dignissim. Curabitur egestas sollicitudin sapien ut semper. Aenean nec dignissim lacus. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec aliquam dictum vehicula. Donec tortor est, volutpat non nisi nec, varius gravida ex. Nunc vel tristique nunc, vitae mattis nisi. Nunc nec luctus ex, vitae tincidunt lectus. In hac habitasse platea dictumst. Curabitur lobortis ex eget tincidunt tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut a vehicula mi. - -Fusce eu libero finibus, interdum nulla a, placerat neque. Cras bibendum tempor libero nec feugiat. Cras ut sodales eros. Proin viverra, massa sit amet viverra egestas, neque nisl porta ex, sit amet hendrerit libero ligula vel urna. Mauris suscipit lacus id justo rhoncus suscipit. Etiam vel libero tellus. Maecenas non diam molestie, condimentum tellus a, bibendum enim. Mauris aliquet imperdiet tellus, eget sagittis dolor. Sed blandit in neque et luctus. Cras elementum sagittis nunc, vel mollis lorem euismod et. Donec posuere at lacus eget suscipit. - -Nulla nunc mi, pretium non massa vel, tempor semper magna. Nunc a leo pulvinar, tincidunt nunc at, dignissim mi. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut viverra nulla a nisl finibus, at hendrerit ligula ullamcorper. Donec a lorem semper, tempor magna et, lobortis libero. Mauris id sapien leo. Donec dignissim, quam vitae porttitor dignissim, quam justo mattis dui, vel consequat odio elit quis orci. Etiam nec pretium neque, sit amet pretium orci. Duis ac tortor venenatis, feugiat purus non, feugiat nunc. Proin scelerisque nisl in turpis aliquam vulputate. - -Praesent sed est semper, fringilla lorem vitae, tincidunt nibh. Cras eros metus, auctor at mauris sit amet, sodales semper orci. Nunc a ornare ex. Curabitur bibendum arcu congue urna vulputate egestas. Vestibulum finibus id risus et accumsan. Aenean ut volutpat tellus. Aenean tincidunt malesuada urna sit amet vestibulum. Mauris vel tellus dictum, varius lacus quis, dictum arcu. - -Aenean quis metus eu erat feugiat cursus vel at ligula. Proin dapibus sodales urna, id euismod lectus tempus id. Pellentesque ex ligula, convallis et erat vel, vulputate condimentum nisl. Pellentesque pharetra nulla quis massa eleifend hendrerit. Praesent sed massa ipsum. Maecenas vehicula dolor massa, id sodales urna faucibus et. Mauris ac quam non massa tincidunt feugiat et at lacus. Fusce libero massa, vulputate vel scelerisque non, mollis in leo. Ut sit amet ultricies odio. Suspendisse in sapien viverra, facilisis purus ut, pretium libero. - -Vivamus tristique pharetra molestie. Nam a volutpat purus. Praesent consequat gravida nisi, ac blandit nisi suscipit ut. Quisque posuere, ligula a ultrices laoreet, ligula nunc vulputate libero, ut rutrum erat odio tincidunt justo. Sed vitae leo at leo fringilla bibendum. Vestibulum ut augue nec dolor auctor accumsan. Praesent laoreet id eros pulvinar commodo. Suspendisse potenti. Ut pharetra, mauris vitae blandit fringilla, odio ante tincidunt lorem, sit amet tempor metus diam ut turpis. - -Praesent quis egestas arcu. Nullam at porta arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi vulputate ligula malesuada ligula luctus, vulputate tempus erat bibendum. Nunc ullamcorper non lectus at euismod. Etiam nibh felis, tincidunt a metus vel, pellentesque rhoncus neque. Etiam at diam in erat luctus interdum. Nunc vel ipsum pulvinar, sollicitudin lacus ac, tempus urna. Etiam vel lacinia sapien. Pellentesque sagittis velit vel mi efficitur iaculis. Integer euismod sit amet urna in sagittis. Cras eleifend ut nibh in facilisis. Donec et lacus vitae nunc placerat sodales. Nulla sed hendrerit ligula, at dapibus sapien. - -Praesent at iaculis ex. Curabitur est purus, cursus a faucibus quis, dictum id velit. Donec dignissim fringilla viverra. Nunc mauris felis, laoreet sit amet sagittis at, vestibulum in libero. Maecenas quis orci turpis. Quisque ut nibh vitae magna mollis consequat id at mauris. Aliquam eu odio eget nulla bibendum sodales. Quisque vel orci eleifend nisi pretium lacinia. Suspendisse eget risus eget mi volutpat molestie eget quis lacus. Duis nisi libero, tincidunt nec nulla id, faucibus cursus felis. - -Donec tempor eget risus pellentesque molestie. Phasellus porta neque vel arcu egestas, nec blandit velit fringilla. Nullam porta faucibus justo vitae laoreet. Pellentesque viverra id nunc eu varius. Nulla pulvinar lobortis iaculis. Etiam vestibulum odio nec velit tristique, a tristique nisi mattis. In sed fringilla orci, vitae efficitur odio. Quisque dui odio, ornare eget velit at, lacinia consequat libero. Quisque lectus nulla, aliquet eu leo in, porta rutrum diam. Donec nec mattis neque. Nam rutrum, odio ac eleifend bibendum, dolor arcu rutrum neque, eget porta elit tellus a lacus. Sed massa metus, sollicitudin et sapien eu, finibus tempus orci. Proin et sapien sit amet erat molestie interdum. In quis rutrum velit, faucibus ultrices tellus. - -Sed sagittis sed justo eget tincidunt. Maecenas ut leo sagittis, feugiat magna et, viverra velit. Maecenas ex arcu, feugiat at consequat vitae, auctor eu massa. Integer egestas, enim vitae maximus convallis, est lectus pretium mauris, ac posuere lectus nisl quis quam. Aliquam tempus laoreet mi, vitae dapibus dolor varius dapibus. Suspendisse potenti. Donec sit amet purus nec libero dapibus tristique. Pellentesque viverra bibendum ligula. Donec sed felis et ex lobortis laoreet. Phasellus a fringilla libero, vitae malesuada nulla. Pellentesque blandit mattis lacus, et blandit tortor laoreet consequat. Suspendisse libero nunc, viverra sed fermentum in, accumsan egestas arcu. Proin in placerat elit. Sed interdum imperdiet malesuada. Suspendisse aliquet quis mauris eget sollicitudin. - -Vivamus accumsan tellus non erat volutpat, quis dictum dolor feugiat. Praesent rutrum nunc ac est mollis cursus. Fusce semper volutpat dui ut egestas. Curabitur sit amet posuere massa. Cras tincidunt nulla et mi mollis imperdiet. Suspendisse scelerisque ex id sodales vulputate. In nunc augue, pharetra in placerat eu, mattis id tellus. Vivamus cursus efficitur vehicula. Nulla aliquet vehicula aliquet. - -Sed cursus tellus sed porta pulvinar. Sed vitae nisi neque. Nullam aliquet, lorem et efficitur scelerisque, arcu diam aliquam felis, sed pulvinar lorem odio et turpis. Praesent convallis pulvinar turpis eu iaculis. Aliquam nec gravida mi. Curabitur eu nibh tempor, blandit justo in, ultrices felis. Fusce placerat metus non mi sagittis rutrum. Morbi sed dui fringilla, sagittis mauris eget, imperdiet nunc. Phasellus hendrerit sem elit, id hendrerit libero auctor sit amet. Integer sodales elit sit amet consequat cursus. - -Nam semper est eget nunc mollis, in pellentesque lectus fringilla. In finibus vel diam id semper. Nunc mattis quis erat eu consectetur. In hac habitasse platea dictumst. Nullam et ipsum vestibulum ex pulvinar ultricies sit amet id velit. Aenean suscipit mi tortor, a lobortis magna viverra non. Nulla condimentum aliquet ante et ullamcorper. Pellentesque porttitor arcu a posuere tempus. Aenean lacus quam, imperdiet eu justo vitae, pretium efficitur ex. Duis id purus id magna rhoncus ultrices id eu risus. Nunc dignissim et libero id dictum. - -Quisque a tincidunt neque. Phasellus commodo mi sit amet tempor fringilla. Ut rhoncus, neque non porttitor elementum, libero nulla egestas augue, sed fringilla sapien felis ac velit. Phasellus viverra rhoncus mollis. Nam ullamcorper leo vel erat laoreet luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus semper a metus a cursus. Nulla sed orci egestas, efficitur purus ac, malesuada tellus. Aenean rutrum velit at tellus fermentum mollis. Aliquam eleifend euismod metus. - -In hac habitasse platea dictumst. Vestibulum volutpat neque vitae porttitor laoreet. Nam at tellus consequat, sodales quam in, pulvinar arcu. Maecenas varius convallis diam, ac lobortis tellus pellentesque quis. Maecenas eget augue massa. Nullam volutpat nibh ac justo rhoncus, ut iaculis tellus rutrum. Fusce efficitur efficitur libero quis condimentum. Curabitur congue neque non tincidunt tristique. Fusce eget tempor ex, at pellentesque odio. Praesent luctus dictum vestibulum. Etiam non orci nunc. Vivamus vitae laoreet purus, a lobortis velit. Curabitur tincidunt purus ac lectus elementum pellentesque. Quisque sed tincidunt est. - -Sed vel ultrices massa, vitae ultricies justo. Cras finibus mauris nec lacus tempus dignissim. Cras faucibus maximus velit, eget faucibus orci luctus vehicula. Nulla massa nunc, porta ac consequat eget, rhoncus non tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed maximus metus, vel imperdiet ipsum. Ut scelerisque lectus at blandit porttitor. Ut vulputate nunc pharetra, aliquet sapien ac, sollicitudin sapien. Aenean eget ante lorem. Nam accumsan venenatis tellus id dignissim. - -Curabitur fringilla, magna non maximus dapibus, nulla sapien vestibulum lectus, sit amet semper dolor neque vitae nisl. Nunc ultrices vehicula augue sed iaculis. Maecenas nec diam mollis, suscipit orci et, vestibulum ante. Pellentesque eu nisl tortor. Nunc eleifend, lacus quis volutpat volutpat, nisi mi molestie sem, quis mollis ipsum libero a tellus. Ut viverra dolor mattis convallis interdum. Sed tempus nisl at nunc scelerisque aliquet. Quisque tempor tempor lorem id feugiat. Nullam blandit lectus velit, vitae porta lacus tincidunt a. Vivamus sit amet arcu ultrices, tincidunt mi quis, viverra quam. Aenean fringilla libero elementum lorem semper, quis pulvinar eros gravida. Nullam sodales blandit mauris, sed fermentum velit fermentum sit amet. Donec malesuada mauris in augue sodales vulputate. Vestibulum gravida turpis id elit rhoncus dignissim. Integer non congue lorem, eu viverra orci. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec at dolor magna. Aliquam consectetur erat augue, id iaculis velit pharetra ac. Integer rutrum venenatis dignissim. Integer non sodales elit. Curabitur ut magna ut nibh feugiat aliquam ac ut risus. Morbi nibh quam, aliquam id placerat nec, vestibulum eget velit. Suspendisse at dignissim quam. Vivamus aliquet sem sed nisl volutpat, ut cursus orci ultrices. Aliquam ultrices lacinia enim, vitae aliquet neque. - -Quisque scelerisque finibus diam in mattis. Cras cursus auctor velit. Aliquam sem leo, fermentum et maximus et, molestie a libero. Aenean justo elit, rutrum a ornare id, egestas eget enim. Aenean auctor tristique erat. Curabitur condimentum libero lacus, nec consequat orci vestibulum sed. Fusce elit ligula, blandit vitae sapien vitae, dictum ultrices risus. Nam laoreet suscipit sapien, at interdum velit faucibus sit amet. Duis quis metus egestas lectus elementum posuere non nec libero. Aliquam a dolor bibendum, facilisis nunc a, maximus diam. Vestibulum suscipit tristique magna, non dignissim turpis sodales sed. Nunc ornare, velit ac facilisis fringilla, dolor mi consectetur lorem, vitae finibus erat justo suscipit urna. Maecenas sit amet eros erat. Nunc non arcu ornare, suscipit lorem eget, sodales mauris. Aliquam tincidunt, quam nec mollis lacinia, nisi orci fermentum libero, consequat eleifend lectus quam et sapien. Vestibulum a quam urna. - -Cras arcu leo, euismod ac ullamcorper at, faucibus sed massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor velit in enim interdum, non commodo metus ornare. Morbi vel lorem quis nisl luctus tristique quis vitae nisl. Suspendisse condimentum tortor enim, nec eleifend ipsum euismod et. Sed gravida quam ut tristique lacinia. Mauris eu interdum ipsum, ac ultrices odio. Nullam auctor tellus a risus porttitor vehicula. Nulla blandit euismod dictum. In pharetra, enim iaculis pulvinar interdum, dui nunc placerat nunc, sit amet pretium lectus nulla vitae quam. Phasellus quis enim sollicitudin, varius nulla id, ornare purus. Donec quam lacus, vestibulum quis nunc ac, mollis dictum nisi. Cras ut mollis elit. Maecenas ultrices ligula at risus faucibus scelerisque. Etiam vitae porttitor purus. Curabitur blandit lectus urna, ut hendrerit tortor feugiat ut. - -Phasellus fringilla, sapien pellentesque commodo pharetra, ante libero aliquam tellus, ut consectetur augue libero a sapien. Maecenas blandit luctus nisl eget aliquet. Maecenas vitae porta dolor, faucibus laoreet sapien. Suspendisse lobortis, ipsum sed vehicula aliquam, elit purus scelerisque dui, rutrum consectetur diam odio et lorem. In nec lacinia metus. Donec viverra libero est, vel bibendum erat condimentum quis. Donec feugiat purus leo. In laoreet vitae felis a porttitor. Mauris ullamcorper, lacus id condimentum suscipit, neque magna pellentesque arcu, eget cursus neque tellus id metus. Curabitur volutpat ac orci vel ultricies. - -Sed ut finibus erat. Sed diam purus, varius non tincidunt quis, ultrices sit amet ipsum. Donec et egestas nulla. Suspendisse placerat nisi at dui laoreet iaculis. Aliquam aliquet leo at augue faucibus molestie. Nullam lacus augue, hendrerit sed nisi eu, faucibus porta est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ut leo aliquet sem fermentum rutrum quis ac justo. Integer placerat aliquam nisl ut sagittis. Proin erat orci, lobortis et sem eget, eleifend fringilla augue. Mauris varius laoreet arcu, sed tincidunt felis. Pellentesque venenatis lorem odio, id pulvinar velit molestie feugiat. Donec mattis lacus sed eleifend pulvinar. - -Sed condimentum ex in tincidunt hendrerit. Etiam eget risus lacinia, euismod nibh eu, pellentesque quam. Proin elit eros, convallis id mauris ac, bibendum ultrices lectus. Morbi venenatis, purus id fermentum consequat, nunc libero tincidunt ligula, non dictum ligula orci nec quam. Nulla nec ultrices lorem. Aenean maximus augue vel dictum pharetra. Etiam turpis urna, pellentesque quis malesuada eu, molestie faucibus felis. - -Vestibulum pharetra augue ut quam blandit congue in nec risus. Proin eu nibh eu dui eleifend porta vitae id lectus. Proin lacus nibh, lobortis sed ligula vitae, interdum lobortis erat. Suspendisse potenti. In sollicitudin quis sapien ut aliquet. Mauris ac nulla arcu. Fusce tristique justo quis lectus mollis, eu volutpat lectus finibus. Vivamus venenatis facilisis ex ut vestibulum. - -Etiam varius lobortis purus, in hendrerit elit tristique at. In tempus, augue vestibulum fermentum gravida, ligula tellus vulputate arcu, eu molestie ex sapien at purus. Vestibulum nec egestas metus. Duis pulvinar quam nec consequat interdum. Aenean non dapibus lacus. Aliquam sit amet aliquet nulla. Sed venenatis volutpat purus nec convallis. Phasellus aliquet semper sodales. Cras risus sapien, condimentum auctor urna a, pulvinar ornare nisl. Sed tincidunt felis elit, ut elementum est bibendum ac. Morbi interdum justo vel dui faucibus condimentum. - -Sed convallis eu sem at tincidunt. Nullam at auctor est, et ullamcorper ipsum. Pellentesque eget ante ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer euismod, sapien sed dapibus ornare, nibh enim maximus lacus, lacinia placerat urna quam quis felis. Morbi accumsan id nisl ut condimentum. Donec bibendum nisi est, sed volutpat lorem rhoncus in. Vestibulum ac lacinia nunc, eget volutpat magna. Integer aliquam pharetra ipsum, id placerat nunc volutpat quis. Etiam urna diam, rhoncus sit amet varius vel, euismod vel sem. Nullam vel molestie urna. Vivamus ornare erat at venenatis euismod. Suspendisse potenti. Fusce diam justo, tincidunt vel sem at, commodo faucibus nisl. Duis gravida efficitur diam, vel sagittis erat pulvinar ut. - -Quisque vel pharetra felis. Duis efficitur tortor dolor, vitae porttitor erat fermentum sed. Sed eu mi purus. Etiam dignissim tortor eu tempus molestie. Aenean pretium erat enim, in hendrerit ante hendrerit at. Sed ut risus vel nunc venenatis ultricies quis in lacus. Pellentesque vitae purus euismod, placerat risus non, ullamcorper augue. Quisque varius quam ligula, nec aliquet ex faucibus vitae. Quisque rhoncus sit amet leo tincidunt mattis. Cras id mauris eget purus pretium gravida sit amet eu augue. Aliquam dapibus odio augue, id lacinia velit pulvinar eu. - -Mauris fringilla, tellus nec pharetra iaculis, neque nisi ultrices massa, et tincidunt sem dui sed mi. Curabitur erat lorem, venenatis quis tempus lacinia, tempus sit amet nunc. Aliquam at neque ac metus commodo dictum quis vitae justo. Phasellus eget lacus tempus, blandit lorem vel, rutrum est. Aenean pharetra sem ut augue lobortis dignissim. Sed rhoncus at nulla id ultrices. Cras id condimentum felis. In suscipit luctus vulputate. Donec tincidunt lacus nec enim tincidunt sollicitudin ut quis enim. Nam at libero urna. Praesent sit amet massa vitae massa ullamcorper vehicula. - -Nullam bibendum augue ut turpis condimentum bibendum. Proin sit amet urna hendrerit, sodales tortor a, lobortis lectus. Integer sagittis velit turpis, et tincidunt nisi commodo eget. Duis tincidunt elit finibus accumsan cursus. Aenean dignissim scelerisque felis vel lacinia. Nunc lacinia maximus luctus. In hac habitasse platea dictumst. Vestibulum eget urna et enim tempor tempor. Nam feugiat, felis vel vestibulum tempus, orci justo viverra diam, id dapibus lorem justo in ligula. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ac pellentesque sem. Vestibulum lacinia magna dui, eu lacinia augue placerat et. Maecenas pulvinar congue est. Pellentesque commodo dui non pulvinar scelerisque. Etiam interdum est posuere sem bibendum, ac commodo magna dictum. Cras ipsum turpis, rhoncus nec posuere vitae, laoreet a arcu. Integer ac massa sit amet enim placerat lacinia sed ultrices arcu. Suspendisse sem nibh, luctus sit amet volutpat in, pellentesque eu metus. Ut gravida neque eget mi accumsan tempus. Nam sit amet aliquet nibh. - -Pellentesque a purus cursus nulla hendrerit congue quis et odio. Aenean hendrerit, leo ullamcorper sagittis hendrerit, erat dui molestie quam, sed condimentum lacus risus sed tellus. Morbi a dapibus lectus, ut feugiat ex. Phasellus pretium quam et sapien mollis, vel iaculis dui dignissim. Sed ullamcorper est turpis, a viverra lorem consectetur in. Aenean aliquet nibh non cursus rutrum. Suspendisse at tristique urna, id lobortis urna. In hac habitasse platea dictumst. Phasellus libero velit, rutrum sed tellus nec, dapibus tincidunt ligula. Quisque vel dui venenatis, consequat nisl ut, lacinia ipsum. Phasellus vitae magna pellentesque, lobortis est id, faucibus quam. Nam eleifend faucibus dui vel pellentesque. - -Etiam ut est non lacus tincidunt interdum. Maecenas sed massa urna. Quisque ut nibh tortor. Pellentesque felis ipsum, tempor finibus ipsum et, euismod pretium metus. Donec sit amet est ipsum. Quisque rhoncus justo non finibus elementum. Nulla nec lectus ac tortor placerat fringilla. Phasellus ac ultrices nunc, eu efficitur nisl. Nulla rhoncus nunc vitae ante dictum tincidunt. Nunc ultrices, massa sit amet malesuada dignissim, lectus lacus consequat sapien, non eleifend metus sem in eros. Phasellus mauris ante, dictum sit amet suscipit ac, rhoncus eget nisi. Phasellus at orci mollis, imperdiet neque eget, faucibus nulla. In at purus massa. Pellentesque quis rutrum lectus. - -Integer eu faucibus turpis, sit amet mollis massa. Vestibulum id nulla commodo, rutrum ipsum sed, semper ante. Phasellus condimentum orci nec nibh convallis, ac maximus orci ullamcorper. Maecenas vitae sollicitudin mi. Integer et finibus lectus, et condimentum ligula. Donec elementum tristique quam vitae dapibus. Morbi euismod ipsum in tristique ullamcorper. - -Duis fermentum non enim eu auctor. Quisque lacinia nibh vehicula nibh posuere, eu volutpat turpis facilisis. Ut ac faucibus nulla. Sed eleifend quis ex et pellentesque. Vestibulum sollicitudin in libero id fringilla. Phasellus dignissim purus consequat, condimentum dui sit amet, condimentum ante. Pellentesque ac consectetur massa, quis sagittis est. Nulla maximus tristique risus accumsan convallis. Curabitur imperdiet ac lacus a ultrices. Nulla facilisi. Sed quis quam quis lectus placerat lobortis vel sed turpis. In mollis dui id neque iaculis, ut aliquet tellus malesuada. Proin at luctus odio, vel blandit sapien. Praesent dignissim tortor vehicula libero fringilla, nec ultrices erat suscipit. Maecenas scelerisque purus in dapibus fermentum. - -Curabitur magna odio, mattis in tortor ut, porttitor congue est. Vestibulum mollis lacinia elementum. Fusce maximus erat vitae nunc rutrum lobortis. Integer ligula eros, auctor vel elit non, posuere luctus lacus. Maecenas quis auctor massa. Ut ipsum lacus, efficitur posuere euismod et, hendrerit efficitur est. Phasellus fringilla, quam id tincidunt pretium, nunc dui sollicitudin orci, eu dignissim nisi metus ut magna. Integer lobortis interdum dolor, non bibendum purus posuere et. Donec non lectus aliquet, pretium dolor eu, cursus massa. Sed ut dui sapien. In sed vestibulum massa. Pellentesque blandit, dui non sodales vehicula, orci metus mollis nunc, non pharetra ex tellus ac est. Mauris sagittis metus et fermentum pretium. Nulla facilisi. Quisque quis ante ut nulla placerat mattis ut quis nisi. - -Sed quis nulla ligula. Quisque dignissim ligula urna, sed aliquam purus semper at. Suspendisse potenti. Nunc massa lectus, pharetra vehicula arcu bibendum, imperdiet sodales ipsum. Nam ac sapien diam. Mauris iaculis fringilla mattis. Pellentesque tempus eros sit amet justo volutpat mollis. Phasellus ac turpis ipsum. Morbi vel ante elit. Aenean posuere quam consequat velit varius suscipit. Donec tempor quam ut nibh cursus efficitur. - -Morbi molestie dolor nec sem egestas suscipit. Etiam placerat pharetra lectus, et ullamcorper risus tristique in. Sed faucibus ullamcorper lectus eget fringilla. Maecenas malesuada hendrerit congue. Sed eget neque a erat placerat tincidunt. Aliquam vitae dignissim turpis. Fusce at placerat magna, a laoreet lectus. Maecenas a purus nec diam gravida fringilla. Nam malesuada euismod ante non vehicula. In faucibus bibendum leo, faucibus posuere nisl pretium quis. Fusce finibus bibendum finibus. Vestibulum eu justo maximus, hendrerit diam nec, dignissim sapien. Aenean dolor lacus, malesuada quis vestibulum ac, venenatis ac ipsum. Cras a est id nunc finibus facilisis. Cras lacinia neque et interdum vehicula. Suspendisse vulputate tellus elit, eget tempor dui finibus vel. - -Cras sed pretium odio. Proin hendrerit elementum felis in tincidunt. Nam sed turpis vel justo molestie accumsan condimentum eu nunc. Praesent lobortis euismod rhoncus. Nulla vitae euismod nibh, quis mattis mi. Fusce ultrices placerat porttitor. Duis sem ipsum, pellentesque sit amet odio a, molestie vulputate mauris. - -Duis blandit mollis ligula, sit amet mattis ligula finibus sit amet. Nunc a leo molestie, placerat diam et, vestibulum leo. Suspendisse facilisis neque purus, nec pellentesque ligula fermentum nec. Aenean malesuada mauris lorem, eu blandit arcu pulvinar quis. Duis laoreet urna lacus, non maximus arcu rutrum ultricies. Nulla augue dolor, suscipit eu mollis eu, aliquam condimentum diam. Ut semper orci luctus, pharetra turpis at, euismod mi. Nulla leo diam, finibus sit amet purus sed, maximus dictum lorem. Integer eu mi id turpis laoreet rhoncus. - -Integer a mauris tincidunt, finibus orci ut, pretium mauris. Nulla molestie nunc mi, id finibus lorem elementum sed. Proin quis laoreet ante. Integer nulla augue, commodo id molestie quis, rutrum ut turpis. Suspendisse et tortor turpis. Sed ut pharetra massa. Pellentesque elementum blandit sem, ut elementum tellus egestas a. Fusce eu purus nibh. - -Cras dignissim ligula scelerisque magna faucibus ullamcorper. Proin at condimentum risus, auctor malesuada quam. Nullam interdum interdum egestas. Nulla aliquam nisi vitae felis mollis dictum. Suspendisse dapibus consectetur tortor. Ut ut nisi non sem bibendum tincidunt. Vivamus suscipit leo quis gravida dignissim. - -Aliquam interdum, leo id vehicula mollis, eros eros rhoncus diam, non mollis ligula mi eu mauris. Sed ultrices vel velit sollicitudin tincidunt. Nunc auctor metus at ligula gravida elementum. Praesent interdum eu elit et mollis. Duis egestas quam sit amet velit dignissim consequat. Aliquam ac turpis nec nunc convallis sagittis. Fusce blandit, erat ac fringilla consectetur, dolor eros sodales leo, vel aliquet risus nisl et diam. Aliquam luctus felis vitae est eleifend euismod facilisis et lacus. Sed leo tellus, auctor eu arcu in, volutpat sagittis nisl. Pellentesque nisl ligula, placerat vel ullamcorper at, vulputate ac odio. Morbi ac faucibus orci, et tempus nulla. Proin rhoncus rutrum dolor, in venenatis mauris. Suspendisse a fermentum augue, non semper mi. Nunc eget pretium neque. Phasellus augue erat, feugiat ac aliquam congue, rutrum non sapien. Pellentesque ac diam gravida, consectetur felis at, ornare neque. - -Nullam interdum mattis sapien quis porttitor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus aliquet rutrum ipsum id euismod. Maecenas consectetur massa et mi porta viverra. Nunc quam nibh, dignissim vitae maximus et, ullamcorper nec lorem. Nunc vitae justo dapibus, luctus lacus vitae, pretium elit. Maecenas et efficitur leo. Curabitur mauris lectus, placerat quis vehicula vitae, auctor ut urna. Quisque rhoncus pharetra luctus. In hac habitasse platea dictumst. Integer sit amet metus nec eros malesuada aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi hendrerit mi ac leo aliquam, sit amet ultricies libero commodo. Mauris dapibus purus metus, sit amet viverra nibh imperdiet et. Nullam porta nulla tellus, quis vehicula diam imperdiet non. Vivamus enim massa, bibendum in fermentum in, ultrices at ex. - -Suspendisse fermentum id nibh eget accumsan. Duis dapibus bibendum erat ut sollicitudin. Aliquam nec felis risus. Pellentesque rhoncus ligula id sem maximus mollis sed nec massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ipsum ipsum, sodales sed enim id, convallis faucibus eros. Donec ultricies dictum tincidunt. Cras vitae nibh arcu. Pellentesque cursus, sapien nec consequat fermentum, ipsum ante suscipit dui, imperdiet hendrerit est nisl eu massa. Quisque vitae sem ligula. Aenean iaculis metus ut mauris interdum laoreet. Vivamus sed gravida dolor. - -Morbi nulla metus, porttitor sed eros sit amet, efficitur efficitur est. In vel nisl urna. Ut aliquet tellus at congue convallis. Phasellus imperdiet lobortis sollicitudin. Integer sodales, sem eu ultricies pharetra, erat erat porttitor odio, eget dapibus libero ipsum eget velit. Phasellus gravida nulla nisl, eu pharetra mi auctor vel. Sed blandit pharetra velit, ut egestas libero placerat non. Aliquam a interdum quam. Proin at tortor nec dui sollicitudin tempus sed vestibulum elit. Nunc non sollicitudin velit. - -Aenean consequat diam velit, sed rutrum tortor faucibus dictum. Quisque at semper augue. Duis ut est eget mi ornare bibendum id et ligula. Phasellus consequat tortor non leo pulvinar posuere. Proin vestibulum eleifend felis, in hendrerit tortor sollicitudin eu. Phasellus hendrerit, lacus vel laoreet interdum, dui tortor consequat justo, commodo ultricies arcu felis vitae enim. Vivamus eu sapien at leo suscipit rutrum eu at justo. Aenean et dolor a libero ullamcorper posuere. Integer laoreet placerat nisi in vulputate. Mauris laoreet eget risus sed cursus. Donec scelerisque neque a libero eleifend hendrerit. Nulla varius condimentum nunc sit amet fermentum. Aliquam lorem ex, varius nec mollis ut, ultrices in neque. Morbi sit amet porta leo. Integer iaculis fermentum lacus in vestibulum. - -Ut gravida, tellus ut maximus ultrices, erat est venenatis nisl, vitae pretium massa ex ac magna. Sed non purus eget ligula aliquet volutpat non quis arcu. Nam aliquam tincidunt risus, sit amet fringilla sapien vulputate ut. Mauris luctus suscipit pellentesque. Nunc porttitor dapibus ex quis tempus. Ut ullamcorper metus a eros vulputate, vitae viverra lectus convallis. Mauris semper imperdiet augue quis tincidunt. Integer porta pretium magna, sed cursus sem scelerisque sollicitudin. Nam efficitur, nibh pretium eleifend vestibulum, purus diam posuere sem, in egestas mauris augue sit amet urna. - -Vestibulum tincidunt euismod massa in congue. Duis interdum metus non laoreet fringilla. Donec at ligula congue, tincidunt nunc non, scelerisque nunc. Donec bibendum magna non est scelerisque feugiat at nec neque. Ut orci tortor, tempus eget massa non, dignissim faucibus dolor. Nam odio risus, accumsan pretium neque eget, accumsan dignissim dui. In ut neque auctor, scelerisque tellus sed, ullamcorper nisi. Suspendisse varius cursus quam at hendrerit. Vivamus elit libero, sagittis vitae sem ac, vulputate iaculis ligula. - -Sed lobortis laoreet purus sit amet rutrum. Pellentesque feugiat non leo vel lacinia. Quisque feugiat nisl a orci bibendum vestibulum. In et sollicitudin urna. Morbi a arcu ac metus faucibus tempus. Nam eu imperdiet sapien, suscipit mattis tortor. Aenean blandit ipsum nisi, a eleifend ligula euismod at. Integer tincidunt pharetra felis, mollis placerat mauris hendrerit at. Curabitur convallis, est sit amet luctus volutpat, massa lacus cursus augue, sed eleifend magna quam et risus. Aliquam lobortis tincidunt metus vitae porttitor. Suspendisse potenti. Aenean ullamcorper, neque id commodo luctus, nulla nunc lobortis quam, id dapibus neque dui nec mauris. Etiam quis lorem quis elit commodo ornare. Ut pharetra purus ultricies enim ultrices efficitur. Proin vehicula tincidunt molestie. Mauris et placerat sem. - -Aliquam erat volutpat. Suspendisse velit turpis, posuere ac lacus eu, lacinia laoreet velit. Sed interdum felis neque, id blandit sem malesuada sit amet. Ut sagittis justo erat, efficitur semper orci tempor sed. Donec enim massa, posuere varius lectus egestas, pellentesque posuere mi. Cras tincidunt ut libero sed mattis. Suspendisse quis magna et tellus posuere interdum vel at purus. Pellentesque fringilla tristique neque, id aliquet tellus ultricies non. Duis ut tellus vel odio lobortis vulputate. - -Integer at magna ac erat convallis vestibulum. Sed lobortis porttitor mauris. Fusce varius lorem et volutpat pulvinar. Aenean ac vulputate lectus, vitae consequat velit. Suspendisse ex dui, varius ut risus ut, dictum scelerisque sem. Vivamus urna orci, volutpat ut convallis ac, venenatis vitae urna. In hac habitasse platea dictumst. Etiam eu purus arcu. Aenean vulputate leo urna, vel tristique dui sagittis euismod. Suspendisse non tellus efficitur ante rhoncus volutpat at et sapien. - -Sed dapibus accumsan porttitor. Phasellus facilisis lectus finibus ligula dignissim, id pulvinar lectus feugiat. Nullam egestas commodo nisi posuere aliquet. Morbi sit amet tortor sagittis, rutrum dui nec, dapibus sapien. Sed posuere tortor tortor, interdum auctor magna varius vitae. Vestibulum id sagittis augue. Curabitur fermentum arcu sem, eu condimentum quam rutrum non. Phasellus rutrum nibh quis lectus rhoncus pretium. Curabitur dictum interdum elit. Vestibulum maximus sodales imperdiet. Mauris auctor nec purus sed venenatis. In in urna purus. - -Duis placerat molestie suscipit. Morbi a elit id purus efficitur consequat. Nunc ac commodo turpis. Etiam sit amet lacus a ipsum tempus venenatis sed vel nibh. Duis elementum aliquam mi sed tristique. Morbi ligula tortor, semper ac est vel, lobortis maximus erat. Curabitur ipsum felis, laoreet vel condimentum eget, ullamcorper sit amet mauris. Nulla facilisi. Nam at purus sed mi egestas placerat vitae vel magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse at dignissim diam. Phasellus consectetur eget neque vel viverra. Donec sollicitudin mattis dolor vel malesuada. Vivamus vehicula leo neque, vitae fermentum leo posuere et. Praesent dui est, finibus sit amet tristique quis, pharetra vel nibh. - -Duis nulla leo, accumsan eu odio eget, sagittis semper orci. Quisque ullamcorper ligula quam, commodo porttitor mauris ullamcorper eu. Cras varius sagittis felis in aliquam. Duis sodales risus ac justo vehicula, nec mattis diam lacinia. Cras eget lectus ipsum. Ut commodo, enim vitae malesuada hendrerit, ex dolor egestas lectus, sit amet hendrerit metus diam nec est. Vestibulum tortor metus, lobortis sit amet ante eget, tempor molestie lacus. In molestie et urna et semper. Mauris mollis, sem non hendrerit condimentum, sapien nisi cursus est, non suscipit quam justo non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam enim est, porta ac feugiat vitae, rutrum in lorem. Duis vehicula tortor ut posuere maximus. - -Nullam vestibulum non tellus sed commodo. Quisque mattis elit sit amet sapien sollicitudin, ut condimentum nisl congue. Aenean sagittis massa vel elit faucibus fermentum. Donec tincidunt nisi nec nisl sodales pellentesque. Mauris congue congue ligula ut suscipit. Vivamus velit tortor, tempor et gravida eget, fermentum sit amet ante. Nullam fringilla, lorem at ultrices cursus, urna neque ornare dolor, eu lacinia orci enim sed nibh. Ut a ullamcorper lectus, id mattis purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus sollicitudin posuere. Nunc at augue lacus. Aenean efficitur leo sit amet lacinia efficitur. - -Quisque venenatis quam mi, in pharetra odio vulputate eu. In vel nisl pulvinar, pulvinar ligula ut, sodales risus. Sed efficitur lectus at vestibulum tincidunt. Vestibulum eu ullamcorper elit. Fusce vestibulum magna enim, et tempor lacus posuere vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer leo elit, luctus nec mattis sit amet, sollicitudin in turpis. - -Proin convallis venenatis leo, vitae tristique erat iaculis nec. Nulla facilisi. Duis porttitor, sapien et bibendum vulputate, sem libero sodales lacus, non malesuada felis erat ut libero. Nam non felis semper, finibus est a, mattis mauris. Praesent nec eros quam. Nulla hendrerit, augue consectetur eleifend ultricies, purus mi condimentum nulla, eget dapibus est nunc sed libero. Nullam elementum dui erat, vitae luctus libero sollicitudin et. Nulla odio magna, placerat in augue eu, dapibus imperdiet odio. Suspendisse imperdiet metus sit amet rhoncus dapibus. Cras at enim et urna vehicula cursus eu a mauris. Integer magna ante, eleifend ac placerat vitae, porta at nisi. Cras eget malesuada orci. Curabitur nunc est, vulputate id viverra et, dignissim sed odio. Curabitur non mattis sem. Sed bibendum, turpis vitae vehicula faucibus, nunc quam ultricies lectus, vitae viverra felis turpis at libero. - -Nullam ut egestas ligula. Proin hendrerit justo a lectus commodo venenatis. Nulla facilisi. Ut cursus lorem quis est bibendum condimentum. Aenean in tristique odio. Fusce tempor hendrerit ipsum. Curabitur mollis felis justo, quis dapibus erat auctor vel. Sed augue lectus, finibus ut urna quis, ullamcorper vestibulum dui. Etiam molestie aliquam tempor. Integer mattis sollicitudin erat, et tristique elit varius vel. Mauris a ex justo. - -Nam eros est, imperdiet non volutpat rutrum, pellentesque accumsan ligula. Duis sit amet turpis metus. Aenean in rhoncus metus, ac fringilla ex. Suspendisse condimentum egestas purus, ut pharetra odio vulputate vel. Duis tincidunt massa a placerat ultrices. Mauris ultricies nibh sit amet condimentum malesuada. Duis tincidunt id ipsum sed congue. - -Praesent eu ex augue. Nullam in porta ligula. In tincidunt accumsan arcu, in pellentesque magna tristique in. Mauris eleifend libero ac nisl viverra faucibus. Nam sollicitudin dolor in commodo hendrerit. Cras at orci metus. Ut quis laoreet orci. Vivamus ultrices leo pellentesque tempor aliquet. Maecenas ut eros vitae purus placerat vestibulum. Etiam vitae gravida dolor, quis rhoncus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. - -Suspendisse fringilla lacinia sagittis. Integer tincidunt consectetur tristique. Morbi non orci convallis, congue sapien quis, vulputate nunc. Donec a libero vel magna elementum facilisis non quis mi. Mauris posuere tellus non ipsum ultrices elementum. Vivamus massa velit, facilisis quis placerat aliquet, aliquet nec leo. Praesent a maximus sem. Sed neque elit, feugiat vel quam non, molestie sagittis nunc. Etiam luctus nunc ac mauris scelerisque, nec rhoncus lacus convallis. Nunc pharetra, nunc ac pulvinar aliquam, ex ipsum euismod augue, nec porttitor lacus turpis vitae neque. Fusce bibendum odio id tortor faucibus pellentesque. Sed ac porta nibh, eu gravida erat. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis ullamcorper felis. Nulla mattis sagittis ante ac tincidunt. Integer ac felis efficitur, viverra libero et, facilisis ligula. Suspendisse a metus a massa rhoncus posuere. Phasellus suscipit ligula ut lacus facilisis, ac pellentesque ex tempor. Quisque consectetur massa mi, ac molestie libero dictum quis. Proin porttitor ligula quis erat tincidunt venenatis. Proin congue nunc sed elit gravida, nec consectetur lectus sodales. Etiam tincidunt convallis ipsum at vestibulum. Quisque maximus enim et mauris porttitor, et molestie magna tristique. Morbi vitae metus elit. Maecenas sed volutpat turpis. Aliquam vitae dolor vestibulum, elementum purus eget, dapibus nibh. Nullam egestas dui ac rutrum semper. - -Etiam hendrerit est metus, et condimentum metus aliquam ac. Pellentesque id neque id ipsum rhoncus vulputate. Aliquam erat nisl, posuere sit amet ligula ac, fermentum blandit felis. Vivamus fermentum mi risus, non lacinia purus viverra id. Aenean ac sapien consequat, finibus mauris nec, porta sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis consectetur ex, dignissim bibendum nulla. Phasellus ac libero at quam vehicula euismod non eu leo. Phasellus a sapien augue. - -Maecenas ligula dui, bibendum vitae mauris et, auctor laoreet felis. Duis non libero a mi semper mattis. Quisque consequat luctus massa, quis tristique eros auctor feugiat. Maecenas sodales euismod neque vitae facilisis. Nullam laoreet imperdiet velit at pellentesque. Etiam massa odio, facilisis a consequat vitae, placerat vel magna. Nunc sagittis eros nec urna fringilla, pulvinar vestibulum nibh scelerisque. Sed magna metus, cursus eu consequat et, pharetra a est. Suspendisse elementum neque a dui malesuada lacinia. Donec sed ipsum volutpat, cursus urna id, ullamcorper arcu. Maecenas laoreet nisl eget velit egestas sollicitudin. Etiam nisl turpis, mollis id dignissim vitae, tristique vehicula ante. Maecenas eget placerat est, at rutrum augue. Vivamus faucibus lacinia ullamcorper. Sed pulvinar urna sodales ante sodales, at gravida leo dictum. - -Morbi maximus, quam a lobortis bibendum, enim felis varius elit, ac vehicula elit nisl ut lacus. Quisque ut arcu augue. Praesent id turpis quam. Sed sed arcu eros. Maecenas at cursus lorem, ac eleifend nisi. Fusce mattis felis at commodo pharetra. Praesent ac commodo ipsum. Quisque finibus et eros vitae tincidunt. In hac habitasse platea dictumst. Praesent purus ipsum, luctus lobortis ornare quis, auctor eget justo. Nam vel enim sollicitudin, faucibus tortor eu, sagittis eros. Ut nec consectetur erat. Donec ultricies malesuada ligula, a hendrerit sapien volutpat in. Maecenas sed enim vitae sapien pulvinar faucibus. - -Proin semper nunc nibh, non consequat neque ullamcorper vel. Maecenas lobortis sagittis blandit. Aenean et arcu ultricies turpis malesuada malesuada. Ut quam ex, laoreet ut blandit cursus, feugiat vitae dolor. Etiam ex lacus, scelerisque vel erat vel, efficitur tincidunt magna. Morbi tristique lacinia dolor, in egestas magna ultrices vitae. Integer ultrices leo ac tempus venenatis. Praesent ac porta tortor. Vivamus ornare blandit tristique. Nulla rutrum finibus pellentesque. In non dui elementum, fermentum ipsum vel, varius magna. Pellentesque euismod tortor risus, ac pellentesque nisl faucibus eget. - -Vivamus eu enim purus. Cras ultrices rutrum egestas. Sed mollis erat nibh, at posuere nisl luctus nec. Nunc vulputate, sapien id auctor molestie, nisi diam tristique ante, non convallis tellus nibh at orci. Morbi a posuere purus, in ullamcorper ligula. Etiam elementum sit amet dui imperdiet iaculis. Proin vitae tincidunt ipsum, sit amet placerat lectus. Curabitur commodo sapien quam, et accumsan lectus fringilla non. Nullam eget accumsan enim, ac pharetra mauris. Sed quis tristique velit, vitae commodo nisi. Duis turpis dui, maximus ut risus at, finibus consequat nunc. Maecenas sed est accumsan, aliquet diam in, facilisis risus. Curabitur vehicula rutrum auctor. Nam iaculis risus pulvinar maximus viverra. Nulla vel augue et ex sagittis blandit. - -Ut sem nulla, porta ac ante ac, posuere laoreet eros. Donec sodales posuere justo a auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras mollis at orci hendrerit porta. Nullam sodales tortor tortor, non lacinia diam finibus id. Duis libero orci, suscipit ac odio et, dictum consequat ipsum. Pellentesque eu ligula sagittis, volutpat eros at, lacinia lorem. Cras euismod tellus in iaculis tempor. Quisque accumsan, magna a congue venenatis, ante ipsum aliquam lectus, at egestas enim nunc at justo. Quisque sem purus, viverra ut tristique ut, maximus id enim. Etiam quis placerat sem. In sollicitudin, lacus eu rutrum mollis, nulla eros luctus elit, vel dapibus urna purus nec urna. Phasellus egestas massa quam, ac molestie erat hendrerit a. Praesent ultrices neque ut turpis molestie auctor. Etiam molestie placerat purus, et euismod erat aliquam in. Morbi id suscipit justo. - -Proin est ante, consequat at varius a, mattis quis felis. Sed accumsan nibh sit amet ipsum elementum posuere. Vestibulum bibendum id diam sit amet gravida. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi nec dolor vel ipsum dignissim hendrerit vel non ipsum. Praesent facilisis orci quis elit auctor lobortis. Phasellus cursus risus lectus, vel lobortis libero dapibus in. Quisque tristique tempus leo a pulvinar. Pellentesque a magna tincidunt, pellentesque massa nec, laoreet orci. Morbi congue ornare dolor quis commodo. Phasellus massa nisi, tincidunt at eros dictum, hendrerit lobortis urna. Maecenas porta, magna id mattis molestie, nibh tellus lobortis sem, eget tincidunt ipsum quam eu turpis. - -Ut gravida orci risus, vel rutrum mauris vehicula id. Etiam bibendum, neque a placerat condimentum, ex orci imperdiet lectus, quis dapibus arcu lacus eget lectus. Sed consequat non mi sit amet venenatis. Fusce vestibulum erat libero, eget hendrerit risus vulputate sollicitudin. Integer sed eleifend felis. Donec commodo, sem eu mattis placerat, urna odio aliquam tellus, et laoreet justo tellus eget erat. Fusce sed suscipit tortor. Nam hendrerit nibh ac nunc auctor lacinia. Pellentesque placerat condimentum ipsum, eget semper tortor hendrerit vel. Nullam non urna eu lacus pellentesque congue ut id eros. - -Nunc finibus leo in rhoncus tristique. Sed eu ipsum nec nisl egestas faucibus eget a felis. Pellentesque vitae nisi in nulla accumsan fermentum. Sed venenatis feugiat eleifend. Fusce porttitor varius placerat. Aliquam aliquet lacus sit amet mattis mollis. Sed vel nulla quis dolor suscipit vehicula ac viverra lorem. Duis viverra ipsum eget nulla ullamcorper fermentum. Mauris tincidunt arcu quis quam fringilla ornare. Donec et iaculis tortor. Nam ultricies libero vel ipsum aliquet efficitur. Morbi eget dolor aliquam, tempus sapien eget, viverra ante. Donec varius mollis ex, sed efficitur purus euismod interdum. Quisque vel sapien non neque tincidunt semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Suspendisse sit amet purus leo. Fusce lectus lorem, aliquam ac nulla eget, imperdiet ornare eros. Nullam sem augue, varius in nisi non, sollicitudin pellentesque ante. Etiam eu odio condimentum, tempor libero et, egestas arcu. Cras pellentesque eleifend aliquet. Pellentesque non blandit ligula. Ut congue viverra rhoncus. Phasellus mattis mi ac eros placerat, eu feugiat tellus ultrices. Aenean mollis laoreet libero eu imperdiet. Cras sed pulvinar mi, ac vehicula ligula. Vestibulum sit amet ex massa. In a egestas eros. - -Mauris pretium ipsum risus, venenatis cursus ante imperdiet id. Praesent eu turpis nec risus feugiat maximus ullamcorper ac lectus. Integer placerat at mi vel dapibus. Vestibulum fermentum turpis sit amet turpis viverra, id aliquet diam suscipit. Nam nec ex sed ante ullamcorper pharetra quis sit amet risus. Sed ac faucibus velit, id feugiat nibh. Nullam eget ipsum ex. Vivamus tincidunt non nunc non faucibus. Quisque bibendum viverra facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at nisi hendrerit quam suscipit egestas. Curabitur laoreet maximus ultricies. Duis ut tellus ac augue molestie dictum. - -Suspendisse rhoncus iaculis erat, ut ullamcorper est tristique eget. Donec auctor nec risus at gravida. Vivamus volutpat vulputate tellus, vel ultricies eros suscipit eget. Ut pulvinar id mi eu tempus. Morbi malesuada augue in dui varius, nec blandit neque vehicula. Donec ornare nec nisl in mollis. Morbi enim nisi, rhoncus nec est id, dapibus tempus urna. Ut id elit a felis vestibulum consectetur. Duis lectus quam, pharetra sit amet diam sed, posuere vestibulum erat. Fusce vitae maximus massa. Nullam id metus tempus, iaculis risus eu, lobortis urna. Quisque in congue urna. Pellentesque placerat neque in augue dapibus, non varius ex malesuada. Curabitur ut eleifend libero. Fusce vitae ligula luctus, fermentum enim vitae, ultrices erat. - -Sed viverra augue turpis, scelerisque egestas sapien mattis eu. Duis laoreet magna at ex pharetra dapibus. Praesent eget odio vel quam venenatis dictum. Nulla in sollicitudin dolor. Mauris lobortis nec eros vel rhoncus. Vestibulum porta viverra venenatis. Curabitur vel scelerisque quam, a egestas velit. Praesent volutpat tincidunt magna at laoreet. - -Cras nec lorem odio. Pellentesque quis dui urna. Praesent at tellus ac lectus scelerisque placerat nec eu risus. Vestibulum sit amet mattis ligula. Vivamus sed nisi at leo elementum accumsan at sit amet arcu. Aenean mattis tellus nec leo gravida, eget hendrerit nisl faucibus. Mauris pellentesque luctus condimentum. Maecenas pretium sapien nunc, eget commodo dolor maximus id. Mauris vestibulum accumsan massa a dictum. Phasellus interdum quam ligula, ut maximus diam blandit aliquam. Nunc vitae ex eu erat condimentum consectetur. Maecenas interdum condimentum volutpat. - -Donec et enim a libero rutrum laoreet. Praesent a condimentum sem, at tincidunt quam. In vel molestie risus. Sed urna dui, molestie vitae mollis laoreet, tempor quis lectus. Praesent vitae auctor est, et aliquet nunc. Curabitur vulputate blandit nulla, at gravida metus. Maecenas gravida dui eu iaculis tristique. Pellentesque posuere turpis nec auctor eleifend. Suspendisse bibendum diam eu tellus lobortis, et laoreet quam congue. In hac habitasse platea dictumst. Morbi dictum neque velit, eget rutrum eros ultrices sit amet. - -Phasellus fermentum risus pharetra consectetur bibendum. Donec magna tortor, lacinia vitae nibh quis, aliquet pretium lorem. Donec turpis nisi, pretium eu enim volutpat, mattis malesuada augue. Nullam vel tellus iaculis, sollicitudin elit eget, tincidunt lacus. Fusce elementum elementum felis et iaculis. Suspendisse porta eros nec neque malesuada, in malesuada ante sollicitudin. Vivamus bibendum viverra molestie. - -Integer feugiat, erat nec convallis aliquam, velit felis congue erat, molestie eleifend tellus erat in tellus. Nunc et justo purus. Donec egestas fermentum dui non feugiat. Quisque in sapien sagittis, gravida quam id, iaculis lectus. Cras sagittis rhoncus bibendum. Fusce quis metus in velit scelerisque tincidunt at non ipsum. Vivamus efficitur ante eu odio vulputate, vitae ultricies risus vehicula. Proin eget odio eu sem tincidunt feugiat vel id lorem. - -Vestibulum sit amet nulla dignissim, euismod mi in, fermentum tortor. Donec ut aliquet libero, lacinia accumsan velit. Donec et nulla quam. Nullam laoreet odio nec nunc imperdiet, a congue eros venenatis. Quisque nec tellus sit amet neque interdum posuere. Duis quis mi gravida, tincidunt diam convallis, ultricies augue. Mauris consequat risus non porttitor congue. Ut in ligula consequat, viverra nunc a, eleifend enim. Duis ligula urna, imperdiet nec facilisis et, ornare eu ex. Proin lobortis lectus a lobortis porttitor. Nulla leo metus, egestas eu libero sed, pretium faucibus felis. Vestibulum non sem tortor. Nam cursus est leo. Vivamus luctus enim odio, non interdum sem dapibus a. Aenean accumsan consequat lectus in imperdiet. - -Donec vehicula laoreet ipsum in posuere. Quisque vel quam imperdiet, sollicitudin nisi quis, suscipit velit. Morbi id sodales mauris. Curabitur tellus arcu, feugiat sed dui sit amet, sodales sagittis libero. Aenean vel suscipit metus, non placerat leo. Vestibulum quis nulla elit. Proin scelerisque non ante ut commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed non urna dolor. Suspendisse convallis mi porta pulvinar ultrices. Suspendisse quam ipsum, hendrerit non scelerisque molestie, interdum dictum nunc. Morbi condimentum condimentum turpis eu luctus. Pellentesque sagittis sollicitudin odio, sed ultricies felis ornare sit amet. Sed ultrices ex leo, a tincidunt nisl gravida sed. Nullam ornare accumsan porta. Praesent consectetur id est nec sollicitudin. - -In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed ultrices nibh. Duis accumsan suscipit eros, a dictum odio tempus sit amet. Aenean imperdiet erat ac lacus finibus, scelerisque cursus massa imperdiet. Mauris molestie risus ut lacinia posuere. Nulla et sodales purus. Maecenas orci erat, placerat in tristique quis, placerat in mi. - -Donec sollicitudin pellentesque odio in feugiat. Morbi eu dolor ut mauris congue sollicitudin. Aliquam erat volutpat. Nulla id varius dui. Curabitur finibus urna ante, consectetur interdum nisi volutpat a. Quisque quis mi tristique, consequat tellus eget, rutrum sapien. Vivamus vitae tellus vulputate, rutrum ex eu, vulputate sem. Suspendisse viverra lorem tellus, vel interdum orci gravida quis. Ut laoreet arcu at mi ullamcorper finibus. Duis porta sagittis vestibulum. Sed commodo nisl vitae urna sollicitudin, nec lacinia est sodales. Curabitur imperdiet sodales dui sed iaculis. Sed ac tellus maximus, eleifend quam sit amet, feugiat elit. Aenean viverra, dui at mattis varius, est odio vestibulum sapien, sit amet mollis libero massa nec velit. Etiam quis sodales justo. - -Ut ultricies, sem eget sodales feugiat, nunc arcu congue elit, ac tempor justo massa nec purus. Maecenas enim nunc, pharetra eget dictum sit amet, tempus pellentesque velit. Suspendisse venenatis ligula in nulla mattis, et imperdiet ex tincidunt. Etiam vulputate, tellus et ultrices suscipit, enim velit laoreet massa, vitae congue odio enim ac urna. Morbi quam lorem, iaculis ac varius sagittis, euismod quis dolor. In ut dui eu purus feugiat consectetur. Vestibulum cursus velit quis lacus pellentesque iaculis. Cras in risus sed mauris porta rutrum. Nulla facilisi. Nullam eu bibendum est, non pellentesque lectus. Sed imperdiet feugiat lorem, quis convallis ante auctor in. Maecenas justo magna, scelerisque sit amet tellus eget, varius elementum risus. Duis placerat et quam sed varius. - -Duis nec nibh vitae nibh dignissim mollis quis sed felis. Curabitur vitae quam placerat, venenatis purus ut, euismod nisl. Curabitur porttitor nibh eu pulvinar ullamcorper. Suspendisse posuere nec ipsum ac dapibus. Cras convallis consectetur urna. Phasellus a nibh in dolor lacinia posuere id eget augue. In eu pharetra lorem, vitae cursus lacus. Aliquam tincidunt nibh lectus. Aenean facilisis ultricies posuere. Sed ut placerat orci. Curabitur scelerisque gravida blandit. Maecenas placerat ligula eget suscipit fringilla. Mauris a tortor justo. Aliquam hendrerit semper mollis. Phasellus et tincidunt libero. Etiam vel quam libero. - -Quisque aliquet tempor ex. Ut ante sem, vehicula at enim vel, gravida porta elit. Etiam vitae lacus a neque lobortis consectetur. Mauris sed interdum odio. Mauris elementum ex blandit tempor cursus. Integer in enim in leo viverra elementum. Fusce consectetur metus et sem rutrum, mattis euismod diam semper. Nunc sed ipsum vel urna consequat vehicula. Donec cursus pretium lorem, vestibulum pretium felis commodo sit amet. Nam blandit felis enim, eget gravida ex faucibus a. In nec neque massa. Etiam laoreet posuere ipsum. Praesent volutpat nunc dolor, ac vulputate magna facilisis non. Aenean congue turpis vel lectus sollicitudin tristique. Sed nec consequat purus, non vehicula quam. Etiam ultricies, est ac dictum tincidunt, turpis turpis pretium massa, a vulputate libero justo at nibh. - -Aliquam erat volutpat. Cras ultrices augue ac sollicitudin lobortis. Curabitur et aliquet purus. Duis feugiat semper facilisis. Phasellus lobortis cursus velit, a sollicitudin tortor. Nam feugiat sapien non dapibus condimentum. Morbi at mi bibendum, commodo quam at, laoreet enim. Integer eu ultrices enim. Sed vestibulum eu urna ut dictum. Curabitur at mattis leo, sed cursus massa. Aliquam porttitor, felis quis fermentum porttitor, justo velit feugiat nulla, eget condimentum sem dui ut sapien. - -In fringilla elit eu orci aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eget fringilla tellus. Curabitur fermentum, mi et condimentum suscipit, elit neque bibendum dui, et hendrerit nunc metus id ipsum. Morbi placerat mi in hendrerit congue. Ut feugiat mauris eget scelerisque viverra. Vivamus sit amet erat dictum, sagittis lectus nec, pulvinar lorem. Sed non enim ac dui sollicitudin aliquet. Quisque ut lacus dolor. Fusce hendrerit malesuada euismod. Nulla faucibus vel mauris eu mollis. Mauris est diam, fringilla ac arcu feugiat, efficitur volutpat turpis. Aliquam venenatis cursus massa sed porttitor. Ut ac finibus enim, in tincidunt sapien. - -Nunc faucibus semper turpis a lacinia. Phasellus gravida, libero vel pulvinar ornare, ex sem tincidunt lectus, sit amet convallis augue risus at tortor. Quisque sit amet ipsum id nulla posuere vestibulum. Pellentesque scelerisque mauris vel leo viverra sodales. Nulla viverra aliquam ex, ut rutrum enim fermentum venenatis. Aenean eget dapibus ex, eget faucibus metus. Vestibulum volutpat leo in diam semper, eget porta magna suscipit. Sed sit amet nulla blandit, aliquam dolor ac, gravida velit. Sed vel velit viverra, maximus est id, convallis justo. - -Curabitur nulla ante, vulputate at libero vel, ullamcorper rutrum nibh. Pellentesque porttitor eu mauris id mattis. Duis vulputate augue elit, eget interdum justo pretium vel. Maecenas eu vulputate arcu, eget posuere purus. Suspendisse viverra a velit dictum eleifend. Suspendisse vitae dapibus diam. Donec vehicula justo in ante interdum, eu luctus diam placerat. Vivamus convallis ipsum eu orci suscipit, sed fermentum enim euismod. Maecenas faucibus elit vitae ex ornare tristique. Donec vestibulum nec elit sit amet porttitor. Aenean tempor lectus eget tortor hendrerit luctus. Nullam interdum vitae lectus vel feugiat. Cras in risus non magna consectetur lobortis. Sed faucibus enim quis gravida convallis. - -Phasellus eget massa sit amet libero ultrices suscipit. Vivamus at risus sapien. Nam mollis nunc eget velit dictum maximus. Sed pellentesque, nunc ac fringilla lacinia, quam enim mattis ex, sed euismod tortor metus eu neque. Ut mattis nisl ut lectus rhoncus, sodales bibendum eros porta. Nulla porttitor enim nec diam sagittis, eget porta velit efficitur. Vestibulum ultricies eros neque. Phasellus rutrum suscipit enim, in interdum ante gravida vitae. Sed in sagittis diam, non commodo velit. - -Morbi hendrerit odio orci, nec tincidunt odio rhoncus nec. Mauris neque velit, vehicula a lorem at, suscipit tristique dui. Sed finibus, nisl in mattis convallis, turpis neque sodales lacus, eu porta enim magna non diam. Nam commodo sodales risus consectetur malesuada. In eget elementum justo. Phasellus sit amet massa imperdiet, dapibus nunc sit amet, suscipit orci. Fusce condimentum laoreet feugiat. Ut ut viverra ante. Praesent bibendum interdum commodo. Nulla mollis nisi a est ornare volutpat. Sed at ligula eu nisi dapibus tempus. Proin cursus vestibulum justo, nec efficitur justo dignissim vel. Nunc quis maximus eros. - -Cras viverra, diam a tristique mattis, libero felis vulputate tellus, a ornare felis leo a dui. Nulla ante nulla, finibus ut tellus ut, blandit pharetra nibh. Proin eleifend fermentum ex, eget auctor libero vulputate in. Nullam ultricies, mauris placerat pretium placerat, leo urna lobortis leo, vel placerat arcu libero sed mauris. Aliquam mauris ligula, ornare at urna at, eleifend gravida ligula. Vestibulum consectetur ut nulla non scelerisque. Donec ornare, sem nec elementum aliquam, urna nulla bibendum metus, eu euismod dui ligula ac est. Fusce laoreet erat eu ex lobortis, quis bibendum ligula interdum. Sed vel mi erat. Vivamus id lacus ac enim mattis tempor. Nunc ultricies pellentesque enim sed euismod. Fusce tincidunt convallis elit quis aliquam. Mauris nulla ipsum, sollicitudin quis diam ac, feugiat volutpat tellus. In nibh nibh, vulputate quis tincidunt quis, pulvinar eget magna. Pellentesque quis finibus dolor. Suspendisse viverra vitae lectus non eleifend. - -Nunc ut orci et sapien maximus semper. Nulla dignissim sem urna, ac varius lectus ultricies id. Quisque aliquet pulvinar pretium. In ultricies molestie tellus vehicula porta. Nam enim lorem, aliquam eget ex et, hendrerit volutpat quam. Maecenas diam lacus, pellentesque eget tempus ac, pharetra eu elit. Donec vel eros a sem facilisis vulputate. Nullam ac nisi vulputate, laoreet nisl ac, eleifend sem. Nullam mi massa, rhoncus sed pharetra interdum, tincidunt eget nunc. Aliquam viverra mattis posuere. Mauris et dui sed nisl sollicitudin fermentum quis ut arcu. Nam placerat eget orci at tincidunt. Curabitur vel turpis metus. Phasellus nibh nulla, fermentum scelerisque sem vel, gravida tincidunt velit. Pellentesque vel quam tempor, finibus massa pellentesque, condimentum dui. - -Donec at mattis neque. Etiam velit diam, consequat auctor mauris id, hendrerit faucibus metus. Maecenas ullamcorper eros a est sodales, ac consectetur odio scelerisque. Donec leo metus, imperdiet at pellentesque vel, feugiat id erat. Suspendisse at magna enim. Vestibulum placerat sodales lorem id sollicitudin. Aenean at euismod ligula, eget mollis diam. Phasellus pulvinar, orci nec pretium condimentum, est erat facilisis purus, quis feugiat augue elit aliquam nulla. Aenean vitae tortor id risus congue tincidunt. Sed dolor enim, mattis a ullamcorper id, volutpat ac leo. - -Proin vehicula feugiat augue, id feugiat quam sodales quis. Donec et ultricies massa, a lacinia nulla. Duis aliquam augue ornare euismod viverra. Ut lectus risus, rutrum sit amet efficitur a, luctus nec nisl. Cras volutpat ullamcorper congue. Sed vitae odio metus. Phasellus aliquet euismod varius. - -Nullam sem ex, malesuada ut magna ut, pretium mollis arcu. Nam porttitor eros cursus mi lacinia faucibus. Suspendisse aliquet eleifend iaculis. Maecenas sit amet viverra tortor. Nunc a mollis risus. Etiam tempus dolor in tortor malesuada mattis. Ut tincidunt venenatis est sit amet dignissim. Vestibulum massa enim, tristique sed scelerisque eu, fringilla ac velit. Donec efficitur quis urna sit amet malesuada. Vestibulum consequat ac ligula in dapibus. Maecenas massa massa, molestie non posuere nec, elementum ut magna. In nisi erat, mollis non venenatis eu, faucibus in justo. Morbi gravida non ex non egestas. Pellentesque finibus laoreet diam, eu commodo augue congue vitae. - -Aenean sem mi, ullamcorper dapibus lobortis vitae, interdum tincidunt tortor. Vivamus eget vulputate libero. Ut bibendum posuere lectus, vel tincidunt tortor aliquet at. Phasellus malesuada orci et bibendum accumsan. Aliquam quis libero vel leo mollis porta. Sed sagittis leo ac lacus dictum, ac malesuada elit finibus. Suspendisse pharetra luctus commodo. Vivamus ultricies a odio non interdum. Vivamus scelerisque tincidunt turpis quis tempor. Pellentesque tortor ligula, varius non nunc eu, blandit sollicitudin neque. Nunc imperdiet, diam et tristique luctus, ipsum ex condimentum nunc, sit amet aliquam justo velit sed libero. Duis vel suscipit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tincidunt neque vel massa ultricies, id dictum leo consequat. Curabitur lobortis ultricies tellus, eget mattis nisl aliquam sit amet. - -Proin at suscipit justo. Vivamus ut vestibulum nisl. Pellentesque enim odio, pharetra non magna sed, efficitur auctor magna. Praesent tincidunt ante quis ante hendrerit viverra. Pellentesque vel ipsum id magna vulputate efficitur. Sed nec neque accumsan, pulvinar sapien quis, euismod mauris. Donec condimentum laoreet sapien quis gravida. Quisque sed mattis purus. Vestibulum placerat vel neque maximus scelerisque. - -Vestibulum mattis quam quis efficitur elementum. Duis dictum dolor ac scelerisque commodo. Fusce sollicitudin nisi sit amet dictum placerat. Suspendisse euismod pharetra eleifend. In eros nisl, porttitor sed mauris at, consectetur aliquet mauris. Donec euismod viverra neque sed fermentum. Phasellus libero magna, accumsan ut ultricies vitae, dignissim eget metus. Donec tellus turpis, interdum eget maximus nec, hendrerit eget massa. Curabitur auctor ligula in iaculis auctor. In ultrices quam suscipit cursus finibus. Aenean id mi at dolor interdum iaculis vitae ut lorem. Nullam sed nibh fringilla, lacinia odio nec, placerat erat. In dui libero, viverra ac viverra ac, pellentesque sit amet turpis. - -Nulla in enim ex. Sed feugiat est et consectetur venenatis. Cras varius facilisis dui vel convallis. Vestibulum et elit eget tellus feugiat pellentesque. In ut ante eu purus aliquet posuere. Nulla nec ornare sem, sed luctus lorem. Nam varius iaculis odio, eget faucibus nisl ullamcorper in. Sed eget cursus felis, nec efficitur nisi. - -Vivamus commodo et sem quis pulvinar. Pellentesque libero ante, venenatis vitae ligula sit amet, ornare sollicitudin nulla. Mauris eget tellus hendrerit, pulvinar metus quis, tempor nisi. Proin magna ex, laoreet sed tortor quis, varius fermentum enim. Integer eu dolor dictum, vulputate tortor et, aliquet ligula. Vestibulum vitae justo id mauris luctus sollicitudin. Suspendisse eget auctor neque, sodales egestas lorem. Vestibulum lacinia egestas metus vitae euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ex tellus, volutpat nec pulvinar sit amet, condimentum vitae dui. Curabitur vel felis sodales, lacinia nunc iaculis, ullamcorper augue. Pellentesque consequat dolor quis eros efficitur malesuada. Nulla ut malesuada lectus. - -Morbi et tristique ante. Aliquam erat volutpat. Vivamus vitae dui nec turpis pellentesque fermentum. Quisque eget velit massa. Pellentesque tristique aliquam nisl, eu sollicitudin justo venenatis sed. Duis eleifend sem eros, ut aliquam libero porttitor id. Sed non nunc consequat, rhoncus diam eu, commodo erat. Praesent fermentum in lectus id blandit. Donec quis ipsum at justo volutpat finibus. Nulla blandit justo nulla, at mollis lacus consequat eget. Aenean sollicitudin quis eros ut ullamcorper. - -Pellentesque venenatis nulla ut mi aliquet feugiat. Cras semper vel magna nec pharetra. Integer mattis felis et sapien commodo imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis quis luctus felis. Vestibulum justo nibh, aliquam non lectus vitae, molestie placerat justo. Donec lorem nibh, gravida sit amet hendrerit ac, maximus id ipsum. Nunc ac libero sodales risus eleifend sagittis. Phasellus est massa, lobortis elementum ex sed, scelerisque consectetur neque. Nunc faucibus neque id lorem malesuada, eget convallis ex mattis. - -Sed turpis tortor, fermentum non turpis id, posuere varius nibh. Donec iaculis lorem dui. Etiam eros ante, sodales eget venenatis at, consectetur eget risus. Curabitur non aliquam ante, a pretium justo. Maecenas tempor nisl tortor, vitae dictum nisi ultrices eu. Duis eget dui ultrices, porttitor lacus sed, lobortis purus. Quisque mattis elit nec neque sagittis, sed commodo leo blandit. Mauris sodales interdum eleifend. Vestibulum condimentum consectetur augue, id luctus diam convallis et. - -Nunc suscipit risus in justo accumsan, a placerat magna tincidunt. Proin a nisl ipsum. Sed libero dui, tristique in augue quis, auctor tristique risus. Sed porttitor ex augue, eu porta augue molestie a. Duis rhoncus purus libero, eu tempus turpis condimentum at. Sed mollis nisi id lectus placerat tincidunt. Maecenas non scelerisque elit, quis rutrum orci. Donec in tellus pharetra urna ornare lobortis. Phasellus id risus at nisi varius rutrum eu ut turpis. - -Duis dictum justo quis nisl porta, eget tincidunt magna suscipit. Sed velit massa, ullamcorper eu sodales ac, pretium a massa. Duis et rutrum tortor. Nulla accumsan hendrerit sapien, cursus volutpat eros egestas eget. Donec sollicitudin at ante quis sollicitudin. Aenean blandit feugiat diam, id feugiat eros faucibus eget. Donec viverra dolor vel justo scelerisque dignissim. Nulla semper sem nunc, rhoncus semper tellus ultricies sed. Duis in ornare diam. Donec vehicula feugiat varius. Maecenas ut suscipit est. Vivamus sem sem, finibus at dolor sit amet, euismod dapibus ligula. Vestibulum fringilla odio dapibus, congue massa eget, congue sem. Donec feugiat magna eget tortor lacinia scelerisque non et ipsum. - -Suspendisse potenti. Nunc convallis sollicitudin ex eget venenatis. Sed iaculis nibh ex, vel ornare ligula congue dignissim. Quisque sollicitudin dolor ac dui vestibulum, sit amet molestie nisi aliquet. Donec at risus felis. Aenean sollicitudin metus a feugiat porta. Aenean a tortor ut dolor cursus sagittis. Vivamus consectetur porttitor nunc in facilisis. Proin sit amet mi vel lectus consectetur ultrices. - -Sed cursus lectus vitae nunc tristique, nec commodo turpis dapibus. Pellentesque luctus ex id facilisis ornare. Morbi quis placerat dolor. Donec in lectus in arcu mattis porttitor ac sit amet metus. Cras congue mauris non risus sodales, vitae feugiat ipsum bibendum. Nulla venenatis urna sed libero elementum, a cursus lorem commodo. Mauris faucibus lobortis eros nec commodo. - -Nullam suscipit ligula ullamcorper lorem commodo blandit. Nulla porta nibh quis pulvinar placerat. Vivamus eu arcu justo. Vestibulum imperdiet est ut fermentum porttitor. Pellentesque consectetur libero in sapien efficitur scelerisque. Curabitur ac erat sit amet odio aliquet dignissim. Pellentesque mi sem, rhoncus et luctus at, porttitor rutrum lectus. Vestibulum sollicitudin sollicitudin suscipit. Aenean efficitur dolor non ultrices imperdiet. Donec vel sem ex. - -Sed convallis mauris aliquam rutrum cursus. Ut tempor porttitor sodales. Etiam eu risus ac augue gravida egestas et eu dolor. Proin id magna ex. Suspendisse quis lectus quis lorem ultricies tempus. Donec porttitor velit vitae tincidunt faucibus. Aliquam vitae semper nisi. Morbi ultrices, leo non pretium dapibus, dui libero pellentesque ex, vel placerat enim ante vitae dui. Nunc varius, sem sit amet sagittis lobortis, lectus odio scelerisque mauris, ut vestibulum orci magna quis neque. Sed id congue justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris congue nisi est, malesuada mollis elit tincidunt sed. Curabitur sed ex sit amet felis tristique elementum vitae vel nibh. - -Etiam mollis pretium lobortis. Mauris augue lacus, efficitur at lacus sed, mollis tincidunt lectus. Aliquam erat volutpat. Donec at euismod elit, et mattis felis. Sed id lobortis urna. Morbi imperdiet vestibulum leo, sed maximus leo blandit eu. Aliquam semper lorem neque, nec euismod turpis mattis mollis. Quisque lobortis urna ultrices odio pretium, ac venenatis orci faucibus. Suspendisse bibendum odio ligula, sed lobortis massa pharetra nec. Donec turpis justo, iaculis at dictum ac, finibus eu libero. Maecenas quis porttitor mi, sit amet aliquet neque. - -Vivamus auctor vulputate ante, at egestas lorem. Donec eu risus in nulla mollis ultricies at et urna. Duis accumsan porta egestas. Ut vel euismod augue. Fusce convallis nulla ante, nec fringilla velit aliquet at. Nam malesuada dapibus ligula, a aliquam nibh scelerisque ac. Praesent malesuada neque et pellentesque interdum. Curabitur volutpat at turpis vitae tristique. Vivamus porttitor semper congue. Quisque suscipit lacus mi, rhoncus ultrices tortor auctor quis. Maecenas neque neque, molestie ac facilisis eget, luctus ac lorem. In ut odio ut lacus suscipit pulvinar vitae sed elit. Nulla imperdiet, sem quis euismod sagittis, dui erat luctus dolor, faucibus faucibus erat sem eget nunc. Nam accumsan placerat malesuada. Maecenas convallis finibus pulvinar. - -Cras at placerat tortor. Morbi facilisis auctor felis sit amet molestie. Donec sodales sed lorem vitae suscipit. Etiam fermentum pharetra ipsum, nec luctus orci gravida eu. Pellentesque gravida, est non condimentum tempus, mauris ligula molestie est, in congue dolor nisl vel sapien. Duis congue tempor augue, id rutrum eros porta dapibus. Etiam rutrum eget est eget vestibulum. Aenean mollis arcu vel consequat varius. Praesent at condimentum felis. Duis nec interdum nisl. Donec commodo lorem sed sapien scelerisque malesuada non eu urna. In blandit non ipsum at porta. Nam lobortis leo vitae dui auctor, non feugiat quam bibendum. Donec auctor lectus sagittis laoreet maximus. Maecenas rhoncus laoreet porttitor. Vestibulum porttitor augue ut lectus hendrerit, eget posuere mi gravida. - -Sed mattis ex in erat pulvinar, eu imperdiet magna dapibus. Etiam nisi nibh, tempus non tellus sit amet, mattis tempor odio. Quisque nec lorem feugiat, lobortis odio et, commodo nunc. Maecenas semper purus nisi, nec vehicula nibh eleifend vitae. Nulla fermentum a lectus at maximus. Phasellus finibus metus non euismod ultrices. Etiam a pulvinar ante. Quisque convallis nec metus sit amet facilisis. Praesent laoreet massa et sollicitudin laoreet. Vestibulum in mauris aliquet, convallis mi ut, elementum purus. Nulla purus nulla, sodales at hendrerit quis, tempus sed lectus. - -Nam ut laoreet neque, ut maximus nibh. Maecenas quis justo pellentesque, sollicitudin elit at, venenatis velit. Aenean nunc velit, vehicula scelerisque odio at, consectetur laoreet purus. Duis dui purus, malesuada quis ipsum sit amet, tempor interdum libero. Curabitur porta scelerisque sapien, vitae cursus diam condimentum eu. Phasellus sed orci quam. Nullam vitae dui quis purus tincidunt vestibulum. Curabitur quis nulla porta, cursus arcu non, auctor enim. Etiam sollicitudin ex id sem vehicula mollis. Morbi viverra laoreet tincidunt. Praesent ut semper dui. Nam sit amet pretium neque. Mauris vitae luctus diam, in lacinia purus. Maecenas ut placerat justo, ut porta felis. Integer eu mauris ante. - -Aenean porttitor tellus diam, tempor consequat metus efficitur id. Suspendisse ut felis at erat tempor dictum at nec sapien. Sed vestibulum interdum felis, ac mattis mauris porta in. Nunc et condimentum massa. Sed cursus dictum justo et luctus. Integer convallis enim nisl, a rutrum lectus ultricies in. Donec dapibus lacus at nulla dapibus, id sollicitudin velit hendrerit. Fusce a magna at orci mollis rutrum ac a dolor. Aliquam erat volutpat. Morbi varius porta nunc, sit amet sodales ex hendrerit commodo. Donec tincidunt tortor sapien, vitae egestas sapien vehicula eget. - -Suspendisse potenti. Donec pulvinar felis nec leo malesuada interdum. Integer posuere placerat maximus. Donec nibh ipsum, tincidunt vitae luctus vitae, bibendum at leo. Sed cursus nisl ut ex faucibus aliquet sed nec eros. Curabitur molestie posuere felis. Integer faucibus velit eget consequat iaculis. Mauris sed vulputate odio. Phasellus maximus, elit a pharetra egestas, lorem magna semper tellus, vestibulum semper diam felis at sapien. Suspendisse facilisis, nisl sit amet euismod vehicula, libero nulla vehicula dolor, quis fermentum nibh elit sit amet diam. - -Morbi lorem enim, euismod eu varius ut, scelerisque quis odio. Nam tempus vitae eros id molestie. Nunc pretium in nulla eget accumsan. Quisque mattis est ut semper aliquet. Maecenas eget diam elementum, fermentum ipsum a, euismod sapien. Duis quam ligula, cursus et velit nec, ullamcorper tincidunt magna. Donec vulputate nisl est, et ullamcorper urna tempor sit amet. - -Proin lacinia dui non turpis congue pretium. Morbi posuere metus vel purus imperdiet interdum. Morbi venenatis vel eros non ultricies. Nulla vel semper elit. Ut quis purus tincidunt, auctor justo ut, faucibus turpis. Proin quis mattis erat, at faucibus ligula. Mauris in mauris enim. Donec facilisis enim at est feugiat hendrerit. Nam vel nisi lorem. Fusce ultricies convallis diam, in feugiat tortor luctus quis. Donec tempor, leo vitae volutpat aliquam, magna elit feugiat leo, quis placerat sapien felis eget arcu. Donec ornare fermentum eleifend. Integer a est orci. - -Proin rhoncus egestas leo. Nulla ultricies porta elit quis ornare. Nunc fermentum interdum vehicula. In in ligula lorem. Donec nec arcu sit amet orci lobortis iaculis. Mauris at mollis erat, sit amet mollis tortor. Mauris laoreet justo ullamcorper porttitor auctor. Aenean sit amet aliquam lectus, id fermentum eros. Praesent urna sem, vehicula ac fermentum id, dapibus ut purus. Vestibulum vitae tempus nunc. Donec at nunc ornare metus volutpat porta at eget magna. Donec varius aliquet metus, eu lobortis risus aliquam sed. Ut dapibus fermentum velit, ac tincidunt libero faucibus at. - -In in purus auctor, feugiat massa quis, facilisis nisi. Donec dolor purus, gravida eget dolor ac, porttitor imperdiet urna. Donec faucibus placerat erat, a sagittis ante finibus ac. Sed venenatis dignissim elit, in iaculis felis posuere faucibus. Praesent sed viverra dolor. Mauris sed nulla consectetur nunc laoreet molestie in ut metus. Proin ac ex sit amet magna vulputate hendrerit ac condimentum urna. Proin ligula metus, gravida et sollicitudin facilisis, iaculis ut odio. Cras tincidunt urna et augue varius, ut facilisis urna consequat. Aenean vehicula finibus quam. Ut iaculis eu diam ac mollis. Nam mi lorem, tristique eget varius at, sodales at urna. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vitae dictum erat, et auctor ipsum. Nullam nunc nunc, sollicitudin quis magna a, vestibulum fermentum mauris. Praesent at erat dolor. Proin laoreet tristique nulla vel efficitur. Nam sed ultrices nibh, id rutrum nunc. Curabitur eleifend a erat sit amet sollicitudin. Nullam metus quam, laoreet vitae dapibus id, placerat sed leo. Aliquam erat volutpat. Donec turpis nisl, cursus eu ex sit amet, lacinia pellentesque nisl. Sed id ipsum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec interdum scelerisque lorem eu mattis. - -Vivamus ac tristique massa, nec facilisis nisl. Nam ipsum neque, tincidunt vel urna in, cursus imperdiet enim. Nam pellentesque egestas tempus. Morbi facilisis imperdiet libero vitae fringilla. Nam lacinia ligula at sapien facilisis malesuada. Nullam accumsan pulvinar sem, et cursus libero porta sit amet. Curabitur vulputate erat elit, ut pulvinar erat maximus vel. - -Cras aliquet metus ut purus sagittis, vel venenatis ante consectetur. Pellentesque nulla lacus, viverra viverra mattis non, placerat vitae nibh. Donec enim turpis, accumsan sit amet tincidunt eu, imperdiet non metus. Morbi ipsum eros, tincidunt vel est ac, tristique porttitor nibh. Praesent ut ullamcorper mauris. Sed laoreet sit amet diam congue venenatis. Integer porta purus nec orci sagittis posuere. - -Donec vehicula mauris eget lacus mollis venenatis et sed nibh. Nam sodales ligula ipsum, scelerisque lacinia ligula sagittis in. Nam sit amet ipsum at erat malesuada congue. Aenean ut sollicitudin sapien. Etiam at tempor odio. Mauris vitae purus ut magna suscipit consequat. Vivamus quis sapien neque. Nulla vulputate sem sit amet massa pellentesque, eleifend tristique ligula egestas. Suspendisse tincidunt gravida mi, in pulvinar lectus egestas non. Aenean imperdiet ex sit amet nunc sollicitudin porta. Integer justo odio, ultricies at interdum in, rhoncus vitae sem. Sed porttitor arcu quis purus aliquet hendrerit. Praesent tempor tortor at dolor dictum pulvinar. Nulla aliquet nunc non ligula scelerisque accumsan. Donec nulla justo, congue vitae massa in, faucibus hendrerit magna. Donec non egestas purus. - -öäüß Vivamus iaculis, lacus efficitur faucibus porta, dui nulla facilisis ligula, ut sodales odio nunc id sapien. Cras viverra auctor ipsum, dapibus mattis neque dictum sed. Sed convallis fermentum molestie. Nulla facilisi turpis duis. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_cp866.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_cp866.txt deleted file mode 100644 index b11625814d9..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_cp866.txt +++ /dev/null @@ -1,283 +0,0 @@ -€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æąįāćäåęēčéźėģķīļ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vulputate, ipsum quis interdum fermentum, lorem sem fermentum eros, vitae auctor neque lacus in nisi. Suspendisse potenti. Maecenas et scelerisque elit, in tincidunt quam. Sed eu tincidunt quam. Nullam justo ex, imperdiet a imperdiet et, fermentum sit amet eros. Aenean quis tempus sem. Pellentesque accumsan magna mi, ut mollis velit sagittis id. Etiam quis ipsum orci. Fusce purus ante, accumsan a lobortis at, venenatis eu nisl. Praesent ornare sed ante placerat accumsan. Suspendisse tempus dignissim fermentum. Nunc a leo ac lacus sodales iaculis eu vitae mi. In feugiat ante at massa finibus cursus. Suspendisse posuere fringilla ornare. Mauris elementum ac quam id convallis. Vestibulum non elit quis urna volutpat aliquam a eu lacus. - -Aliquam vestibulum imperdiet neque, suscipit aliquam elit ultrices bibendum. Suspendisse ultrices pulvinar cursus. Morbi risus nisi, cursus consequat rutrum vitae, molestie sed dui. Fusce posuere, augue quis dignissim aliquam, nisi ipsum porttitor ante, quis fringilla nisl turpis ac nisi. Nulla varius enim eget lorem vehicula gravida. Donec finibus malesuada leo nec semper. Proin ac enim eros. Vivamus non tincidunt nisi, vel tristique lorem. - -Nunc consequat ex id eros dignissim, id rutrum risus laoreet. Sed euismod non erat eu ultricies. Etiam vehicula gravida lacus ut porta. Vestibulum eu eros quis nunc aliquet luctus. Cras quis semper ligula. Nullam gravida vehicula quam sed porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In porta cursus vulputate. Quisque porta a nisi eget cursus. Aliquam risus leo, luctus ac magna in, efficitur cursus magna. In condimentum non mi id semper. Donec interdum ante eget commodo maximus. - -Vivamus sit amet vestibulum lectus. Fusce tincidunt mi sapien, dictum sollicitudin diam vulputate in. Integer fringilla consequat mollis. Cras aliquet consequat felis eget feugiat. Nunc tempor cursus arcu, vitae ornare nunc varius et. Vestibulum et tortor vel ante viverra porttitor. Nam at tortor ullamcorper, facilisis augue quis, tristique erat. Aenean ut euismod nibh. Quisque eu tincidunt est, nec euismod eros. - -Proin vehicula nibh non viverra egestas. Phasellus sem dolor, ultricies ac sagittis tristique, lacinia a purus. Vestibulum in ante eros. Pellentesque lacus nulla, tristique vitae interdum vel, malesuada ac diam. Aenean bibendum posuere turpis in accumsan. Ut est nulla, ullamcorper quis turpis at, viverra sagittis mauris. Sed in interdum purus. Praesent scelerisque nibh eget sem euismod, ut imperdiet mi venenatis. Vivamus pulvinar orci sed dapibus auctor. Nulla facilisi. Vestibulum tincidunt erat nec porttitor egestas. Mauris quis risus ante. Nulla facilisi. - -Aliquam ullamcorper ornare lobortis. Phasellus quis sem et ipsum mollis malesuada sed in ex. Ut aliquam ex eget metus finibus maximus. Proin suscipit mauris eu nibh lacinia, quis feugiat dui dapibus. Nam sed libero est. Aenean vulputate orci sit amet diam faucibus, eu sagittis sapien volutpat. Nam imperdiet felis turpis, at pretium odio pulvinar in. Sed vestibulum id eros nec ultricies. Sed quis aliquam tortor, vitae ullamcorper tellus. Donec egestas laoreet eros, id suscipit est rutrum nec. Sed auctor nulla eget metus aliquam, ut condimentum enim elementum. - -Aliquam suscipit non turpis sit amet bibendum. Fusce velit ligula, euismod et maximus at, luctus sed neque. Quisque pretium, nisl at ullamcorper finibus, lectus leo mattis sapien, vel euismod mauris diam ullamcorper ex. Nulla ut risus finibus, lacinia ligula at, auctor erat. Mauris consectetur sagittis ligula vel dapibus. Nullam libero libero, lobortis aliquam libero vel, venenatis ultricies leo. Duis porttitor, nibh congue fermentum posuere, erat libero pulvinar tortor, a pellentesque nunc ipsum vel sem. Nullam volutpat, eros sit amet facilisis consectetur, ipsum est vehicula massa, non vestibulum neque elit in mauris. Nunc hendrerit ipsum non enim bibendum, vitae rhoncus mi egestas. Etiam ullamcorper massa vel nisl sagittis, nec bibendum arcu malesuada. Aenean aliquet turpis justo, a consectetur arcu mollis convallis. Etiam tellus ipsum, ultricies vitae lorem et, ornare facilisis orci. Praesent fringilla justo urna, vel mollis neque pulvinar vestibulum. - -Donec non iaculis erat. Aliquam et mi sed nunc pulvinar ultricies in ut ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent feugiat lacus ac dignissim semper. Phasellus vitae quam nisi. Morbi vel diam ultricies risus lobortis ornare. Fusce maximus et ligula quis iaculis. Sed congue ex eget felis convallis, sit amet hendrerit elit tempor. Donec vehicula blandit ante eget commodo. Vestibulum eleifend diam at feugiat euismod. Etiam magna tellus, dignissim eget fermentum vel, vestibulum vitae mauris. Nam accumsan et erat id sagittis. Donec lacinia, odio ut ornare ultricies, dolor velit accumsan tortor, non finibus erat tellus quis ligula. Nunc quis metus in leo volutpat ornare vulputate eu nisl. - -Donec quis viverra ex. Nullam id feugiat mauris, eu fringilla nulla. Vestibulum id maximus elit. Cras elementum elit sed felis lobortis, eget sagittis nisi hendrerit. Vivamus vitae elit neque. Donec vulputate lacus ut libero ultrices accumsan. Vivamus accumsan nulla orci, in dignissim est laoreet sagittis. Proin at commodo velit. Curabitur in velit felis. Aliquam erat volutpat. Sed consequat, nulla et cursus sodales, nisi lacus mattis risus, quis eleifend erat ex nec turpis. Sed suscipit ultrices lorem in hendrerit. - -Morbi vitae lacus nec libero ornare tempus eu et diam. Suspendisse magna ipsum, fermentum vel odio quis, molestie aliquam urna. Fusce mollis turpis a eros accumsan porttitor. Pellentesque rhoncus dolor sit amet magna rutrum, et dapibus justo tempor. Sed purus nisi, maximus vitae fringilla eu, molestie nec urna. Fusce malesuada finibus pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sed aliquet eros. Pellentesque luctus diam ante, eget euismod nisl aliquet eu. Sed accumsan elit purus, tempor varius ligula tempus nec. Curabitur ornare leo suscipit suscipit fermentum. Morbi eget nulla est. Maecenas faucibus interdum tristique. - -Etiam ut elit eros. Nulla pharetra suscipit molestie. Nulla facilisis bibendum nisl non molestie. Curabitur turpis lectus, facilisis vel diam non, vulputate ultrices mauris. Aenean placerat aliquam convallis. Suspendisse sed scelerisque tellus. Vivamus lacinia neque eget risus cursus suscipit. Proin consequat dolor vel neque tempor, eu aliquam sem scelerisque. Duis non eros a purus malesuada pharetra non et nulla. Suspendisse potenti. Mauris libero eros, finibus vel nulla id, sagittis dapibus ante. Proin iaculis sed nunc et cursus. - -Quisque accumsan lorem sit amet lorem aliquet euismod. Curabitur fermentum rutrum posuere. Etiam ultricies, sem id pellentesque suscipit, urna magna lacinia eros, quis efficitur risus nisl at lacus. Nulla quis lacus tortor. Mauris placerat ex in dolor tincidunt, vel aliquet nisi pretium. Cras iaculis risus vitae pellentesque aliquet. Quisque a enim imperdiet, ullamcorper arcu vitae, rutrum risus. Nullam consectetur libero at felis fringilla, nec congue nibh dignissim. Nam et lobortis felis, eu pellentesque ligula. Aenean facilisis, ligula non imperdiet maximus, massa orci gravida sapien, at sagittis lacus nisl in lacus. Nulla quis mauris luctus, scelerisque felis consequat, tempus risus. Fusce auctor nisl non nulla luctus molestie. Maecenas sapien nisl, auctor non dolor et, iaculis scelerisque lorem. Suspendisse egestas enim aliquet, accumsan mauris nec, posuere quam. Nulla iaculis dui dui, sit amet vestibulum erat ultricies ac. - -Cras eget dolor erat. Proin at nisl ut leo consectetur ultricies vel ut arcu. Nulla in felis malesuada, ullamcorper tortor et, convallis massa. Nunc urna justo, ornare in nibh vitae, hendrerit condimentum libero. Etiam vitae libero in purus venenatis fringilla. Nullam velit nulla, consequat ut turpis non, egestas hendrerit nibh. Duis tortor turpis, interdum non ante ac, cursus accumsan lectus. Cras pharetra bibendum augue quis dictum. Sed euismod vestibulum justo. Proin porta lobortis purus. Duis venenatis diam tortor, sit amet condimentum eros rhoncus a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc at magna nec diam lobortis efficitur sit amet ut lacus. Nulla quis orci tortor. Pellentesque tempus velit a odio finibus porta. - -Proin feugiat mauris a tellus scelerisque convallis. Maecenas libero magna, blandit nec ultrices id, congue vel mi. Aliquam lacinia, quam vel condimentum convallis, tortor turpis aliquam odio, sed blandit libero lacus et eros. In eleifend iaculis magna ac finibus. Praesent auctor facilisis tellus in congue. Sed molestie lobortis dictum. Nam quis dignissim augue, vel euismod lorem. Curabitur posuere dapibus luctus. Donec ultricies dictum lectus, quis blandit arcu commodo ac. Aenean tincidunt ligula in nunc imperdiet dignissim. Curabitur egestas sollicitudin sapien ut semper. Aenean nec dignissim lacus. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec aliquam dictum vehicula. Donec tortor est, volutpat non nisi nec, varius gravida ex. Nunc vel tristique nunc, vitae mattis nisi. Nunc nec luctus ex, vitae tincidunt lectus. In hac habitasse platea dictumst. Curabitur lobortis ex eget tincidunt tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut a vehicula mi. - -Fusce eu libero finibus, interdum nulla a, placerat neque. Cras bibendum tempor libero nec feugiat. Cras ut sodales eros. Proin viverra, massa sit amet viverra egestas, neque nisl porta ex, sit amet hendrerit libero ligula vel urna. Mauris suscipit lacus id justo rhoncus suscipit. Etiam vel libero tellus. Maecenas non diam molestie, condimentum tellus a, bibendum enim. Mauris aliquet imperdiet tellus, eget sagittis dolor. Sed blandit in neque et luctus. Cras elementum sagittis nunc, vel mollis lorem euismod et. Donec posuere at lacus eget suscipit. - -Nulla nunc mi, pretium non massa vel, tempor semper magna. Nunc a leo pulvinar, tincidunt nunc at, dignissim mi. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut viverra nulla a nisl finibus, at hendrerit ligula ullamcorper. Donec a lorem semper, tempor magna et, lobortis libero. Mauris id sapien leo. Donec dignissim, quam vitae porttitor dignissim, quam justo mattis dui, vel consequat odio elit quis orci. Etiam nec pretium neque, sit amet pretium orci. Duis ac tortor venenatis, feugiat purus non, feugiat nunc. Proin scelerisque nisl in turpis aliquam vulputate. - -Praesent sed est semper, fringilla lorem vitae, tincidunt nibh. Cras eros metus, auctor at mauris sit amet, sodales semper orci. Nunc a ornare ex. Curabitur bibendum arcu congue urna vulputate egestas. Vestibulum finibus id risus et accumsan. Aenean ut volutpat tellus. Aenean tincidunt malesuada urna sit amet vestibulum. Mauris vel tellus dictum, varius lacus quis, dictum arcu. - -Aenean quis metus eu erat feugiat cursus vel at ligula. Proin dapibus sodales urna, id euismod lectus tempus id. Pellentesque ex ligula, convallis et erat vel, vulputate condimentum nisl. Pellentesque pharetra nulla quis massa eleifend hendrerit. Praesent sed massa ipsum. Maecenas vehicula dolor massa, id sodales urna faucibus et. Mauris ac quam non massa tincidunt feugiat et at lacus. Fusce libero massa, vulputate vel scelerisque non, mollis in leo. Ut sit amet ultricies odio. Suspendisse in sapien viverra, facilisis purus ut, pretium libero. - -Vivamus tristique pharetra molestie. Nam a volutpat purus. Praesent consequat gravida nisi, ac blandit nisi suscipit ut. Quisque posuere, ligula a ultrices laoreet, ligula nunc vulputate libero, ut rutrum erat odio tincidunt justo. Sed vitae leo at leo fringilla bibendum. Vestibulum ut augue nec dolor auctor accumsan. Praesent laoreet id eros pulvinar commodo. Suspendisse potenti. Ut pharetra, mauris vitae blandit fringilla, odio ante tincidunt lorem, sit amet tempor metus diam ut turpis. - -Praesent quis egestas arcu. Nullam at porta arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi vulputate ligula malesuada ligula luctus, vulputate tempus erat bibendum. Nunc ullamcorper non lectus at euismod. Etiam nibh felis, tincidunt a metus vel, pellentesque rhoncus neque. Etiam at diam in erat luctus interdum. Nunc vel ipsum pulvinar, sollicitudin lacus ac, tempus urna. Etiam vel lacinia sapien. Pellentesque sagittis velit vel mi efficitur iaculis. Integer euismod sit amet urna in sagittis. Cras eleifend ut nibh in facilisis. Donec et lacus vitae nunc placerat sodales. Nulla sed hendrerit ligula, at dapibus sapien. - -Praesent at iaculis ex. Curabitur est purus, cursus a faucibus quis, dictum id velit. Donec dignissim fringilla viverra. Nunc mauris felis, laoreet sit amet sagittis at, vestibulum in libero. Maecenas quis orci turpis. Quisque ut nibh vitae magna mollis consequat id at mauris. Aliquam eu odio eget nulla bibendum sodales. Quisque vel orci eleifend nisi pretium lacinia. Suspendisse eget risus eget mi volutpat molestie eget quis lacus. Duis nisi libero, tincidunt nec nulla id, faucibus cursus felis. - -Donec tempor eget risus pellentesque molestie. Phasellus porta neque vel arcu egestas, nec blandit velit fringilla. Nullam porta faucibus justo vitae laoreet. Pellentesque viverra id nunc eu varius. Nulla pulvinar lobortis iaculis. Etiam vestibulum odio nec velit tristique, a tristique nisi mattis. In sed fringilla orci, vitae efficitur odio. Quisque dui odio, ornare eget velit at, lacinia consequat libero. Quisque lectus nulla, aliquet eu leo in, porta rutrum diam. Donec nec mattis neque. Nam rutrum, odio ac eleifend bibendum, dolor arcu rutrum neque, eget porta elit tellus a lacus. Sed massa metus, sollicitudin et sapien eu, finibus tempus orci. Proin et sapien sit amet erat molestie interdum. In quis rutrum velit, faucibus ultrices tellus. - -Sed sagittis sed justo eget tincidunt. Maecenas ut leo sagittis, feugiat magna et, viverra velit. Maecenas ex arcu, feugiat at consequat vitae, auctor eu massa. Integer egestas, enim vitae maximus convallis, est lectus pretium mauris, ac posuere lectus nisl quis quam. Aliquam tempus laoreet mi, vitae dapibus dolor varius dapibus. Suspendisse potenti. Donec sit amet purus nec libero dapibus tristique. Pellentesque viverra bibendum ligula. Donec sed felis et ex lobortis laoreet. Phasellus a fringilla libero, vitae malesuada nulla. Pellentesque blandit mattis lacus, et blandit tortor laoreet consequat. Suspendisse libero nunc, viverra sed fermentum in, accumsan egestas arcu. Proin in placerat elit. Sed interdum imperdiet malesuada. Suspendisse aliquet quis mauris eget sollicitudin. - -Vivamus accumsan tellus non erat volutpat, quis dictum dolor feugiat. Praesent rutrum nunc ac est mollis cursus. Fusce semper volutpat dui ut egestas. Curabitur sit amet posuere massa. Cras tincidunt nulla et mi mollis imperdiet. Suspendisse scelerisque ex id sodales vulputate. In nunc augue, pharetra in placerat eu, mattis id tellus. Vivamus cursus efficitur vehicula. Nulla aliquet vehicula aliquet. - -Sed cursus tellus sed porta pulvinar. Sed vitae nisi neque. Nullam aliquet, lorem et efficitur scelerisque, arcu diam aliquam felis, sed pulvinar lorem odio et turpis. Praesent convallis pulvinar turpis eu iaculis. Aliquam nec gravida mi. Curabitur eu nibh tempor, blandit justo in, ultrices felis. Fusce placerat metus non mi sagittis rutrum. Morbi sed dui fringilla, sagittis mauris eget, imperdiet nunc. Phasellus hendrerit sem elit, id hendrerit libero auctor sit amet. Integer sodales elit sit amet consequat cursus. - -Nam semper est eget nunc mollis, in pellentesque lectus fringilla. In finibus vel diam id semper. Nunc mattis quis erat eu consectetur. In hac habitasse platea dictumst. Nullam et ipsum vestibulum ex pulvinar ultricies sit amet id velit. Aenean suscipit mi tortor, a lobortis magna viverra non. Nulla condimentum aliquet ante et ullamcorper. Pellentesque porttitor arcu a posuere tempus. Aenean lacus quam, imperdiet eu justo vitae, pretium efficitur ex. Duis id purus id magna rhoncus ultrices id eu risus. Nunc dignissim et libero id dictum. - -Quisque a tincidunt neque. Phasellus commodo mi sit amet tempor fringilla. Ut rhoncus, neque non porttitor elementum, libero nulla egestas augue, sed fringilla sapien felis ac velit. Phasellus viverra rhoncus mollis. Nam ullamcorper leo vel erat laoreet luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus semper a metus a cursus. Nulla sed orci egestas, efficitur purus ac, malesuada tellus. Aenean rutrum velit at tellus fermentum mollis. Aliquam eleifend euismod metus. - -In hac habitasse platea dictumst. Vestibulum volutpat neque vitae porttitor laoreet. Nam at tellus consequat, sodales quam in, pulvinar arcu. Maecenas varius convallis diam, ac lobortis tellus pellentesque quis. Maecenas eget augue massa. Nullam volutpat nibh ac justo rhoncus, ut iaculis tellus rutrum. Fusce efficitur efficitur libero quis condimentum. Curabitur congue neque non tincidunt tristique. Fusce eget tempor ex, at pellentesque odio. Praesent luctus dictum vestibulum. Etiam non orci nunc. Vivamus vitae laoreet purus, a lobortis velit. Curabitur tincidunt purus ac lectus elementum pellentesque. Quisque sed tincidunt est. - -Sed vel ultrices massa, vitae ultricies justo. Cras finibus mauris nec lacus tempus dignissim. Cras faucibus maximus velit, eget faucibus orci luctus vehicula. Nulla massa nunc, porta ac consequat eget, rhoncus non tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed maximus metus, vel imperdiet ipsum. Ut scelerisque lectus at blandit porttitor. Ut vulputate nunc pharetra, aliquet sapien ac, sollicitudin sapien. Aenean eget ante lorem. Nam accumsan venenatis tellus id dignissim. - -Curabitur fringilla, magna non maximus dapibus, nulla sapien vestibulum lectus, sit amet semper dolor neque vitae nisl. Nunc ultrices vehicula augue sed iaculis. Maecenas nec diam mollis, suscipit orci et, vestibulum ante. Pellentesque eu nisl tortor. Nunc eleifend, lacus quis volutpat volutpat, nisi mi molestie sem, quis mollis ipsum libero a tellus. Ut viverra dolor mattis convallis interdum. Sed tempus nisl at nunc scelerisque aliquet. Quisque tempor tempor lorem id feugiat. Nullam blandit lectus velit, vitae porta lacus tincidunt a. Vivamus sit amet arcu ultrices, tincidunt mi quis, viverra quam. Aenean fringilla libero elementum lorem semper, quis pulvinar eros gravida. Nullam sodales blandit mauris, sed fermentum velit fermentum sit amet. Donec malesuada mauris in augue sodales vulputate. Vestibulum gravida turpis id elit rhoncus dignissim. Integer non congue lorem, eu viverra orci. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec at dolor magna. Aliquam consectetur erat augue, id iaculis velit pharetra ac. Integer rutrum venenatis dignissim. Integer non sodales elit. Curabitur ut magna ut nibh feugiat aliquam ac ut risus. Morbi nibh quam, aliquam id placerat nec, vestibulum eget velit. Suspendisse at dignissim quam. Vivamus aliquet sem sed nisl volutpat, ut cursus orci ultrices. Aliquam ultrices lacinia enim, vitae aliquet neque. - -Quisque scelerisque finibus diam in mattis. Cras cursus auctor velit. Aliquam sem leo, fermentum et maximus et, molestie a libero. Aenean justo elit, rutrum a ornare id, egestas eget enim. Aenean auctor tristique erat. Curabitur condimentum libero lacus, nec consequat orci vestibulum sed. Fusce elit ligula, blandit vitae sapien vitae, dictum ultrices risus. Nam laoreet suscipit sapien, at interdum velit faucibus sit amet. Duis quis metus egestas lectus elementum posuere non nec libero. Aliquam a dolor bibendum, facilisis nunc a, maximus diam. Vestibulum suscipit tristique magna, non dignissim turpis sodales sed. Nunc ornare, velit ac facilisis fringilla, dolor mi consectetur lorem, vitae finibus erat justo suscipit urna. Maecenas sit amet eros erat. Nunc non arcu ornare, suscipit lorem eget, sodales mauris. Aliquam tincidunt, quam nec mollis lacinia, nisi orci fermentum libero, consequat eleifend lectus quam et sapien. Vestibulum a quam urna. - -Cras arcu leo, euismod ac ullamcorper at, faucibus sed massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor velit in enim interdum, non commodo metus ornare. Morbi vel lorem quis nisl luctus tristique quis vitae nisl. Suspendisse condimentum tortor enim, nec eleifend ipsum euismod et. Sed gravida quam ut tristique lacinia. Mauris eu interdum ipsum, ac ultrices odio. Nullam auctor tellus a risus porttitor vehicula. Nulla blandit euismod dictum. In pharetra, enim iaculis pulvinar interdum, dui nunc placerat nunc, sit amet pretium lectus nulla vitae quam. Phasellus quis enim sollicitudin, varius nulla id, ornare purus. Donec quam lacus, vestibulum quis nunc ac, mollis dictum nisi. Cras ut mollis elit. Maecenas ultrices ligula at risus faucibus scelerisque. Etiam vitae porttitor purus. Curabitur blandit lectus urna, ut hendrerit tortor feugiat ut. - -Phasellus fringilla, sapien pellentesque commodo pharetra, ante libero aliquam tellus, ut consectetur augue libero a sapien. Maecenas blandit luctus nisl eget aliquet. Maecenas vitae porta dolor, faucibus laoreet sapien. Suspendisse lobortis, ipsum sed vehicula aliquam, elit purus scelerisque dui, rutrum consectetur diam odio et lorem. In nec lacinia metus. Donec viverra libero est, vel bibendum erat condimentum quis. Donec feugiat purus leo. In laoreet vitae felis a porttitor. Mauris ullamcorper, lacus id condimentum suscipit, neque magna pellentesque arcu, eget cursus neque tellus id metus. Curabitur volutpat ac orci vel ultricies. - -Sed ut finibus erat. Sed diam purus, varius non tincidunt quis, ultrices sit amet ipsum. Donec et egestas nulla. Suspendisse placerat nisi at dui laoreet iaculis. Aliquam aliquet leo at augue faucibus molestie. Nullam lacus augue, hendrerit sed nisi eu, faucibus porta est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ut leo aliquet sem fermentum rutrum quis ac justo. Integer placerat aliquam nisl ut sagittis. Proin erat orci, lobortis et sem eget, eleifend fringilla augue. Mauris varius laoreet arcu, sed tincidunt felis. Pellentesque venenatis lorem odio, id pulvinar velit molestie feugiat. Donec mattis lacus sed eleifend pulvinar. - -Sed condimentum ex in tincidunt hendrerit. Etiam eget risus lacinia, euismod nibh eu, pellentesque quam. Proin elit eros, convallis id mauris ac, bibendum ultrices lectus. Morbi venenatis, purus id fermentum consequat, nunc libero tincidunt ligula, non dictum ligula orci nec quam. Nulla nec ultrices lorem. Aenean maximus augue vel dictum pharetra. Etiam turpis urna, pellentesque quis malesuada eu, molestie faucibus felis. - -Vestibulum pharetra augue ut quam blandit congue in nec risus. Proin eu nibh eu dui eleifend porta vitae id lectus. Proin lacus nibh, lobortis sed ligula vitae, interdum lobortis erat. Suspendisse potenti. In sollicitudin quis sapien ut aliquet. Mauris ac nulla arcu. Fusce tristique justo quis lectus mollis, eu volutpat lectus finibus. Vivamus venenatis facilisis ex ut vestibulum. - -Etiam varius lobortis purus, in hendrerit elit tristique at. In tempus, augue vestibulum fermentum gravida, ligula tellus vulputate arcu, eu molestie ex sapien at purus. Vestibulum nec egestas metus. Duis pulvinar quam nec consequat interdum. Aenean non dapibus lacus. Aliquam sit amet aliquet nulla. Sed venenatis volutpat purus nec convallis. Phasellus aliquet semper sodales. Cras risus sapien, condimentum auctor urna a, pulvinar ornare nisl. Sed tincidunt felis elit, ut elementum est bibendum ac. Morbi interdum justo vel dui faucibus condimentum. - -Sed convallis eu sem at tincidunt. Nullam at auctor est, et ullamcorper ipsum. Pellentesque eget ante ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer euismod, sapien sed dapibus ornare, nibh enim maximus lacus, lacinia placerat urna quam quis felis. Morbi accumsan id nisl ut condimentum. Donec bibendum nisi est, sed volutpat lorem rhoncus in. Vestibulum ac lacinia nunc, eget volutpat magna. Integer aliquam pharetra ipsum, id placerat nunc volutpat quis. Etiam urna diam, rhoncus sit amet varius vel, euismod vel sem. Nullam vel molestie urna. Vivamus ornare erat at venenatis euismod. Suspendisse potenti. Fusce diam justo, tincidunt vel sem at, commodo faucibus nisl. Duis gravida efficitur diam, vel sagittis erat pulvinar ut. - -Quisque vel pharetra felis. Duis efficitur tortor dolor, vitae porttitor erat fermentum sed. Sed eu mi purus. Etiam dignissim tortor eu tempus molestie. Aenean pretium erat enim, in hendrerit ante hendrerit at. Sed ut risus vel nunc venenatis ultricies quis in lacus. Pellentesque vitae purus euismod, placerat risus non, ullamcorper augue. Quisque varius quam ligula, nec aliquet ex faucibus vitae. Quisque rhoncus sit amet leo tincidunt mattis. Cras id mauris eget purus pretium gravida sit amet eu augue. Aliquam dapibus odio augue, id lacinia velit pulvinar eu. - -Mauris fringilla, tellus nec pharetra iaculis, neque nisi ultrices massa, et tincidunt sem dui sed mi. Curabitur erat lorem, venenatis quis tempus lacinia, tempus sit amet nunc. Aliquam at neque ac metus commodo dictum quis vitae justo. Phasellus eget lacus tempus, blandit lorem vel, rutrum est. Aenean pharetra sem ut augue lobortis dignissim. Sed rhoncus at nulla id ultrices. Cras id condimentum felis. In suscipit luctus vulputate. Donec tincidunt lacus nec enim tincidunt sollicitudin ut quis enim. Nam at libero urna. Praesent sit amet massa vitae massa ullamcorper vehicula. - -Nullam bibendum augue ut turpis condimentum bibendum. Proin sit amet urna hendrerit, sodales tortor a, lobortis lectus. Integer sagittis velit turpis, et tincidunt nisi commodo eget. Duis tincidunt elit finibus accumsan cursus. Aenean dignissim scelerisque felis vel lacinia. Nunc lacinia maximus luctus. In hac habitasse platea dictumst. Vestibulum eget urna et enim tempor tempor. Nam feugiat, felis vel vestibulum tempus, orci justo viverra diam, id dapibus lorem justo in ligula. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ac pellentesque sem. Vestibulum lacinia magna dui, eu lacinia augue placerat et. Maecenas pulvinar congue est. Pellentesque commodo dui non pulvinar scelerisque. Etiam interdum est posuere sem bibendum, ac commodo magna dictum. Cras ipsum turpis, rhoncus nec posuere vitae, laoreet a arcu. Integer ac massa sit amet enim placerat lacinia sed ultrices arcu. Suspendisse sem nibh, luctus sit amet volutpat in, pellentesque eu metus. Ut gravida neque eget mi accumsan tempus. Nam sit amet aliquet nibh. - -Pellentesque a purus cursus nulla hendrerit congue quis et odio. Aenean hendrerit, leo ullamcorper sagittis hendrerit, erat dui molestie quam, sed condimentum lacus risus sed tellus. Morbi a dapibus lectus, ut feugiat ex. Phasellus pretium quam et sapien mollis, vel iaculis dui dignissim. Sed ullamcorper est turpis, a viverra lorem consectetur in. Aenean aliquet nibh non cursus rutrum. Suspendisse at tristique urna, id lobortis urna. In hac habitasse platea dictumst. Phasellus libero velit, rutrum sed tellus nec, dapibus tincidunt ligula. Quisque vel dui venenatis, consequat nisl ut, lacinia ipsum. Phasellus vitae magna pellentesque, lobortis est id, faucibus quam. Nam eleifend faucibus dui vel pellentesque. - -Etiam ut est non lacus tincidunt interdum. Maecenas sed massa urna. Quisque ut nibh tortor. Pellentesque felis ipsum, tempor finibus ipsum et, euismod pretium metus. Donec sit amet est ipsum. Quisque rhoncus justo non finibus elementum. Nulla nec lectus ac tortor placerat fringilla. Phasellus ac ultrices nunc, eu efficitur nisl. Nulla rhoncus nunc vitae ante dictum tincidunt. Nunc ultrices, massa sit amet malesuada dignissim, lectus lacus consequat sapien, non eleifend metus sem in eros. Phasellus mauris ante, dictum sit amet suscipit ac, rhoncus eget nisi. Phasellus at orci mollis, imperdiet neque eget, faucibus nulla. In at purus massa. Pellentesque quis rutrum lectus. - -Integer eu faucibus turpis, sit amet mollis massa. Vestibulum id nulla commodo, rutrum ipsum sed, semper ante. Phasellus condimentum orci nec nibh convallis, ac maximus orci ullamcorper. Maecenas vitae sollicitudin mi. Integer et finibus lectus, et condimentum ligula. Donec elementum tristique quam vitae dapibus. Morbi euismod ipsum in tristique ullamcorper. - -Duis fermentum non enim eu auctor. Quisque lacinia nibh vehicula nibh posuere, eu volutpat turpis facilisis. Ut ac faucibus nulla. Sed eleifend quis ex et pellentesque. Vestibulum sollicitudin in libero id fringilla. Phasellus dignissim purus consequat, condimentum dui sit amet, condimentum ante. Pellentesque ac consectetur massa, quis sagittis est. Nulla maximus tristique risus accumsan convallis. Curabitur imperdiet ac lacus a ultrices. Nulla facilisi. Sed quis quam quis lectus placerat lobortis vel sed turpis. In mollis dui id neque iaculis, ut aliquet tellus malesuada. Proin at luctus odio, vel blandit sapien. Praesent dignissim tortor vehicula libero fringilla, nec ultrices erat suscipit. Maecenas scelerisque purus in dapibus fermentum. - -Curabitur magna odio, mattis in tortor ut, porttitor congue est. Vestibulum mollis lacinia elementum. Fusce maximus erat vitae nunc rutrum lobortis. Integer ligula eros, auctor vel elit non, posuere luctus lacus. Maecenas quis auctor massa. Ut ipsum lacus, efficitur posuere euismod et, hendrerit efficitur est. Phasellus fringilla, quam id tincidunt pretium, nunc dui sollicitudin orci, eu dignissim nisi metus ut magna. Integer lobortis interdum dolor, non bibendum purus posuere et. Donec non lectus aliquet, pretium dolor eu, cursus massa. Sed ut dui sapien. In sed vestibulum massa. Pellentesque blandit, dui non sodales vehicula, orci metus mollis nunc, non pharetra ex tellus ac est. Mauris sagittis metus et fermentum pretium. Nulla facilisi. Quisque quis ante ut nulla placerat mattis ut quis nisi. - -Sed quis nulla ligula. Quisque dignissim ligula urna, sed aliquam purus semper at. Suspendisse potenti. Nunc massa lectus, pharetra vehicula arcu bibendum, imperdiet sodales ipsum. Nam ac sapien diam. Mauris iaculis fringilla mattis. Pellentesque tempus eros sit amet justo volutpat mollis. Phasellus ac turpis ipsum. Morbi vel ante elit. Aenean posuere quam consequat velit varius suscipit. Donec tempor quam ut nibh cursus efficitur. - -Morbi molestie dolor nec sem egestas suscipit. Etiam placerat pharetra lectus, et ullamcorper risus tristique in. Sed faucibus ullamcorper lectus eget fringilla. Maecenas malesuada hendrerit congue. Sed eget neque a erat placerat tincidunt. Aliquam vitae dignissim turpis. Fusce at placerat magna, a laoreet lectus. Maecenas a purus nec diam gravida fringilla. Nam malesuada euismod ante non vehicula. In faucibus bibendum leo, faucibus posuere nisl pretium quis. Fusce finibus bibendum finibus. Vestibulum eu justo maximus, hendrerit diam nec, dignissim sapien. Aenean dolor lacus, malesuada quis vestibulum ac, venenatis ac ipsum. Cras a est id nunc finibus facilisis. Cras lacinia neque et interdum vehicula. Suspendisse vulputate tellus elit, eget tempor dui finibus vel. - -Cras sed pretium odio. Proin hendrerit elementum felis in tincidunt. Nam sed turpis vel justo molestie accumsan condimentum eu nunc. Praesent lobortis euismod rhoncus. Nulla vitae euismod nibh, quis mattis mi. Fusce ultrices placerat porttitor. Duis sem ipsum, pellentesque sit amet odio a, molestie vulputate mauris. - -Duis blandit mollis ligula, sit amet mattis ligula finibus sit amet. Nunc a leo molestie, placerat diam et, vestibulum leo. Suspendisse facilisis neque purus, nec pellentesque ligula fermentum nec. Aenean malesuada mauris lorem, eu blandit arcu pulvinar quis. Duis laoreet urna lacus, non maximus arcu rutrum ultricies. Nulla augue dolor, suscipit eu mollis eu, aliquam condimentum diam. Ut semper orci luctus, pharetra turpis at, euismod mi. Nulla leo diam, finibus sit amet purus sed, maximus dictum lorem. Integer eu mi id turpis laoreet rhoncus. - -Integer a mauris tincidunt, finibus orci ut, pretium mauris. Nulla molestie nunc mi, id finibus lorem elementum sed. Proin quis laoreet ante. Integer nulla augue, commodo id molestie quis, rutrum ut turpis. Suspendisse et tortor turpis. Sed ut pharetra massa. Pellentesque elementum blandit sem, ut elementum tellus egestas a. Fusce eu purus nibh. - -Cras dignissim ligula scelerisque magna faucibus ullamcorper. Proin at condimentum risus, auctor malesuada quam. Nullam interdum interdum egestas. Nulla aliquam nisi vitae felis mollis dictum. Suspendisse dapibus consectetur tortor. Ut ut nisi non sem bibendum tincidunt. Vivamus suscipit leo quis gravida dignissim. - -Aliquam interdum, leo id vehicula mollis, eros eros rhoncus diam, non mollis ligula mi eu mauris. Sed ultrices vel velit sollicitudin tincidunt. Nunc auctor metus at ligula gravida elementum. Praesent interdum eu elit et mollis. Duis egestas quam sit amet velit dignissim consequat. Aliquam ac turpis nec nunc convallis sagittis. Fusce blandit, erat ac fringilla consectetur, dolor eros sodales leo, vel aliquet risus nisl et diam. Aliquam luctus felis vitae est eleifend euismod facilisis et lacus. Sed leo tellus, auctor eu arcu in, volutpat sagittis nisl. Pellentesque nisl ligula, placerat vel ullamcorper at, vulputate ac odio. Morbi ac faucibus orci, et tempus nulla. Proin rhoncus rutrum dolor, in venenatis mauris. Suspendisse a fermentum augue, non semper mi. Nunc eget pretium neque. Phasellus augue erat, feugiat ac aliquam congue, rutrum non sapien. Pellentesque ac diam gravida, consectetur felis at, ornare neque. - -Nullam interdum mattis sapien quis porttitor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus aliquet rutrum ipsum id euismod. Maecenas consectetur massa et mi porta viverra. Nunc quam nibh, dignissim vitae maximus et, ullamcorper nec lorem. Nunc vitae justo dapibus, luctus lacus vitae, pretium elit. Maecenas et efficitur leo. Curabitur mauris lectus, placerat quis vehicula vitae, auctor ut urna. Quisque rhoncus pharetra luctus. In hac habitasse platea dictumst. Integer sit amet metus nec eros malesuada aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi hendrerit mi ac leo aliquam, sit amet ultricies libero commodo. Mauris dapibus purus metus, sit amet viverra nibh imperdiet et. Nullam porta nulla tellus, quis vehicula diam imperdiet non. Vivamus enim massa, bibendum in fermentum in, ultrices at ex. - -Suspendisse fermentum id nibh eget accumsan. Duis dapibus bibendum erat ut sollicitudin. Aliquam nec felis risus. Pellentesque rhoncus ligula id sem maximus mollis sed nec massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ipsum ipsum, sodales sed enim id, convallis faucibus eros. Donec ultricies dictum tincidunt. Cras vitae nibh arcu. Pellentesque cursus, sapien nec consequat fermentum, ipsum ante suscipit dui, imperdiet hendrerit est nisl eu massa. Quisque vitae sem ligula. Aenean iaculis metus ut mauris interdum laoreet. Vivamus sed gravida dolor. - -Morbi nulla metus, porttitor sed eros sit amet, efficitur efficitur est. In vel nisl urna. Ut aliquet tellus at congue convallis. Phasellus imperdiet lobortis sollicitudin. Integer sodales, sem eu ultricies pharetra, erat erat porttitor odio, eget dapibus libero ipsum eget velit. Phasellus gravida nulla nisl, eu pharetra mi auctor vel. Sed blandit pharetra velit, ut egestas libero placerat non. Aliquam a interdum quam. Proin at tortor nec dui sollicitudin tempus sed vestibulum elit. Nunc non sollicitudin velit. - -Aenean consequat diam velit, sed rutrum tortor faucibus dictum. Quisque at semper augue. Duis ut est eget mi ornare bibendum id et ligula. Phasellus consequat tortor non leo pulvinar posuere. Proin vestibulum eleifend felis, in hendrerit tortor sollicitudin eu. Phasellus hendrerit, lacus vel laoreet interdum, dui tortor consequat justo, commodo ultricies arcu felis vitae enim. Vivamus eu sapien at leo suscipit rutrum eu at justo. Aenean et dolor a libero ullamcorper posuere. Integer laoreet placerat nisi in vulputate. Mauris laoreet eget risus sed cursus. Donec scelerisque neque a libero eleifend hendrerit. Nulla varius condimentum nunc sit amet fermentum. Aliquam lorem ex, varius nec mollis ut, ultrices in neque. Morbi sit amet porta leo. Integer iaculis fermentum lacus in vestibulum. - -Ut gravida, tellus ut maximus ultrices, erat est venenatis nisl, vitae pretium massa ex ac magna. Sed non purus eget ligula aliquet volutpat non quis arcu. Nam aliquam tincidunt risus, sit amet fringilla sapien vulputate ut. Mauris luctus suscipit pellentesque. Nunc porttitor dapibus ex quis tempus. Ut ullamcorper metus a eros vulputate, vitae viverra lectus convallis. Mauris semper imperdiet augue quis tincidunt. Integer porta pretium magna, sed cursus sem scelerisque sollicitudin. Nam efficitur, nibh pretium eleifend vestibulum, purus diam posuere sem, in egestas mauris augue sit amet urna. - -Vestibulum tincidunt euismod massa in congue. Duis interdum metus non laoreet fringilla. Donec at ligula congue, tincidunt nunc non, scelerisque nunc. Donec bibendum magna non est scelerisque feugiat at nec neque. Ut orci tortor, tempus eget massa non, dignissim faucibus dolor. Nam odio risus, accumsan pretium neque eget, accumsan dignissim dui. In ut neque auctor, scelerisque tellus sed, ullamcorper nisi. Suspendisse varius cursus quam at hendrerit. Vivamus elit libero, sagittis vitae sem ac, vulputate iaculis ligula. - -Sed lobortis laoreet purus sit amet rutrum. Pellentesque feugiat non leo vel lacinia. Quisque feugiat nisl a orci bibendum vestibulum. In et sollicitudin urna. Morbi a arcu ac metus faucibus tempus. Nam eu imperdiet sapien, suscipit mattis tortor. Aenean blandit ipsum nisi, a eleifend ligula euismod at. Integer tincidunt pharetra felis, mollis placerat mauris hendrerit at. Curabitur convallis, est sit amet luctus volutpat, massa lacus cursus augue, sed eleifend magna quam et risus. Aliquam lobortis tincidunt metus vitae porttitor. Suspendisse potenti. Aenean ullamcorper, neque id commodo luctus, nulla nunc lobortis quam, id dapibus neque dui nec mauris. Etiam quis lorem quis elit commodo ornare. Ut pharetra purus ultricies enim ultrices efficitur. Proin vehicula tincidunt molestie. Mauris et placerat sem. - -Aliquam erat volutpat. Suspendisse velit turpis, posuere ac lacus eu, lacinia laoreet velit. Sed interdum felis neque, id blandit sem malesuada sit amet. Ut sagittis justo erat, efficitur semper orci tempor sed. Donec enim massa, posuere varius lectus egestas, pellentesque posuere mi. Cras tincidunt ut libero sed mattis. Suspendisse quis magna et tellus posuere interdum vel at purus. Pellentesque fringilla tristique neque, id aliquet tellus ultricies non. Duis ut tellus vel odio lobortis vulputate. - -Integer at magna ac erat convallis vestibulum. Sed lobortis porttitor mauris. Fusce varius lorem et volutpat pulvinar. Aenean ac vulputate lectus, vitae consequat velit. Suspendisse ex dui, varius ut risus ut, dictum scelerisque sem. Vivamus urna orci, volutpat ut convallis ac, venenatis vitae urna. In hac habitasse platea dictumst. Etiam eu purus arcu. Aenean vulputate leo urna, vel tristique dui sagittis euismod. Suspendisse non tellus efficitur ante rhoncus volutpat at et sapien. - -Sed dapibus accumsan porttitor. Phasellus facilisis lectus finibus ligula dignissim, id pulvinar lectus feugiat. Nullam egestas commodo nisi posuere aliquet. Morbi sit amet tortor sagittis, rutrum dui nec, dapibus sapien. Sed posuere tortor tortor, interdum auctor magna varius vitae. Vestibulum id sagittis augue. Curabitur fermentum arcu sem, eu condimentum quam rutrum non. Phasellus rutrum nibh quis lectus rhoncus pretium. Curabitur dictum interdum elit. Vestibulum maximus sodales imperdiet. Mauris auctor nec purus sed venenatis. In in urna purus. - -Duis placerat molestie suscipit. Morbi a elit id purus efficitur consequat. Nunc ac commodo turpis. Etiam sit amet lacus a ipsum tempus venenatis sed vel nibh. Duis elementum aliquam mi sed tristique. Morbi ligula tortor, semper ac est vel, lobortis maximus erat. Curabitur ipsum felis, laoreet vel condimentum eget, ullamcorper sit amet mauris. Nulla facilisi. Nam at purus sed mi egestas placerat vitae vel magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse at dignissim diam. Phasellus consectetur eget neque vel viverra. Donec sollicitudin mattis dolor vel malesuada. Vivamus vehicula leo neque, vitae fermentum leo posuere et. Praesent dui est, finibus sit amet tristique quis, pharetra vel nibh. - -Duis nulla leo, accumsan eu odio eget, sagittis semper orci. Quisque ullamcorper ligula quam, commodo porttitor mauris ullamcorper eu. Cras varius sagittis felis in aliquam. Duis sodales risus ac justo vehicula, nec mattis diam lacinia. Cras eget lectus ipsum. Ut commodo, enim vitae malesuada hendrerit, ex dolor egestas lectus, sit amet hendrerit metus diam nec est. Vestibulum tortor metus, lobortis sit amet ante eget, tempor molestie lacus. In molestie et urna et semper. Mauris mollis, sem non hendrerit condimentum, sapien nisi cursus est, non suscipit quam justo non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam enim est, porta ac feugiat vitae, rutrum in lorem. Duis vehicula tortor ut posuere maximus. - -Nullam vestibulum non tellus sed commodo. Quisque mattis elit sit amet sapien sollicitudin, ut condimentum nisl congue. Aenean sagittis massa vel elit faucibus fermentum. Donec tincidunt nisi nec nisl sodales pellentesque. Mauris congue congue ligula ut suscipit. Vivamus velit tortor, tempor et gravida eget, fermentum sit amet ante. Nullam fringilla, lorem at ultrices cursus, urna neque ornare dolor, eu lacinia orci enim sed nibh. Ut a ullamcorper lectus, id mattis purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus sollicitudin posuere. Nunc at augue lacus. Aenean efficitur leo sit amet lacinia efficitur. - -Quisque venenatis quam mi, in pharetra odio vulputate eu. In vel nisl pulvinar, pulvinar ligula ut, sodales risus. Sed efficitur lectus at vestibulum tincidunt. Vestibulum eu ullamcorper elit. Fusce vestibulum magna enim, et tempor lacus posuere vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer leo elit, luctus nec mattis sit amet, sollicitudin in turpis. - -Proin convallis venenatis leo, vitae tristique erat iaculis nec. Nulla facilisi. Duis porttitor, sapien et bibendum vulputate, sem libero sodales lacus, non malesuada felis erat ut libero. Nam non felis semper, finibus est a, mattis mauris. Praesent nec eros quam. Nulla hendrerit, augue consectetur eleifend ultricies, purus mi condimentum nulla, eget dapibus est nunc sed libero. Nullam elementum dui erat, vitae luctus libero sollicitudin et. Nulla odio magna, placerat in augue eu, dapibus imperdiet odio. Suspendisse imperdiet metus sit amet rhoncus dapibus. Cras at enim et urna vehicula cursus eu a mauris. Integer magna ante, eleifend ac placerat vitae, porta at nisi. Cras eget malesuada orci. Curabitur nunc est, vulputate id viverra et, dignissim sed odio. Curabitur non mattis sem. Sed bibendum, turpis vitae vehicula faucibus, nunc quam ultricies lectus, vitae viverra felis turpis at libero. - -Nullam ut egestas ligula. Proin hendrerit justo a lectus commodo venenatis. Nulla facilisi. Ut cursus lorem quis est bibendum condimentum. Aenean in tristique odio. Fusce tempor hendrerit ipsum. Curabitur mollis felis justo, quis dapibus erat auctor vel. Sed augue lectus, finibus ut urna quis, ullamcorper vestibulum dui. Etiam molestie aliquam tempor. Integer mattis sollicitudin erat, et tristique elit varius vel. Mauris a ex justo. - -Nam eros est, imperdiet non volutpat rutrum, pellentesque accumsan ligula. Duis sit amet turpis metus. Aenean in rhoncus metus, ac fringilla ex. Suspendisse condimentum egestas purus, ut pharetra odio vulputate vel. Duis tincidunt massa a placerat ultrices. Mauris ultricies nibh sit amet condimentum malesuada. Duis tincidunt id ipsum sed congue. - -Praesent eu ex augue. Nullam in porta ligula. In tincidunt accumsan arcu, in pellentesque magna tristique in. Mauris eleifend libero ac nisl viverra faucibus. Nam sollicitudin dolor in commodo hendrerit. Cras at orci metus. Ut quis laoreet orci. Vivamus ultrices leo pellentesque tempor aliquet. Maecenas ut eros vitae purus placerat vestibulum. Etiam vitae gravida dolor, quis rhoncus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. - -Suspendisse fringilla lacinia sagittis. Integer tincidunt consectetur tristique. Morbi non orci convallis, congue sapien quis, vulputate nunc. Donec a libero vel magna elementum facilisis non quis mi. Mauris posuere tellus non ipsum ultrices elementum. Vivamus massa velit, facilisis quis placerat aliquet, aliquet nec leo. Praesent a maximus sem. Sed neque elit, feugiat vel quam non, molestie sagittis nunc. Etiam luctus nunc ac mauris scelerisque, nec rhoncus lacus convallis. Nunc pharetra, nunc ac pulvinar aliquam, ex ipsum euismod augue, nec porttitor lacus turpis vitae neque. Fusce bibendum odio id tortor faucibus pellentesque. Sed ac porta nibh, eu gravida erat. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis ullamcorper felis. Nulla mattis sagittis ante ac tincidunt. Integer ac felis efficitur, viverra libero et, facilisis ligula. Suspendisse a metus a massa rhoncus posuere. Phasellus suscipit ligula ut lacus facilisis, ac pellentesque ex tempor. Quisque consectetur massa mi, ac molestie libero dictum quis. Proin porttitor ligula quis erat tincidunt venenatis. Proin congue nunc sed elit gravida, nec consectetur lectus sodales. Etiam tincidunt convallis ipsum at vestibulum. Quisque maximus enim et mauris porttitor, et molestie magna tristique. Morbi vitae metus elit. Maecenas sed volutpat turpis. Aliquam vitae dolor vestibulum, elementum purus eget, dapibus nibh. Nullam egestas dui ac rutrum semper. - -Etiam hendrerit est metus, et condimentum metus aliquam ac. Pellentesque id neque id ipsum rhoncus vulputate. Aliquam erat nisl, posuere sit amet ligula ac, fermentum blandit felis. Vivamus fermentum mi risus, non lacinia purus viverra id. Aenean ac sapien consequat, finibus mauris nec, porta sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis consectetur ex, dignissim bibendum nulla. Phasellus ac libero at quam vehicula euismod non eu leo. Phasellus a sapien augue. - -Maecenas ligula dui, bibendum vitae mauris et, auctor laoreet felis. Duis non libero a mi semper mattis. Quisque consequat luctus massa, quis tristique eros auctor feugiat. Maecenas sodales euismod neque vitae facilisis. Nullam laoreet imperdiet velit at pellentesque. Etiam massa odio, facilisis a consequat vitae, placerat vel magna. Nunc sagittis eros nec urna fringilla, pulvinar vestibulum nibh scelerisque. Sed magna metus, cursus eu consequat et, pharetra a est. Suspendisse elementum neque a dui malesuada lacinia. Donec sed ipsum volutpat, cursus urna id, ullamcorper arcu. Maecenas laoreet nisl eget velit egestas sollicitudin. Etiam nisl turpis, mollis id dignissim vitae, tristique vehicula ante. Maecenas eget placerat est, at rutrum augue. Vivamus faucibus lacinia ullamcorper. Sed pulvinar urna sodales ante sodales, at gravida leo dictum. - -Morbi maximus, quam a lobortis bibendum, enim felis varius elit, ac vehicula elit nisl ut lacus. Quisque ut arcu augue. Praesent id turpis quam. Sed sed arcu eros. Maecenas at cursus lorem, ac eleifend nisi. Fusce mattis felis at commodo pharetra. Praesent ac commodo ipsum. Quisque finibus et eros vitae tincidunt. In hac habitasse platea dictumst. Praesent purus ipsum, luctus lobortis ornare quis, auctor eget justo. Nam vel enim sollicitudin, faucibus tortor eu, sagittis eros. Ut nec consectetur erat. Donec ultricies malesuada ligula, a hendrerit sapien volutpat in. Maecenas sed enim vitae sapien pulvinar faucibus. - -Proin semper nunc nibh, non consequat neque ullamcorper vel. Maecenas lobortis sagittis blandit. Aenean et arcu ultricies turpis malesuada malesuada. Ut quam ex, laoreet ut blandit cursus, feugiat vitae dolor. Etiam ex lacus, scelerisque vel erat vel, efficitur tincidunt magna. Morbi tristique lacinia dolor, in egestas magna ultrices vitae. Integer ultrices leo ac tempus venenatis. Praesent ac porta tortor. Vivamus ornare blandit tristique. Nulla rutrum finibus pellentesque. In non dui elementum, fermentum ipsum vel, varius magna. Pellentesque euismod tortor risus, ac pellentesque nisl faucibus eget. - -Vivamus eu enim purus. Cras ultrices rutrum egestas. Sed mollis erat nibh, at posuere nisl luctus nec. Nunc vulputate, sapien id auctor molestie, nisi diam tristique ante, non convallis tellus nibh at orci. Morbi a posuere purus, in ullamcorper ligula. Etiam elementum sit amet dui imperdiet iaculis. Proin vitae tincidunt ipsum, sit amet placerat lectus. Curabitur commodo sapien quam, et accumsan lectus fringilla non. Nullam eget accumsan enim, ac pharetra mauris. Sed quis tristique velit, vitae commodo nisi. Duis turpis dui, maximus ut risus at, finibus consequat nunc. Maecenas sed est accumsan, aliquet diam in, facilisis risus. Curabitur vehicula rutrum auctor. Nam iaculis risus pulvinar maximus viverra. Nulla vel augue et ex sagittis blandit. - -Ut sem nulla, porta ac ante ac, posuere laoreet eros. Donec sodales posuere justo a auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras mollis at orci hendrerit porta. Nullam sodales tortor tortor, non lacinia diam finibus id. Duis libero orci, suscipit ac odio et, dictum consequat ipsum. Pellentesque eu ligula sagittis, volutpat eros at, lacinia lorem. Cras euismod tellus in iaculis tempor. Quisque accumsan, magna a congue venenatis, ante ipsum aliquam lectus, at egestas enim nunc at justo. Quisque sem purus, viverra ut tristique ut, maximus id enim. Etiam quis placerat sem. In sollicitudin, lacus eu rutrum mollis, nulla eros luctus elit, vel dapibus urna purus nec urna. Phasellus egestas massa quam, ac molestie erat hendrerit a. Praesent ultrices neque ut turpis molestie auctor. Etiam molestie placerat purus, et euismod erat aliquam in. Morbi id suscipit justo. - -Proin est ante, consequat at varius a, mattis quis felis. Sed accumsan nibh sit amet ipsum elementum posuere. Vestibulum bibendum id diam sit amet gravida. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi nec dolor vel ipsum dignissim hendrerit vel non ipsum. Praesent facilisis orci quis elit auctor lobortis. Phasellus cursus risus lectus, vel lobortis libero dapibus in. Quisque tristique tempus leo a pulvinar. Pellentesque a magna tincidunt, pellentesque massa nec, laoreet orci. Morbi congue ornare dolor quis commodo. Phasellus massa nisi, tincidunt at eros dictum, hendrerit lobortis urna. Maecenas porta, magna id mattis molestie, nibh tellus lobortis sem, eget tincidunt ipsum quam eu turpis. - -Ut gravida orci risus, vel rutrum mauris vehicula id. Etiam bibendum, neque a placerat condimentum, ex orci imperdiet lectus, quis dapibus arcu lacus eget lectus. Sed consequat non mi sit amet venenatis. Fusce vestibulum erat libero, eget hendrerit risus vulputate sollicitudin. Integer sed eleifend felis. Donec commodo, sem eu mattis placerat, urna odio aliquam tellus, et laoreet justo tellus eget erat. Fusce sed suscipit tortor. Nam hendrerit nibh ac nunc auctor lacinia. Pellentesque placerat condimentum ipsum, eget semper tortor hendrerit vel. Nullam non urna eu lacus pellentesque congue ut id eros. - -Nunc finibus leo in rhoncus tristique. Sed eu ipsum nec nisl egestas faucibus eget a felis. Pellentesque vitae nisi in nulla accumsan fermentum. Sed venenatis feugiat eleifend. Fusce porttitor varius placerat. Aliquam aliquet lacus sit amet mattis mollis. Sed vel nulla quis dolor suscipit vehicula ac viverra lorem. Duis viverra ipsum eget nulla ullamcorper fermentum. Mauris tincidunt arcu quis quam fringilla ornare. Donec et iaculis tortor. Nam ultricies libero vel ipsum aliquet efficitur. Morbi eget dolor aliquam, tempus sapien eget, viverra ante. Donec varius mollis ex, sed efficitur purus euismod interdum. Quisque vel sapien non neque tincidunt semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Suspendisse sit amet purus leo. Fusce lectus lorem, aliquam ac nulla eget, imperdiet ornare eros. Nullam sem augue, varius in nisi non, sollicitudin pellentesque ante. Etiam eu odio condimentum, tempor libero et, egestas arcu. Cras pellentesque eleifend aliquet. Pellentesque non blandit ligula. Ut congue viverra rhoncus. Phasellus mattis mi ac eros placerat, eu feugiat tellus ultrices. Aenean mollis laoreet libero eu imperdiet. Cras sed pulvinar mi, ac vehicula ligula. Vestibulum sit amet ex massa. In a egestas eros. - -Mauris pretium ipsum risus, venenatis cursus ante imperdiet id. Praesent eu turpis nec risus feugiat maximus ullamcorper ac lectus. Integer placerat at mi vel dapibus. Vestibulum fermentum turpis sit amet turpis viverra, id aliquet diam suscipit. Nam nec ex sed ante ullamcorper pharetra quis sit amet risus. Sed ac faucibus velit, id feugiat nibh. Nullam eget ipsum ex. Vivamus tincidunt non nunc non faucibus. Quisque bibendum viverra facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at nisi hendrerit quam suscipit egestas. Curabitur laoreet maximus ultricies. Duis ut tellus ac augue molestie dictum. - -Suspendisse rhoncus iaculis erat, ut ullamcorper est tristique eget. Donec auctor nec risus at gravida. Vivamus volutpat vulputate tellus, vel ultricies eros suscipit eget. Ut pulvinar id mi eu tempus. Morbi malesuada augue in dui varius, nec blandit neque vehicula. Donec ornare nec nisl in mollis. Morbi enim nisi, rhoncus nec est id, dapibus tempus urna. Ut id elit a felis vestibulum consectetur. Duis lectus quam, pharetra sit amet diam sed, posuere vestibulum erat. Fusce vitae maximus massa. Nullam id metus tempus, iaculis risus eu, lobortis urna. Quisque in congue urna. Pellentesque placerat neque in augue dapibus, non varius ex malesuada. Curabitur ut eleifend libero. Fusce vitae ligula luctus, fermentum enim vitae, ultrices erat. - -Sed viverra augue turpis, scelerisque egestas sapien mattis eu. Duis laoreet magna at ex pharetra dapibus. Praesent eget odio vel quam venenatis dictum. Nulla in sollicitudin dolor. Mauris lobortis nec eros vel rhoncus. Vestibulum porta viverra venenatis. Curabitur vel scelerisque quam, a egestas velit. Praesent volutpat tincidunt magna at laoreet. - -Cras nec lorem odio. Pellentesque quis dui urna. Praesent at tellus ac lectus scelerisque placerat nec eu risus. Vestibulum sit amet mattis ligula. Vivamus sed nisi at leo elementum accumsan at sit amet arcu. Aenean mattis tellus nec leo gravida, eget hendrerit nisl faucibus. Mauris pellentesque luctus condimentum. Maecenas pretium sapien nunc, eget commodo dolor maximus id. Mauris vestibulum accumsan massa a dictum. Phasellus interdum quam ligula, ut maximus diam blandit aliquam. Nunc vitae ex eu erat condimentum consectetur. Maecenas interdum condimentum volutpat. - -Donec et enim a libero rutrum laoreet. Praesent a condimentum sem, at tincidunt quam. In vel molestie risus. Sed urna dui, molestie vitae mollis laoreet, tempor quis lectus. Praesent vitae auctor est, et aliquet nunc. Curabitur vulputate blandit nulla, at gravida metus. Maecenas gravida dui eu iaculis tristique. Pellentesque posuere turpis nec auctor eleifend. Suspendisse bibendum diam eu tellus lobortis, et laoreet quam congue. In hac habitasse platea dictumst. Morbi dictum neque velit, eget rutrum eros ultrices sit amet. - -Phasellus fermentum risus pharetra consectetur bibendum. Donec magna tortor, lacinia vitae nibh quis, aliquet pretium lorem. Donec turpis nisi, pretium eu enim volutpat, mattis malesuada augue. Nullam vel tellus iaculis, sollicitudin elit eget, tincidunt lacus. Fusce elementum elementum felis et iaculis. Suspendisse porta eros nec neque malesuada, in malesuada ante sollicitudin. Vivamus bibendum viverra molestie. - -Integer feugiat, erat nec convallis aliquam, velit felis congue erat, molestie eleifend tellus erat in tellus. Nunc et justo purus. Donec egestas fermentum dui non feugiat. Quisque in sapien sagittis, gravida quam id, iaculis lectus. Cras sagittis rhoncus bibendum. Fusce quis metus in velit scelerisque tincidunt at non ipsum. Vivamus efficitur ante eu odio vulputate, vitae ultricies risus vehicula. Proin eget odio eu sem tincidunt feugiat vel id lorem. - -Vestibulum sit amet nulla dignissim, euismod mi in, fermentum tortor. Donec ut aliquet libero, lacinia accumsan velit. Donec et nulla quam. Nullam laoreet odio nec nunc imperdiet, a congue eros venenatis. Quisque nec tellus sit amet neque interdum posuere. Duis quis mi gravida, tincidunt diam convallis, ultricies augue. Mauris consequat risus non porttitor congue. Ut in ligula consequat, viverra nunc a, eleifend enim. Duis ligula urna, imperdiet nec facilisis et, ornare eu ex. Proin lobortis lectus a lobortis porttitor. Nulla leo metus, egestas eu libero sed, pretium faucibus felis. Vestibulum non sem tortor. Nam cursus est leo. Vivamus luctus enim odio, non interdum sem dapibus a. Aenean accumsan consequat lectus in imperdiet. - -Donec vehicula laoreet ipsum in posuere. Quisque vel quam imperdiet, sollicitudin nisi quis, suscipit velit. Morbi id sodales mauris. Curabitur tellus arcu, feugiat sed dui sit amet, sodales sagittis libero. Aenean vel suscipit metus, non placerat leo. Vestibulum quis nulla elit. Proin scelerisque non ante ut commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed non urna dolor. Suspendisse convallis mi porta pulvinar ultrices. Suspendisse quam ipsum, hendrerit non scelerisque molestie, interdum dictum nunc. Morbi condimentum condimentum turpis eu luctus. Pellentesque sagittis sollicitudin odio, sed ultricies felis ornare sit amet. Sed ultrices ex leo, a tincidunt nisl gravida sed. Nullam ornare accumsan porta. Praesent consectetur id est nec sollicitudin. - -In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed ultrices nibh. Duis accumsan suscipit eros, a dictum odio tempus sit amet. Aenean imperdiet erat ac lacus finibus, scelerisque cursus massa imperdiet. Mauris molestie risus ut lacinia posuere. Nulla et sodales purus. Maecenas orci erat, placerat in tristique quis, placerat in mi. - -Donec sollicitudin pellentesque odio in feugiat. Morbi eu dolor ut mauris congue sollicitudin. Aliquam erat volutpat. Nulla id varius dui. Curabitur finibus urna ante, consectetur interdum nisi volutpat a. Quisque quis mi tristique, consequat tellus eget, rutrum sapien. Vivamus vitae tellus vulputate, rutrum ex eu, vulputate sem. Suspendisse viverra lorem tellus, vel interdum orci gravida quis. Ut laoreet arcu at mi ullamcorper finibus. Duis porta sagittis vestibulum. Sed commodo nisl vitae urna sollicitudin, nec lacinia est sodales. Curabitur imperdiet sodales dui sed iaculis. Sed ac tellus maximus, eleifend quam sit amet, feugiat elit. Aenean viverra, dui at mattis varius, est odio vestibulum sapien, sit amet mollis libero massa nec velit. Etiam quis sodales justo. - -Ut ultricies, sem eget sodales feugiat, nunc arcu congue elit, ac tempor justo massa nec purus. Maecenas enim nunc, pharetra eget dictum sit amet, tempus pellentesque velit. Suspendisse venenatis ligula in nulla mattis, et imperdiet ex tincidunt. Etiam vulputate, tellus et ultrices suscipit, enim velit laoreet massa, vitae congue odio enim ac urna. Morbi quam lorem, iaculis ac varius sagittis, euismod quis dolor. In ut dui eu purus feugiat consectetur. Vestibulum cursus velit quis lacus pellentesque iaculis. Cras in risus sed mauris porta rutrum. Nulla facilisi. Nullam eu bibendum est, non pellentesque lectus. Sed imperdiet feugiat lorem, quis convallis ante auctor in. Maecenas justo magna, scelerisque sit amet tellus eget, varius elementum risus. Duis placerat et quam sed varius. - -Duis nec nibh vitae nibh dignissim mollis quis sed felis. Curabitur vitae quam placerat, venenatis purus ut, euismod nisl. Curabitur porttitor nibh eu pulvinar ullamcorper. Suspendisse posuere nec ipsum ac dapibus. Cras convallis consectetur urna. Phasellus a nibh in dolor lacinia posuere id eget augue. In eu pharetra lorem, vitae cursus lacus. Aliquam tincidunt nibh lectus. Aenean facilisis ultricies posuere. Sed ut placerat orci. Curabitur scelerisque gravida blandit. Maecenas placerat ligula eget suscipit fringilla. Mauris a tortor justo. Aliquam hendrerit semper mollis. Phasellus et tincidunt libero. Etiam vel quam libero. - -Quisque aliquet tempor ex. Ut ante sem, vehicula at enim vel, gravida porta elit. Etiam vitae lacus a neque lobortis consectetur. Mauris sed interdum odio. Mauris elementum ex blandit tempor cursus. Integer in enim in leo viverra elementum. Fusce consectetur metus et sem rutrum, mattis euismod diam semper. Nunc sed ipsum vel urna consequat vehicula. Donec cursus pretium lorem, vestibulum pretium felis commodo sit amet. Nam blandit felis enim, eget gravida ex faucibus a. In nec neque massa. Etiam laoreet posuere ipsum. Praesent volutpat nunc dolor, ac vulputate magna facilisis non. Aenean congue turpis vel lectus sollicitudin tristique. Sed nec consequat purus, non vehicula quam. Etiam ultricies, est ac dictum tincidunt, turpis turpis pretium massa, a vulputate libero justo at nibh. - -Aliquam erat volutpat. Cras ultrices augue ac sollicitudin lobortis. Curabitur et aliquet purus. Duis feugiat semper facilisis. Phasellus lobortis cursus velit, a sollicitudin tortor. Nam feugiat sapien non dapibus condimentum. Morbi at mi bibendum, commodo quam at, laoreet enim. Integer eu ultrices enim. Sed vestibulum eu urna ut dictum. Curabitur at mattis leo, sed cursus massa. Aliquam porttitor, felis quis fermentum porttitor, justo velit feugiat nulla, eget condimentum sem dui ut sapien. - -In fringilla elit eu orci aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eget fringilla tellus. Curabitur fermentum, mi et condimentum suscipit, elit neque bibendum dui, et hendrerit nunc metus id ipsum. Morbi placerat mi in hendrerit congue. Ut feugiat mauris eget scelerisque viverra. Vivamus sit amet erat dictum, sagittis lectus nec, pulvinar lorem. Sed non enim ac dui sollicitudin aliquet. Quisque ut lacus dolor. Fusce hendrerit malesuada euismod. Nulla faucibus vel mauris eu mollis. Mauris est diam, fringilla ac arcu feugiat, efficitur volutpat turpis. Aliquam venenatis cursus massa sed porttitor. Ut ac finibus enim, in tincidunt sapien. - -Nunc faucibus semper turpis a lacinia. Phasellus gravida, libero vel pulvinar ornare, ex sem tincidunt lectus, sit amet convallis augue risus at tortor. Quisque sit amet ipsum id nulla posuere vestibulum. Pellentesque scelerisque mauris vel leo viverra sodales. Nulla viverra aliquam ex, ut rutrum enim fermentum venenatis. Aenean eget dapibus ex, eget faucibus metus. Vestibulum volutpat leo in diam semper, eget porta magna suscipit. Sed sit amet nulla blandit, aliquam dolor ac, gravida velit. Sed vel velit viverra, maximus est id, convallis justo. - -Curabitur nulla ante, vulputate at libero vel, ullamcorper rutrum nibh. Pellentesque porttitor eu mauris id mattis. Duis vulputate augue elit, eget interdum justo pretium vel. Maecenas eu vulputate arcu, eget posuere purus. Suspendisse viverra a velit dictum eleifend. Suspendisse vitae dapibus diam. Donec vehicula justo in ante interdum, eu luctus diam placerat. Vivamus convallis ipsum eu orci suscipit, sed fermentum enim euismod. Maecenas faucibus elit vitae ex ornare tristique. Donec vestibulum nec elit sit amet porttitor. Aenean tempor lectus eget tortor hendrerit luctus. Nullam interdum vitae lectus vel feugiat. Cras in risus non magna consectetur lobortis. Sed faucibus enim quis gravida convallis. - -Phasellus eget massa sit amet libero ultrices suscipit. Vivamus at risus sapien. Nam mollis nunc eget velit dictum maximus. Sed pellentesque, nunc ac fringilla lacinia, quam enim mattis ex, sed euismod tortor metus eu neque. Ut mattis nisl ut lectus rhoncus, sodales bibendum eros porta. Nulla porttitor enim nec diam sagittis, eget porta velit efficitur. Vestibulum ultricies eros neque. Phasellus rutrum suscipit enim, in interdum ante gravida vitae. Sed in sagittis diam, non commodo velit. - -Morbi hendrerit odio orci, nec tincidunt odio rhoncus nec. Mauris neque velit, vehicula a lorem at, suscipit tristique dui. Sed finibus, nisl in mattis convallis, turpis neque sodales lacus, eu porta enim magna non diam. Nam commodo sodales risus consectetur malesuada. In eget elementum justo. Phasellus sit amet massa imperdiet, dapibus nunc sit amet, suscipit orci. Fusce condimentum laoreet feugiat. Ut ut viverra ante. Praesent bibendum interdum commodo. Nulla mollis nisi a est ornare volutpat. Sed at ligula eu nisi dapibus tempus. Proin cursus vestibulum justo, nec efficitur justo dignissim vel. Nunc quis maximus eros. - -Cras viverra, diam a tristique mattis, libero felis vulputate tellus, a ornare felis leo a dui. Nulla ante nulla, finibus ut tellus ut, blandit pharetra nibh. Proin eleifend fermentum ex, eget auctor libero vulputate in. Nullam ultricies, mauris placerat pretium placerat, leo urna lobortis leo, vel placerat arcu libero sed mauris. Aliquam mauris ligula, ornare at urna at, eleifend gravida ligula. Vestibulum consectetur ut nulla non scelerisque. Donec ornare, sem nec elementum aliquam, urna nulla bibendum metus, eu euismod dui ligula ac est. Fusce laoreet erat eu ex lobortis, quis bibendum ligula interdum. Sed vel mi erat. Vivamus id lacus ac enim mattis tempor. Nunc ultricies pellentesque enim sed euismod. Fusce tincidunt convallis elit quis aliquam. Mauris nulla ipsum, sollicitudin quis diam ac, feugiat volutpat tellus. In nibh nibh, vulputate quis tincidunt quis, pulvinar eget magna. Pellentesque quis finibus dolor. Suspendisse viverra vitae lectus non eleifend. - -Nunc ut orci et sapien maximus semper. Nulla dignissim sem urna, ac varius lectus ultricies id. Quisque aliquet pulvinar pretium. In ultricies molestie tellus vehicula porta. Nam enim lorem, aliquam eget ex et, hendrerit volutpat quam. Maecenas diam lacus, pellentesque eget tempus ac, pharetra eu elit. Donec vel eros a sem facilisis vulputate. Nullam ac nisi vulputate, laoreet nisl ac, eleifend sem. Nullam mi massa, rhoncus sed pharetra interdum, tincidunt eget nunc. Aliquam viverra mattis posuere. Mauris et dui sed nisl sollicitudin fermentum quis ut arcu. Nam placerat eget orci at tincidunt. Curabitur vel turpis metus. Phasellus nibh nulla, fermentum scelerisque sem vel, gravida tincidunt velit. Pellentesque vel quam tempor, finibus massa pellentesque, condimentum dui. - -Donec at mattis neque. Etiam velit diam, consequat auctor mauris id, hendrerit faucibus metus. Maecenas ullamcorper eros a est sodales, ac consectetur odio scelerisque. Donec leo metus, imperdiet at pellentesque vel, feugiat id erat. Suspendisse at magna enim. Vestibulum placerat sodales lorem id sollicitudin. Aenean at euismod ligula, eget mollis diam. Phasellus pulvinar, orci nec pretium condimentum, est erat facilisis purus, quis feugiat augue elit aliquam nulla. Aenean vitae tortor id risus congue tincidunt. Sed dolor enim, mattis a ullamcorper id, volutpat ac leo. - -Proin vehicula feugiat augue, id feugiat quam sodales quis. Donec et ultricies massa, a lacinia nulla. Duis aliquam augue ornare euismod viverra. Ut lectus risus, rutrum sit amet efficitur a, luctus nec nisl. Cras volutpat ullamcorper congue. Sed vitae odio metus. Phasellus aliquet euismod varius. - -Nullam sem ex, malesuada ut magna ut, pretium mollis arcu. Nam porttitor eros cursus mi lacinia faucibus. Suspendisse aliquet eleifend iaculis. Maecenas sit amet viverra tortor. Nunc a mollis risus. Etiam tempus dolor in tortor malesuada mattis. Ut tincidunt venenatis est sit amet dignissim. Vestibulum massa enim, tristique sed scelerisque eu, fringilla ac velit. Donec efficitur quis urna sit amet malesuada. Vestibulum consequat ac ligula in dapibus. Maecenas massa massa, molestie non posuere nec, elementum ut magna. In nisi erat, mollis non venenatis eu, faucibus in justo. Morbi gravida non ex non egestas. Pellentesque finibus laoreet diam, eu commodo augue congue vitae. - -Aenean sem mi, ullamcorper dapibus lobortis vitae, interdum tincidunt tortor. Vivamus eget vulputate libero. Ut bibendum posuere lectus, vel tincidunt tortor aliquet at. Phasellus malesuada orci et bibendum accumsan. Aliquam quis libero vel leo mollis porta. Sed sagittis leo ac lacus dictum, ac malesuada elit finibus. Suspendisse pharetra luctus commodo. Vivamus ultricies a odio non interdum. Vivamus scelerisque tincidunt turpis quis tempor. Pellentesque tortor ligula, varius non nunc eu, blandit sollicitudin neque. Nunc imperdiet, diam et tristique luctus, ipsum ex condimentum nunc, sit amet aliquam justo velit sed libero. Duis vel suscipit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tincidunt neque vel massa ultricies, id dictum leo consequat. Curabitur lobortis ultricies tellus, eget mattis nisl aliquam sit amet. - -Proin at suscipit justo. Vivamus ut vestibulum nisl. Pellentesque enim odio, pharetra non magna sed, efficitur auctor magna. Praesent tincidunt ante quis ante hendrerit viverra. Pellentesque vel ipsum id magna vulputate efficitur. Sed nec neque accumsan, pulvinar sapien quis, euismod mauris. Donec condimentum laoreet sapien quis gravida. Quisque sed mattis purus. Vestibulum placerat vel neque maximus scelerisque. - -Vestibulum mattis quam quis efficitur elementum. Duis dictum dolor ac scelerisque commodo. Fusce sollicitudin nisi sit amet dictum placerat. Suspendisse euismod pharetra eleifend. In eros nisl, porttitor sed mauris at, consectetur aliquet mauris. Donec euismod viverra neque sed fermentum. Phasellus libero magna, accumsan ut ultricies vitae, dignissim eget metus. Donec tellus turpis, interdum eget maximus nec, hendrerit eget massa. Curabitur auctor ligula in iaculis auctor. In ultrices quam suscipit cursus finibus. Aenean id mi at dolor interdum iaculis vitae ut lorem. Nullam sed nibh fringilla, lacinia odio nec, placerat erat. In dui libero, viverra ac viverra ac, pellentesque sit amet turpis. - -Nulla in enim ex. Sed feugiat est et consectetur venenatis. Cras varius facilisis dui vel convallis. Vestibulum et elit eget tellus feugiat pellentesque. In ut ante eu purus aliquet posuere. Nulla nec ornare sem, sed luctus lorem. Nam varius iaculis odio, eget faucibus nisl ullamcorper in. Sed eget cursus felis, nec efficitur nisi. - -Vivamus commodo et sem quis pulvinar. Pellentesque libero ante, venenatis vitae ligula sit amet, ornare sollicitudin nulla. Mauris eget tellus hendrerit, pulvinar metus quis, tempor nisi. Proin magna ex, laoreet sed tortor quis, varius fermentum enim. Integer eu dolor dictum, vulputate tortor et, aliquet ligula. Vestibulum vitae justo id mauris luctus sollicitudin. Suspendisse eget auctor neque, sodales egestas lorem. Vestibulum lacinia egestas metus vitae euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ex tellus, volutpat nec pulvinar sit amet, condimentum vitae dui. Curabitur vel felis sodales, lacinia nunc iaculis, ullamcorper augue. Pellentesque consequat dolor quis eros efficitur malesuada. Nulla ut malesuada lectus. - -Morbi et tristique ante. Aliquam erat volutpat. Vivamus vitae dui nec turpis pellentesque fermentum. Quisque eget velit massa. Pellentesque tristique aliquam nisl, eu sollicitudin justo venenatis sed. Duis eleifend sem eros, ut aliquam libero porttitor id. Sed non nunc consequat, rhoncus diam eu, commodo erat. Praesent fermentum in lectus id blandit. Donec quis ipsum at justo volutpat finibus. Nulla blandit justo nulla, at mollis lacus consequat eget. Aenean sollicitudin quis eros ut ullamcorper. - -Pellentesque venenatis nulla ut mi aliquet feugiat. Cras semper vel magna nec pharetra. Integer mattis felis et sapien commodo imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis quis luctus felis. Vestibulum justo nibh, aliquam non lectus vitae, molestie placerat justo. Donec lorem nibh, gravida sit amet hendrerit ac, maximus id ipsum. Nunc ac libero sodales risus eleifend sagittis. Phasellus est massa, lobortis elementum ex sed, scelerisque consectetur neque. Nunc faucibus neque id lorem malesuada, eget convallis ex mattis. - -Sed turpis tortor, fermentum non turpis id, posuere varius nibh. Donec iaculis lorem dui. Etiam eros ante, sodales eget venenatis at, consectetur eget risus. Curabitur non aliquam ante, a pretium justo. Maecenas tempor nisl tortor, vitae dictum nisi ultrices eu. Duis eget dui ultrices, porttitor lacus sed, lobortis purus. Quisque mattis elit nec neque sagittis, sed commodo leo blandit. Mauris sodales interdum eleifend. Vestibulum condimentum consectetur augue, id luctus diam convallis et. - -Nunc suscipit risus in justo accumsan, a placerat magna tincidunt. Proin a nisl ipsum. Sed libero dui, tristique in augue quis, auctor tristique risus. Sed porttitor ex augue, eu porta augue molestie a. Duis rhoncus purus libero, eu tempus turpis condimentum at. Sed mollis nisi id lectus placerat tincidunt. Maecenas non scelerisque elit, quis rutrum orci. Donec in tellus pharetra urna ornare lobortis. Phasellus id risus at nisi varius rutrum eu ut turpis. - -Duis dictum justo quis nisl porta, eget tincidunt magna suscipit. Sed velit massa, ullamcorper eu sodales ac, pretium a massa. Duis et rutrum tortor. Nulla accumsan hendrerit sapien, cursus volutpat eros egestas eget. Donec sollicitudin at ante quis sollicitudin. Aenean blandit feugiat diam, id feugiat eros faucibus eget. Donec viverra dolor vel justo scelerisque dignissim. Nulla semper sem nunc, rhoncus semper tellus ultricies sed. Duis in ornare diam. Donec vehicula feugiat varius. Maecenas ut suscipit est. Vivamus sem sem, finibus at dolor sit amet, euismod dapibus ligula. Vestibulum fringilla odio dapibus, congue massa eget, congue sem. Donec feugiat magna eget tortor lacinia scelerisque non et ipsum. - -Suspendisse potenti. Nunc convallis sollicitudin ex eget venenatis. Sed iaculis nibh ex, vel ornare ligula congue dignissim. Quisque sollicitudin dolor ac dui vestibulum, sit amet molestie nisi aliquet. Donec at risus felis. Aenean sollicitudin metus a feugiat porta. Aenean a tortor ut dolor cursus sagittis. Vivamus consectetur porttitor nunc in facilisis. Proin sit amet mi vel lectus consectetur ultrices. - -Sed cursus lectus vitae nunc tristique, nec commodo turpis dapibus. Pellentesque luctus ex id facilisis ornare. Morbi quis placerat dolor. Donec in lectus in arcu mattis porttitor ac sit amet metus. Cras congue mauris non risus sodales, vitae feugiat ipsum bibendum. Nulla venenatis urna sed libero elementum, a cursus lorem commodo. Mauris faucibus lobortis eros nec commodo. - -Nullam suscipit ligula ullamcorper lorem commodo blandit. Nulla porta nibh quis pulvinar placerat. Vivamus eu arcu justo. Vestibulum imperdiet est ut fermentum porttitor. Pellentesque consectetur libero in sapien efficitur scelerisque. Curabitur ac erat sit amet odio aliquet dignissim. Pellentesque mi sem, rhoncus et luctus at, porttitor rutrum lectus. Vestibulum sollicitudin sollicitudin suscipit. Aenean efficitur dolor non ultrices imperdiet. Donec vel sem ex. - -Sed convallis mauris aliquam rutrum cursus. Ut tempor porttitor sodales. Etiam eu risus ac augue gravida egestas et eu dolor. Proin id magna ex. Suspendisse quis lectus quis lorem ultricies tempus. Donec porttitor velit vitae tincidunt faucibus. Aliquam vitae semper nisi. Morbi ultrices, leo non pretium dapibus, dui libero pellentesque ex, vel placerat enim ante vitae dui. Nunc varius, sem sit amet sagittis lobortis, lectus odio scelerisque mauris, ut vestibulum orci magna quis neque. Sed id congue justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris congue nisi est, malesuada mollis elit tincidunt sed. Curabitur sed ex sit amet felis tristique elementum vitae vel nibh. - -Etiam mollis pretium lobortis. Mauris augue lacus, efficitur at lacus sed, mollis tincidunt lectus. Aliquam erat volutpat. Donec at euismod elit, et mattis felis. Sed id lobortis urna. Morbi imperdiet vestibulum leo, sed maximus leo blandit eu. Aliquam semper lorem neque, nec euismod turpis mattis mollis. Quisque lobortis urna ultrices odio pretium, ac venenatis orci faucibus. Suspendisse bibendum odio ligula, sed lobortis massa pharetra nec. Donec turpis justo, iaculis at dictum ac, finibus eu libero. Maecenas quis porttitor mi, sit amet aliquet neque. - -Vivamus auctor vulputate ante, at egestas lorem. Donec eu risus in nulla mollis ultricies at et urna. Duis accumsan porta egestas. Ut vel euismod augue. Fusce convallis nulla ante, nec fringilla velit aliquet at. Nam malesuada dapibus ligula, a aliquam nibh scelerisque ac. Praesent malesuada neque et pellentesque interdum. Curabitur volutpat at turpis vitae tristique. Vivamus porttitor semper congue. Quisque suscipit lacus mi, rhoncus ultrices tortor auctor quis. Maecenas neque neque, molestie ac facilisis eget, luctus ac lorem. In ut odio ut lacus suscipit pulvinar vitae sed elit. Nulla imperdiet, sem quis euismod sagittis, dui erat luctus dolor, faucibus faucibus erat sem eget nunc. Nam accumsan placerat malesuada. Maecenas convallis finibus pulvinar. - -Cras at placerat tortor. Morbi facilisis auctor felis sit amet molestie. Donec sodales sed lorem vitae suscipit. Etiam fermentum pharetra ipsum, nec luctus orci gravida eu. Pellentesque gravida, est non condimentum tempus, mauris ligula molestie est, in congue dolor nisl vel sapien. Duis congue tempor augue, id rutrum eros porta dapibus. Etiam rutrum eget est eget vestibulum. Aenean mollis arcu vel consequat varius. Praesent at condimentum felis. Duis nec interdum nisl. Donec commodo lorem sed sapien scelerisque malesuada non eu urna. In blandit non ipsum at porta. Nam lobortis leo vitae dui auctor, non feugiat quam bibendum. Donec auctor lectus sagittis laoreet maximus. Maecenas rhoncus laoreet porttitor. Vestibulum porttitor augue ut lectus hendrerit, eget posuere mi gravida. - -Sed mattis ex in erat pulvinar, eu imperdiet magna dapibus. Etiam nisi nibh, tempus non tellus sit amet, mattis tempor odio. Quisque nec lorem feugiat, lobortis odio et, commodo nunc. Maecenas semper purus nisi, nec vehicula nibh eleifend vitae. Nulla fermentum a lectus at maximus. Phasellus finibus metus non euismod ultrices. Etiam a pulvinar ante. Quisque convallis nec metus sit amet facilisis. Praesent laoreet massa et sollicitudin laoreet. Vestibulum in mauris aliquet, convallis mi ut, elementum purus. Nulla purus nulla, sodales at hendrerit quis, tempus sed lectus. - -Nam ut laoreet neque, ut maximus nibh. Maecenas quis justo pellentesque, sollicitudin elit at, venenatis velit. Aenean nunc velit, vehicula scelerisque odio at, consectetur laoreet purus. Duis dui purus, malesuada quis ipsum sit amet, tempor interdum libero. Curabitur porta scelerisque sapien, vitae cursus diam condimentum eu. Phasellus sed orci quam. Nullam vitae dui quis purus tincidunt vestibulum. Curabitur quis nulla porta, cursus arcu non, auctor enim. Etiam sollicitudin ex id sem vehicula mollis. Morbi viverra laoreet tincidunt. Praesent ut semper dui. Nam sit amet pretium neque. Mauris vitae luctus diam, in lacinia purus. Maecenas ut placerat justo, ut porta felis. Integer eu mauris ante. - -Aenean porttitor tellus diam, tempor consequat metus efficitur id. Suspendisse ut felis at erat tempor dictum at nec sapien. Sed vestibulum interdum felis, ac mattis mauris porta in. Nunc et condimentum massa. Sed cursus dictum justo et luctus. Integer convallis enim nisl, a rutrum lectus ultricies in. Donec dapibus lacus at nulla dapibus, id sollicitudin velit hendrerit. Fusce a magna at orci mollis rutrum ac a dolor. Aliquam erat volutpat. Morbi varius porta nunc, sit amet sodales ex hendrerit commodo. Donec tincidunt tortor sapien, vitae egestas sapien vehicula eget. - -Suspendisse potenti. Donec pulvinar felis nec leo malesuada interdum. Integer posuere placerat maximus. Donec nibh ipsum, tincidunt vitae luctus vitae, bibendum at leo. Sed cursus nisl ut ex faucibus aliquet sed nec eros. Curabitur molestie posuere felis. Integer faucibus velit eget consequat iaculis. Mauris sed vulputate odio. Phasellus maximus, elit a pharetra egestas, lorem magna semper tellus, vestibulum semper diam felis at sapien. Suspendisse facilisis, nisl sit amet euismod vehicula, libero nulla vehicula dolor, quis fermentum nibh elit sit amet diam. - -Morbi lorem enim, euismod eu varius ut, scelerisque quis odio. Nam tempus vitae eros id molestie. Nunc pretium in nulla eget accumsan. Quisque mattis est ut semper aliquet. Maecenas eget diam elementum, fermentum ipsum a, euismod sapien. Duis quam ligula, cursus et velit nec, ullamcorper tincidunt magna. Donec vulputate nisl est, et ullamcorper urna tempor sit amet. - -Proin lacinia dui non turpis congue pretium. Morbi posuere metus vel purus imperdiet interdum. Morbi venenatis vel eros non ultricies. Nulla vel semper elit. Ut quis purus tincidunt, auctor justo ut, faucibus turpis. Proin quis mattis erat, at faucibus ligula. Mauris in mauris enim. Donec facilisis enim at est feugiat hendrerit. Nam vel nisi lorem. Fusce ultricies convallis diam, in feugiat tortor luctus quis. Donec tempor, leo vitae volutpat aliquam, magna elit feugiat leo, quis placerat sapien felis eget arcu. Donec ornare fermentum eleifend. Integer a est orci. - -Proin rhoncus egestas leo. Nulla ultricies porta elit quis ornare. Nunc fermentum interdum vehicula. In in ligula lorem. Donec nec arcu sit amet orci lobortis iaculis. Mauris at mollis erat, sit amet mollis tortor. Mauris laoreet justo ullamcorper porttitor auctor. Aenean sit amet aliquam lectus, id fermentum eros. Praesent urna sem, vehicula ac fermentum id, dapibus ut purus. Vestibulum vitae tempus nunc. Donec at nunc ornare metus volutpat porta at eget magna. Donec varius aliquet metus, eu lobortis risus aliquam sed. Ut dapibus fermentum velit, ac tincidunt libero faucibus at. - -In in purus auctor, feugiat massa quis, facilisis nisi. Donec dolor purus, gravida eget dolor ac, porttitor imperdiet urna. Donec faucibus placerat erat, a sagittis ante finibus ac. Sed venenatis dignissim elit, in iaculis felis posuere faucibus. Praesent sed viverra dolor. Mauris sed nulla consectetur nunc laoreet molestie in ut metus. Proin ac ex sit amet magna vulputate hendrerit ac condimentum urna. Proin ligula metus, gravida et sollicitudin facilisis, iaculis ut odio. Cras tincidunt urna et augue varius, ut facilisis urna consequat. Aenean vehicula finibus quam. Ut iaculis eu diam ac mollis. Nam mi lorem, tristique eget varius at, sodales at urna. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vitae dictum erat, et auctor ipsum. Nullam nunc nunc, sollicitudin quis magna a, vestibulum fermentum mauris. Praesent at erat dolor. Proin laoreet tristique nulla vel efficitur. Nam sed ultrices nibh, id rutrum nunc. Curabitur eleifend a erat sit amet sollicitudin. Nullam metus quam, laoreet vitae dapibus id, placerat sed leo. Aliquam erat volutpat. Donec turpis nisl, cursus eu ex sit amet, lacinia pellentesque nisl. Sed id ipsum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec interdum scelerisque lorem eu mattis. - -Vivamus ac tristique massa, nec facilisis nisl. Nam ipsum neque, tincidunt vel urna in, cursus imperdiet enim. Nam pellentesque egestas tempus. Morbi facilisis imperdiet libero vitae fringilla. Nam lacinia ligula at sapien facilisis malesuada. Nullam accumsan pulvinar sem, et cursus libero porta sit amet. Curabitur vulputate erat elit, ut pulvinar erat maximus vel. - -Cras aliquet metus ut purus sagittis, vel venenatis ante consectetur. Pellentesque nulla lacus, viverra viverra mattis non, placerat vitae nibh. Donec enim turpis, accumsan sit amet tincidunt eu, imperdiet non metus. Morbi ipsum eros, tincidunt vel est ac, tristique porttitor nibh. Praesent ut ullamcorper mauris. Sed laoreet sit amet diam congue venenatis. Integer porta purus nec orci sagittis posuere. - -Donec vehicula mauris eget lacus mollis venenatis et sed nibh. Nam sodales ligula ipsum, scelerisque lacinia ligula sagittis in. Nam sit amet ipsum at erat malesuada congue. Aenean ut sollicitudin sapien. Etiam at tempor odio. Mauris vitae purus ut magna suscipit consequat. Vivamus quis sapien neque. Nulla vulputate sem sit amet massa pellentesque, eleifend tristique ligula egestas. Suspendisse tincidunt gravida mi, in pulvinar lectus egestas non. Aenean imperdiet ex sit amet nunc sollicitudin porta. Integer justo odio, ultricies at interdum in, rhoncus vitae sem. Sed porttitor arcu quis purus aliquet hendrerit. Praesent tempor tortor at dolor dictum pulvinar. Nulla aliquet nunc non ligula scelerisque accumsan. Donec nulla justo, congue vitae massa in, faucibus hendrerit magna. Donec non egestas purus. - -€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æąįāćäåęēčéźėģķīļ Vivamus iaculis, lacus efficitur faucibus porta, dui nulla facilisis ligula, ut sodales odio nunc id sapien. Cras viverra auctor ipsum, dapibus mattis neque dictum sed. Sed convallis fermentum molestie. Nulla facilisi turpis duis. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_gbk.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_gbk.txt deleted file mode 100644 index 2e1de224145..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_gbk.txt +++ /dev/null @@ -1,283 +0,0 @@ -ÖŠ¹śabc Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vulputate, ipsum quis interdum fermentum, lorem sem fermentum eros, vitae auctor neque lacus in nisi. Suspendisse potenti. Maecenas et scelerisque elit, in tincidunt quam. Sed eu tincidunt quam. Nullam justo ex, imperdiet a imperdiet et, fermentum sit amet eros. Aenean quis tempus sem. Pellentesque accumsan magna mi, ut mollis velit sagittis id. Etiam quis ipsum orci. Fusce purus ante, accumsan a lobortis at, venenatis eu nisl. Praesent ornare sed ante placerat accumsan. Suspendisse tempus dignissim fermentum. Nunc a leo ac lacus sodales iaculis eu vitae mi. In feugiat ante at massa finibus cursus. Suspendisse posuere fringilla ornare. Mauris elementum ac quam id convallis. Vestibulum non elit quis urna volutpat aliquam a eu lacus. - -Aliquam vestibulum imperdiet neque, suscipit aliquam elit ultrices bibendum. Suspendisse ultrices pulvinar cursus. Morbi risus nisi, cursus consequat rutrum vitae, molestie sed dui. Fusce posuere, augue quis dignissim aliquam, nisi ipsum porttitor ante, quis fringilla nisl turpis ac nisi. Nulla varius enim eget lorem vehicula gravida. Donec finibus malesuada leo nec semper. Proin ac enim eros. Vivamus non tincidunt nisi, vel tristique lorem. - -Nunc consequat ex id eros dignissim, id rutrum risus laoreet. Sed euismod non erat eu ultricies. Etiam vehicula gravida lacus ut porta. Vestibulum eu eros quis nunc aliquet luctus. Cras quis semper ligula. Nullam gravida vehicula quam sed porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In porta cursus vulputate. Quisque porta a nisi eget cursus. Aliquam risus leo, luctus ac magna in, efficitur cursus magna. In condimentum non mi id semper. Donec interdum ante eget commodo maximus. - -Vivamus sit amet vestibulum lectus. Fusce tincidunt mi sapien, dictum sollicitudin diam vulputate in. Integer fringilla consequat mollis. Cras aliquet consequat felis eget feugiat. Nunc tempor cursus arcu, vitae ornare nunc varius et. Vestibulum et tortor vel ante viverra porttitor. Nam at tortor ullamcorper, facilisis augue quis, tristique erat. Aenean ut euismod nibh. Quisque eu tincidunt est, nec euismod eros. - -Proin vehicula nibh non viverra egestas. Phasellus sem dolor, ultricies ac sagittis tristique, lacinia a purus. Vestibulum in ante eros. Pellentesque lacus nulla, tristique vitae interdum vel, malesuada ac diam. Aenean bibendum posuere turpis in accumsan. Ut est nulla, ullamcorper quis turpis at, viverra sagittis mauris. Sed in interdum purus. Praesent scelerisque nibh eget sem euismod, ut imperdiet mi venenatis. Vivamus pulvinar orci sed dapibus auctor. Nulla facilisi. Vestibulum tincidunt erat nec porttitor egestas. Mauris quis risus ante. Nulla facilisi. - -Aliquam ullamcorper ornare lobortis. Phasellus quis sem et ipsum mollis malesuada sed in ex. Ut aliquam ex eget metus finibus maximus. Proin suscipit mauris eu nibh lacinia, quis feugiat dui dapibus. Nam sed libero est. Aenean vulputate orci sit amet diam faucibus, eu sagittis sapien volutpat. Nam imperdiet felis turpis, at pretium odio pulvinar in. Sed vestibulum id eros nec ultricies. Sed quis aliquam tortor, vitae ullamcorper tellus. Donec egestas laoreet eros, id suscipit est rutrum nec. Sed auctor nulla eget metus aliquam, ut condimentum enim elementum. - -Aliquam suscipit non turpis sit amet bibendum. Fusce velit ligula, euismod et maximus at, luctus sed neque. Quisque pretium, nisl at ullamcorper finibus, lectus leo mattis sapien, vel euismod mauris diam ullamcorper ex. Nulla ut risus finibus, lacinia ligula at, auctor erat. Mauris consectetur sagittis ligula vel dapibus. Nullam libero libero, lobortis aliquam libero vel, venenatis ultricies leo. Duis porttitor, nibh congue fermentum posuere, erat libero pulvinar tortor, a pellentesque nunc ipsum vel sem. Nullam volutpat, eros sit amet facilisis consectetur, ipsum est vehicula massa, non vestibulum neque elit in mauris. Nunc hendrerit ipsum non enim bibendum, vitae rhoncus mi egestas. Etiam ullamcorper massa vel nisl sagittis, nec bibendum arcu malesuada. Aenean aliquet turpis justo, a consectetur arcu mollis convallis. Etiam tellus ipsum, ultricies vitae lorem et, ornare facilisis orci. Praesent fringilla justo urna, vel mollis neque pulvinar vestibulum. - -Donec non iaculis erat. Aliquam et mi sed nunc pulvinar ultricies in ut ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent feugiat lacus ac dignissim semper. Phasellus vitae quam nisi. Morbi vel diam ultricies risus lobortis ornare. Fusce maximus et ligula quis iaculis. Sed congue ex eget felis convallis, sit amet hendrerit elit tempor. Donec vehicula blandit ante eget commodo. Vestibulum eleifend diam at feugiat euismod. Etiam magna tellus, dignissim eget fermentum vel, vestibulum vitae mauris. Nam accumsan et erat id sagittis. Donec lacinia, odio ut ornare ultricies, dolor velit accumsan tortor, non finibus erat tellus quis ligula. Nunc quis metus in leo volutpat ornare vulputate eu nisl. - -Donec quis viverra ex. Nullam id feugiat mauris, eu fringilla nulla. Vestibulum id maximus elit. Cras elementum elit sed felis lobortis, eget sagittis nisi hendrerit. Vivamus vitae elit neque. Donec vulputate lacus ut libero ultrices accumsan. Vivamus accumsan nulla orci, in dignissim est laoreet sagittis. Proin at commodo velit. Curabitur in velit felis. Aliquam erat volutpat. Sed consequat, nulla et cursus sodales, nisi lacus mattis risus, quis eleifend erat ex nec turpis. Sed suscipit ultrices lorem in hendrerit. - -Morbi vitae lacus nec libero ornare tempus eu et diam. Suspendisse magna ipsum, fermentum vel odio quis, molestie aliquam urna. Fusce mollis turpis a eros accumsan porttitor. Pellentesque rhoncus dolor sit amet magna rutrum, et dapibus justo tempor. Sed purus nisi, maximus vitae fringilla eu, molestie nec urna. Fusce malesuada finibus pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sed aliquet eros. Pellentesque luctus diam ante, eget euismod nisl aliquet eu. Sed accumsan elit purus, tempor varius ligula tempus nec. Curabitur ornare leo suscipit suscipit fermentum. Morbi eget nulla est. Maecenas faucibus interdum tristique. - -Etiam ut elit eros. Nulla pharetra suscipit molestie. Nulla facilisis bibendum nisl non molestie. Curabitur turpis lectus, facilisis vel diam non, vulputate ultrices mauris. Aenean placerat aliquam convallis. Suspendisse sed scelerisque tellus. Vivamus lacinia neque eget risus cursus suscipit. Proin consequat dolor vel neque tempor, eu aliquam sem scelerisque. Duis non eros a purus malesuada pharetra non et nulla. Suspendisse potenti. Mauris libero eros, finibus vel nulla id, sagittis dapibus ante. Proin iaculis sed nunc et cursus. - -Quisque accumsan lorem sit amet lorem aliquet euismod. Curabitur fermentum rutrum posuere. Etiam ultricies, sem id pellentesque suscipit, urna magna lacinia eros, quis efficitur risus nisl at lacus. Nulla quis lacus tortor. Mauris placerat ex in dolor tincidunt, vel aliquet nisi pretium. Cras iaculis risus vitae pellentesque aliquet. Quisque a enim imperdiet, ullamcorper arcu vitae, rutrum risus. Nullam consectetur libero at felis fringilla, nec congue nibh dignissim. Nam et lobortis felis, eu pellentesque ligula. Aenean facilisis, ligula non imperdiet maximus, massa orci gravida sapien, at sagittis lacus nisl in lacus. Nulla quis mauris luctus, scelerisque felis consequat, tempus risus. Fusce auctor nisl non nulla luctus molestie. Maecenas sapien nisl, auctor non dolor et, iaculis scelerisque lorem. Suspendisse egestas enim aliquet, accumsan mauris nec, posuere quam. Nulla iaculis dui dui, sit amet vestibulum erat ultricies ac. - -Cras eget dolor erat. Proin at nisl ut leo consectetur ultricies vel ut arcu. Nulla in felis malesuada, ullamcorper tortor et, convallis massa. Nunc urna justo, ornare in nibh vitae, hendrerit condimentum libero. Etiam vitae libero in purus venenatis fringilla. Nullam velit nulla, consequat ut turpis non, egestas hendrerit nibh. Duis tortor turpis, interdum non ante ac, cursus accumsan lectus. Cras pharetra bibendum augue quis dictum. Sed euismod vestibulum justo. Proin porta lobortis purus. Duis venenatis diam tortor, sit amet condimentum eros rhoncus a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc at magna nec diam lobortis efficitur sit amet ut lacus. Nulla quis orci tortor. Pellentesque tempus velit a odio finibus porta. - -Proin feugiat mauris a tellus scelerisque convallis. Maecenas libero magna, blandit nec ultrices id, congue vel mi. Aliquam lacinia, quam vel condimentum convallis, tortor turpis aliquam odio, sed blandit libero lacus et eros. In eleifend iaculis magna ac finibus. Praesent auctor facilisis tellus in congue. Sed molestie lobortis dictum. Nam quis dignissim augue, vel euismod lorem. Curabitur posuere dapibus luctus. Donec ultricies dictum lectus, quis blandit arcu commodo ac. Aenean tincidunt ligula in nunc imperdiet dignissim. Curabitur egestas sollicitudin sapien ut semper. Aenean nec dignissim lacus. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec aliquam dictum vehicula. Donec tortor est, volutpat non nisi nec, varius gravida ex. Nunc vel tristique nunc, vitae mattis nisi. Nunc nec luctus ex, vitae tincidunt lectus. In hac habitasse platea dictumst. Curabitur lobortis ex eget tincidunt tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut a vehicula mi. - -Fusce eu libero finibus, interdum nulla a, placerat neque. Cras bibendum tempor libero nec feugiat. Cras ut sodales eros. Proin viverra, massa sit amet viverra egestas, neque nisl porta ex, sit amet hendrerit libero ligula vel urna. Mauris suscipit lacus id justo rhoncus suscipit. Etiam vel libero tellus. Maecenas non diam molestie, condimentum tellus a, bibendum enim. Mauris aliquet imperdiet tellus, eget sagittis dolor. Sed blandit in neque et luctus. Cras elementum sagittis nunc, vel mollis lorem euismod et. Donec posuere at lacus eget suscipit. - -Nulla nunc mi, pretium non massa vel, tempor semper magna. Nunc a leo pulvinar, tincidunt nunc at, dignissim mi. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut viverra nulla a nisl finibus, at hendrerit ligula ullamcorper. Donec a lorem semper, tempor magna et, lobortis libero. Mauris id sapien leo. Donec dignissim, quam vitae porttitor dignissim, quam justo mattis dui, vel consequat odio elit quis orci. Etiam nec pretium neque, sit amet pretium orci. Duis ac tortor venenatis, feugiat purus non, feugiat nunc. Proin scelerisque nisl in turpis aliquam vulputate. - -Praesent sed est semper, fringilla lorem vitae, tincidunt nibh. Cras eros metus, auctor at mauris sit amet, sodales semper orci. Nunc a ornare ex. Curabitur bibendum arcu congue urna vulputate egestas. Vestibulum finibus id risus et accumsan. Aenean ut volutpat tellus. Aenean tincidunt malesuada urna sit amet vestibulum. Mauris vel tellus dictum, varius lacus quis, dictum arcu. - -Aenean quis metus eu erat feugiat cursus vel at ligula. Proin dapibus sodales urna, id euismod lectus tempus id. Pellentesque ex ligula, convallis et erat vel, vulputate condimentum nisl. Pellentesque pharetra nulla quis massa eleifend hendrerit. Praesent sed massa ipsum. Maecenas vehicula dolor massa, id sodales urna faucibus et. Mauris ac quam non massa tincidunt feugiat et at lacus. Fusce libero massa, vulputate vel scelerisque non, mollis in leo. Ut sit amet ultricies odio. Suspendisse in sapien viverra, facilisis purus ut, pretium libero. - -Vivamus tristique pharetra molestie. Nam a volutpat purus. Praesent consequat gravida nisi, ac blandit nisi suscipit ut. Quisque posuere, ligula a ultrices laoreet, ligula nunc vulputate libero, ut rutrum erat odio tincidunt justo. Sed vitae leo at leo fringilla bibendum. Vestibulum ut augue nec dolor auctor accumsan. Praesent laoreet id eros pulvinar commodo. Suspendisse potenti. Ut pharetra, mauris vitae blandit fringilla, odio ante tincidunt lorem, sit amet tempor metus diam ut turpis. - -Praesent quis egestas arcu. Nullam at porta arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi vulputate ligula malesuada ligula luctus, vulputate tempus erat bibendum. Nunc ullamcorper non lectus at euismod. Etiam nibh felis, tincidunt a metus vel, pellentesque rhoncus neque. Etiam at diam in erat luctus interdum. Nunc vel ipsum pulvinar, sollicitudin lacus ac, tempus urna. Etiam vel lacinia sapien. Pellentesque sagittis velit vel mi efficitur iaculis. Integer euismod sit amet urna in sagittis. Cras eleifend ut nibh in facilisis. Donec et lacus vitae nunc placerat sodales. Nulla sed hendrerit ligula, at dapibus sapien. - -Praesent at iaculis ex. Curabitur est purus, cursus a faucibus quis, dictum id velit. Donec dignissim fringilla viverra. Nunc mauris felis, laoreet sit amet sagittis at, vestibulum in libero. Maecenas quis orci turpis. Quisque ut nibh vitae magna mollis consequat id at mauris. Aliquam eu odio eget nulla bibendum sodales. Quisque vel orci eleifend nisi pretium lacinia. Suspendisse eget risus eget mi volutpat molestie eget quis lacus. Duis nisi libero, tincidunt nec nulla id, faucibus cursus felis. - -Donec tempor eget risus pellentesque molestie. Phasellus porta neque vel arcu egestas, nec blandit velit fringilla. Nullam porta faucibus justo vitae laoreet. Pellentesque viverra id nunc eu varius. Nulla pulvinar lobortis iaculis. Etiam vestibulum odio nec velit tristique, a tristique nisi mattis. In sed fringilla orci, vitae efficitur odio. Quisque dui odio, ornare eget velit at, lacinia consequat libero. Quisque lectus nulla, aliquet eu leo in, porta rutrum diam. Donec nec mattis neque. Nam rutrum, odio ac eleifend bibendum, dolor arcu rutrum neque, eget porta elit tellus a lacus. Sed massa metus, sollicitudin et sapien eu, finibus tempus orci. Proin et sapien sit amet erat molestie interdum. In quis rutrum velit, faucibus ultrices tellus. - -Sed sagittis sed justo eget tincidunt. Maecenas ut leo sagittis, feugiat magna et, viverra velit. Maecenas ex arcu, feugiat at consequat vitae, auctor eu massa. Integer egestas, enim vitae maximus convallis, est lectus pretium mauris, ac posuere lectus nisl quis quam. Aliquam tempus laoreet mi, vitae dapibus dolor varius dapibus. Suspendisse potenti. Donec sit amet purus nec libero dapibus tristique. Pellentesque viverra bibendum ligula. Donec sed felis et ex lobortis laoreet. Phasellus a fringilla libero, vitae malesuada nulla. Pellentesque blandit mattis lacus, et blandit tortor laoreet consequat. Suspendisse libero nunc, viverra sed fermentum in, accumsan egestas arcu. Proin in placerat elit. Sed interdum imperdiet malesuada. Suspendisse aliquet quis mauris eget sollicitudin. - -Vivamus accumsan tellus non erat volutpat, quis dictum dolor feugiat. Praesent rutrum nunc ac est mollis cursus. Fusce semper volutpat dui ut egestas. Curabitur sit amet posuere massa. Cras tincidunt nulla et mi mollis imperdiet. Suspendisse scelerisque ex id sodales vulputate. In nunc augue, pharetra in placerat eu, mattis id tellus. Vivamus cursus efficitur vehicula. Nulla aliquet vehicula aliquet. - -Sed cursus tellus sed porta pulvinar. Sed vitae nisi neque. Nullam aliquet, lorem et efficitur scelerisque, arcu diam aliquam felis, sed pulvinar lorem odio et turpis. Praesent convallis pulvinar turpis eu iaculis. Aliquam nec gravida mi. Curabitur eu nibh tempor, blandit justo in, ultrices felis. Fusce placerat metus non mi sagittis rutrum. Morbi sed dui fringilla, sagittis mauris eget, imperdiet nunc. Phasellus hendrerit sem elit, id hendrerit libero auctor sit amet. Integer sodales elit sit amet consequat cursus. - -Nam semper est eget nunc mollis, in pellentesque lectus fringilla. In finibus vel diam id semper. Nunc mattis quis erat eu consectetur. In hac habitasse platea dictumst. Nullam et ipsum vestibulum ex pulvinar ultricies sit amet id velit. Aenean suscipit mi tortor, a lobortis magna viverra non. Nulla condimentum aliquet ante et ullamcorper. Pellentesque porttitor arcu a posuere tempus. Aenean lacus quam, imperdiet eu justo vitae, pretium efficitur ex. Duis id purus id magna rhoncus ultrices id eu risus. Nunc dignissim et libero id dictum. - -Quisque a tincidunt neque. Phasellus commodo mi sit amet tempor fringilla. Ut rhoncus, neque non porttitor elementum, libero nulla egestas augue, sed fringilla sapien felis ac velit. Phasellus viverra rhoncus mollis. Nam ullamcorper leo vel erat laoreet luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus semper a metus a cursus. Nulla sed orci egestas, efficitur purus ac, malesuada tellus. Aenean rutrum velit at tellus fermentum mollis. Aliquam eleifend euismod metus. - -In hac habitasse platea dictumst. Vestibulum volutpat neque vitae porttitor laoreet. Nam at tellus consequat, sodales quam in, pulvinar arcu. Maecenas varius convallis diam, ac lobortis tellus pellentesque quis. Maecenas eget augue massa. Nullam volutpat nibh ac justo rhoncus, ut iaculis tellus rutrum. Fusce efficitur efficitur libero quis condimentum. Curabitur congue neque non tincidunt tristique. Fusce eget tempor ex, at pellentesque odio. Praesent luctus dictum vestibulum. Etiam non orci nunc. Vivamus vitae laoreet purus, a lobortis velit. Curabitur tincidunt purus ac lectus elementum pellentesque. Quisque sed tincidunt est. - -Sed vel ultrices massa, vitae ultricies justo. Cras finibus mauris nec lacus tempus dignissim. Cras faucibus maximus velit, eget faucibus orci luctus vehicula. Nulla massa nunc, porta ac consequat eget, rhoncus non tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed maximus metus, vel imperdiet ipsum. Ut scelerisque lectus at blandit porttitor. Ut vulputate nunc pharetra, aliquet sapien ac, sollicitudin sapien. Aenean eget ante lorem. Nam accumsan venenatis tellus id dignissim. - -Curabitur fringilla, magna non maximus dapibus, nulla sapien vestibulum lectus, sit amet semper dolor neque vitae nisl. Nunc ultrices vehicula augue sed iaculis. Maecenas nec diam mollis, suscipit orci et, vestibulum ante. Pellentesque eu nisl tortor. Nunc eleifend, lacus quis volutpat volutpat, nisi mi molestie sem, quis mollis ipsum libero a tellus. Ut viverra dolor mattis convallis interdum. Sed tempus nisl at nunc scelerisque aliquet. Quisque tempor tempor lorem id feugiat. Nullam blandit lectus velit, vitae porta lacus tincidunt a. Vivamus sit amet arcu ultrices, tincidunt mi quis, viverra quam. Aenean fringilla libero elementum lorem semper, quis pulvinar eros gravida. Nullam sodales blandit mauris, sed fermentum velit fermentum sit amet. Donec malesuada mauris in augue sodales vulputate. Vestibulum gravida turpis id elit rhoncus dignissim. Integer non congue lorem, eu viverra orci. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec at dolor magna. Aliquam consectetur erat augue, id iaculis velit pharetra ac. Integer rutrum venenatis dignissim. Integer non sodales elit. Curabitur ut magna ut nibh feugiat aliquam ac ut risus. Morbi nibh quam, aliquam id placerat nec, vestibulum eget velit. Suspendisse at dignissim quam. Vivamus aliquet sem sed nisl volutpat, ut cursus orci ultrices. Aliquam ultrices lacinia enim, vitae aliquet neque. - -Quisque scelerisque finibus diam in mattis. Cras cursus auctor velit. Aliquam sem leo, fermentum et maximus et, molestie a libero. Aenean justo elit, rutrum a ornare id, egestas eget enim. Aenean auctor tristique erat. Curabitur condimentum libero lacus, nec consequat orci vestibulum sed. Fusce elit ligula, blandit vitae sapien vitae, dictum ultrices risus. Nam laoreet suscipit sapien, at interdum velit faucibus sit amet. Duis quis metus egestas lectus elementum posuere non nec libero. Aliquam a dolor bibendum, facilisis nunc a, maximus diam. Vestibulum suscipit tristique magna, non dignissim turpis sodales sed. Nunc ornare, velit ac facilisis fringilla, dolor mi consectetur lorem, vitae finibus erat justo suscipit urna. Maecenas sit amet eros erat. Nunc non arcu ornare, suscipit lorem eget, sodales mauris. Aliquam tincidunt, quam nec mollis lacinia, nisi orci fermentum libero, consequat eleifend lectus quam et sapien. Vestibulum a quam urna. - -Cras arcu leo, euismod ac ullamcorper at, faucibus sed massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor velit in enim interdum, non commodo metus ornare. Morbi vel lorem quis nisl luctus tristique quis vitae nisl. Suspendisse condimentum tortor enim, nec eleifend ipsum euismod et. Sed gravida quam ut tristique lacinia. Mauris eu interdum ipsum, ac ultrices odio. Nullam auctor tellus a risus porttitor vehicula. Nulla blandit euismod dictum. In pharetra, enim iaculis pulvinar interdum, dui nunc placerat nunc, sit amet pretium lectus nulla vitae quam. Phasellus quis enim sollicitudin, varius nulla id, ornare purus. Donec quam lacus, vestibulum quis nunc ac, mollis dictum nisi. Cras ut mollis elit. Maecenas ultrices ligula at risus faucibus scelerisque. Etiam vitae porttitor purus. Curabitur blandit lectus urna, ut hendrerit tortor feugiat ut. - -Phasellus fringilla, sapien pellentesque commodo pharetra, ante libero aliquam tellus, ut consectetur augue libero a sapien. Maecenas blandit luctus nisl eget aliquet. Maecenas vitae porta dolor, faucibus laoreet sapien. Suspendisse lobortis, ipsum sed vehicula aliquam, elit purus scelerisque dui, rutrum consectetur diam odio et lorem. In nec lacinia metus. Donec viverra libero est, vel bibendum erat condimentum quis. Donec feugiat purus leo. In laoreet vitae felis a porttitor. Mauris ullamcorper, lacus id condimentum suscipit, neque magna pellentesque arcu, eget cursus neque tellus id metus. Curabitur volutpat ac orci vel ultricies. - -Sed ut finibus erat. Sed diam purus, varius non tincidunt quis, ultrices sit amet ipsum. Donec et egestas nulla. Suspendisse placerat nisi at dui laoreet iaculis. Aliquam aliquet leo at augue faucibus molestie. Nullam lacus augue, hendrerit sed nisi eu, faucibus porta est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ut leo aliquet sem fermentum rutrum quis ac justo. Integer placerat aliquam nisl ut sagittis. Proin erat orci, lobortis et sem eget, eleifend fringilla augue. Mauris varius laoreet arcu, sed tincidunt felis. Pellentesque venenatis lorem odio, id pulvinar velit molestie feugiat. Donec mattis lacus sed eleifend pulvinar. - -Sed condimentum ex in tincidunt hendrerit. Etiam eget risus lacinia, euismod nibh eu, pellentesque quam. Proin elit eros, convallis id mauris ac, bibendum ultrices lectus. Morbi venenatis, purus id fermentum consequat, nunc libero tincidunt ligula, non dictum ligula orci nec quam. Nulla nec ultrices lorem. Aenean maximus augue vel dictum pharetra. Etiam turpis urna, pellentesque quis malesuada eu, molestie faucibus felis. - -Vestibulum pharetra augue ut quam blandit congue in nec risus. Proin eu nibh eu dui eleifend porta vitae id lectus. Proin lacus nibh, lobortis sed ligula vitae, interdum lobortis erat. Suspendisse potenti. In sollicitudin quis sapien ut aliquet. Mauris ac nulla arcu. Fusce tristique justo quis lectus mollis, eu volutpat lectus finibus. Vivamus venenatis facilisis ex ut vestibulum. - -Etiam varius lobortis purus, in hendrerit elit tristique at. In tempus, augue vestibulum fermentum gravida, ligula tellus vulputate arcu, eu molestie ex sapien at purus. Vestibulum nec egestas metus. Duis pulvinar quam nec consequat interdum. Aenean non dapibus lacus. Aliquam sit amet aliquet nulla. Sed venenatis volutpat purus nec convallis. Phasellus aliquet semper sodales. Cras risus sapien, condimentum auctor urna a, pulvinar ornare nisl. Sed tincidunt felis elit, ut elementum est bibendum ac. Morbi interdum justo vel dui faucibus condimentum. - -Sed convallis eu sem at tincidunt. Nullam at auctor est, et ullamcorper ipsum. Pellentesque eget ante ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer euismod, sapien sed dapibus ornare, nibh enim maximus lacus, lacinia placerat urna quam quis felis. Morbi accumsan id nisl ut condimentum. Donec bibendum nisi est, sed volutpat lorem rhoncus in. Vestibulum ac lacinia nunc, eget volutpat magna. Integer aliquam pharetra ipsum, id placerat nunc volutpat quis. Etiam urna diam, rhoncus sit amet varius vel, euismod vel sem. Nullam vel molestie urna. Vivamus ornare erat at venenatis euismod. Suspendisse potenti. Fusce diam justo, tincidunt vel sem at, commodo faucibus nisl. Duis gravida efficitur diam, vel sagittis erat pulvinar ut. - -Quisque vel pharetra felis. Duis efficitur tortor dolor, vitae porttitor erat fermentum sed. Sed eu mi purus. Etiam dignissim tortor eu tempus molestie. Aenean pretium erat enim, in hendrerit ante hendrerit at. Sed ut risus vel nunc venenatis ultricies quis in lacus. Pellentesque vitae purus euismod, placerat risus non, ullamcorper augue. Quisque varius quam ligula, nec aliquet ex faucibus vitae. Quisque rhoncus sit amet leo tincidunt mattis. Cras id mauris eget purus pretium gravida sit amet eu augue. Aliquam dapibus odio augue, id lacinia velit pulvinar eu. - -Mauris fringilla, tellus nec pharetra iaculis, neque nisi ultrices massa, et tincidunt sem dui sed mi. Curabitur erat lorem, venenatis quis tempus lacinia, tempus sit amet nunc. Aliquam at neque ac metus commodo dictum quis vitae justo. Phasellus eget lacus tempus, blandit lorem vel, rutrum est. Aenean pharetra sem ut augue lobortis dignissim. Sed rhoncus at nulla id ultrices. Cras id condimentum felis. In suscipit luctus vulputate. Donec tincidunt lacus nec enim tincidunt sollicitudin ut quis enim. Nam at libero urna. Praesent sit amet massa vitae massa ullamcorper vehicula. - -Nullam bibendum augue ut turpis condimentum bibendum. Proin sit amet urna hendrerit, sodales tortor a, lobortis lectus. Integer sagittis velit turpis, et tincidunt nisi commodo eget. Duis tincidunt elit finibus accumsan cursus. Aenean dignissim scelerisque felis vel lacinia. Nunc lacinia maximus luctus. In hac habitasse platea dictumst. Vestibulum eget urna et enim tempor tempor. Nam feugiat, felis vel vestibulum tempus, orci justo viverra diam, id dapibus lorem justo in ligula. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ac pellentesque sem. Vestibulum lacinia magna dui, eu lacinia augue placerat et. Maecenas pulvinar congue est. Pellentesque commodo dui non pulvinar scelerisque. Etiam interdum est posuere sem bibendum, ac commodo magna dictum. Cras ipsum turpis, rhoncus nec posuere vitae, laoreet a arcu. Integer ac massa sit amet enim placerat lacinia sed ultrices arcu. Suspendisse sem nibh, luctus sit amet volutpat in, pellentesque eu metus. Ut gravida neque eget mi accumsan tempus. Nam sit amet aliquet nibh. - -Pellentesque a purus cursus nulla hendrerit congue quis et odio. Aenean hendrerit, leo ullamcorper sagittis hendrerit, erat dui molestie quam, sed condimentum lacus risus sed tellus. Morbi a dapibus lectus, ut feugiat ex. Phasellus pretium quam et sapien mollis, vel iaculis dui dignissim. Sed ullamcorper est turpis, a viverra lorem consectetur in. Aenean aliquet nibh non cursus rutrum. Suspendisse at tristique urna, id lobortis urna. In hac habitasse platea dictumst. Phasellus libero velit, rutrum sed tellus nec, dapibus tincidunt ligula. Quisque vel dui venenatis, consequat nisl ut, lacinia ipsum. Phasellus vitae magna pellentesque, lobortis est id, faucibus quam. Nam eleifend faucibus dui vel pellentesque. - -Etiam ut est non lacus tincidunt interdum. Maecenas sed massa urna. Quisque ut nibh tortor. Pellentesque felis ipsum, tempor finibus ipsum et, euismod pretium metus. Donec sit amet est ipsum. Quisque rhoncus justo non finibus elementum. Nulla nec lectus ac tortor placerat fringilla. Phasellus ac ultrices nunc, eu efficitur nisl. Nulla rhoncus nunc vitae ante dictum tincidunt. Nunc ultrices, massa sit amet malesuada dignissim, lectus lacus consequat sapien, non eleifend metus sem in eros. Phasellus mauris ante, dictum sit amet suscipit ac, rhoncus eget nisi. Phasellus at orci mollis, imperdiet neque eget, faucibus nulla. In at purus massa. Pellentesque quis rutrum lectus. - -Integer eu faucibus turpis, sit amet mollis massa. Vestibulum id nulla commodo, rutrum ipsum sed, semper ante. Phasellus condimentum orci nec nibh convallis, ac maximus orci ullamcorper. Maecenas vitae sollicitudin mi. Integer et finibus lectus, et condimentum ligula. Donec elementum tristique quam vitae dapibus. Morbi euismod ipsum in tristique ullamcorper. - -Duis fermentum non enim eu auctor. Quisque lacinia nibh vehicula nibh posuere, eu volutpat turpis facilisis. Ut ac faucibus nulla. Sed eleifend quis ex et pellentesque. Vestibulum sollicitudin in libero id fringilla. Phasellus dignissim purus consequat, condimentum dui sit amet, condimentum ante. Pellentesque ac consectetur massa, quis sagittis est. Nulla maximus tristique risus accumsan convallis. Curabitur imperdiet ac lacus a ultrices. Nulla facilisi. Sed quis quam quis lectus placerat lobortis vel sed turpis. In mollis dui id neque iaculis, ut aliquet tellus malesuada. Proin at luctus odio, vel blandit sapien. Praesent dignissim tortor vehicula libero fringilla, nec ultrices erat suscipit. Maecenas scelerisque purus in dapibus fermentum. - -Curabitur magna odio, mattis in tortor ut, porttitor congue est. Vestibulum mollis lacinia elementum. Fusce maximus erat vitae nunc rutrum lobortis. Integer ligula eros, auctor vel elit non, posuere luctus lacus. Maecenas quis auctor massa. Ut ipsum lacus, efficitur posuere euismod et, hendrerit efficitur est. Phasellus fringilla, quam id tincidunt pretium, nunc dui sollicitudin orci, eu dignissim nisi metus ut magna. Integer lobortis interdum dolor, non bibendum purus posuere et. Donec non lectus aliquet, pretium dolor eu, cursus massa. Sed ut dui sapien. In sed vestibulum massa. Pellentesque blandit, dui non sodales vehicula, orci metus mollis nunc, non pharetra ex tellus ac est. Mauris sagittis metus et fermentum pretium. Nulla facilisi. Quisque quis ante ut nulla placerat mattis ut quis nisi. - -Sed quis nulla ligula. Quisque dignissim ligula urna, sed aliquam purus semper at. Suspendisse potenti. Nunc massa lectus, pharetra vehicula arcu bibendum, imperdiet sodales ipsum. Nam ac sapien diam. Mauris iaculis fringilla mattis. Pellentesque tempus eros sit amet justo volutpat mollis. Phasellus ac turpis ipsum. Morbi vel ante elit. Aenean posuere quam consequat velit varius suscipit. Donec tempor quam ut nibh cursus efficitur. - -Morbi molestie dolor nec sem egestas suscipit. Etiam placerat pharetra lectus, et ullamcorper risus tristique in. Sed faucibus ullamcorper lectus eget fringilla. Maecenas malesuada hendrerit congue. Sed eget neque a erat placerat tincidunt. Aliquam vitae dignissim turpis. Fusce at placerat magna, a laoreet lectus. Maecenas a purus nec diam gravida fringilla. Nam malesuada euismod ante non vehicula. In faucibus bibendum leo, faucibus posuere nisl pretium quis. Fusce finibus bibendum finibus. Vestibulum eu justo maximus, hendrerit diam nec, dignissim sapien. Aenean dolor lacus, malesuada quis vestibulum ac, venenatis ac ipsum. Cras a est id nunc finibus facilisis. Cras lacinia neque et interdum vehicula. Suspendisse vulputate tellus elit, eget tempor dui finibus vel. - -Cras sed pretium odio. Proin hendrerit elementum felis in tincidunt. Nam sed turpis vel justo molestie accumsan condimentum eu nunc. Praesent lobortis euismod rhoncus. Nulla vitae euismod nibh, quis mattis mi. Fusce ultrices placerat porttitor. Duis sem ipsum, pellentesque sit amet odio a, molestie vulputate mauris. - -Duis blandit mollis ligula, sit amet mattis ligula finibus sit amet. Nunc a leo molestie, placerat diam et, vestibulum leo. Suspendisse facilisis neque purus, nec pellentesque ligula fermentum nec. Aenean malesuada mauris lorem, eu blandit arcu pulvinar quis. Duis laoreet urna lacus, non maximus arcu rutrum ultricies. Nulla augue dolor, suscipit eu mollis eu, aliquam condimentum diam. Ut semper orci luctus, pharetra turpis at, euismod mi. Nulla leo diam, finibus sit amet purus sed, maximus dictum lorem. Integer eu mi id turpis laoreet rhoncus. - -Integer a mauris tincidunt, finibus orci ut, pretium mauris. Nulla molestie nunc mi, id finibus lorem elementum sed. Proin quis laoreet ante. Integer nulla augue, commodo id molestie quis, rutrum ut turpis. Suspendisse et tortor turpis. Sed ut pharetra massa. Pellentesque elementum blandit sem, ut elementum tellus egestas a. Fusce eu purus nibh. - -Cras dignissim ligula scelerisque magna faucibus ullamcorper. Proin at condimentum risus, auctor malesuada quam. Nullam interdum interdum egestas. Nulla aliquam nisi vitae felis mollis dictum. Suspendisse dapibus consectetur tortor. Ut ut nisi non sem bibendum tincidunt. Vivamus suscipit leo quis gravida dignissim. - -Aliquam interdum, leo id vehicula mollis, eros eros rhoncus diam, non mollis ligula mi eu mauris. Sed ultrices vel velit sollicitudin tincidunt. Nunc auctor metus at ligula gravida elementum. Praesent interdum eu elit et mollis. Duis egestas quam sit amet velit dignissim consequat. Aliquam ac turpis nec nunc convallis sagittis. Fusce blandit, erat ac fringilla consectetur, dolor eros sodales leo, vel aliquet risus nisl et diam. Aliquam luctus felis vitae est eleifend euismod facilisis et lacus. Sed leo tellus, auctor eu arcu in, volutpat sagittis nisl. Pellentesque nisl ligula, placerat vel ullamcorper at, vulputate ac odio. Morbi ac faucibus orci, et tempus nulla. Proin rhoncus rutrum dolor, in venenatis mauris. Suspendisse a fermentum augue, non semper mi. Nunc eget pretium neque. Phasellus augue erat, feugiat ac aliquam congue, rutrum non sapien. Pellentesque ac diam gravida, consectetur felis at, ornare neque. - -Nullam interdum mattis sapien quis porttitor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus aliquet rutrum ipsum id euismod. Maecenas consectetur massa et mi porta viverra. Nunc quam nibh, dignissim vitae maximus et, ullamcorper nec lorem. Nunc vitae justo dapibus, luctus lacus vitae, pretium elit. Maecenas et efficitur leo. Curabitur mauris lectus, placerat quis vehicula vitae, auctor ut urna. Quisque rhoncus pharetra luctus. In hac habitasse platea dictumst. Integer sit amet metus nec eros malesuada aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi hendrerit mi ac leo aliquam, sit amet ultricies libero commodo. Mauris dapibus purus metus, sit amet viverra nibh imperdiet et. Nullam porta nulla tellus, quis vehicula diam imperdiet non. Vivamus enim massa, bibendum in fermentum in, ultrices at ex. - -Suspendisse fermentum id nibh eget accumsan. Duis dapibus bibendum erat ut sollicitudin. Aliquam nec felis risus. Pellentesque rhoncus ligula id sem maximus mollis sed nec massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ipsum ipsum, sodales sed enim id, convallis faucibus eros. Donec ultricies dictum tincidunt. Cras vitae nibh arcu. Pellentesque cursus, sapien nec consequat fermentum, ipsum ante suscipit dui, imperdiet hendrerit est nisl eu massa. Quisque vitae sem ligula. Aenean iaculis metus ut mauris interdum laoreet. Vivamus sed gravida dolor. - -Morbi nulla metus, porttitor sed eros sit amet, efficitur efficitur est. In vel nisl urna. Ut aliquet tellus at congue convallis. Phasellus imperdiet lobortis sollicitudin. Integer sodales, sem eu ultricies pharetra, erat erat porttitor odio, eget dapibus libero ipsum eget velit. Phasellus gravida nulla nisl, eu pharetra mi auctor vel. Sed blandit pharetra velit, ut egestas libero placerat non. Aliquam a interdum quam. Proin at tortor nec dui sollicitudin tempus sed vestibulum elit. Nunc non sollicitudin velit. - -Aenean consequat diam velit, sed rutrum tortor faucibus dictum. Quisque at semper augue. Duis ut est eget mi ornare bibendum id et ligula. Phasellus consequat tortor non leo pulvinar posuere. Proin vestibulum eleifend felis, in hendrerit tortor sollicitudin eu. Phasellus hendrerit, lacus vel laoreet interdum, dui tortor consequat justo, commodo ultricies arcu felis vitae enim. Vivamus eu sapien at leo suscipit rutrum eu at justo. Aenean et dolor a libero ullamcorper posuere. Integer laoreet placerat nisi in vulputate. Mauris laoreet eget risus sed cursus. Donec scelerisque neque a libero eleifend hendrerit. Nulla varius condimentum nunc sit amet fermentum. Aliquam lorem ex, varius nec mollis ut, ultrices in neque. Morbi sit amet porta leo. Integer iaculis fermentum lacus in vestibulum. - -Ut gravida, tellus ut maximus ultrices, erat est venenatis nisl, vitae pretium massa ex ac magna. Sed non purus eget ligula aliquet volutpat non quis arcu. Nam aliquam tincidunt risus, sit amet fringilla sapien vulputate ut. Mauris luctus suscipit pellentesque. Nunc porttitor dapibus ex quis tempus. Ut ullamcorper metus a eros vulputate, vitae viverra lectus convallis. Mauris semper imperdiet augue quis tincidunt. Integer porta pretium magna, sed cursus sem scelerisque sollicitudin. Nam efficitur, nibh pretium eleifend vestibulum, purus diam posuere sem, in egestas mauris augue sit amet urna. - -Vestibulum tincidunt euismod massa in congue. Duis interdum metus non laoreet fringilla. Donec at ligula congue, tincidunt nunc non, scelerisque nunc. Donec bibendum magna non est scelerisque feugiat at nec neque. Ut orci tortor, tempus eget massa non, dignissim faucibus dolor. Nam odio risus, accumsan pretium neque eget, accumsan dignissim dui. In ut neque auctor, scelerisque tellus sed, ullamcorper nisi. Suspendisse varius cursus quam at hendrerit. Vivamus elit libero, sagittis vitae sem ac, vulputate iaculis ligula. - -Sed lobortis laoreet purus sit amet rutrum. Pellentesque feugiat non leo vel lacinia. Quisque feugiat nisl a orci bibendum vestibulum. In et sollicitudin urna. Morbi a arcu ac metus faucibus tempus. Nam eu imperdiet sapien, suscipit mattis tortor. Aenean blandit ipsum nisi, a eleifend ligula euismod at. Integer tincidunt pharetra felis, mollis placerat mauris hendrerit at. Curabitur convallis, est sit amet luctus volutpat, massa lacus cursus augue, sed eleifend magna quam et risus. Aliquam lobortis tincidunt metus vitae porttitor. Suspendisse potenti. Aenean ullamcorper, neque id commodo luctus, nulla nunc lobortis quam, id dapibus neque dui nec mauris. Etiam quis lorem quis elit commodo ornare. Ut pharetra purus ultricies enim ultrices efficitur. Proin vehicula tincidunt molestie. Mauris et placerat sem. - -Aliquam erat volutpat. Suspendisse velit turpis, posuere ac lacus eu, lacinia laoreet velit. Sed interdum felis neque, id blandit sem malesuada sit amet. Ut sagittis justo erat, efficitur semper orci tempor sed. Donec enim massa, posuere varius lectus egestas, pellentesque posuere mi. Cras tincidunt ut libero sed mattis. Suspendisse quis magna et tellus posuere interdum vel at purus. Pellentesque fringilla tristique neque, id aliquet tellus ultricies non. Duis ut tellus vel odio lobortis vulputate. - -Integer at magna ac erat convallis vestibulum. Sed lobortis porttitor mauris. Fusce varius lorem et volutpat pulvinar. Aenean ac vulputate lectus, vitae consequat velit. Suspendisse ex dui, varius ut risus ut, dictum scelerisque sem. Vivamus urna orci, volutpat ut convallis ac, venenatis vitae urna. In hac habitasse platea dictumst. Etiam eu purus arcu. Aenean vulputate leo urna, vel tristique dui sagittis euismod. Suspendisse non tellus efficitur ante rhoncus volutpat at et sapien. - -Sed dapibus accumsan porttitor. Phasellus facilisis lectus finibus ligula dignissim, id pulvinar lectus feugiat. Nullam egestas commodo nisi posuere aliquet. Morbi sit amet tortor sagittis, rutrum dui nec, dapibus sapien. Sed posuere tortor tortor, interdum auctor magna varius vitae. Vestibulum id sagittis augue. Curabitur fermentum arcu sem, eu condimentum quam rutrum non. Phasellus rutrum nibh quis lectus rhoncus pretium. Curabitur dictum interdum elit. Vestibulum maximus sodales imperdiet. Mauris auctor nec purus sed venenatis. In in urna purus. - -Duis placerat molestie suscipit. Morbi a elit id purus efficitur consequat. Nunc ac commodo turpis. Etiam sit amet lacus a ipsum tempus venenatis sed vel nibh. Duis elementum aliquam mi sed tristique. Morbi ligula tortor, semper ac est vel, lobortis maximus erat. Curabitur ipsum felis, laoreet vel condimentum eget, ullamcorper sit amet mauris. Nulla facilisi. Nam at purus sed mi egestas placerat vitae vel magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse at dignissim diam. Phasellus consectetur eget neque vel viverra. Donec sollicitudin mattis dolor vel malesuada. Vivamus vehicula leo neque, vitae fermentum leo posuere et. Praesent dui est, finibus sit amet tristique quis, pharetra vel nibh. - -Duis nulla leo, accumsan eu odio eget, sagittis semper orci. Quisque ullamcorper ligula quam, commodo porttitor mauris ullamcorper eu. Cras varius sagittis felis in aliquam. Duis sodales risus ac justo vehicula, nec mattis diam lacinia. Cras eget lectus ipsum. Ut commodo, enim vitae malesuada hendrerit, ex dolor egestas lectus, sit amet hendrerit metus diam nec est. Vestibulum tortor metus, lobortis sit amet ante eget, tempor molestie lacus. In molestie et urna et semper. Mauris mollis, sem non hendrerit condimentum, sapien nisi cursus est, non suscipit quam justo non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam enim est, porta ac feugiat vitae, rutrum in lorem. Duis vehicula tortor ut posuere maximus. - -Nullam vestibulum non tellus sed commodo. Quisque mattis elit sit amet sapien sollicitudin, ut condimentum nisl congue. Aenean sagittis massa vel elit faucibus fermentum. Donec tincidunt nisi nec nisl sodales pellentesque. Mauris congue congue ligula ut suscipit. Vivamus velit tortor, tempor et gravida eget, fermentum sit amet ante. Nullam fringilla, lorem at ultrices cursus, urna neque ornare dolor, eu lacinia orci enim sed nibh. Ut a ullamcorper lectus, id mattis purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus sollicitudin posuere. Nunc at augue lacus. Aenean efficitur leo sit amet lacinia efficitur. - -Quisque venenatis quam mi, in pharetra odio vulputate eu. In vel nisl pulvinar, pulvinar ligula ut, sodales risus. Sed efficitur lectus at vestibulum tincidunt. Vestibulum eu ullamcorper elit. Fusce vestibulum magna enim, et tempor lacus posuere vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer leo elit, luctus nec mattis sit amet, sollicitudin in turpis. - -Proin convallis venenatis leo, vitae tristique erat iaculis nec. Nulla facilisi. Duis porttitor, sapien et bibendum vulputate, sem libero sodales lacus, non malesuada felis erat ut libero. Nam non felis semper, finibus est a, mattis mauris. Praesent nec eros quam. Nulla hendrerit, augue consectetur eleifend ultricies, purus mi condimentum nulla, eget dapibus est nunc sed libero. Nullam elementum dui erat, vitae luctus libero sollicitudin et. Nulla odio magna, placerat in augue eu, dapibus imperdiet odio. Suspendisse imperdiet metus sit amet rhoncus dapibus. Cras at enim et urna vehicula cursus eu a mauris. Integer magna ante, eleifend ac placerat vitae, porta at nisi. Cras eget malesuada orci. Curabitur nunc est, vulputate id viverra et, dignissim sed odio. Curabitur non mattis sem. Sed bibendum, turpis vitae vehicula faucibus, nunc quam ultricies lectus, vitae viverra felis turpis at libero. - -Nullam ut egestas ligula. Proin hendrerit justo a lectus commodo venenatis. Nulla facilisi. Ut cursus lorem quis est bibendum condimentum. Aenean in tristique odio. Fusce tempor hendrerit ipsum. Curabitur mollis felis justo, quis dapibus erat auctor vel. Sed augue lectus, finibus ut urna quis, ullamcorper vestibulum dui. Etiam molestie aliquam tempor. Integer mattis sollicitudin erat, et tristique elit varius vel. Mauris a ex justo. - -Nam eros est, imperdiet non volutpat rutrum, pellentesque accumsan ligula. Duis sit amet turpis metus. Aenean in rhoncus metus, ac fringilla ex. Suspendisse condimentum egestas purus, ut pharetra odio vulputate vel. Duis tincidunt massa a placerat ultrices. Mauris ultricies nibh sit amet condimentum malesuada. Duis tincidunt id ipsum sed congue. - -Praesent eu ex augue. Nullam in porta ligula. In tincidunt accumsan arcu, in pellentesque magna tristique in. Mauris eleifend libero ac nisl viverra faucibus. Nam sollicitudin dolor in commodo hendrerit. Cras at orci metus. Ut quis laoreet orci. Vivamus ultrices leo pellentesque tempor aliquet. Maecenas ut eros vitae purus placerat vestibulum. Etiam vitae gravida dolor, quis rhoncus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. - -Suspendisse fringilla lacinia sagittis. Integer tincidunt consectetur tristique. Morbi non orci convallis, congue sapien quis, vulputate nunc. Donec a libero vel magna elementum facilisis non quis mi. Mauris posuere tellus non ipsum ultrices elementum. Vivamus massa velit, facilisis quis placerat aliquet, aliquet nec leo. Praesent a maximus sem. Sed neque elit, feugiat vel quam non, molestie sagittis nunc. Etiam luctus nunc ac mauris scelerisque, nec rhoncus lacus convallis. Nunc pharetra, nunc ac pulvinar aliquam, ex ipsum euismod augue, nec porttitor lacus turpis vitae neque. Fusce bibendum odio id tortor faucibus pellentesque. Sed ac porta nibh, eu gravida erat. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis ullamcorper felis. Nulla mattis sagittis ante ac tincidunt. Integer ac felis efficitur, viverra libero et, facilisis ligula. Suspendisse a metus a massa rhoncus posuere. Phasellus suscipit ligula ut lacus facilisis, ac pellentesque ex tempor. Quisque consectetur massa mi, ac molestie libero dictum quis. Proin porttitor ligula quis erat tincidunt venenatis. Proin congue nunc sed elit gravida, nec consectetur lectus sodales. Etiam tincidunt convallis ipsum at vestibulum. Quisque maximus enim et mauris porttitor, et molestie magna tristique. Morbi vitae metus elit. Maecenas sed volutpat turpis. Aliquam vitae dolor vestibulum, elementum purus eget, dapibus nibh. Nullam egestas dui ac rutrum semper. - -Etiam hendrerit est metus, et condimentum metus aliquam ac. Pellentesque id neque id ipsum rhoncus vulputate. Aliquam erat nisl, posuere sit amet ligula ac, fermentum blandit felis. Vivamus fermentum mi risus, non lacinia purus viverra id. Aenean ac sapien consequat, finibus mauris nec, porta sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis consectetur ex, dignissim bibendum nulla. Phasellus ac libero at quam vehicula euismod non eu leo. Phasellus a sapien augue. - -Maecenas ligula dui, bibendum vitae mauris et, auctor laoreet felis. Duis non libero a mi semper mattis. Quisque consequat luctus massa, quis tristique eros auctor feugiat. Maecenas sodales euismod neque vitae facilisis. Nullam laoreet imperdiet velit at pellentesque. Etiam massa odio, facilisis a consequat vitae, placerat vel magna. Nunc sagittis eros nec urna fringilla, pulvinar vestibulum nibh scelerisque. Sed magna metus, cursus eu consequat et, pharetra a est. Suspendisse elementum neque a dui malesuada lacinia. Donec sed ipsum volutpat, cursus urna id, ullamcorper arcu. Maecenas laoreet nisl eget velit egestas sollicitudin. Etiam nisl turpis, mollis id dignissim vitae, tristique vehicula ante. Maecenas eget placerat est, at rutrum augue. Vivamus faucibus lacinia ullamcorper. Sed pulvinar urna sodales ante sodales, at gravida leo dictum. - -Morbi maximus, quam a lobortis bibendum, enim felis varius elit, ac vehicula elit nisl ut lacus. Quisque ut arcu augue. Praesent id turpis quam. Sed sed arcu eros. Maecenas at cursus lorem, ac eleifend nisi. Fusce mattis felis at commodo pharetra. Praesent ac commodo ipsum. Quisque finibus et eros vitae tincidunt. In hac habitasse platea dictumst. Praesent purus ipsum, luctus lobortis ornare quis, auctor eget justo. Nam vel enim sollicitudin, faucibus tortor eu, sagittis eros. Ut nec consectetur erat. Donec ultricies malesuada ligula, a hendrerit sapien volutpat in. Maecenas sed enim vitae sapien pulvinar faucibus. - -Proin semper nunc nibh, non consequat neque ullamcorper vel. Maecenas lobortis sagittis blandit. Aenean et arcu ultricies turpis malesuada malesuada. Ut quam ex, laoreet ut blandit cursus, feugiat vitae dolor. Etiam ex lacus, scelerisque vel erat vel, efficitur tincidunt magna. Morbi tristique lacinia dolor, in egestas magna ultrices vitae. Integer ultrices leo ac tempus venenatis. Praesent ac porta tortor. Vivamus ornare blandit tristique. Nulla rutrum finibus pellentesque. In non dui elementum, fermentum ipsum vel, varius magna. Pellentesque euismod tortor risus, ac pellentesque nisl faucibus eget. - -Vivamus eu enim purus. Cras ultrices rutrum egestas. Sed mollis erat nibh, at posuere nisl luctus nec. Nunc vulputate, sapien id auctor molestie, nisi diam tristique ante, non convallis tellus nibh at orci. Morbi a posuere purus, in ullamcorper ligula. Etiam elementum sit amet dui imperdiet iaculis. Proin vitae tincidunt ipsum, sit amet placerat lectus. Curabitur commodo sapien quam, et accumsan lectus fringilla non. Nullam eget accumsan enim, ac pharetra mauris. Sed quis tristique velit, vitae commodo nisi. Duis turpis dui, maximus ut risus at, finibus consequat nunc. Maecenas sed est accumsan, aliquet diam in, facilisis risus. Curabitur vehicula rutrum auctor. Nam iaculis risus pulvinar maximus viverra. Nulla vel augue et ex sagittis blandit. - -Ut sem nulla, porta ac ante ac, posuere laoreet eros. Donec sodales posuere justo a auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras mollis at orci hendrerit porta. Nullam sodales tortor tortor, non lacinia diam finibus id. Duis libero orci, suscipit ac odio et, dictum consequat ipsum. Pellentesque eu ligula sagittis, volutpat eros at, lacinia lorem. Cras euismod tellus in iaculis tempor. Quisque accumsan, magna a congue venenatis, ante ipsum aliquam lectus, at egestas enim nunc at justo. Quisque sem purus, viverra ut tristique ut, maximus id enim. Etiam quis placerat sem. In sollicitudin, lacus eu rutrum mollis, nulla eros luctus elit, vel dapibus urna purus nec urna. Phasellus egestas massa quam, ac molestie erat hendrerit a. Praesent ultrices neque ut turpis molestie auctor. Etiam molestie placerat purus, et euismod erat aliquam in. Morbi id suscipit justo. - -Proin est ante, consequat at varius a, mattis quis felis. Sed accumsan nibh sit amet ipsum elementum posuere. Vestibulum bibendum id diam sit amet gravida. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi nec dolor vel ipsum dignissim hendrerit vel non ipsum. Praesent facilisis orci quis elit auctor lobortis. Phasellus cursus risus lectus, vel lobortis libero dapibus in. Quisque tristique tempus leo a pulvinar. Pellentesque a magna tincidunt, pellentesque massa nec, laoreet orci. Morbi congue ornare dolor quis commodo. Phasellus massa nisi, tincidunt at eros dictum, hendrerit lobortis urna. Maecenas porta, magna id mattis molestie, nibh tellus lobortis sem, eget tincidunt ipsum quam eu turpis. - -Ut gravida orci risus, vel rutrum mauris vehicula id. Etiam bibendum, neque a placerat condimentum, ex orci imperdiet lectus, quis dapibus arcu lacus eget lectus. Sed consequat non mi sit amet venenatis. Fusce vestibulum erat libero, eget hendrerit risus vulputate sollicitudin. Integer sed eleifend felis. Donec commodo, sem eu mattis placerat, urna odio aliquam tellus, et laoreet justo tellus eget erat. Fusce sed suscipit tortor. Nam hendrerit nibh ac nunc auctor lacinia. Pellentesque placerat condimentum ipsum, eget semper tortor hendrerit vel. Nullam non urna eu lacus pellentesque congue ut id eros. - -Nunc finibus leo in rhoncus tristique. Sed eu ipsum nec nisl egestas faucibus eget a felis. Pellentesque vitae nisi in nulla accumsan fermentum. Sed venenatis feugiat eleifend. Fusce porttitor varius placerat. Aliquam aliquet lacus sit amet mattis mollis. Sed vel nulla quis dolor suscipit vehicula ac viverra lorem. Duis viverra ipsum eget nulla ullamcorper fermentum. Mauris tincidunt arcu quis quam fringilla ornare. Donec et iaculis tortor. Nam ultricies libero vel ipsum aliquet efficitur. Morbi eget dolor aliquam, tempus sapien eget, viverra ante. Donec varius mollis ex, sed efficitur purus euismod interdum. Quisque vel sapien non neque tincidunt semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Suspendisse sit amet purus leo. Fusce lectus lorem, aliquam ac nulla eget, imperdiet ornare eros. Nullam sem augue, varius in nisi non, sollicitudin pellentesque ante. Etiam eu odio condimentum, tempor libero et, egestas arcu. Cras pellentesque eleifend aliquet. Pellentesque non blandit ligula. Ut congue viverra rhoncus. Phasellus mattis mi ac eros placerat, eu feugiat tellus ultrices. Aenean mollis laoreet libero eu imperdiet. Cras sed pulvinar mi, ac vehicula ligula. Vestibulum sit amet ex massa. In a egestas eros. - -Mauris pretium ipsum risus, venenatis cursus ante imperdiet id. Praesent eu turpis nec risus feugiat maximus ullamcorper ac lectus. Integer placerat at mi vel dapibus. Vestibulum fermentum turpis sit amet turpis viverra, id aliquet diam suscipit. Nam nec ex sed ante ullamcorper pharetra quis sit amet risus. Sed ac faucibus velit, id feugiat nibh. Nullam eget ipsum ex. Vivamus tincidunt non nunc non faucibus. Quisque bibendum viverra facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at nisi hendrerit quam suscipit egestas. Curabitur laoreet maximus ultricies. Duis ut tellus ac augue molestie dictum. - -Suspendisse rhoncus iaculis erat, ut ullamcorper est tristique eget. Donec auctor nec risus at gravida. Vivamus volutpat vulputate tellus, vel ultricies eros suscipit eget. Ut pulvinar id mi eu tempus. Morbi malesuada augue in dui varius, nec blandit neque vehicula. Donec ornare nec nisl in mollis. Morbi enim nisi, rhoncus nec est id, dapibus tempus urna. Ut id elit a felis vestibulum consectetur. Duis lectus quam, pharetra sit amet diam sed, posuere vestibulum erat. Fusce vitae maximus massa. Nullam id metus tempus, iaculis risus eu, lobortis urna. Quisque in congue urna. Pellentesque placerat neque in augue dapibus, non varius ex malesuada. Curabitur ut eleifend libero. Fusce vitae ligula luctus, fermentum enim vitae, ultrices erat. - -Sed viverra augue turpis, scelerisque egestas sapien mattis eu. Duis laoreet magna at ex pharetra dapibus. Praesent eget odio vel quam venenatis dictum. Nulla in sollicitudin dolor. Mauris lobortis nec eros vel rhoncus. Vestibulum porta viverra venenatis. Curabitur vel scelerisque quam, a egestas velit. Praesent volutpat tincidunt magna at laoreet. - -Cras nec lorem odio. Pellentesque quis dui urna. Praesent at tellus ac lectus scelerisque placerat nec eu risus. Vestibulum sit amet mattis ligula. Vivamus sed nisi at leo elementum accumsan at sit amet arcu. Aenean mattis tellus nec leo gravida, eget hendrerit nisl faucibus. Mauris pellentesque luctus condimentum. Maecenas pretium sapien nunc, eget commodo dolor maximus id. Mauris vestibulum accumsan massa a dictum. Phasellus interdum quam ligula, ut maximus diam blandit aliquam. Nunc vitae ex eu erat condimentum consectetur. Maecenas interdum condimentum volutpat. - -Donec et enim a libero rutrum laoreet. Praesent a condimentum sem, at tincidunt quam. In vel molestie risus. Sed urna dui, molestie vitae mollis laoreet, tempor quis lectus. Praesent vitae auctor est, et aliquet nunc. Curabitur vulputate blandit nulla, at gravida metus. Maecenas gravida dui eu iaculis tristique. Pellentesque posuere turpis nec auctor eleifend. Suspendisse bibendum diam eu tellus lobortis, et laoreet quam congue. In hac habitasse platea dictumst. Morbi dictum neque velit, eget rutrum eros ultrices sit amet. - -Phasellus fermentum risus pharetra consectetur bibendum. Donec magna tortor, lacinia vitae nibh quis, aliquet pretium lorem. Donec turpis nisi, pretium eu enim volutpat, mattis malesuada augue. Nullam vel tellus iaculis, sollicitudin elit eget, tincidunt lacus. Fusce elementum elementum felis et iaculis. Suspendisse porta eros nec neque malesuada, in malesuada ante sollicitudin. Vivamus bibendum viverra molestie. - -Integer feugiat, erat nec convallis aliquam, velit felis congue erat, molestie eleifend tellus erat in tellus. Nunc et justo purus. Donec egestas fermentum dui non feugiat. Quisque in sapien sagittis, gravida quam id, iaculis lectus. Cras sagittis rhoncus bibendum. Fusce quis metus in velit scelerisque tincidunt at non ipsum. Vivamus efficitur ante eu odio vulputate, vitae ultricies risus vehicula. Proin eget odio eu sem tincidunt feugiat vel id lorem. - -Vestibulum sit amet nulla dignissim, euismod mi in, fermentum tortor. Donec ut aliquet libero, lacinia accumsan velit. Donec et nulla quam. Nullam laoreet odio nec nunc imperdiet, a congue eros venenatis. Quisque nec tellus sit amet neque interdum posuere. Duis quis mi gravida, tincidunt diam convallis, ultricies augue. Mauris consequat risus non porttitor congue. Ut in ligula consequat, viverra nunc a, eleifend enim. Duis ligula urna, imperdiet nec facilisis et, ornare eu ex. Proin lobortis lectus a lobortis porttitor. Nulla leo metus, egestas eu libero sed, pretium faucibus felis. Vestibulum non sem tortor. Nam cursus est leo. Vivamus luctus enim odio, non interdum sem dapibus a. Aenean accumsan consequat lectus in imperdiet. - -Donec vehicula laoreet ipsum in posuere. Quisque vel quam imperdiet, sollicitudin nisi quis, suscipit velit. Morbi id sodales mauris. Curabitur tellus arcu, feugiat sed dui sit amet, sodales sagittis libero. Aenean vel suscipit metus, non placerat leo. Vestibulum quis nulla elit. Proin scelerisque non ante ut commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed non urna dolor. Suspendisse convallis mi porta pulvinar ultrices. Suspendisse quam ipsum, hendrerit non scelerisque molestie, interdum dictum nunc. Morbi condimentum condimentum turpis eu luctus. Pellentesque sagittis sollicitudin odio, sed ultricies felis ornare sit amet. Sed ultrices ex leo, a tincidunt nisl gravida sed. Nullam ornare accumsan porta. Praesent consectetur id est nec sollicitudin. - -In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed ultrices nibh. Duis accumsan suscipit eros, a dictum odio tempus sit amet. Aenean imperdiet erat ac lacus finibus, scelerisque cursus massa imperdiet. Mauris molestie risus ut lacinia posuere. Nulla et sodales purus. Maecenas orci erat, placerat in tristique quis, placerat in mi. - -Donec sollicitudin pellentesque odio in feugiat. Morbi eu dolor ut mauris congue sollicitudin. Aliquam erat volutpat. Nulla id varius dui. Curabitur finibus urna ante, consectetur interdum nisi volutpat a. Quisque quis mi tristique, consequat tellus eget, rutrum sapien. Vivamus vitae tellus vulputate, rutrum ex eu, vulputate sem. Suspendisse viverra lorem tellus, vel interdum orci gravida quis. Ut laoreet arcu at mi ullamcorper finibus. Duis porta sagittis vestibulum. Sed commodo nisl vitae urna sollicitudin, nec lacinia est sodales. Curabitur imperdiet sodales dui sed iaculis. Sed ac tellus maximus, eleifend quam sit amet, feugiat elit. Aenean viverra, dui at mattis varius, est odio vestibulum sapien, sit amet mollis libero massa nec velit. Etiam quis sodales justo. - -Ut ultricies, sem eget sodales feugiat, nunc arcu congue elit, ac tempor justo massa nec purus. Maecenas enim nunc, pharetra eget dictum sit amet, tempus pellentesque velit. Suspendisse venenatis ligula in nulla mattis, et imperdiet ex tincidunt. Etiam vulputate, tellus et ultrices suscipit, enim velit laoreet massa, vitae congue odio enim ac urna. Morbi quam lorem, iaculis ac varius sagittis, euismod quis dolor. In ut dui eu purus feugiat consectetur. Vestibulum cursus velit quis lacus pellentesque iaculis. Cras in risus sed mauris porta rutrum. Nulla facilisi. Nullam eu bibendum est, non pellentesque lectus. Sed imperdiet feugiat lorem, quis convallis ante auctor in. Maecenas justo magna, scelerisque sit amet tellus eget, varius elementum risus. Duis placerat et quam sed varius. - -Duis nec nibh vitae nibh dignissim mollis quis sed felis. Curabitur vitae quam placerat, venenatis purus ut, euismod nisl. Curabitur porttitor nibh eu pulvinar ullamcorper. Suspendisse posuere nec ipsum ac dapibus. Cras convallis consectetur urna. Phasellus a nibh in dolor lacinia posuere id eget augue. In eu pharetra lorem, vitae cursus lacus. Aliquam tincidunt nibh lectus. Aenean facilisis ultricies posuere. Sed ut placerat orci. Curabitur scelerisque gravida blandit. Maecenas placerat ligula eget suscipit fringilla. Mauris a tortor justo. Aliquam hendrerit semper mollis. Phasellus et tincidunt libero. Etiam vel quam libero. - -Quisque aliquet tempor ex. Ut ante sem, vehicula at enim vel, gravida porta elit. Etiam vitae lacus a neque lobortis consectetur. Mauris sed interdum odio. Mauris elementum ex blandit tempor cursus. Integer in enim in leo viverra elementum. Fusce consectetur metus et sem rutrum, mattis euismod diam semper. Nunc sed ipsum vel urna consequat vehicula. Donec cursus pretium lorem, vestibulum pretium felis commodo sit amet. Nam blandit felis enim, eget gravida ex faucibus a. In nec neque massa. Etiam laoreet posuere ipsum. Praesent volutpat nunc dolor, ac vulputate magna facilisis non. Aenean congue turpis vel lectus sollicitudin tristique. Sed nec consequat purus, non vehicula quam. Etiam ultricies, est ac dictum tincidunt, turpis turpis pretium massa, a vulputate libero justo at nibh. - -Aliquam erat volutpat. Cras ultrices augue ac sollicitudin lobortis. Curabitur et aliquet purus. Duis feugiat semper facilisis. Phasellus lobortis cursus velit, a sollicitudin tortor. Nam feugiat sapien non dapibus condimentum. Morbi at mi bibendum, commodo quam at, laoreet enim. Integer eu ultrices enim. Sed vestibulum eu urna ut dictum. Curabitur at mattis leo, sed cursus massa. Aliquam porttitor, felis quis fermentum porttitor, justo velit feugiat nulla, eget condimentum sem dui ut sapien. - -In fringilla elit eu orci aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eget fringilla tellus. Curabitur fermentum, mi et condimentum suscipit, elit neque bibendum dui, et hendrerit nunc metus id ipsum. Morbi placerat mi in hendrerit congue. Ut feugiat mauris eget scelerisque viverra. Vivamus sit amet erat dictum, sagittis lectus nec, pulvinar lorem. Sed non enim ac dui sollicitudin aliquet. Quisque ut lacus dolor. Fusce hendrerit malesuada euismod. Nulla faucibus vel mauris eu mollis. Mauris est diam, fringilla ac arcu feugiat, efficitur volutpat turpis. Aliquam venenatis cursus massa sed porttitor. Ut ac finibus enim, in tincidunt sapien. - -Nunc faucibus semper turpis a lacinia. Phasellus gravida, libero vel pulvinar ornare, ex sem tincidunt lectus, sit amet convallis augue risus at tortor. Quisque sit amet ipsum id nulla posuere vestibulum. Pellentesque scelerisque mauris vel leo viverra sodales. Nulla viverra aliquam ex, ut rutrum enim fermentum venenatis. Aenean eget dapibus ex, eget faucibus metus. Vestibulum volutpat leo in diam semper, eget porta magna suscipit. Sed sit amet nulla blandit, aliquam dolor ac, gravida velit. Sed vel velit viverra, maximus est id, convallis justo. - -Curabitur nulla ante, vulputate at libero vel, ullamcorper rutrum nibh. Pellentesque porttitor eu mauris id mattis. Duis vulputate augue elit, eget interdum justo pretium vel. Maecenas eu vulputate arcu, eget posuere purus. Suspendisse viverra a velit dictum eleifend. Suspendisse vitae dapibus diam. Donec vehicula justo in ante interdum, eu luctus diam placerat. Vivamus convallis ipsum eu orci suscipit, sed fermentum enim euismod. Maecenas faucibus elit vitae ex ornare tristique. Donec vestibulum nec elit sit amet porttitor. Aenean tempor lectus eget tortor hendrerit luctus. Nullam interdum vitae lectus vel feugiat. Cras in risus non magna consectetur lobortis. Sed faucibus enim quis gravida convallis. - -Phasellus eget massa sit amet libero ultrices suscipit. Vivamus at risus sapien. Nam mollis nunc eget velit dictum maximus. Sed pellentesque, nunc ac fringilla lacinia, quam enim mattis ex, sed euismod tortor metus eu neque. Ut mattis nisl ut lectus rhoncus, sodales bibendum eros porta. Nulla porttitor enim nec diam sagittis, eget porta velit efficitur. Vestibulum ultricies eros neque. Phasellus rutrum suscipit enim, in interdum ante gravida vitae. Sed in sagittis diam, non commodo velit. - -Morbi hendrerit odio orci, nec tincidunt odio rhoncus nec. Mauris neque velit, vehicula a lorem at, suscipit tristique dui. Sed finibus, nisl in mattis convallis, turpis neque sodales lacus, eu porta enim magna non diam. Nam commodo sodales risus consectetur malesuada. In eget elementum justo. Phasellus sit amet massa imperdiet, dapibus nunc sit amet, suscipit orci. Fusce condimentum laoreet feugiat. Ut ut viverra ante. Praesent bibendum interdum commodo. Nulla mollis nisi a est ornare volutpat. Sed at ligula eu nisi dapibus tempus. Proin cursus vestibulum justo, nec efficitur justo dignissim vel. Nunc quis maximus eros. - -Cras viverra, diam a tristique mattis, libero felis vulputate tellus, a ornare felis leo a dui. Nulla ante nulla, finibus ut tellus ut, blandit pharetra nibh. Proin eleifend fermentum ex, eget auctor libero vulputate in. Nullam ultricies, mauris placerat pretium placerat, leo urna lobortis leo, vel placerat arcu libero sed mauris. Aliquam mauris ligula, ornare at urna at, eleifend gravida ligula. Vestibulum consectetur ut nulla non scelerisque. Donec ornare, sem nec elementum aliquam, urna nulla bibendum metus, eu euismod dui ligula ac est. Fusce laoreet erat eu ex lobortis, quis bibendum ligula interdum. Sed vel mi erat. Vivamus id lacus ac enim mattis tempor. Nunc ultricies pellentesque enim sed euismod. Fusce tincidunt convallis elit quis aliquam. Mauris nulla ipsum, sollicitudin quis diam ac, feugiat volutpat tellus. In nibh nibh, vulputate quis tincidunt quis, pulvinar eget magna. Pellentesque quis finibus dolor. Suspendisse viverra vitae lectus non eleifend. - -Nunc ut orci et sapien maximus semper. Nulla dignissim sem urna, ac varius lectus ultricies id. Quisque aliquet pulvinar pretium. In ultricies molestie tellus vehicula porta. Nam enim lorem, aliquam eget ex et, hendrerit volutpat quam. Maecenas diam lacus, pellentesque eget tempus ac, pharetra eu elit. Donec vel eros a sem facilisis vulputate. Nullam ac nisi vulputate, laoreet nisl ac, eleifend sem. Nullam mi massa, rhoncus sed pharetra interdum, tincidunt eget nunc. Aliquam viverra mattis posuere. Mauris et dui sed nisl sollicitudin fermentum quis ut arcu. Nam placerat eget orci at tincidunt. Curabitur vel turpis metus. Phasellus nibh nulla, fermentum scelerisque sem vel, gravida tincidunt velit. Pellentesque vel quam tempor, finibus massa pellentesque, condimentum dui. - -Donec at mattis neque. Etiam velit diam, consequat auctor mauris id, hendrerit faucibus metus. Maecenas ullamcorper eros a est sodales, ac consectetur odio scelerisque. Donec leo metus, imperdiet at pellentesque vel, feugiat id erat. Suspendisse at magna enim. Vestibulum placerat sodales lorem id sollicitudin. Aenean at euismod ligula, eget mollis diam. Phasellus pulvinar, orci nec pretium condimentum, est erat facilisis purus, quis feugiat augue elit aliquam nulla. Aenean vitae tortor id risus congue tincidunt. Sed dolor enim, mattis a ullamcorper id, volutpat ac leo. - -Proin vehicula feugiat augue, id feugiat quam sodales quis. Donec et ultricies massa, a lacinia nulla. Duis aliquam augue ornare euismod viverra. Ut lectus risus, rutrum sit amet efficitur a, luctus nec nisl. Cras volutpat ullamcorper congue. Sed vitae odio metus. Phasellus aliquet euismod varius. - -Nullam sem ex, malesuada ut magna ut, pretium mollis arcu. Nam porttitor eros cursus mi lacinia faucibus. Suspendisse aliquet eleifend iaculis. Maecenas sit amet viverra tortor. Nunc a mollis risus. Etiam tempus dolor in tortor malesuada mattis. Ut tincidunt venenatis est sit amet dignissim. Vestibulum massa enim, tristique sed scelerisque eu, fringilla ac velit. Donec efficitur quis urna sit amet malesuada. Vestibulum consequat ac ligula in dapibus. Maecenas massa massa, molestie non posuere nec, elementum ut magna. In nisi erat, mollis non venenatis eu, faucibus in justo. Morbi gravida non ex non egestas. Pellentesque finibus laoreet diam, eu commodo augue congue vitae. - -Aenean sem mi, ullamcorper dapibus lobortis vitae, interdum tincidunt tortor. Vivamus eget vulputate libero. Ut bibendum posuere lectus, vel tincidunt tortor aliquet at. Phasellus malesuada orci et bibendum accumsan. Aliquam quis libero vel leo mollis porta. Sed sagittis leo ac lacus dictum, ac malesuada elit finibus. Suspendisse pharetra luctus commodo. Vivamus ultricies a odio non interdum. Vivamus scelerisque tincidunt turpis quis tempor. Pellentesque tortor ligula, varius non nunc eu, blandit sollicitudin neque. Nunc imperdiet, diam et tristique luctus, ipsum ex condimentum nunc, sit amet aliquam justo velit sed libero. Duis vel suscipit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tincidunt neque vel massa ultricies, id dictum leo consequat. Curabitur lobortis ultricies tellus, eget mattis nisl aliquam sit amet. - -Proin at suscipit justo. Vivamus ut vestibulum nisl. Pellentesque enim odio, pharetra non magna sed, efficitur auctor magna. Praesent tincidunt ante quis ante hendrerit viverra. Pellentesque vel ipsum id magna vulputate efficitur. Sed nec neque accumsan, pulvinar sapien quis, euismod mauris. Donec condimentum laoreet sapien quis gravida. Quisque sed mattis purus. Vestibulum placerat vel neque maximus scelerisque. - -Vestibulum mattis quam quis efficitur elementum. Duis dictum dolor ac scelerisque commodo. Fusce sollicitudin nisi sit amet dictum placerat. Suspendisse euismod pharetra eleifend. In eros nisl, porttitor sed mauris at, consectetur aliquet mauris. Donec euismod viverra neque sed fermentum. Phasellus libero magna, accumsan ut ultricies vitae, dignissim eget metus. Donec tellus turpis, interdum eget maximus nec, hendrerit eget massa. Curabitur auctor ligula in iaculis auctor. In ultrices quam suscipit cursus finibus. Aenean id mi at dolor interdum iaculis vitae ut lorem. Nullam sed nibh fringilla, lacinia odio nec, placerat erat. In dui libero, viverra ac viverra ac, pellentesque sit amet turpis. - -Nulla in enim ex. Sed feugiat est et consectetur venenatis. Cras varius facilisis dui vel convallis. Vestibulum et elit eget tellus feugiat pellentesque. In ut ante eu purus aliquet posuere. Nulla nec ornare sem, sed luctus lorem. Nam varius iaculis odio, eget faucibus nisl ullamcorper in. Sed eget cursus felis, nec efficitur nisi. - -Vivamus commodo et sem quis pulvinar. Pellentesque libero ante, venenatis vitae ligula sit amet, ornare sollicitudin nulla. Mauris eget tellus hendrerit, pulvinar metus quis, tempor nisi. Proin magna ex, laoreet sed tortor quis, varius fermentum enim. Integer eu dolor dictum, vulputate tortor et, aliquet ligula. Vestibulum vitae justo id mauris luctus sollicitudin. Suspendisse eget auctor neque, sodales egestas lorem. Vestibulum lacinia egestas metus vitae euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ex tellus, volutpat nec pulvinar sit amet, condimentum vitae dui. Curabitur vel felis sodales, lacinia nunc iaculis, ullamcorper augue. Pellentesque consequat dolor quis eros efficitur malesuada. Nulla ut malesuada lectus. - -Morbi et tristique ante. Aliquam erat volutpat. Vivamus vitae dui nec turpis pellentesque fermentum. Quisque eget velit massa. Pellentesque tristique aliquam nisl, eu sollicitudin justo venenatis sed. Duis eleifend sem eros, ut aliquam libero porttitor id. Sed non nunc consequat, rhoncus diam eu, commodo erat. Praesent fermentum in lectus id blandit. Donec quis ipsum at justo volutpat finibus. Nulla blandit justo nulla, at mollis lacus consequat eget. Aenean sollicitudin quis eros ut ullamcorper. - -Pellentesque venenatis nulla ut mi aliquet feugiat. Cras semper vel magna nec pharetra. Integer mattis felis et sapien commodo imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis quis luctus felis. Vestibulum justo nibh, aliquam non lectus vitae, molestie placerat justo. Donec lorem nibh, gravida sit amet hendrerit ac, maximus id ipsum. Nunc ac libero sodales risus eleifend sagittis. Phasellus est massa, lobortis elementum ex sed, scelerisque consectetur neque. Nunc faucibus neque id lorem malesuada, eget convallis ex mattis. - -Sed turpis tortor, fermentum non turpis id, posuere varius nibh. Donec iaculis lorem dui. Etiam eros ante, sodales eget venenatis at, consectetur eget risus. Curabitur non aliquam ante, a pretium justo. Maecenas tempor nisl tortor, vitae dictum nisi ultrices eu. Duis eget dui ultrices, porttitor lacus sed, lobortis purus. Quisque mattis elit nec neque sagittis, sed commodo leo blandit. Mauris sodales interdum eleifend. Vestibulum condimentum consectetur augue, id luctus diam convallis et. - -Nunc suscipit risus in justo accumsan, a placerat magna tincidunt. Proin a nisl ipsum. Sed libero dui, tristique in augue quis, auctor tristique risus. Sed porttitor ex augue, eu porta augue molestie a. Duis rhoncus purus libero, eu tempus turpis condimentum at. Sed mollis nisi id lectus placerat tincidunt. Maecenas non scelerisque elit, quis rutrum orci. Donec in tellus pharetra urna ornare lobortis. Phasellus id risus at nisi varius rutrum eu ut turpis. - -Duis dictum justo quis nisl porta, eget tincidunt magna suscipit. Sed velit massa, ullamcorper eu sodales ac, pretium a massa. Duis et rutrum tortor. Nulla accumsan hendrerit sapien, cursus volutpat eros egestas eget. Donec sollicitudin at ante quis sollicitudin. Aenean blandit feugiat diam, id feugiat eros faucibus eget. Donec viverra dolor vel justo scelerisque dignissim. Nulla semper sem nunc, rhoncus semper tellus ultricies sed. Duis in ornare diam. Donec vehicula feugiat varius. Maecenas ut suscipit est. Vivamus sem sem, finibus at dolor sit amet, euismod dapibus ligula. Vestibulum fringilla odio dapibus, congue massa eget, congue sem. Donec feugiat magna eget tortor lacinia scelerisque non et ipsum. - -Suspendisse potenti. Nunc convallis sollicitudin ex eget venenatis. Sed iaculis nibh ex, vel ornare ligula congue dignissim. Quisque sollicitudin dolor ac dui vestibulum, sit amet molestie nisi aliquet. Donec at risus felis. Aenean sollicitudin metus a feugiat porta. Aenean a tortor ut dolor cursus sagittis. Vivamus consectetur porttitor nunc in facilisis. Proin sit amet mi vel lectus consectetur ultrices. - -Sed cursus lectus vitae nunc tristique, nec commodo turpis dapibus. Pellentesque luctus ex id facilisis ornare. Morbi quis placerat dolor. Donec in lectus in arcu mattis porttitor ac sit amet metus. Cras congue mauris non risus sodales, vitae feugiat ipsum bibendum. Nulla venenatis urna sed libero elementum, a cursus lorem commodo. Mauris faucibus lobortis eros nec commodo. - -Nullam suscipit ligula ullamcorper lorem commodo blandit. Nulla porta nibh quis pulvinar placerat. Vivamus eu arcu justo. Vestibulum imperdiet est ut fermentum porttitor. Pellentesque consectetur libero in sapien efficitur scelerisque. Curabitur ac erat sit amet odio aliquet dignissim. Pellentesque mi sem, rhoncus et luctus at, porttitor rutrum lectus. Vestibulum sollicitudin sollicitudin suscipit. Aenean efficitur dolor non ultrices imperdiet. Donec vel sem ex. - -Sed convallis mauris aliquam rutrum cursus. Ut tempor porttitor sodales. Etiam eu risus ac augue gravida egestas et eu dolor. Proin id magna ex. Suspendisse quis lectus quis lorem ultricies tempus. Donec porttitor velit vitae tincidunt faucibus. Aliquam vitae semper nisi. Morbi ultrices, leo non pretium dapibus, dui libero pellentesque ex, vel placerat enim ante vitae dui. Nunc varius, sem sit amet sagittis lobortis, lectus odio scelerisque mauris, ut vestibulum orci magna quis neque. Sed id congue justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris congue nisi est, malesuada mollis elit tincidunt sed. Curabitur sed ex sit amet felis tristique elementum vitae vel nibh. - -Etiam mollis pretium lobortis. Mauris augue lacus, efficitur at lacus sed, mollis tincidunt lectus. Aliquam erat volutpat. Donec at euismod elit, et mattis felis. Sed id lobortis urna. Morbi imperdiet vestibulum leo, sed maximus leo blandit eu. Aliquam semper lorem neque, nec euismod turpis mattis mollis. Quisque lobortis urna ultrices odio pretium, ac venenatis orci faucibus. Suspendisse bibendum odio ligula, sed lobortis massa pharetra nec. Donec turpis justo, iaculis at dictum ac, finibus eu libero. Maecenas quis porttitor mi, sit amet aliquet neque. - -Vivamus auctor vulputate ante, at egestas lorem. Donec eu risus in nulla mollis ultricies at et urna. Duis accumsan porta egestas. Ut vel euismod augue. Fusce convallis nulla ante, nec fringilla velit aliquet at. Nam malesuada dapibus ligula, a aliquam nibh scelerisque ac. Praesent malesuada neque et pellentesque interdum. Curabitur volutpat at turpis vitae tristique. Vivamus porttitor semper congue. Quisque suscipit lacus mi, rhoncus ultrices tortor auctor quis. Maecenas neque neque, molestie ac facilisis eget, luctus ac lorem. In ut odio ut lacus suscipit pulvinar vitae sed elit. Nulla imperdiet, sem quis euismod sagittis, dui erat luctus dolor, faucibus faucibus erat sem eget nunc. Nam accumsan placerat malesuada. Maecenas convallis finibus pulvinar. - -Cras at placerat tortor. Morbi facilisis auctor felis sit amet molestie. Donec sodales sed lorem vitae suscipit. Etiam fermentum pharetra ipsum, nec luctus orci gravida eu. Pellentesque gravida, est non condimentum tempus, mauris ligula molestie est, in congue dolor nisl vel sapien. Duis congue tempor augue, id rutrum eros porta dapibus. Etiam rutrum eget est eget vestibulum. Aenean mollis arcu vel consequat varius. Praesent at condimentum felis. Duis nec interdum nisl. Donec commodo lorem sed sapien scelerisque malesuada non eu urna. In blandit non ipsum at porta. Nam lobortis leo vitae dui auctor, non feugiat quam bibendum. Donec auctor lectus sagittis laoreet maximus. Maecenas rhoncus laoreet porttitor. Vestibulum porttitor augue ut lectus hendrerit, eget posuere mi gravida. - -Sed mattis ex in erat pulvinar, eu imperdiet magna dapibus. Etiam nisi nibh, tempus non tellus sit amet, mattis tempor odio. Quisque nec lorem feugiat, lobortis odio et, commodo nunc. Maecenas semper purus nisi, nec vehicula nibh eleifend vitae. Nulla fermentum a lectus at maximus. Phasellus finibus metus non euismod ultrices. Etiam a pulvinar ante. Quisque convallis nec metus sit amet facilisis. Praesent laoreet massa et sollicitudin laoreet. Vestibulum in mauris aliquet, convallis mi ut, elementum purus. Nulla purus nulla, sodales at hendrerit quis, tempus sed lectus. - -Nam ut laoreet neque, ut maximus nibh. Maecenas quis justo pellentesque, sollicitudin elit at, venenatis velit. Aenean nunc velit, vehicula scelerisque odio at, consectetur laoreet purus. Duis dui purus, malesuada quis ipsum sit amet, tempor interdum libero. Curabitur porta scelerisque sapien, vitae cursus diam condimentum eu. Phasellus sed orci quam. Nullam vitae dui quis purus tincidunt vestibulum. Curabitur quis nulla porta, cursus arcu non, auctor enim. Etiam sollicitudin ex id sem vehicula mollis. Morbi viverra laoreet tincidunt. Praesent ut semper dui. Nam sit amet pretium neque. Mauris vitae luctus diam, in lacinia purus. Maecenas ut placerat justo, ut porta felis. Integer eu mauris ante. - -Aenean porttitor tellus diam, tempor consequat metus efficitur id. Suspendisse ut felis at erat tempor dictum at nec sapien. Sed vestibulum interdum felis, ac mattis mauris porta in. Nunc et condimentum massa. Sed cursus dictum justo et luctus. Integer convallis enim nisl, a rutrum lectus ultricies in. Donec dapibus lacus at nulla dapibus, id sollicitudin velit hendrerit. Fusce a magna at orci mollis rutrum ac a dolor. Aliquam erat volutpat. Morbi varius porta nunc, sit amet sodales ex hendrerit commodo. Donec tincidunt tortor sapien, vitae egestas sapien vehicula eget. - -Suspendisse potenti. Donec pulvinar felis nec leo malesuada interdum. Integer posuere placerat maximus. Donec nibh ipsum, tincidunt vitae luctus vitae, bibendum at leo. Sed cursus nisl ut ex faucibus aliquet sed nec eros. Curabitur molestie posuere felis. Integer faucibus velit eget consequat iaculis. Mauris sed vulputate odio. Phasellus maximus, elit a pharetra egestas, lorem magna semper tellus, vestibulum semper diam felis at sapien. Suspendisse facilisis, nisl sit amet euismod vehicula, libero nulla vehicula dolor, quis fermentum nibh elit sit amet diam. - -Morbi lorem enim, euismod eu varius ut, scelerisque quis odio. Nam tempus vitae eros id molestie. Nunc pretium in nulla eget accumsan. Quisque mattis est ut semper aliquet. Maecenas eget diam elementum, fermentum ipsum a, euismod sapien. Duis quam ligula, cursus et velit nec, ullamcorper tincidunt magna. Donec vulputate nisl est, et ullamcorper urna tempor sit amet. - -Proin lacinia dui non turpis congue pretium. Morbi posuere metus vel purus imperdiet interdum. Morbi venenatis vel eros non ultricies. Nulla vel semper elit. Ut quis purus tincidunt, auctor justo ut, faucibus turpis. Proin quis mattis erat, at faucibus ligula. Mauris in mauris enim. Donec facilisis enim at est feugiat hendrerit. Nam vel nisi lorem. Fusce ultricies convallis diam, in feugiat tortor luctus quis. Donec tempor, leo vitae volutpat aliquam, magna elit feugiat leo, quis placerat sapien felis eget arcu. Donec ornare fermentum eleifend. Integer a est orci. - -Proin rhoncus egestas leo. Nulla ultricies porta elit quis ornare. Nunc fermentum interdum vehicula. In in ligula lorem. Donec nec arcu sit amet orci lobortis iaculis. Mauris at mollis erat, sit amet mollis tortor. Mauris laoreet justo ullamcorper porttitor auctor. Aenean sit amet aliquam lectus, id fermentum eros. Praesent urna sem, vehicula ac fermentum id, dapibus ut purus. Vestibulum vitae tempus nunc. Donec at nunc ornare metus volutpat porta at eget magna. Donec varius aliquet metus, eu lobortis risus aliquam sed. Ut dapibus fermentum velit, ac tincidunt libero faucibus at. - -In in purus auctor, feugiat massa quis, facilisis nisi. Donec dolor purus, gravida eget dolor ac, porttitor imperdiet urna. Donec faucibus placerat erat, a sagittis ante finibus ac. Sed venenatis dignissim elit, in iaculis felis posuere faucibus. Praesent sed viverra dolor. Mauris sed nulla consectetur nunc laoreet molestie in ut metus. Proin ac ex sit amet magna vulputate hendrerit ac condimentum urna. Proin ligula metus, gravida et sollicitudin facilisis, iaculis ut odio. Cras tincidunt urna et augue varius, ut facilisis urna consequat. Aenean vehicula finibus quam. Ut iaculis eu diam ac mollis. Nam mi lorem, tristique eget varius at, sodales at urna. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vitae dictum erat, et auctor ipsum. Nullam nunc nunc, sollicitudin quis magna a, vestibulum fermentum mauris. Praesent at erat dolor. Proin laoreet tristique nulla vel efficitur. Nam sed ultrices nibh, id rutrum nunc. Curabitur eleifend a erat sit amet sollicitudin. Nullam metus quam, laoreet vitae dapibus id, placerat sed leo. Aliquam erat volutpat. Donec turpis nisl, cursus eu ex sit amet, lacinia pellentesque nisl. Sed id ipsum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec interdum scelerisque lorem eu mattis. - -Vivamus ac tristique massa, nec facilisis nisl. Nam ipsum neque, tincidunt vel urna in, cursus imperdiet enim. Nam pellentesque egestas tempus. Morbi facilisis imperdiet libero vitae fringilla. Nam lacinia ligula at sapien facilisis malesuada. Nullam accumsan pulvinar sem, et cursus libero porta sit amet. Curabitur vulputate erat elit, ut pulvinar erat maximus vel. - -Cras aliquet metus ut purus sagittis, vel venenatis ante consectetur. Pellentesque nulla lacus, viverra viverra mattis non, placerat vitae nibh. Donec enim turpis, accumsan sit amet tincidunt eu, imperdiet non metus. Morbi ipsum eros, tincidunt vel est ac, tristique porttitor nibh. Praesent ut ullamcorper mauris. Sed laoreet sit amet diam congue venenatis. Integer porta purus nec orci sagittis posuere. - -Donec vehicula mauris eget lacus mollis venenatis et sed nibh. Nam sodales ligula ipsum, scelerisque lacinia ligula sagittis in. Nam sit amet ipsum at erat malesuada congue. Aenean ut sollicitudin sapien. Etiam at tempor odio. Mauris vitae purus ut magna suscipit consequat. Vivamus quis sapien neque. Nulla vulputate sem sit amet massa pellentesque, eleifend tristique ligula egestas. Suspendisse tincidunt gravida mi, in pulvinar lectus egestas non. Aenean imperdiet ex sit amet nunc sollicitudin porta. Integer justo odio, ultricies at interdum in, rhoncus vitae sem. Sed porttitor arcu quis purus aliquet hendrerit. Praesent tempor tortor at dolor dictum pulvinar. Nulla aliquet nunc non ligula scelerisque accumsan. Donec nulla justo, congue vitae massa in, faucibus hendrerit magna. Donec non egestas purus. - -ÖŠ¹śabc Vivamus iaculis, lacus efficitur faucibus porta, dui nulla facilisis ligula, ut sodales odio nunc id sapien. Cras viverra auctor ipsum, dapibus mattis neque dictum sed. Sed convallis fermentum molestie. Nulla facilisi turpis duis. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_shiftjis.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_shiftjis.txt deleted file mode 100644 index 3e106d9df47..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_shiftjis.txt +++ /dev/null @@ -1,283 +0,0 @@ -’†•¶abc Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vulputate, ipsum quis interdum fermentum, lorem sem fermentum eros, vitae auctor neque lacus in nisi. Suspendisse potenti. Maecenas et scelerisque elit, in tincidunt quam. Sed eu tincidunt quam. Nullam justo ex, imperdiet a imperdiet et, fermentum sit amet eros. Aenean quis tempus sem. Pellentesque accumsan magna mi, ut mollis velit sagittis id. Etiam quis ipsum orci. Fusce purus ante, accumsan a lobortis at, venenatis eu nisl. Praesent ornare sed ante placerat accumsan. Suspendisse tempus dignissim fermentum. Nunc a leo ac lacus sodales iaculis eu vitae mi. In feugiat ante at massa finibus cursus. Suspendisse posuere fringilla ornare. Mauris elementum ac quam id convallis. Vestibulum non elit quis urna volutpat aliquam a eu lacus. - -Aliquam vestibulum imperdiet neque, suscipit aliquam elit ultrices bibendum. Suspendisse ultrices pulvinar cursus. Morbi risus nisi, cursus consequat rutrum vitae, molestie sed dui. Fusce posuere, augue quis dignissim aliquam, nisi ipsum porttitor ante, quis fringilla nisl turpis ac nisi. Nulla varius enim eget lorem vehicula gravida. Donec finibus malesuada leo nec semper. Proin ac enim eros. Vivamus non tincidunt nisi, vel tristique lorem. - -Nunc consequat ex id eros dignissim, id rutrum risus laoreet. Sed euismod non erat eu ultricies. Etiam vehicula gravida lacus ut porta. Vestibulum eu eros quis nunc aliquet luctus. Cras quis semper ligula. Nullam gravida vehicula quam sed porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In porta cursus vulputate. Quisque porta a nisi eget cursus. Aliquam risus leo, luctus ac magna in, efficitur cursus magna. In condimentum non mi id semper. Donec interdum ante eget commodo maximus. - -Vivamus sit amet vestibulum lectus. Fusce tincidunt mi sapien, dictum sollicitudin diam vulputate in. Integer fringilla consequat mollis. Cras aliquet consequat felis eget feugiat. Nunc tempor cursus arcu, vitae ornare nunc varius et. Vestibulum et tortor vel ante viverra porttitor. Nam at tortor ullamcorper, facilisis augue quis, tristique erat. Aenean ut euismod nibh. Quisque eu tincidunt est, nec euismod eros. - -Proin vehicula nibh non viverra egestas. Phasellus sem dolor, ultricies ac sagittis tristique, lacinia a purus. Vestibulum in ante eros. Pellentesque lacus nulla, tristique vitae interdum vel, malesuada ac diam. Aenean bibendum posuere turpis in accumsan. Ut est nulla, ullamcorper quis turpis at, viverra sagittis mauris. Sed in interdum purus. Praesent scelerisque nibh eget sem euismod, ut imperdiet mi venenatis. Vivamus pulvinar orci sed dapibus auctor. Nulla facilisi. Vestibulum tincidunt erat nec porttitor egestas. Mauris quis risus ante. Nulla facilisi. - -Aliquam ullamcorper ornare lobortis. Phasellus quis sem et ipsum mollis malesuada sed in ex. Ut aliquam ex eget metus finibus maximus. Proin suscipit mauris eu nibh lacinia, quis feugiat dui dapibus. Nam sed libero est. Aenean vulputate orci sit amet diam faucibus, eu sagittis sapien volutpat. Nam imperdiet felis turpis, at pretium odio pulvinar in. Sed vestibulum id eros nec ultricies. Sed quis aliquam tortor, vitae ullamcorper tellus. Donec egestas laoreet eros, id suscipit est rutrum nec. Sed auctor nulla eget metus aliquam, ut condimentum enim elementum. - -Aliquam suscipit non turpis sit amet bibendum. Fusce velit ligula, euismod et maximus at, luctus sed neque. Quisque pretium, nisl at ullamcorper finibus, lectus leo mattis sapien, vel euismod mauris diam ullamcorper ex. Nulla ut risus finibus, lacinia ligula at, auctor erat. Mauris consectetur sagittis ligula vel dapibus. Nullam libero libero, lobortis aliquam libero vel, venenatis ultricies leo. Duis porttitor, nibh congue fermentum posuere, erat libero pulvinar tortor, a pellentesque nunc ipsum vel sem. Nullam volutpat, eros sit amet facilisis consectetur, ipsum est vehicula massa, non vestibulum neque elit in mauris. Nunc hendrerit ipsum non enim bibendum, vitae rhoncus mi egestas. Etiam ullamcorper massa vel nisl sagittis, nec bibendum arcu malesuada. Aenean aliquet turpis justo, a consectetur arcu mollis convallis. Etiam tellus ipsum, ultricies vitae lorem et, ornare facilisis orci. Praesent fringilla justo urna, vel mollis neque pulvinar vestibulum. - -Donec non iaculis erat. Aliquam et mi sed nunc pulvinar ultricies in ut ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent feugiat lacus ac dignissim semper. Phasellus vitae quam nisi. Morbi vel diam ultricies risus lobortis ornare. Fusce maximus et ligula quis iaculis. Sed congue ex eget felis convallis, sit amet hendrerit elit tempor. Donec vehicula blandit ante eget commodo. Vestibulum eleifend diam at feugiat euismod. Etiam magna tellus, dignissim eget fermentum vel, vestibulum vitae mauris. Nam accumsan et erat id sagittis. Donec lacinia, odio ut ornare ultricies, dolor velit accumsan tortor, non finibus erat tellus quis ligula. Nunc quis metus in leo volutpat ornare vulputate eu nisl. - -Donec quis viverra ex. Nullam id feugiat mauris, eu fringilla nulla. Vestibulum id maximus elit. Cras elementum elit sed felis lobortis, eget sagittis nisi hendrerit. Vivamus vitae elit neque. Donec vulputate lacus ut libero ultrices accumsan. Vivamus accumsan nulla orci, in dignissim est laoreet sagittis. Proin at commodo velit. Curabitur in velit felis. Aliquam erat volutpat. Sed consequat, nulla et cursus sodales, nisi lacus mattis risus, quis eleifend erat ex nec turpis. Sed suscipit ultrices lorem in hendrerit. - -Morbi vitae lacus nec libero ornare tempus eu et diam. Suspendisse magna ipsum, fermentum vel odio quis, molestie aliquam urna. Fusce mollis turpis a eros accumsan porttitor. Pellentesque rhoncus dolor sit amet magna rutrum, et dapibus justo tempor. Sed purus nisi, maximus vitae fringilla eu, molestie nec urna. Fusce malesuada finibus pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sed aliquet eros. Pellentesque luctus diam ante, eget euismod nisl aliquet eu. Sed accumsan elit purus, tempor varius ligula tempus nec. Curabitur ornare leo suscipit suscipit fermentum. Morbi eget nulla est. Maecenas faucibus interdum tristique. - -Etiam ut elit eros. Nulla pharetra suscipit molestie. Nulla facilisis bibendum nisl non molestie. Curabitur turpis lectus, facilisis vel diam non, vulputate ultrices mauris. Aenean placerat aliquam convallis. Suspendisse sed scelerisque tellus. Vivamus lacinia neque eget risus cursus suscipit. Proin consequat dolor vel neque tempor, eu aliquam sem scelerisque. Duis non eros a purus malesuada pharetra non et nulla. Suspendisse potenti. Mauris libero eros, finibus vel nulla id, sagittis dapibus ante. Proin iaculis sed nunc et cursus. - -Quisque accumsan lorem sit amet lorem aliquet euismod. Curabitur fermentum rutrum posuere. Etiam ultricies, sem id pellentesque suscipit, urna magna lacinia eros, quis efficitur risus nisl at lacus. Nulla quis lacus tortor. Mauris placerat ex in dolor tincidunt, vel aliquet nisi pretium. Cras iaculis risus vitae pellentesque aliquet. Quisque a enim imperdiet, ullamcorper arcu vitae, rutrum risus. Nullam consectetur libero at felis fringilla, nec congue nibh dignissim. Nam et lobortis felis, eu pellentesque ligula. Aenean facilisis, ligula non imperdiet maximus, massa orci gravida sapien, at sagittis lacus nisl in lacus. Nulla quis mauris luctus, scelerisque felis consequat, tempus risus. Fusce auctor nisl non nulla luctus molestie. Maecenas sapien nisl, auctor non dolor et, iaculis scelerisque lorem. Suspendisse egestas enim aliquet, accumsan mauris nec, posuere quam. Nulla iaculis dui dui, sit amet vestibulum erat ultricies ac. - -Cras eget dolor erat. Proin at nisl ut leo consectetur ultricies vel ut arcu. Nulla in felis malesuada, ullamcorper tortor et, convallis massa. Nunc urna justo, ornare in nibh vitae, hendrerit condimentum libero. Etiam vitae libero in purus venenatis fringilla. Nullam velit nulla, consequat ut turpis non, egestas hendrerit nibh. Duis tortor turpis, interdum non ante ac, cursus accumsan lectus. Cras pharetra bibendum augue quis dictum. Sed euismod vestibulum justo. Proin porta lobortis purus. Duis venenatis diam tortor, sit amet condimentum eros rhoncus a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc at magna nec diam lobortis efficitur sit amet ut lacus. Nulla quis orci tortor. Pellentesque tempus velit a odio finibus porta. - -Proin feugiat mauris a tellus scelerisque convallis. Maecenas libero magna, blandit nec ultrices id, congue vel mi. Aliquam lacinia, quam vel condimentum convallis, tortor turpis aliquam odio, sed blandit libero lacus et eros. In eleifend iaculis magna ac finibus. Praesent auctor facilisis tellus in congue. Sed molestie lobortis dictum. Nam quis dignissim augue, vel euismod lorem. Curabitur posuere dapibus luctus. Donec ultricies dictum lectus, quis blandit arcu commodo ac. Aenean tincidunt ligula in nunc imperdiet dignissim. Curabitur egestas sollicitudin sapien ut semper. Aenean nec dignissim lacus. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec aliquam dictum vehicula. Donec tortor est, volutpat non nisi nec, varius gravida ex. Nunc vel tristique nunc, vitae mattis nisi. Nunc nec luctus ex, vitae tincidunt lectus. In hac habitasse platea dictumst. Curabitur lobortis ex eget tincidunt tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut a vehicula mi. - -Fusce eu libero finibus, interdum nulla a, placerat neque. Cras bibendum tempor libero nec feugiat. Cras ut sodales eros. Proin viverra, massa sit amet viverra egestas, neque nisl porta ex, sit amet hendrerit libero ligula vel urna. Mauris suscipit lacus id justo rhoncus suscipit. Etiam vel libero tellus. Maecenas non diam molestie, condimentum tellus a, bibendum enim. Mauris aliquet imperdiet tellus, eget sagittis dolor. Sed blandit in neque et luctus. Cras elementum sagittis nunc, vel mollis lorem euismod et. Donec posuere at lacus eget suscipit. - -Nulla nunc mi, pretium non massa vel, tempor semper magna. Nunc a leo pulvinar, tincidunt nunc at, dignissim mi. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut viverra nulla a nisl finibus, at hendrerit ligula ullamcorper. Donec a lorem semper, tempor magna et, lobortis libero. Mauris id sapien leo. Donec dignissim, quam vitae porttitor dignissim, quam justo mattis dui, vel consequat odio elit quis orci. Etiam nec pretium neque, sit amet pretium orci. Duis ac tortor venenatis, feugiat purus non, feugiat nunc. Proin scelerisque nisl in turpis aliquam vulputate. - -Praesent sed est semper, fringilla lorem vitae, tincidunt nibh. Cras eros metus, auctor at mauris sit amet, sodales semper orci. Nunc a ornare ex. Curabitur bibendum arcu congue urna vulputate egestas. Vestibulum finibus id risus et accumsan. Aenean ut volutpat tellus. Aenean tincidunt malesuada urna sit amet vestibulum. Mauris vel tellus dictum, varius lacus quis, dictum arcu. - -Aenean quis metus eu erat feugiat cursus vel at ligula. Proin dapibus sodales urna, id euismod lectus tempus id. Pellentesque ex ligula, convallis et erat vel, vulputate condimentum nisl. Pellentesque pharetra nulla quis massa eleifend hendrerit. Praesent sed massa ipsum. Maecenas vehicula dolor massa, id sodales urna faucibus et. Mauris ac quam non massa tincidunt feugiat et at lacus. Fusce libero massa, vulputate vel scelerisque non, mollis in leo. Ut sit amet ultricies odio. Suspendisse in sapien viverra, facilisis purus ut, pretium libero. - -Vivamus tristique pharetra molestie. Nam a volutpat purus. Praesent consequat gravida nisi, ac blandit nisi suscipit ut. Quisque posuere, ligula a ultrices laoreet, ligula nunc vulputate libero, ut rutrum erat odio tincidunt justo. Sed vitae leo at leo fringilla bibendum. Vestibulum ut augue nec dolor auctor accumsan. Praesent laoreet id eros pulvinar commodo. Suspendisse potenti. Ut pharetra, mauris vitae blandit fringilla, odio ante tincidunt lorem, sit amet tempor metus diam ut turpis. - -Praesent quis egestas arcu. Nullam at porta arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi vulputate ligula malesuada ligula luctus, vulputate tempus erat bibendum. Nunc ullamcorper non lectus at euismod. Etiam nibh felis, tincidunt a metus vel, pellentesque rhoncus neque. Etiam at diam in erat luctus interdum. Nunc vel ipsum pulvinar, sollicitudin lacus ac, tempus urna. Etiam vel lacinia sapien. Pellentesque sagittis velit vel mi efficitur iaculis. Integer euismod sit amet urna in sagittis. Cras eleifend ut nibh in facilisis. Donec et lacus vitae nunc placerat sodales. Nulla sed hendrerit ligula, at dapibus sapien. - -Praesent at iaculis ex. Curabitur est purus, cursus a faucibus quis, dictum id velit. Donec dignissim fringilla viverra. Nunc mauris felis, laoreet sit amet sagittis at, vestibulum in libero. Maecenas quis orci turpis. Quisque ut nibh vitae magna mollis consequat id at mauris. Aliquam eu odio eget nulla bibendum sodales. Quisque vel orci eleifend nisi pretium lacinia. Suspendisse eget risus eget mi volutpat molestie eget quis lacus. Duis nisi libero, tincidunt nec nulla id, faucibus cursus felis. - -Donec tempor eget risus pellentesque molestie. Phasellus porta neque vel arcu egestas, nec blandit velit fringilla. Nullam porta faucibus justo vitae laoreet. Pellentesque viverra id nunc eu varius. Nulla pulvinar lobortis iaculis. Etiam vestibulum odio nec velit tristique, a tristique nisi mattis. In sed fringilla orci, vitae efficitur odio. Quisque dui odio, ornare eget velit at, lacinia consequat libero. Quisque lectus nulla, aliquet eu leo in, porta rutrum diam. Donec nec mattis neque. Nam rutrum, odio ac eleifend bibendum, dolor arcu rutrum neque, eget porta elit tellus a lacus. Sed massa metus, sollicitudin et sapien eu, finibus tempus orci. Proin et sapien sit amet erat molestie interdum. In quis rutrum velit, faucibus ultrices tellus. - -Sed sagittis sed justo eget tincidunt. Maecenas ut leo sagittis, feugiat magna et, viverra velit. Maecenas ex arcu, feugiat at consequat vitae, auctor eu massa. Integer egestas, enim vitae maximus convallis, est lectus pretium mauris, ac posuere lectus nisl quis quam. Aliquam tempus laoreet mi, vitae dapibus dolor varius dapibus. Suspendisse potenti. Donec sit amet purus nec libero dapibus tristique. Pellentesque viverra bibendum ligula. Donec sed felis et ex lobortis laoreet. Phasellus a fringilla libero, vitae malesuada nulla. Pellentesque blandit mattis lacus, et blandit tortor laoreet consequat. Suspendisse libero nunc, viverra sed fermentum in, accumsan egestas arcu. Proin in placerat elit. Sed interdum imperdiet malesuada. Suspendisse aliquet quis mauris eget sollicitudin. - -Vivamus accumsan tellus non erat volutpat, quis dictum dolor feugiat. Praesent rutrum nunc ac est mollis cursus. Fusce semper volutpat dui ut egestas. Curabitur sit amet posuere massa. Cras tincidunt nulla et mi mollis imperdiet. Suspendisse scelerisque ex id sodales vulputate. In nunc augue, pharetra in placerat eu, mattis id tellus. Vivamus cursus efficitur vehicula. Nulla aliquet vehicula aliquet. - -Sed cursus tellus sed porta pulvinar. Sed vitae nisi neque. Nullam aliquet, lorem et efficitur scelerisque, arcu diam aliquam felis, sed pulvinar lorem odio et turpis. Praesent convallis pulvinar turpis eu iaculis. Aliquam nec gravida mi. Curabitur eu nibh tempor, blandit justo in, ultrices felis. Fusce placerat metus non mi sagittis rutrum. Morbi sed dui fringilla, sagittis mauris eget, imperdiet nunc. Phasellus hendrerit sem elit, id hendrerit libero auctor sit amet. Integer sodales elit sit amet consequat cursus. - -Nam semper est eget nunc mollis, in pellentesque lectus fringilla. In finibus vel diam id semper. Nunc mattis quis erat eu consectetur. In hac habitasse platea dictumst. Nullam et ipsum vestibulum ex pulvinar ultricies sit amet id velit. Aenean suscipit mi tortor, a lobortis magna viverra non. Nulla condimentum aliquet ante et ullamcorper. Pellentesque porttitor arcu a posuere tempus. Aenean lacus quam, imperdiet eu justo vitae, pretium efficitur ex. Duis id purus id magna rhoncus ultrices id eu risus. Nunc dignissim et libero id dictum. - -Quisque a tincidunt neque. Phasellus commodo mi sit amet tempor fringilla. Ut rhoncus, neque non porttitor elementum, libero nulla egestas augue, sed fringilla sapien felis ac velit. Phasellus viverra rhoncus mollis. Nam ullamcorper leo vel erat laoreet luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus semper a metus a cursus. Nulla sed orci egestas, efficitur purus ac, malesuada tellus. Aenean rutrum velit at tellus fermentum mollis. Aliquam eleifend euismod metus. - -In hac habitasse platea dictumst. Vestibulum volutpat neque vitae porttitor laoreet. Nam at tellus consequat, sodales quam in, pulvinar arcu. Maecenas varius convallis diam, ac lobortis tellus pellentesque quis. Maecenas eget augue massa. Nullam volutpat nibh ac justo rhoncus, ut iaculis tellus rutrum. Fusce efficitur efficitur libero quis condimentum. Curabitur congue neque non tincidunt tristique. Fusce eget tempor ex, at pellentesque odio. Praesent luctus dictum vestibulum. Etiam non orci nunc. Vivamus vitae laoreet purus, a lobortis velit. Curabitur tincidunt purus ac lectus elementum pellentesque. Quisque sed tincidunt est. - -Sed vel ultrices massa, vitae ultricies justo. Cras finibus mauris nec lacus tempus dignissim. Cras faucibus maximus velit, eget faucibus orci luctus vehicula. Nulla massa nunc, porta ac consequat eget, rhoncus non tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed maximus metus, vel imperdiet ipsum. Ut scelerisque lectus at blandit porttitor. Ut vulputate nunc pharetra, aliquet sapien ac, sollicitudin sapien. Aenean eget ante lorem. Nam accumsan venenatis tellus id dignissim. - -Curabitur fringilla, magna non maximus dapibus, nulla sapien vestibulum lectus, sit amet semper dolor neque vitae nisl. Nunc ultrices vehicula augue sed iaculis. Maecenas nec diam mollis, suscipit orci et, vestibulum ante. Pellentesque eu nisl tortor. Nunc eleifend, lacus quis volutpat volutpat, nisi mi molestie sem, quis mollis ipsum libero a tellus. Ut viverra dolor mattis convallis interdum. Sed tempus nisl at nunc scelerisque aliquet. Quisque tempor tempor lorem id feugiat. Nullam blandit lectus velit, vitae porta lacus tincidunt a. Vivamus sit amet arcu ultrices, tincidunt mi quis, viverra quam. Aenean fringilla libero elementum lorem semper, quis pulvinar eros gravida. Nullam sodales blandit mauris, sed fermentum velit fermentum sit amet. Donec malesuada mauris in augue sodales vulputate. Vestibulum gravida turpis id elit rhoncus dignissim. Integer non congue lorem, eu viverra orci. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec at dolor magna. Aliquam consectetur erat augue, id iaculis velit pharetra ac. Integer rutrum venenatis dignissim. Integer non sodales elit. Curabitur ut magna ut nibh feugiat aliquam ac ut risus. Morbi nibh quam, aliquam id placerat nec, vestibulum eget velit. Suspendisse at dignissim quam. Vivamus aliquet sem sed nisl volutpat, ut cursus orci ultrices. Aliquam ultrices lacinia enim, vitae aliquet neque. - -Quisque scelerisque finibus diam in mattis. Cras cursus auctor velit. Aliquam sem leo, fermentum et maximus et, molestie a libero. Aenean justo elit, rutrum a ornare id, egestas eget enim. Aenean auctor tristique erat. Curabitur condimentum libero lacus, nec consequat orci vestibulum sed. Fusce elit ligula, blandit vitae sapien vitae, dictum ultrices risus. Nam laoreet suscipit sapien, at interdum velit faucibus sit amet. Duis quis metus egestas lectus elementum posuere non nec libero. Aliquam a dolor bibendum, facilisis nunc a, maximus diam. Vestibulum suscipit tristique magna, non dignissim turpis sodales sed. Nunc ornare, velit ac facilisis fringilla, dolor mi consectetur lorem, vitae finibus erat justo suscipit urna. Maecenas sit amet eros erat. Nunc non arcu ornare, suscipit lorem eget, sodales mauris. Aliquam tincidunt, quam nec mollis lacinia, nisi orci fermentum libero, consequat eleifend lectus quam et sapien. Vestibulum a quam urna. - -Cras arcu leo, euismod ac ullamcorper at, faucibus sed massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor velit in enim interdum, non commodo metus ornare. Morbi vel lorem quis nisl luctus tristique quis vitae nisl. Suspendisse condimentum tortor enim, nec eleifend ipsum euismod et. Sed gravida quam ut tristique lacinia. Mauris eu interdum ipsum, ac ultrices odio. Nullam auctor tellus a risus porttitor vehicula. Nulla blandit euismod dictum. In pharetra, enim iaculis pulvinar interdum, dui nunc placerat nunc, sit amet pretium lectus nulla vitae quam. Phasellus quis enim sollicitudin, varius nulla id, ornare purus. Donec quam lacus, vestibulum quis nunc ac, mollis dictum nisi. Cras ut mollis elit. Maecenas ultrices ligula at risus faucibus scelerisque. Etiam vitae porttitor purus. Curabitur blandit lectus urna, ut hendrerit tortor feugiat ut. - -Phasellus fringilla, sapien pellentesque commodo pharetra, ante libero aliquam tellus, ut consectetur augue libero a sapien. Maecenas blandit luctus nisl eget aliquet. Maecenas vitae porta dolor, faucibus laoreet sapien. Suspendisse lobortis, ipsum sed vehicula aliquam, elit purus scelerisque dui, rutrum consectetur diam odio et lorem. In nec lacinia metus. Donec viverra libero est, vel bibendum erat condimentum quis. Donec feugiat purus leo. In laoreet vitae felis a porttitor. Mauris ullamcorper, lacus id condimentum suscipit, neque magna pellentesque arcu, eget cursus neque tellus id metus. Curabitur volutpat ac orci vel ultricies. - -Sed ut finibus erat. Sed diam purus, varius non tincidunt quis, ultrices sit amet ipsum. Donec et egestas nulla. Suspendisse placerat nisi at dui laoreet iaculis. Aliquam aliquet leo at augue faucibus molestie. Nullam lacus augue, hendrerit sed nisi eu, faucibus porta est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ut leo aliquet sem fermentum rutrum quis ac justo. Integer placerat aliquam nisl ut sagittis. Proin erat orci, lobortis et sem eget, eleifend fringilla augue. Mauris varius laoreet arcu, sed tincidunt felis. Pellentesque venenatis lorem odio, id pulvinar velit molestie feugiat. Donec mattis lacus sed eleifend pulvinar. - -Sed condimentum ex in tincidunt hendrerit. Etiam eget risus lacinia, euismod nibh eu, pellentesque quam. Proin elit eros, convallis id mauris ac, bibendum ultrices lectus. Morbi venenatis, purus id fermentum consequat, nunc libero tincidunt ligula, non dictum ligula orci nec quam. Nulla nec ultrices lorem. Aenean maximus augue vel dictum pharetra. Etiam turpis urna, pellentesque quis malesuada eu, molestie faucibus felis. - -Vestibulum pharetra augue ut quam blandit congue in nec risus. Proin eu nibh eu dui eleifend porta vitae id lectus. Proin lacus nibh, lobortis sed ligula vitae, interdum lobortis erat. Suspendisse potenti. In sollicitudin quis sapien ut aliquet. Mauris ac nulla arcu. Fusce tristique justo quis lectus mollis, eu volutpat lectus finibus. Vivamus venenatis facilisis ex ut vestibulum. - -Etiam varius lobortis purus, in hendrerit elit tristique at. In tempus, augue vestibulum fermentum gravida, ligula tellus vulputate arcu, eu molestie ex sapien at purus. Vestibulum nec egestas metus. Duis pulvinar quam nec consequat interdum. Aenean non dapibus lacus. Aliquam sit amet aliquet nulla. Sed venenatis volutpat purus nec convallis. Phasellus aliquet semper sodales. Cras risus sapien, condimentum auctor urna a, pulvinar ornare nisl. Sed tincidunt felis elit, ut elementum est bibendum ac. Morbi interdum justo vel dui faucibus condimentum. - -Sed convallis eu sem at tincidunt. Nullam at auctor est, et ullamcorper ipsum. Pellentesque eget ante ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer euismod, sapien sed dapibus ornare, nibh enim maximus lacus, lacinia placerat urna quam quis felis. Morbi accumsan id nisl ut condimentum. Donec bibendum nisi est, sed volutpat lorem rhoncus in. Vestibulum ac lacinia nunc, eget volutpat magna. Integer aliquam pharetra ipsum, id placerat nunc volutpat quis. Etiam urna diam, rhoncus sit amet varius vel, euismod vel sem. Nullam vel molestie urna. Vivamus ornare erat at venenatis euismod. Suspendisse potenti. Fusce diam justo, tincidunt vel sem at, commodo faucibus nisl. Duis gravida efficitur diam, vel sagittis erat pulvinar ut. - -Quisque vel pharetra felis. Duis efficitur tortor dolor, vitae porttitor erat fermentum sed. Sed eu mi purus. Etiam dignissim tortor eu tempus molestie. Aenean pretium erat enim, in hendrerit ante hendrerit at. Sed ut risus vel nunc venenatis ultricies quis in lacus. Pellentesque vitae purus euismod, placerat risus non, ullamcorper augue. Quisque varius quam ligula, nec aliquet ex faucibus vitae. Quisque rhoncus sit amet leo tincidunt mattis. Cras id mauris eget purus pretium gravida sit amet eu augue. Aliquam dapibus odio augue, id lacinia velit pulvinar eu. - -Mauris fringilla, tellus nec pharetra iaculis, neque nisi ultrices massa, et tincidunt sem dui sed mi. Curabitur erat lorem, venenatis quis tempus lacinia, tempus sit amet nunc. Aliquam at neque ac metus commodo dictum quis vitae justo. Phasellus eget lacus tempus, blandit lorem vel, rutrum est. Aenean pharetra sem ut augue lobortis dignissim. Sed rhoncus at nulla id ultrices. Cras id condimentum felis. In suscipit luctus vulputate. Donec tincidunt lacus nec enim tincidunt sollicitudin ut quis enim. Nam at libero urna. Praesent sit amet massa vitae massa ullamcorper vehicula. - -Nullam bibendum augue ut turpis condimentum bibendum. Proin sit amet urna hendrerit, sodales tortor a, lobortis lectus. Integer sagittis velit turpis, et tincidunt nisi commodo eget. Duis tincidunt elit finibus accumsan cursus. Aenean dignissim scelerisque felis vel lacinia. Nunc lacinia maximus luctus. In hac habitasse platea dictumst. Vestibulum eget urna et enim tempor tempor. Nam feugiat, felis vel vestibulum tempus, orci justo viverra diam, id dapibus lorem justo in ligula. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ac pellentesque sem. Vestibulum lacinia magna dui, eu lacinia augue placerat et. Maecenas pulvinar congue est. Pellentesque commodo dui non pulvinar scelerisque. Etiam interdum est posuere sem bibendum, ac commodo magna dictum. Cras ipsum turpis, rhoncus nec posuere vitae, laoreet a arcu. Integer ac massa sit amet enim placerat lacinia sed ultrices arcu. Suspendisse sem nibh, luctus sit amet volutpat in, pellentesque eu metus. Ut gravida neque eget mi accumsan tempus. Nam sit amet aliquet nibh. - -Pellentesque a purus cursus nulla hendrerit congue quis et odio. Aenean hendrerit, leo ullamcorper sagittis hendrerit, erat dui molestie quam, sed condimentum lacus risus sed tellus. Morbi a dapibus lectus, ut feugiat ex. Phasellus pretium quam et sapien mollis, vel iaculis dui dignissim. Sed ullamcorper est turpis, a viverra lorem consectetur in. Aenean aliquet nibh non cursus rutrum. Suspendisse at tristique urna, id lobortis urna. In hac habitasse platea dictumst. Phasellus libero velit, rutrum sed tellus nec, dapibus tincidunt ligula. Quisque vel dui venenatis, consequat nisl ut, lacinia ipsum. Phasellus vitae magna pellentesque, lobortis est id, faucibus quam. Nam eleifend faucibus dui vel pellentesque. - -Etiam ut est non lacus tincidunt interdum. Maecenas sed massa urna. Quisque ut nibh tortor. Pellentesque felis ipsum, tempor finibus ipsum et, euismod pretium metus. Donec sit amet est ipsum. Quisque rhoncus justo non finibus elementum. Nulla nec lectus ac tortor placerat fringilla. Phasellus ac ultrices nunc, eu efficitur nisl. Nulla rhoncus nunc vitae ante dictum tincidunt. Nunc ultrices, massa sit amet malesuada dignissim, lectus lacus consequat sapien, non eleifend metus sem in eros. Phasellus mauris ante, dictum sit amet suscipit ac, rhoncus eget nisi. Phasellus at orci mollis, imperdiet neque eget, faucibus nulla. In at purus massa. Pellentesque quis rutrum lectus. - -Integer eu faucibus turpis, sit amet mollis massa. Vestibulum id nulla commodo, rutrum ipsum sed, semper ante. Phasellus condimentum orci nec nibh convallis, ac maximus orci ullamcorper. Maecenas vitae sollicitudin mi. Integer et finibus lectus, et condimentum ligula. Donec elementum tristique quam vitae dapibus. Morbi euismod ipsum in tristique ullamcorper. - -Duis fermentum non enim eu auctor. Quisque lacinia nibh vehicula nibh posuere, eu volutpat turpis facilisis. Ut ac faucibus nulla. Sed eleifend quis ex et pellentesque. Vestibulum sollicitudin in libero id fringilla. Phasellus dignissim purus consequat, condimentum dui sit amet, condimentum ante. Pellentesque ac consectetur massa, quis sagittis est. Nulla maximus tristique risus accumsan convallis. Curabitur imperdiet ac lacus a ultrices. Nulla facilisi. Sed quis quam quis lectus placerat lobortis vel sed turpis. In mollis dui id neque iaculis, ut aliquet tellus malesuada. Proin at luctus odio, vel blandit sapien. Praesent dignissim tortor vehicula libero fringilla, nec ultrices erat suscipit. Maecenas scelerisque purus in dapibus fermentum. - -Curabitur magna odio, mattis in tortor ut, porttitor congue est. Vestibulum mollis lacinia elementum. Fusce maximus erat vitae nunc rutrum lobortis. Integer ligula eros, auctor vel elit non, posuere luctus lacus. Maecenas quis auctor massa. Ut ipsum lacus, efficitur posuere euismod et, hendrerit efficitur est. Phasellus fringilla, quam id tincidunt pretium, nunc dui sollicitudin orci, eu dignissim nisi metus ut magna. Integer lobortis interdum dolor, non bibendum purus posuere et. Donec non lectus aliquet, pretium dolor eu, cursus massa. Sed ut dui sapien. In sed vestibulum massa. Pellentesque blandit, dui non sodales vehicula, orci metus mollis nunc, non pharetra ex tellus ac est. Mauris sagittis metus et fermentum pretium. Nulla facilisi. Quisque quis ante ut nulla placerat mattis ut quis nisi. - -Sed quis nulla ligula. Quisque dignissim ligula urna, sed aliquam purus semper at. Suspendisse potenti. Nunc massa lectus, pharetra vehicula arcu bibendum, imperdiet sodales ipsum. Nam ac sapien diam. Mauris iaculis fringilla mattis. Pellentesque tempus eros sit amet justo volutpat mollis. Phasellus ac turpis ipsum. Morbi vel ante elit. Aenean posuere quam consequat velit varius suscipit. Donec tempor quam ut nibh cursus efficitur. - -Morbi molestie dolor nec sem egestas suscipit. Etiam placerat pharetra lectus, et ullamcorper risus tristique in. Sed faucibus ullamcorper lectus eget fringilla. Maecenas malesuada hendrerit congue. Sed eget neque a erat placerat tincidunt. Aliquam vitae dignissim turpis. Fusce at placerat magna, a laoreet lectus. Maecenas a purus nec diam gravida fringilla. Nam malesuada euismod ante non vehicula. In faucibus bibendum leo, faucibus posuere nisl pretium quis. Fusce finibus bibendum finibus. Vestibulum eu justo maximus, hendrerit diam nec, dignissim sapien. Aenean dolor lacus, malesuada quis vestibulum ac, venenatis ac ipsum. Cras a est id nunc finibus facilisis. Cras lacinia neque et interdum vehicula. Suspendisse vulputate tellus elit, eget tempor dui finibus vel. - -Cras sed pretium odio. Proin hendrerit elementum felis in tincidunt. Nam sed turpis vel justo molestie accumsan condimentum eu nunc. Praesent lobortis euismod rhoncus. Nulla vitae euismod nibh, quis mattis mi. Fusce ultrices placerat porttitor. Duis sem ipsum, pellentesque sit amet odio a, molestie vulputate mauris. - -Duis blandit mollis ligula, sit amet mattis ligula finibus sit amet. Nunc a leo molestie, placerat diam et, vestibulum leo. Suspendisse facilisis neque purus, nec pellentesque ligula fermentum nec. Aenean malesuada mauris lorem, eu blandit arcu pulvinar quis. Duis laoreet urna lacus, non maximus arcu rutrum ultricies. Nulla augue dolor, suscipit eu mollis eu, aliquam condimentum diam. Ut semper orci luctus, pharetra turpis at, euismod mi. Nulla leo diam, finibus sit amet purus sed, maximus dictum lorem. Integer eu mi id turpis laoreet rhoncus. - -Integer a mauris tincidunt, finibus orci ut, pretium mauris. Nulla molestie nunc mi, id finibus lorem elementum sed. Proin quis laoreet ante. Integer nulla augue, commodo id molestie quis, rutrum ut turpis. Suspendisse et tortor turpis. Sed ut pharetra massa. Pellentesque elementum blandit sem, ut elementum tellus egestas a. Fusce eu purus nibh. - -Cras dignissim ligula scelerisque magna faucibus ullamcorper. Proin at condimentum risus, auctor malesuada quam. Nullam interdum interdum egestas. Nulla aliquam nisi vitae felis mollis dictum. Suspendisse dapibus consectetur tortor. Ut ut nisi non sem bibendum tincidunt. Vivamus suscipit leo quis gravida dignissim. - -Aliquam interdum, leo id vehicula mollis, eros eros rhoncus diam, non mollis ligula mi eu mauris. Sed ultrices vel velit sollicitudin tincidunt. Nunc auctor metus at ligula gravida elementum. Praesent interdum eu elit et mollis. Duis egestas quam sit amet velit dignissim consequat. Aliquam ac turpis nec nunc convallis sagittis. Fusce blandit, erat ac fringilla consectetur, dolor eros sodales leo, vel aliquet risus nisl et diam. Aliquam luctus felis vitae est eleifend euismod facilisis et lacus. Sed leo tellus, auctor eu arcu in, volutpat sagittis nisl. Pellentesque nisl ligula, placerat vel ullamcorper at, vulputate ac odio. Morbi ac faucibus orci, et tempus nulla. Proin rhoncus rutrum dolor, in venenatis mauris. Suspendisse a fermentum augue, non semper mi. Nunc eget pretium neque. Phasellus augue erat, feugiat ac aliquam congue, rutrum non sapien. Pellentesque ac diam gravida, consectetur felis at, ornare neque. - -Nullam interdum mattis sapien quis porttitor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus aliquet rutrum ipsum id euismod. Maecenas consectetur massa et mi porta viverra. Nunc quam nibh, dignissim vitae maximus et, ullamcorper nec lorem. Nunc vitae justo dapibus, luctus lacus vitae, pretium elit. Maecenas et efficitur leo. Curabitur mauris lectus, placerat quis vehicula vitae, auctor ut urna. Quisque rhoncus pharetra luctus. In hac habitasse platea dictumst. Integer sit amet metus nec eros malesuada aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi hendrerit mi ac leo aliquam, sit amet ultricies libero commodo. Mauris dapibus purus metus, sit amet viverra nibh imperdiet et. Nullam porta nulla tellus, quis vehicula diam imperdiet non. Vivamus enim massa, bibendum in fermentum in, ultrices at ex. - -Suspendisse fermentum id nibh eget accumsan. Duis dapibus bibendum erat ut sollicitudin. Aliquam nec felis risus. Pellentesque rhoncus ligula id sem maximus mollis sed nec massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ipsum ipsum, sodales sed enim id, convallis faucibus eros. Donec ultricies dictum tincidunt. Cras vitae nibh arcu. Pellentesque cursus, sapien nec consequat fermentum, ipsum ante suscipit dui, imperdiet hendrerit est nisl eu massa. Quisque vitae sem ligula. Aenean iaculis metus ut mauris interdum laoreet. Vivamus sed gravida dolor. - -Morbi nulla metus, porttitor sed eros sit amet, efficitur efficitur est. In vel nisl urna. Ut aliquet tellus at congue convallis. Phasellus imperdiet lobortis sollicitudin. Integer sodales, sem eu ultricies pharetra, erat erat porttitor odio, eget dapibus libero ipsum eget velit. Phasellus gravida nulla nisl, eu pharetra mi auctor vel. Sed blandit pharetra velit, ut egestas libero placerat non. Aliquam a interdum quam. Proin at tortor nec dui sollicitudin tempus sed vestibulum elit. Nunc non sollicitudin velit. - -Aenean consequat diam velit, sed rutrum tortor faucibus dictum. Quisque at semper augue. Duis ut est eget mi ornare bibendum id et ligula. Phasellus consequat tortor non leo pulvinar posuere. Proin vestibulum eleifend felis, in hendrerit tortor sollicitudin eu. Phasellus hendrerit, lacus vel laoreet interdum, dui tortor consequat justo, commodo ultricies arcu felis vitae enim. Vivamus eu sapien at leo suscipit rutrum eu at justo. Aenean et dolor a libero ullamcorper posuere. Integer laoreet placerat nisi in vulputate. Mauris laoreet eget risus sed cursus. Donec scelerisque neque a libero eleifend hendrerit. Nulla varius condimentum nunc sit amet fermentum. Aliquam lorem ex, varius nec mollis ut, ultrices in neque. Morbi sit amet porta leo. Integer iaculis fermentum lacus in vestibulum. - -Ut gravida, tellus ut maximus ultrices, erat est venenatis nisl, vitae pretium massa ex ac magna. Sed non purus eget ligula aliquet volutpat non quis arcu. Nam aliquam tincidunt risus, sit amet fringilla sapien vulputate ut. Mauris luctus suscipit pellentesque. Nunc porttitor dapibus ex quis tempus. Ut ullamcorper metus a eros vulputate, vitae viverra lectus convallis. Mauris semper imperdiet augue quis tincidunt. Integer porta pretium magna, sed cursus sem scelerisque sollicitudin. Nam efficitur, nibh pretium eleifend vestibulum, purus diam posuere sem, in egestas mauris augue sit amet urna. - -Vestibulum tincidunt euismod massa in congue. Duis interdum metus non laoreet fringilla. Donec at ligula congue, tincidunt nunc non, scelerisque nunc. Donec bibendum magna non est scelerisque feugiat at nec neque. Ut orci tortor, tempus eget massa non, dignissim faucibus dolor. Nam odio risus, accumsan pretium neque eget, accumsan dignissim dui. In ut neque auctor, scelerisque tellus sed, ullamcorper nisi. Suspendisse varius cursus quam at hendrerit. Vivamus elit libero, sagittis vitae sem ac, vulputate iaculis ligula. - -Sed lobortis laoreet purus sit amet rutrum. Pellentesque feugiat non leo vel lacinia. Quisque feugiat nisl a orci bibendum vestibulum. In et sollicitudin urna. Morbi a arcu ac metus faucibus tempus. Nam eu imperdiet sapien, suscipit mattis tortor. Aenean blandit ipsum nisi, a eleifend ligula euismod at. Integer tincidunt pharetra felis, mollis placerat mauris hendrerit at. Curabitur convallis, est sit amet luctus volutpat, massa lacus cursus augue, sed eleifend magna quam et risus. Aliquam lobortis tincidunt metus vitae porttitor. Suspendisse potenti. Aenean ullamcorper, neque id commodo luctus, nulla nunc lobortis quam, id dapibus neque dui nec mauris. Etiam quis lorem quis elit commodo ornare. Ut pharetra purus ultricies enim ultrices efficitur. Proin vehicula tincidunt molestie. Mauris et placerat sem. - -Aliquam erat volutpat. Suspendisse velit turpis, posuere ac lacus eu, lacinia laoreet velit. Sed interdum felis neque, id blandit sem malesuada sit amet. Ut sagittis justo erat, efficitur semper orci tempor sed. Donec enim massa, posuere varius lectus egestas, pellentesque posuere mi. Cras tincidunt ut libero sed mattis. Suspendisse quis magna et tellus posuere interdum vel at purus. Pellentesque fringilla tristique neque, id aliquet tellus ultricies non. Duis ut tellus vel odio lobortis vulputate. - -Integer at magna ac erat convallis vestibulum. Sed lobortis porttitor mauris. Fusce varius lorem et volutpat pulvinar. Aenean ac vulputate lectus, vitae consequat velit. Suspendisse ex dui, varius ut risus ut, dictum scelerisque sem. Vivamus urna orci, volutpat ut convallis ac, venenatis vitae urna. In hac habitasse platea dictumst. Etiam eu purus arcu. Aenean vulputate leo urna, vel tristique dui sagittis euismod. Suspendisse non tellus efficitur ante rhoncus volutpat at et sapien. - -Sed dapibus accumsan porttitor. Phasellus facilisis lectus finibus ligula dignissim, id pulvinar lectus feugiat. Nullam egestas commodo nisi posuere aliquet. Morbi sit amet tortor sagittis, rutrum dui nec, dapibus sapien. Sed posuere tortor tortor, interdum auctor magna varius vitae. Vestibulum id sagittis augue. Curabitur fermentum arcu sem, eu condimentum quam rutrum non. Phasellus rutrum nibh quis lectus rhoncus pretium. Curabitur dictum interdum elit. Vestibulum maximus sodales imperdiet. Mauris auctor nec purus sed venenatis. In in urna purus. - -Duis placerat molestie suscipit. Morbi a elit id purus efficitur consequat. Nunc ac commodo turpis. Etiam sit amet lacus a ipsum tempus venenatis sed vel nibh. Duis elementum aliquam mi sed tristique. Morbi ligula tortor, semper ac est vel, lobortis maximus erat. Curabitur ipsum felis, laoreet vel condimentum eget, ullamcorper sit amet mauris. Nulla facilisi. Nam at purus sed mi egestas placerat vitae vel magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse at dignissim diam. Phasellus consectetur eget neque vel viverra. Donec sollicitudin mattis dolor vel malesuada. Vivamus vehicula leo neque, vitae fermentum leo posuere et. Praesent dui est, finibus sit amet tristique quis, pharetra vel nibh. - -Duis nulla leo, accumsan eu odio eget, sagittis semper orci. Quisque ullamcorper ligula quam, commodo porttitor mauris ullamcorper eu. Cras varius sagittis felis in aliquam. Duis sodales risus ac justo vehicula, nec mattis diam lacinia. Cras eget lectus ipsum. Ut commodo, enim vitae malesuada hendrerit, ex dolor egestas lectus, sit amet hendrerit metus diam nec est. Vestibulum tortor metus, lobortis sit amet ante eget, tempor molestie lacus. In molestie et urna et semper. Mauris mollis, sem non hendrerit condimentum, sapien nisi cursus est, non suscipit quam justo non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam enim est, porta ac feugiat vitae, rutrum in lorem. Duis vehicula tortor ut posuere maximus. - -Nullam vestibulum non tellus sed commodo. Quisque mattis elit sit amet sapien sollicitudin, ut condimentum nisl congue. Aenean sagittis massa vel elit faucibus fermentum. Donec tincidunt nisi nec nisl sodales pellentesque. Mauris congue congue ligula ut suscipit. Vivamus velit tortor, tempor et gravida eget, fermentum sit amet ante. Nullam fringilla, lorem at ultrices cursus, urna neque ornare dolor, eu lacinia orci enim sed nibh. Ut a ullamcorper lectus, id mattis purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus sollicitudin posuere. Nunc at augue lacus. Aenean efficitur leo sit amet lacinia efficitur. - -Quisque venenatis quam mi, in pharetra odio vulputate eu. In vel nisl pulvinar, pulvinar ligula ut, sodales risus. Sed efficitur lectus at vestibulum tincidunt. Vestibulum eu ullamcorper elit. Fusce vestibulum magna enim, et tempor lacus posuere vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer leo elit, luctus nec mattis sit amet, sollicitudin in turpis. - -Proin convallis venenatis leo, vitae tristique erat iaculis nec. Nulla facilisi. Duis porttitor, sapien et bibendum vulputate, sem libero sodales lacus, non malesuada felis erat ut libero. Nam non felis semper, finibus est a, mattis mauris. Praesent nec eros quam. Nulla hendrerit, augue consectetur eleifend ultricies, purus mi condimentum nulla, eget dapibus est nunc sed libero. Nullam elementum dui erat, vitae luctus libero sollicitudin et. Nulla odio magna, placerat in augue eu, dapibus imperdiet odio. Suspendisse imperdiet metus sit amet rhoncus dapibus. Cras at enim et urna vehicula cursus eu a mauris. Integer magna ante, eleifend ac placerat vitae, porta at nisi. Cras eget malesuada orci. Curabitur nunc est, vulputate id viverra et, dignissim sed odio. Curabitur non mattis sem. Sed bibendum, turpis vitae vehicula faucibus, nunc quam ultricies lectus, vitae viverra felis turpis at libero. - -Nullam ut egestas ligula. Proin hendrerit justo a lectus commodo venenatis. Nulla facilisi. Ut cursus lorem quis est bibendum condimentum. Aenean in tristique odio. Fusce tempor hendrerit ipsum. Curabitur mollis felis justo, quis dapibus erat auctor vel. Sed augue lectus, finibus ut urna quis, ullamcorper vestibulum dui. Etiam molestie aliquam tempor. Integer mattis sollicitudin erat, et tristique elit varius vel. Mauris a ex justo. - -Nam eros est, imperdiet non volutpat rutrum, pellentesque accumsan ligula. Duis sit amet turpis metus. Aenean in rhoncus metus, ac fringilla ex. Suspendisse condimentum egestas purus, ut pharetra odio vulputate vel. Duis tincidunt massa a placerat ultrices. Mauris ultricies nibh sit amet condimentum malesuada. Duis tincidunt id ipsum sed congue. - -Praesent eu ex augue. Nullam in porta ligula. In tincidunt accumsan arcu, in pellentesque magna tristique in. Mauris eleifend libero ac nisl viverra faucibus. Nam sollicitudin dolor in commodo hendrerit. Cras at orci metus. Ut quis laoreet orci. Vivamus ultrices leo pellentesque tempor aliquet. Maecenas ut eros vitae purus placerat vestibulum. Etiam vitae gravida dolor, quis rhoncus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. - -Suspendisse fringilla lacinia sagittis. Integer tincidunt consectetur tristique. Morbi non orci convallis, congue sapien quis, vulputate nunc. Donec a libero vel magna elementum facilisis non quis mi. Mauris posuere tellus non ipsum ultrices elementum. Vivamus massa velit, facilisis quis placerat aliquet, aliquet nec leo. Praesent a maximus sem. Sed neque elit, feugiat vel quam non, molestie sagittis nunc. Etiam luctus nunc ac mauris scelerisque, nec rhoncus lacus convallis. Nunc pharetra, nunc ac pulvinar aliquam, ex ipsum euismod augue, nec porttitor lacus turpis vitae neque. Fusce bibendum odio id tortor faucibus pellentesque. Sed ac porta nibh, eu gravida erat. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis ullamcorper felis. Nulla mattis sagittis ante ac tincidunt. Integer ac felis efficitur, viverra libero et, facilisis ligula. Suspendisse a metus a massa rhoncus posuere. Phasellus suscipit ligula ut lacus facilisis, ac pellentesque ex tempor. Quisque consectetur massa mi, ac molestie libero dictum quis. Proin porttitor ligula quis erat tincidunt venenatis. Proin congue nunc sed elit gravida, nec consectetur lectus sodales. Etiam tincidunt convallis ipsum at vestibulum. Quisque maximus enim et mauris porttitor, et molestie magna tristique. Morbi vitae metus elit. Maecenas sed volutpat turpis. Aliquam vitae dolor vestibulum, elementum purus eget, dapibus nibh. Nullam egestas dui ac rutrum semper. - -Etiam hendrerit est metus, et condimentum metus aliquam ac. Pellentesque id neque id ipsum rhoncus vulputate. Aliquam erat nisl, posuere sit amet ligula ac, fermentum blandit felis. Vivamus fermentum mi risus, non lacinia purus viverra id. Aenean ac sapien consequat, finibus mauris nec, porta sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis consectetur ex, dignissim bibendum nulla. Phasellus ac libero at quam vehicula euismod non eu leo. Phasellus a sapien augue. - -Maecenas ligula dui, bibendum vitae mauris et, auctor laoreet felis. Duis non libero a mi semper mattis. Quisque consequat luctus massa, quis tristique eros auctor feugiat. Maecenas sodales euismod neque vitae facilisis. Nullam laoreet imperdiet velit at pellentesque. Etiam massa odio, facilisis a consequat vitae, placerat vel magna. Nunc sagittis eros nec urna fringilla, pulvinar vestibulum nibh scelerisque. Sed magna metus, cursus eu consequat et, pharetra a est. Suspendisse elementum neque a dui malesuada lacinia. Donec sed ipsum volutpat, cursus urna id, ullamcorper arcu. Maecenas laoreet nisl eget velit egestas sollicitudin. Etiam nisl turpis, mollis id dignissim vitae, tristique vehicula ante. Maecenas eget placerat est, at rutrum augue. Vivamus faucibus lacinia ullamcorper. Sed pulvinar urna sodales ante sodales, at gravida leo dictum. - -Morbi maximus, quam a lobortis bibendum, enim felis varius elit, ac vehicula elit nisl ut lacus. Quisque ut arcu augue. Praesent id turpis quam. Sed sed arcu eros. Maecenas at cursus lorem, ac eleifend nisi. Fusce mattis felis at commodo pharetra. Praesent ac commodo ipsum. Quisque finibus et eros vitae tincidunt. In hac habitasse platea dictumst. Praesent purus ipsum, luctus lobortis ornare quis, auctor eget justo. Nam vel enim sollicitudin, faucibus tortor eu, sagittis eros. Ut nec consectetur erat. Donec ultricies malesuada ligula, a hendrerit sapien volutpat in. Maecenas sed enim vitae sapien pulvinar faucibus. - -Proin semper nunc nibh, non consequat neque ullamcorper vel. Maecenas lobortis sagittis blandit. Aenean et arcu ultricies turpis malesuada malesuada. Ut quam ex, laoreet ut blandit cursus, feugiat vitae dolor. Etiam ex lacus, scelerisque vel erat vel, efficitur tincidunt magna. Morbi tristique lacinia dolor, in egestas magna ultrices vitae. Integer ultrices leo ac tempus venenatis. Praesent ac porta tortor. Vivamus ornare blandit tristique. Nulla rutrum finibus pellentesque. In non dui elementum, fermentum ipsum vel, varius magna. Pellentesque euismod tortor risus, ac pellentesque nisl faucibus eget. - -Vivamus eu enim purus. Cras ultrices rutrum egestas. Sed mollis erat nibh, at posuere nisl luctus nec. Nunc vulputate, sapien id auctor molestie, nisi diam tristique ante, non convallis tellus nibh at orci. Morbi a posuere purus, in ullamcorper ligula. Etiam elementum sit amet dui imperdiet iaculis. Proin vitae tincidunt ipsum, sit amet placerat lectus. Curabitur commodo sapien quam, et accumsan lectus fringilla non. Nullam eget accumsan enim, ac pharetra mauris. Sed quis tristique velit, vitae commodo nisi. Duis turpis dui, maximus ut risus at, finibus consequat nunc. Maecenas sed est accumsan, aliquet diam in, facilisis risus. Curabitur vehicula rutrum auctor. Nam iaculis risus pulvinar maximus viverra. Nulla vel augue et ex sagittis blandit. - -Ut sem nulla, porta ac ante ac, posuere laoreet eros. Donec sodales posuere justo a auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras mollis at orci hendrerit porta. Nullam sodales tortor tortor, non lacinia diam finibus id. Duis libero orci, suscipit ac odio et, dictum consequat ipsum. Pellentesque eu ligula sagittis, volutpat eros at, lacinia lorem. Cras euismod tellus in iaculis tempor. Quisque accumsan, magna a congue venenatis, ante ipsum aliquam lectus, at egestas enim nunc at justo. Quisque sem purus, viverra ut tristique ut, maximus id enim. Etiam quis placerat sem. In sollicitudin, lacus eu rutrum mollis, nulla eros luctus elit, vel dapibus urna purus nec urna. Phasellus egestas massa quam, ac molestie erat hendrerit a. Praesent ultrices neque ut turpis molestie auctor. Etiam molestie placerat purus, et euismod erat aliquam in. Morbi id suscipit justo. - -Proin est ante, consequat at varius a, mattis quis felis. Sed accumsan nibh sit amet ipsum elementum posuere. Vestibulum bibendum id diam sit amet gravida. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi nec dolor vel ipsum dignissim hendrerit vel non ipsum. Praesent facilisis orci quis elit auctor lobortis. Phasellus cursus risus lectus, vel lobortis libero dapibus in. Quisque tristique tempus leo a pulvinar. Pellentesque a magna tincidunt, pellentesque massa nec, laoreet orci. Morbi congue ornare dolor quis commodo. Phasellus massa nisi, tincidunt at eros dictum, hendrerit lobortis urna. Maecenas porta, magna id mattis molestie, nibh tellus lobortis sem, eget tincidunt ipsum quam eu turpis. - -Ut gravida orci risus, vel rutrum mauris vehicula id. Etiam bibendum, neque a placerat condimentum, ex orci imperdiet lectus, quis dapibus arcu lacus eget lectus. Sed consequat non mi sit amet venenatis. Fusce vestibulum erat libero, eget hendrerit risus vulputate sollicitudin. Integer sed eleifend felis. Donec commodo, sem eu mattis placerat, urna odio aliquam tellus, et laoreet justo tellus eget erat. Fusce sed suscipit tortor. Nam hendrerit nibh ac nunc auctor lacinia. Pellentesque placerat condimentum ipsum, eget semper tortor hendrerit vel. Nullam non urna eu lacus pellentesque congue ut id eros. - -Nunc finibus leo in rhoncus tristique. Sed eu ipsum nec nisl egestas faucibus eget a felis. Pellentesque vitae nisi in nulla accumsan fermentum. Sed venenatis feugiat eleifend. Fusce porttitor varius placerat. Aliquam aliquet lacus sit amet mattis mollis. Sed vel nulla quis dolor suscipit vehicula ac viverra lorem. Duis viverra ipsum eget nulla ullamcorper fermentum. Mauris tincidunt arcu quis quam fringilla ornare. Donec et iaculis tortor. Nam ultricies libero vel ipsum aliquet efficitur. Morbi eget dolor aliquam, tempus sapien eget, viverra ante. Donec varius mollis ex, sed efficitur purus euismod interdum. Quisque vel sapien non neque tincidunt semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Suspendisse sit amet purus leo. Fusce lectus lorem, aliquam ac nulla eget, imperdiet ornare eros. Nullam sem augue, varius in nisi non, sollicitudin pellentesque ante. Etiam eu odio condimentum, tempor libero et, egestas arcu. Cras pellentesque eleifend aliquet. Pellentesque non blandit ligula. Ut congue viverra rhoncus. Phasellus mattis mi ac eros placerat, eu feugiat tellus ultrices. Aenean mollis laoreet libero eu imperdiet. Cras sed pulvinar mi, ac vehicula ligula. Vestibulum sit amet ex massa. In a egestas eros. - -Mauris pretium ipsum risus, venenatis cursus ante imperdiet id. Praesent eu turpis nec risus feugiat maximus ullamcorper ac lectus. Integer placerat at mi vel dapibus. Vestibulum fermentum turpis sit amet turpis viverra, id aliquet diam suscipit. Nam nec ex sed ante ullamcorper pharetra quis sit amet risus. Sed ac faucibus velit, id feugiat nibh. Nullam eget ipsum ex. Vivamus tincidunt non nunc non faucibus. Quisque bibendum viverra facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at nisi hendrerit quam suscipit egestas. Curabitur laoreet maximus ultricies. Duis ut tellus ac augue molestie dictum. - -Suspendisse rhoncus iaculis erat, ut ullamcorper est tristique eget. Donec auctor nec risus at gravida. Vivamus volutpat vulputate tellus, vel ultricies eros suscipit eget. Ut pulvinar id mi eu tempus. Morbi malesuada augue in dui varius, nec blandit neque vehicula. Donec ornare nec nisl in mollis. Morbi enim nisi, rhoncus nec est id, dapibus tempus urna. Ut id elit a felis vestibulum consectetur. Duis lectus quam, pharetra sit amet diam sed, posuere vestibulum erat. Fusce vitae maximus massa. Nullam id metus tempus, iaculis risus eu, lobortis urna. Quisque in congue urna. Pellentesque placerat neque in augue dapibus, non varius ex malesuada. Curabitur ut eleifend libero. Fusce vitae ligula luctus, fermentum enim vitae, ultrices erat. - -Sed viverra augue turpis, scelerisque egestas sapien mattis eu. Duis laoreet magna at ex pharetra dapibus. Praesent eget odio vel quam venenatis dictum. Nulla in sollicitudin dolor. Mauris lobortis nec eros vel rhoncus. Vestibulum porta viverra venenatis. Curabitur vel scelerisque quam, a egestas velit. Praesent volutpat tincidunt magna at laoreet. - -Cras nec lorem odio. Pellentesque quis dui urna. Praesent at tellus ac lectus scelerisque placerat nec eu risus. Vestibulum sit amet mattis ligula. Vivamus sed nisi at leo elementum accumsan at sit amet arcu. Aenean mattis tellus nec leo gravida, eget hendrerit nisl faucibus. Mauris pellentesque luctus condimentum. Maecenas pretium sapien nunc, eget commodo dolor maximus id. Mauris vestibulum accumsan massa a dictum. Phasellus interdum quam ligula, ut maximus diam blandit aliquam. Nunc vitae ex eu erat condimentum consectetur. Maecenas interdum condimentum volutpat. - -Donec et enim a libero rutrum laoreet. Praesent a condimentum sem, at tincidunt quam. In vel molestie risus. Sed urna dui, molestie vitae mollis laoreet, tempor quis lectus. Praesent vitae auctor est, et aliquet nunc. Curabitur vulputate blandit nulla, at gravida metus. Maecenas gravida dui eu iaculis tristique. Pellentesque posuere turpis nec auctor eleifend. Suspendisse bibendum diam eu tellus lobortis, et laoreet quam congue. In hac habitasse platea dictumst. Morbi dictum neque velit, eget rutrum eros ultrices sit amet. - -Phasellus fermentum risus pharetra consectetur bibendum. Donec magna tortor, lacinia vitae nibh quis, aliquet pretium lorem. Donec turpis nisi, pretium eu enim volutpat, mattis malesuada augue. Nullam vel tellus iaculis, sollicitudin elit eget, tincidunt lacus. Fusce elementum elementum felis et iaculis. Suspendisse porta eros nec neque malesuada, in malesuada ante sollicitudin. Vivamus bibendum viverra molestie. - -Integer feugiat, erat nec convallis aliquam, velit felis congue erat, molestie eleifend tellus erat in tellus. Nunc et justo purus. Donec egestas fermentum dui non feugiat. Quisque in sapien sagittis, gravida quam id, iaculis lectus. Cras sagittis rhoncus bibendum. Fusce quis metus in velit scelerisque tincidunt at non ipsum. Vivamus efficitur ante eu odio vulputate, vitae ultricies risus vehicula. Proin eget odio eu sem tincidunt feugiat vel id lorem. - -Vestibulum sit amet nulla dignissim, euismod mi in, fermentum tortor. Donec ut aliquet libero, lacinia accumsan velit. Donec et nulla quam. Nullam laoreet odio nec nunc imperdiet, a congue eros venenatis. Quisque nec tellus sit amet neque interdum posuere. Duis quis mi gravida, tincidunt diam convallis, ultricies augue. Mauris consequat risus non porttitor congue. Ut in ligula consequat, viverra nunc a, eleifend enim. Duis ligula urna, imperdiet nec facilisis et, ornare eu ex. Proin lobortis lectus a lobortis porttitor. Nulla leo metus, egestas eu libero sed, pretium faucibus felis. Vestibulum non sem tortor. Nam cursus est leo. Vivamus luctus enim odio, non interdum sem dapibus a. Aenean accumsan consequat lectus in imperdiet. - -Donec vehicula laoreet ipsum in posuere. Quisque vel quam imperdiet, sollicitudin nisi quis, suscipit velit. Morbi id sodales mauris. Curabitur tellus arcu, feugiat sed dui sit amet, sodales sagittis libero. Aenean vel suscipit metus, non placerat leo. Vestibulum quis nulla elit. Proin scelerisque non ante ut commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed non urna dolor. Suspendisse convallis mi porta pulvinar ultrices. Suspendisse quam ipsum, hendrerit non scelerisque molestie, interdum dictum nunc. Morbi condimentum condimentum turpis eu luctus. Pellentesque sagittis sollicitudin odio, sed ultricies felis ornare sit amet. Sed ultrices ex leo, a tincidunt nisl gravida sed. Nullam ornare accumsan porta. Praesent consectetur id est nec sollicitudin. - -In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed ultrices nibh. Duis accumsan suscipit eros, a dictum odio tempus sit amet. Aenean imperdiet erat ac lacus finibus, scelerisque cursus massa imperdiet. Mauris molestie risus ut lacinia posuere. Nulla et sodales purus. Maecenas orci erat, placerat in tristique quis, placerat in mi. - -Donec sollicitudin pellentesque odio in feugiat. Morbi eu dolor ut mauris congue sollicitudin. Aliquam erat volutpat. Nulla id varius dui. Curabitur finibus urna ante, consectetur interdum nisi volutpat a. Quisque quis mi tristique, consequat tellus eget, rutrum sapien. Vivamus vitae tellus vulputate, rutrum ex eu, vulputate sem. Suspendisse viverra lorem tellus, vel interdum orci gravida quis. Ut laoreet arcu at mi ullamcorper finibus. Duis porta sagittis vestibulum. Sed commodo nisl vitae urna sollicitudin, nec lacinia est sodales. Curabitur imperdiet sodales dui sed iaculis. Sed ac tellus maximus, eleifend quam sit amet, feugiat elit. Aenean viverra, dui at mattis varius, est odio vestibulum sapien, sit amet mollis libero massa nec velit. Etiam quis sodales justo. - -Ut ultricies, sem eget sodales feugiat, nunc arcu congue elit, ac tempor justo massa nec purus. Maecenas enim nunc, pharetra eget dictum sit amet, tempus pellentesque velit. Suspendisse venenatis ligula in nulla mattis, et imperdiet ex tincidunt. Etiam vulputate, tellus et ultrices suscipit, enim velit laoreet massa, vitae congue odio enim ac urna. Morbi quam lorem, iaculis ac varius sagittis, euismod quis dolor. In ut dui eu purus feugiat consectetur. Vestibulum cursus velit quis lacus pellentesque iaculis. Cras in risus sed mauris porta rutrum. Nulla facilisi. Nullam eu bibendum est, non pellentesque lectus. Sed imperdiet feugiat lorem, quis convallis ante auctor in. Maecenas justo magna, scelerisque sit amet tellus eget, varius elementum risus. Duis placerat et quam sed varius. - -Duis nec nibh vitae nibh dignissim mollis quis sed felis. Curabitur vitae quam placerat, venenatis purus ut, euismod nisl. Curabitur porttitor nibh eu pulvinar ullamcorper. Suspendisse posuere nec ipsum ac dapibus. Cras convallis consectetur urna. Phasellus a nibh in dolor lacinia posuere id eget augue. In eu pharetra lorem, vitae cursus lacus. Aliquam tincidunt nibh lectus. Aenean facilisis ultricies posuere. Sed ut placerat orci. Curabitur scelerisque gravida blandit. Maecenas placerat ligula eget suscipit fringilla. Mauris a tortor justo. Aliquam hendrerit semper mollis. Phasellus et tincidunt libero. Etiam vel quam libero. - -Quisque aliquet tempor ex. Ut ante sem, vehicula at enim vel, gravida porta elit. Etiam vitae lacus a neque lobortis consectetur. Mauris sed interdum odio. Mauris elementum ex blandit tempor cursus. Integer in enim in leo viverra elementum. Fusce consectetur metus et sem rutrum, mattis euismod diam semper. Nunc sed ipsum vel urna consequat vehicula. Donec cursus pretium lorem, vestibulum pretium felis commodo sit amet. Nam blandit felis enim, eget gravida ex faucibus a. In nec neque massa. Etiam laoreet posuere ipsum. Praesent volutpat nunc dolor, ac vulputate magna facilisis non. Aenean congue turpis vel lectus sollicitudin tristique. Sed nec consequat purus, non vehicula quam. Etiam ultricies, est ac dictum tincidunt, turpis turpis pretium massa, a vulputate libero justo at nibh. - -Aliquam erat volutpat. Cras ultrices augue ac sollicitudin lobortis. Curabitur et aliquet purus. Duis feugiat semper facilisis. Phasellus lobortis cursus velit, a sollicitudin tortor. Nam feugiat sapien non dapibus condimentum. Morbi at mi bibendum, commodo quam at, laoreet enim. Integer eu ultrices enim. Sed vestibulum eu urna ut dictum. Curabitur at mattis leo, sed cursus massa. Aliquam porttitor, felis quis fermentum porttitor, justo velit feugiat nulla, eget condimentum sem dui ut sapien. - -In fringilla elit eu orci aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eget fringilla tellus. Curabitur fermentum, mi et condimentum suscipit, elit neque bibendum dui, et hendrerit nunc metus id ipsum. Morbi placerat mi in hendrerit congue. Ut feugiat mauris eget scelerisque viverra. Vivamus sit amet erat dictum, sagittis lectus nec, pulvinar lorem. Sed non enim ac dui sollicitudin aliquet. Quisque ut lacus dolor. Fusce hendrerit malesuada euismod. Nulla faucibus vel mauris eu mollis. Mauris est diam, fringilla ac arcu feugiat, efficitur volutpat turpis. Aliquam venenatis cursus massa sed porttitor. Ut ac finibus enim, in tincidunt sapien. - -Nunc faucibus semper turpis a lacinia. Phasellus gravida, libero vel pulvinar ornare, ex sem tincidunt lectus, sit amet convallis augue risus at tortor. Quisque sit amet ipsum id nulla posuere vestibulum. Pellentesque scelerisque mauris vel leo viverra sodales. Nulla viverra aliquam ex, ut rutrum enim fermentum venenatis. Aenean eget dapibus ex, eget faucibus metus. Vestibulum volutpat leo in diam semper, eget porta magna suscipit. Sed sit amet nulla blandit, aliquam dolor ac, gravida velit. Sed vel velit viverra, maximus est id, convallis justo. - -Curabitur nulla ante, vulputate at libero vel, ullamcorper rutrum nibh. Pellentesque porttitor eu mauris id mattis. Duis vulputate augue elit, eget interdum justo pretium vel. Maecenas eu vulputate arcu, eget posuere purus. Suspendisse viverra a velit dictum eleifend. Suspendisse vitae dapibus diam. Donec vehicula justo in ante interdum, eu luctus diam placerat. Vivamus convallis ipsum eu orci suscipit, sed fermentum enim euismod. Maecenas faucibus elit vitae ex ornare tristique. Donec vestibulum nec elit sit amet porttitor. Aenean tempor lectus eget tortor hendrerit luctus. Nullam interdum vitae lectus vel feugiat. Cras in risus non magna consectetur lobortis. Sed faucibus enim quis gravida convallis. - -Phasellus eget massa sit amet libero ultrices suscipit. Vivamus at risus sapien. Nam mollis nunc eget velit dictum maximus. Sed pellentesque, nunc ac fringilla lacinia, quam enim mattis ex, sed euismod tortor metus eu neque. Ut mattis nisl ut lectus rhoncus, sodales bibendum eros porta. Nulla porttitor enim nec diam sagittis, eget porta velit efficitur. Vestibulum ultricies eros neque. Phasellus rutrum suscipit enim, in interdum ante gravida vitae. Sed in sagittis diam, non commodo velit. - -Morbi hendrerit odio orci, nec tincidunt odio rhoncus nec. Mauris neque velit, vehicula a lorem at, suscipit tristique dui. Sed finibus, nisl in mattis convallis, turpis neque sodales lacus, eu porta enim magna non diam. Nam commodo sodales risus consectetur malesuada. In eget elementum justo. Phasellus sit amet massa imperdiet, dapibus nunc sit amet, suscipit orci. Fusce condimentum laoreet feugiat. Ut ut viverra ante. Praesent bibendum interdum commodo. Nulla mollis nisi a est ornare volutpat. Sed at ligula eu nisi dapibus tempus. Proin cursus vestibulum justo, nec efficitur justo dignissim vel. Nunc quis maximus eros. - -Cras viverra, diam a tristique mattis, libero felis vulputate tellus, a ornare felis leo a dui. Nulla ante nulla, finibus ut tellus ut, blandit pharetra nibh. Proin eleifend fermentum ex, eget auctor libero vulputate in. Nullam ultricies, mauris placerat pretium placerat, leo urna lobortis leo, vel placerat arcu libero sed mauris. Aliquam mauris ligula, ornare at urna at, eleifend gravida ligula. Vestibulum consectetur ut nulla non scelerisque. Donec ornare, sem nec elementum aliquam, urna nulla bibendum metus, eu euismod dui ligula ac est. Fusce laoreet erat eu ex lobortis, quis bibendum ligula interdum. Sed vel mi erat. Vivamus id lacus ac enim mattis tempor. Nunc ultricies pellentesque enim sed euismod. Fusce tincidunt convallis elit quis aliquam. Mauris nulla ipsum, sollicitudin quis diam ac, feugiat volutpat tellus. In nibh nibh, vulputate quis tincidunt quis, pulvinar eget magna. Pellentesque quis finibus dolor. Suspendisse viverra vitae lectus non eleifend. - -Nunc ut orci et sapien maximus semper. Nulla dignissim sem urna, ac varius lectus ultricies id. Quisque aliquet pulvinar pretium. In ultricies molestie tellus vehicula porta. Nam enim lorem, aliquam eget ex et, hendrerit volutpat quam. Maecenas diam lacus, pellentesque eget tempus ac, pharetra eu elit. Donec vel eros a sem facilisis vulputate. Nullam ac nisi vulputate, laoreet nisl ac, eleifend sem. Nullam mi massa, rhoncus sed pharetra interdum, tincidunt eget nunc. Aliquam viverra mattis posuere. Mauris et dui sed nisl sollicitudin fermentum quis ut arcu. Nam placerat eget orci at tincidunt. Curabitur vel turpis metus. Phasellus nibh nulla, fermentum scelerisque sem vel, gravida tincidunt velit. Pellentesque vel quam tempor, finibus massa pellentesque, condimentum dui. - -Donec at mattis neque. Etiam velit diam, consequat auctor mauris id, hendrerit faucibus metus. Maecenas ullamcorper eros a est sodales, ac consectetur odio scelerisque. Donec leo metus, imperdiet at pellentesque vel, feugiat id erat. Suspendisse at magna enim. Vestibulum placerat sodales lorem id sollicitudin. Aenean at euismod ligula, eget mollis diam. Phasellus pulvinar, orci nec pretium condimentum, est erat facilisis purus, quis feugiat augue elit aliquam nulla. Aenean vitae tortor id risus congue tincidunt. Sed dolor enim, mattis a ullamcorper id, volutpat ac leo. - -Proin vehicula feugiat augue, id feugiat quam sodales quis. Donec et ultricies massa, a lacinia nulla. Duis aliquam augue ornare euismod viverra. Ut lectus risus, rutrum sit amet efficitur a, luctus nec nisl. Cras volutpat ullamcorper congue. Sed vitae odio metus. Phasellus aliquet euismod varius. - -Nullam sem ex, malesuada ut magna ut, pretium mollis arcu. Nam porttitor eros cursus mi lacinia faucibus. Suspendisse aliquet eleifend iaculis. Maecenas sit amet viverra tortor. Nunc a mollis risus. Etiam tempus dolor in tortor malesuada mattis. Ut tincidunt venenatis est sit amet dignissim. Vestibulum massa enim, tristique sed scelerisque eu, fringilla ac velit. Donec efficitur quis urna sit amet malesuada. Vestibulum consequat ac ligula in dapibus. Maecenas massa massa, molestie non posuere nec, elementum ut magna. In nisi erat, mollis non venenatis eu, faucibus in justo. Morbi gravida non ex non egestas. Pellentesque finibus laoreet diam, eu commodo augue congue vitae. - -Aenean sem mi, ullamcorper dapibus lobortis vitae, interdum tincidunt tortor. Vivamus eget vulputate libero. Ut bibendum posuere lectus, vel tincidunt tortor aliquet at. Phasellus malesuada orci et bibendum accumsan. Aliquam quis libero vel leo mollis porta. Sed sagittis leo ac lacus dictum, ac malesuada elit finibus. Suspendisse pharetra luctus commodo. Vivamus ultricies a odio non interdum. Vivamus scelerisque tincidunt turpis quis tempor. Pellentesque tortor ligula, varius non nunc eu, blandit sollicitudin neque. Nunc imperdiet, diam et tristique luctus, ipsum ex condimentum nunc, sit amet aliquam justo velit sed libero. Duis vel suscipit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tincidunt neque vel massa ultricies, id dictum leo consequat. Curabitur lobortis ultricies tellus, eget mattis nisl aliquam sit amet. - -Proin at suscipit justo. Vivamus ut vestibulum nisl. Pellentesque enim odio, pharetra non magna sed, efficitur auctor magna. Praesent tincidunt ante quis ante hendrerit viverra. Pellentesque vel ipsum id magna vulputate efficitur. Sed nec neque accumsan, pulvinar sapien quis, euismod mauris. Donec condimentum laoreet sapien quis gravida. Quisque sed mattis purus. Vestibulum placerat vel neque maximus scelerisque. - -Vestibulum mattis quam quis efficitur elementum. Duis dictum dolor ac scelerisque commodo. Fusce sollicitudin nisi sit amet dictum placerat. Suspendisse euismod pharetra eleifend. In eros nisl, porttitor sed mauris at, consectetur aliquet mauris. Donec euismod viverra neque sed fermentum. Phasellus libero magna, accumsan ut ultricies vitae, dignissim eget metus. Donec tellus turpis, interdum eget maximus nec, hendrerit eget massa. Curabitur auctor ligula in iaculis auctor. In ultrices quam suscipit cursus finibus. Aenean id mi at dolor interdum iaculis vitae ut lorem. Nullam sed nibh fringilla, lacinia odio nec, placerat erat. In dui libero, viverra ac viverra ac, pellentesque sit amet turpis. - -Nulla in enim ex. Sed feugiat est et consectetur venenatis. Cras varius facilisis dui vel convallis. Vestibulum et elit eget tellus feugiat pellentesque. In ut ante eu purus aliquet posuere. Nulla nec ornare sem, sed luctus lorem. Nam varius iaculis odio, eget faucibus nisl ullamcorper in. Sed eget cursus felis, nec efficitur nisi. - -Vivamus commodo et sem quis pulvinar. Pellentesque libero ante, venenatis vitae ligula sit amet, ornare sollicitudin nulla. Mauris eget tellus hendrerit, pulvinar metus quis, tempor nisi. Proin magna ex, laoreet sed tortor quis, varius fermentum enim. Integer eu dolor dictum, vulputate tortor et, aliquet ligula. Vestibulum vitae justo id mauris luctus sollicitudin. Suspendisse eget auctor neque, sodales egestas lorem. Vestibulum lacinia egestas metus vitae euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ex tellus, volutpat nec pulvinar sit amet, condimentum vitae dui. Curabitur vel felis sodales, lacinia nunc iaculis, ullamcorper augue. Pellentesque consequat dolor quis eros efficitur malesuada. Nulla ut malesuada lectus. - -Morbi et tristique ante. Aliquam erat volutpat. Vivamus vitae dui nec turpis pellentesque fermentum. Quisque eget velit massa. Pellentesque tristique aliquam nisl, eu sollicitudin justo venenatis sed. Duis eleifend sem eros, ut aliquam libero porttitor id. Sed non nunc consequat, rhoncus diam eu, commodo erat. Praesent fermentum in lectus id blandit. Donec quis ipsum at justo volutpat finibus. Nulla blandit justo nulla, at mollis lacus consequat eget. Aenean sollicitudin quis eros ut ullamcorper. - -Pellentesque venenatis nulla ut mi aliquet feugiat. Cras semper vel magna nec pharetra. Integer mattis felis et sapien commodo imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis quis luctus felis. Vestibulum justo nibh, aliquam non lectus vitae, molestie placerat justo. Donec lorem nibh, gravida sit amet hendrerit ac, maximus id ipsum. Nunc ac libero sodales risus eleifend sagittis. Phasellus est massa, lobortis elementum ex sed, scelerisque consectetur neque. Nunc faucibus neque id lorem malesuada, eget convallis ex mattis. - -Sed turpis tortor, fermentum non turpis id, posuere varius nibh. Donec iaculis lorem dui. Etiam eros ante, sodales eget venenatis at, consectetur eget risus. Curabitur non aliquam ante, a pretium justo. Maecenas tempor nisl tortor, vitae dictum nisi ultrices eu. Duis eget dui ultrices, porttitor lacus sed, lobortis purus. Quisque mattis elit nec neque sagittis, sed commodo leo blandit. Mauris sodales interdum eleifend. Vestibulum condimentum consectetur augue, id luctus diam convallis et. - -Nunc suscipit risus in justo accumsan, a placerat magna tincidunt. Proin a nisl ipsum. Sed libero dui, tristique in augue quis, auctor tristique risus. Sed porttitor ex augue, eu porta augue molestie a. Duis rhoncus purus libero, eu tempus turpis condimentum at. Sed mollis nisi id lectus placerat tincidunt. Maecenas non scelerisque elit, quis rutrum orci. Donec in tellus pharetra urna ornare lobortis. Phasellus id risus at nisi varius rutrum eu ut turpis. - -Duis dictum justo quis nisl porta, eget tincidunt magna suscipit. Sed velit massa, ullamcorper eu sodales ac, pretium a massa. Duis et rutrum tortor. Nulla accumsan hendrerit sapien, cursus volutpat eros egestas eget. Donec sollicitudin at ante quis sollicitudin. Aenean blandit feugiat diam, id feugiat eros faucibus eget. Donec viverra dolor vel justo scelerisque dignissim. Nulla semper sem nunc, rhoncus semper tellus ultricies sed. Duis in ornare diam. Donec vehicula feugiat varius. Maecenas ut suscipit est. Vivamus sem sem, finibus at dolor sit amet, euismod dapibus ligula. Vestibulum fringilla odio dapibus, congue massa eget, congue sem. Donec feugiat magna eget tortor lacinia scelerisque non et ipsum. - -Suspendisse potenti. Nunc convallis sollicitudin ex eget venenatis. Sed iaculis nibh ex, vel ornare ligula congue dignissim. Quisque sollicitudin dolor ac dui vestibulum, sit amet molestie nisi aliquet. Donec at risus felis. Aenean sollicitudin metus a feugiat porta. Aenean a tortor ut dolor cursus sagittis. Vivamus consectetur porttitor nunc in facilisis. Proin sit amet mi vel lectus consectetur ultrices. - -Sed cursus lectus vitae nunc tristique, nec commodo turpis dapibus. Pellentesque luctus ex id facilisis ornare. Morbi quis placerat dolor. Donec in lectus in arcu mattis porttitor ac sit amet metus. Cras congue mauris non risus sodales, vitae feugiat ipsum bibendum. Nulla venenatis urna sed libero elementum, a cursus lorem commodo. Mauris faucibus lobortis eros nec commodo. - -Nullam suscipit ligula ullamcorper lorem commodo blandit. Nulla porta nibh quis pulvinar placerat. Vivamus eu arcu justo. Vestibulum imperdiet est ut fermentum porttitor. Pellentesque consectetur libero in sapien efficitur scelerisque. Curabitur ac erat sit amet odio aliquet dignissim. Pellentesque mi sem, rhoncus et luctus at, porttitor rutrum lectus. Vestibulum sollicitudin sollicitudin suscipit. Aenean efficitur dolor non ultrices imperdiet. Donec vel sem ex. - -Sed convallis mauris aliquam rutrum cursus. Ut tempor porttitor sodales. Etiam eu risus ac augue gravida egestas et eu dolor. Proin id magna ex. Suspendisse quis lectus quis lorem ultricies tempus. Donec porttitor velit vitae tincidunt faucibus. Aliquam vitae semper nisi. Morbi ultrices, leo non pretium dapibus, dui libero pellentesque ex, vel placerat enim ante vitae dui. Nunc varius, sem sit amet sagittis lobortis, lectus odio scelerisque mauris, ut vestibulum orci magna quis neque. Sed id congue justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris congue nisi est, malesuada mollis elit tincidunt sed. Curabitur sed ex sit amet felis tristique elementum vitae vel nibh. - -Etiam mollis pretium lobortis. Mauris augue lacus, efficitur at lacus sed, mollis tincidunt lectus. Aliquam erat volutpat. Donec at euismod elit, et mattis felis. Sed id lobortis urna. Morbi imperdiet vestibulum leo, sed maximus leo blandit eu. Aliquam semper lorem neque, nec euismod turpis mattis mollis. Quisque lobortis urna ultrices odio pretium, ac venenatis orci faucibus. Suspendisse bibendum odio ligula, sed lobortis massa pharetra nec. Donec turpis justo, iaculis at dictum ac, finibus eu libero. Maecenas quis porttitor mi, sit amet aliquet neque. - -Vivamus auctor vulputate ante, at egestas lorem. Donec eu risus in nulla mollis ultricies at et urna. Duis accumsan porta egestas. Ut vel euismod augue. Fusce convallis nulla ante, nec fringilla velit aliquet at. Nam malesuada dapibus ligula, a aliquam nibh scelerisque ac. Praesent malesuada neque et pellentesque interdum. Curabitur volutpat at turpis vitae tristique. Vivamus porttitor semper congue. Quisque suscipit lacus mi, rhoncus ultrices tortor auctor quis. Maecenas neque neque, molestie ac facilisis eget, luctus ac lorem. In ut odio ut lacus suscipit pulvinar vitae sed elit. Nulla imperdiet, sem quis euismod sagittis, dui erat luctus dolor, faucibus faucibus erat sem eget nunc. Nam accumsan placerat malesuada. Maecenas convallis finibus pulvinar. - -Cras at placerat tortor. Morbi facilisis auctor felis sit amet molestie. Donec sodales sed lorem vitae suscipit. Etiam fermentum pharetra ipsum, nec luctus orci gravida eu. Pellentesque gravida, est non condimentum tempus, mauris ligula molestie est, in congue dolor nisl vel sapien. Duis congue tempor augue, id rutrum eros porta dapibus. Etiam rutrum eget est eget vestibulum. Aenean mollis arcu vel consequat varius. Praesent at condimentum felis. Duis nec interdum nisl. Donec commodo lorem sed sapien scelerisque malesuada non eu urna. In blandit non ipsum at porta. Nam lobortis leo vitae dui auctor, non feugiat quam bibendum. Donec auctor lectus sagittis laoreet maximus. Maecenas rhoncus laoreet porttitor. Vestibulum porttitor augue ut lectus hendrerit, eget posuere mi gravida. - -Sed mattis ex in erat pulvinar, eu imperdiet magna dapibus. Etiam nisi nibh, tempus non tellus sit amet, mattis tempor odio. Quisque nec lorem feugiat, lobortis odio et, commodo nunc. Maecenas semper purus nisi, nec vehicula nibh eleifend vitae. Nulla fermentum a lectus at maximus. Phasellus finibus metus non euismod ultrices. Etiam a pulvinar ante. Quisque convallis nec metus sit amet facilisis. Praesent laoreet massa et sollicitudin laoreet. Vestibulum in mauris aliquet, convallis mi ut, elementum purus. Nulla purus nulla, sodales at hendrerit quis, tempus sed lectus. - -Nam ut laoreet neque, ut maximus nibh. Maecenas quis justo pellentesque, sollicitudin elit at, venenatis velit. Aenean nunc velit, vehicula scelerisque odio at, consectetur laoreet purus. Duis dui purus, malesuada quis ipsum sit amet, tempor interdum libero. Curabitur porta scelerisque sapien, vitae cursus diam condimentum eu. Phasellus sed orci quam. Nullam vitae dui quis purus tincidunt vestibulum. Curabitur quis nulla porta, cursus arcu non, auctor enim. Etiam sollicitudin ex id sem vehicula mollis. Morbi viverra laoreet tincidunt. Praesent ut semper dui. Nam sit amet pretium neque. Mauris vitae luctus diam, in lacinia purus. Maecenas ut placerat justo, ut porta felis. Integer eu mauris ante. - -Aenean porttitor tellus diam, tempor consequat metus efficitur id. Suspendisse ut felis at erat tempor dictum at nec sapien. Sed vestibulum interdum felis, ac mattis mauris porta in. Nunc et condimentum massa. Sed cursus dictum justo et luctus. Integer convallis enim nisl, a rutrum lectus ultricies in. Donec dapibus lacus at nulla dapibus, id sollicitudin velit hendrerit. Fusce a magna at orci mollis rutrum ac a dolor. Aliquam erat volutpat. Morbi varius porta nunc, sit amet sodales ex hendrerit commodo. Donec tincidunt tortor sapien, vitae egestas sapien vehicula eget. - -Suspendisse potenti. Donec pulvinar felis nec leo malesuada interdum. Integer posuere placerat maximus. Donec nibh ipsum, tincidunt vitae luctus vitae, bibendum at leo. Sed cursus nisl ut ex faucibus aliquet sed nec eros. Curabitur molestie posuere felis. Integer faucibus velit eget consequat iaculis. Mauris sed vulputate odio. Phasellus maximus, elit a pharetra egestas, lorem magna semper tellus, vestibulum semper diam felis at sapien. Suspendisse facilisis, nisl sit amet euismod vehicula, libero nulla vehicula dolor, quis fermentum nibh elit sit amet diam. - -Morbi lorem enim, euismod eu varius ut, scelerisque quis odio. Nam tempus vitae eros id molestie. Nunc pretium in nulla eget accumsan. Quisque mattis est ut semper aliquet. Maecenas eget diam elementum, fermentum ipsum a, euismod sapien. Duis quam ligula, cursus et velit nec, ullamcorper tincidunt magna. Donec vulputate nisl est, et ullamcorper urna tempor sit amet. - -Proin lacinia dui non turpis congue pretium. Morbi posuere metus vel purus imperdiet interdum. Morbi venenatis vel eros non ultricies. Nulla vel semper elit. Ut quis purus tincidunt, auctor justo ut, faucibus turpis. Proin quis mattis erat, at faucibus ligula. Mauris in mauris enim. Donec facilisis enim at est feugiat hendrerit. Nam vel nisi lorem. Fusce ultricies convallis diam, in feugiat tortor luctus quis. Donec tempor, leo vitae volutpat aliquam, magna elit feugiat leo, quis placerat sapien felis eget arcu. Donec ornare fermentum eleifend. Integer a est orci. - -Proin rhoncus egestas leo. Nulla ultricies porta elit quis ornare. Nunc fermentum interdum vehicula. In in ligula lorem. Donec nec arcu sit amet orci lobortis iaculis. Mauris at mollis erat, sit amet mollis tortor. Mauris laoreet justo ullamcorper porttitor auctor. Aenean sit amet aliquam lectus, id fermentum eros. Praesent urna sem, vehicula ac fermentum id, dapibus ut purus. Vestibulum vitae tempus nunc. Donec at nunc ornare metus volutpat porta at eget magna. Donec varius aliquet metus, eu lobortis risus aliquam sed. Ut dapibus fermentum velit, ac tincidunt libero faucibus at. - -In in purus auctor, feugiat massa quis, facilisis nisi. Donec dolor purus, gravida eget dolor ac, porttitor imperdiet urna. Donec faucibus placerat erat, a sagittis ante finibus ac. Sed venenatis dignissim elit, in iaculis felis posuere faucibus. Praesent sed viverra dolor. Mauris sed nulla consectetur nunc laoreet molestie in ut metus. Proin ac ex sit amet magna vulputate hendrerit ac condimentum urna. Proin ligula metus, gravida et sollicitudin facilisis, iaculis ut odio. Cras tincidunt urna et augue varius, ut facilisis urna consequat. Aenean vehicula finibus quam. Ut iaculis eu diam ac mollis. Nam mi lorem, tristique eget varius at, sodales at urna. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vitae dictum erat, et auctor ipsum. Nullam nunc nunc, sollicitudin quis magna a, vestibulum fermentum mauris. Praesent at erat dolor. Proin laoreet tristique nulla vel efficitur. Nam sed ultrices nibh, id rutrum nunc. Curabitur eleifend a erat sit amet sollicitudin. Nullam metus quam, laoreet vitae dapibus id, placerat sed leo. Aliquam erat volutpat. Donec turpis nisl, cursus eu ex sit amet, lacinia pellentesque nisl. Sed id ipsum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec interdum scelerisque lorem eu mattis. - -Vivamus ac tristique massa, nec facilisis nisl. Nam ipsum neque, tincidunt vel urna in, cursus imperdiet enim. Nam pellentesque egestas tempus. Morbi facilisis imperdiet libero vitae fringilla. Nam lacinia ligula at sapien facilisis malesuada. Nullam accumsan pulvinar sem, et cursus libero porta sit amet. Curabitur vulputate erat elit, ut pulvinar erat maximus vel. - -Cras aliquet metus ut purus sagittis, vel venenatis ante consectetur. Pellentesque nulla lacus, viverra viverra mattis non, placerat vitae nibh. Donec enim turpis, accumsan sit amet tincidunt eu, imperdiet non metus. Morbi ipsum eros, tincidunt vel est ac, tristique porttitor nibh. Praesent ut ullamcorper mauris. Sed laoreet sit amet diam congue venenatis. Integer porta purus nec orci sagittis posuere. - -Donec vehicula mauris eget lacus mollis venenatis et sed nibh. Nam sodales ligula ipsum, scelerisque lacinia ligula sagittis in. Nam sit amet ipsum at erat malesuada congue. Aenean ut sollicitudin sapien. Etiam at tempor odio. Mauris vitae purus ut magna suscipit consequat. Vivamus quis sapien neque. Nulla vulputate sem sit amet massa pellentesque, eleifend tristique ligula egestas. Suspendisse tincidunt gravida mi, in pulvinar lectus egestas non. Aenean imperdiet ex sit amet nunc sollicitudin porta. Integer justo odio, ultricies at interdum in, rhoncus vitae sem. Sed porttitor arcu quis purus aliquet hendrerit. Praesent tempor tortor at dolor dictum pulvinar. Nulla aliquet nunc non ligula scelerisque accumsan. Donec nulla justo, congue vitae massa in, faucibus hendrerit magna. Donec non egestas purus. - -’†•¶abc Vivamus iaculis, lacus efficitur faucibus porta, dui nulla facilisis ligula, ut sodales odio nunc id sapien. Cras viverra auctor ipsum, dapibus mattis neque dictum sed. Sed convallis fermentum molestie. Nulla facilisi turpis duis. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf16be.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf16be.txt deleted file mode 100644 index 468eee80007..00000000000 Binary files a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf16be.txt and /dev/null differ diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf16le.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf16le.txt deleted file mode 100644 index b9a7dff430d..00000000000 Binary files a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf16le.txt and /dev/null differ diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf8bom.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf8bom.txt deleted file mode 100644 index edd30bae3c9..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/lorem_utf8bom.txt +++ /dev/null @@ -1,283 +0,0 @@ -öäüß Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vulputate, ipsum quis interdum fermentum, lorem sem fermentum eros, vitae auctor neque lacus in nisi. Suspendisse potenti. Maecenas et scelerisque elit, in tincidunt quam. Sed eu tincidunt quam. Nullam justo ex, imperdiet a imperdiet et, fermentum sit amet eros. Aenean quis tempus sem. Pellentesque accumsan magna mi, ut mollis velit sagittis id. Etiam quis ipsum orci. Fusce purus ante, accumsan a lobortis at, venenatis eu nisl. Praesent ornare sed ante placerat accumsan. Suspendisse tempus dignissim fermentum. Nunc a leo ac lacus sodales iaculis eu vitae mi. In feugiat ante at massa finibus cursus. Suspendisse posuere fringilla ornare. Mauris elementum ac quam id convallis. Vestibulum non elit quis urna volutpat aliquam a eu lacus. - -Aliquam vestibulum imperdiet neque, suscipit aliquam elit ultrices bibendum. Suspendisse ultrices pulvinar cursus. Morbi risus nisi, cursus consequat rutrum vitae, molestie sed dui. Fusce posuere, augue quis dignissim aliquam, nisi ipsum porttitor ante, quis fringilla nisl turpis ac nisi. Nulla varius enim eget lorem vehicula gravida. Donec finibus malesuada leo nec semper. Proin ac enim eros. Vivamus non tincidunt nisi, vel tristique lorem. - -Nunc consequat ex id eros dignissim, id rutrum risus laoreet. Sed euismod non erat eu ultricies. Etiam vehicula gravida lacus ut porta. Vestibulum eu eros quis nunc aliquet luctus. Cras quis semper ligula. Nullam gravida vehicula quam sed porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In porta cursus vulputate. Quisque porta a nisi eget cursus. Aliquam risus leo, luctus ac magna in, efficitur cursus magna. In condimentum non mi id semper. Donec interdum ante eget commodo maximus. - -Vivamus sit amet vestibulum lectus. Fusce tincidunt mi sapien, dictum sollicitudin diam vulputate in. Integer fringilla consequat mollis. Cras aliquet consequat felis eget feugiat. Nunc tempor cursus arcu, vitae ornare nunc varius et. Vestibulum et tortor vel ante viverra porttitor. Nam at tortor ullamcorper, facilisis augue quis, tristique erat. Aenean ut euismod nibh. Quisque eu tincidunt est, nec euismod eros. - -Proin vehicula nibh non viverra egestas. Phasellus sem dolor, ultricies ac sagittis tristique, lacinia a purus. Vestibulum in ante eros. Pellentesque lacus nulla, tristique vitae interdum vel, malesuada ac diam. Aenean bibendum posuere turpis in accumsan. Ut est nulla, ullamcorper quis turpis at, viverra sagittis mauris. Sed in interdum purus. Praesent scelerisque nibh eget sem euismod, ut imperdiet mi venenatis. Vivamus pulvinar orci sed dapibus auctor. Nulla facilisi. Vestibulum tincidunt erat nec porttitor egestas. Mauris quis risus ante. Nulla facilisi. - -Aliquam ullamcorper ornare lobortis. Phasellus quis sem et ipsum mollis malesuada sed in ex. Ut aliquam ex eget metus finibus maximus. Proin suscipit mauris eu nibh lacinia, quis feugiat dui dapibus. Nam sed libero est. Aenean vulputate orci sit amet diam faucibus, eu sagittis sapien volutpat. Nam imperdiet felis turpis, at pretium odio pulvinar in. Sed vestibulum id eros nec ultricies. Sed quis aliquam tortor, vitae ullamcorper tellus. Donec egestas laoreet eros, id suscipit est rutrum nec. Sed auctor nulla eget metus aliquam, ut condimentum enim elementum. - -Aliquam suscipit non turpis sit amet bibendum. Fusce velit ligula, euismod et maximus at, luctus sed neque. Quisque pretium, nisl at ullamcorper finibus, lectus leo mattis sapien, vel euismod mauris diam ullamcorper ex. Nulla ut risus finibus, lacinia ligula at, auctor erat. Mauris consectetur sagittis ligula vel dapibus. Nullam libero libero, lobortis aliquam libero vel, venenatis ultricies leo. Duis porttitor, nibh congue fermentum posuere, erat libero pulvinar tortor, a pellentesque nunc ipsum vel sem. Nullam volutpat, eros sit amet facilisis consectetur, ipsum est vehicula massa, non vestibulum neque elit in mauris. Nunc hendrerit ipsum non enim bibendum, vitae rhoncus mi egestas. Etiam ullamcorper massa vel nisl sagittis, nec bibendum arcu malesuada. Aenean aliquet turpis justo, a consectetur arcu mollis convallis. Etiam tellus ipsum, ultricies vitae lorem et, ornare facilisis orci. Praesent fringilla justo urna, vel mollis neque pulvinar vestibulum. - -Donec non iaculis erat. Aliquam et mi sed nunc pulvinar ultricies in ut ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent feugiat lacus ac dignissim semper. Phasellus vitae quam nisi. Morbi vel diam ultricies risus lobortis ornare. Fusce maximus et ligula quis iaculis. Sed congue ex eget felis convallis, sit amet hendrerit elit tempor. Donec vehicula blandit ante eget commodo. Vestibulum eleifend diam at feugiat euismod. Etiam magna tellus, dignissim eget fermentum vel, vestibulum vitae mauris. Nam accumsan et erat id sagittis. Donec lacinia, odio ut ornare ultricies, dolor velit accumsan tortor, non finibus erat tellus quis ligula. Nunc quis metus in leo volutpat ornare vulputate eu nisl. - -Donec quis viverra ex. Nullam id feugiat mauris, eu fringilla nulla. Vestibulum id maximus elit. Cras elementum elit sed felis lobortis, eget sagittis nisi hendrerit. Vivamus vitae elit neque. Donec vulputate lacus ut libero ultrices accumsan. Vivamus accumsan nulla orci, in dignissim est laoreet sagittis. Proin at commodo velit. Curabitur in velit felis. Aliquam erat volutpat. Sed consequat, nulla et cursus sodales, nisi lacus mattis risus, quis eleifend erat ex nec turpis. Sed suscipit ultrices lorem in hendrerit. - -Morbi vitae lacus nec libero ornare tempus eu et diam. Suspendisse magna ipsum, fermentum vel odio quis, molestie aliquam urna. Fusce mollis turpis a eros accumsan porttitor. Pellentesque rhoncus dolor sit amet magna rutrum, et dapibus justo tempor. Sed purus nisi, maximus vitae fringilla eu, molestie nec urna. Fusce malesuada finibus pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec sed aliquet eros. Pellentesque luctus diam ante, eget euismod nisl aliquet eu. Sed accumsan elit purus, tempor varius ligula tempus nec. Curabitur ornare leo suscipit suscipit fermentum. Morbi eget nulla est. Maecenas faucibus interdum tristique. - -Etiam ut elit eros. Nulla pharetra suscipit molestie. Nulla facilisis bibendum nisl non molestie. Curabitur turpis lectus, facilisis vel diam non, vulputate ultrices mauris. Aenean placerat aliquam convallis. Suspendisse sed scelerisque tellus. Vivamus lacinia neque eget risus cursus suscipit. Proin consequat dolor vel neque tempor, eu aliquam sem scelerisque. Duis non eros a purus malesuada pharetra non et nulla. Suspendisse potenti. Mauris libero eros, finibus vel nulla id, sagittis dapibus ante. Proin iaculis sed nunc et cursus. - -Quisque accumsan lorem sit amet lorem aliquet euismod. Curabitur fermentum rutrum posuere. Etiam ultricies, sem id pellentesque suscipit, urna magna lacinia eros, quis efficitur risus nisl at lacus. Nulla quis lacus tortor. Mauris placerat ex in dolor tincidunt, vel aliquet nisi pretium. Cras iaculis risus vitae pellentesque aliquet. Quisque a enim imperdiet, ullamcorper arcu vitae, rutrum risus. Nullam consectetur libero at felis fringilla, nec congue nibh dignissim. Nam et lobortis felis, eu pellentesque ligula. Aenean facilisis, ligula non imperdiet maximus, massa orci gravida sapien, at sagittis lacus nisl in lacus. Nulla quis mauris luctus, scelerisque felis consequat, tempus risus. Fusce auctor nisl non nulla luctus molestie. Maecenas sapien nisl, auctor non dolor et, iaculis scelerisque lorem. Suspendisse egestas enim aliquet, accumsan mauris nec, posuere quam. Nulla iaculis dui dui, sit amet vestibulum erat ultricies ac. - -Cras eget dolor erat. Proin at nisl ut leo consectetur ultricies vel ut arcu. Nulla in felis malesuada, ullamcorper tortor et, convallis massa. Nunc urna justo, ornare in nibh vitae, hendrerit condimentum libero. Etiam vitae libero in purus venenatis fringilla. Nullam velit nulla, consequat ut turpis non, egestas hendrerit nibh. Duis tortor turpis, interdum non ante ac, cursus accumsan lectus. Cras pharetra bibendum augue quis dictum. Sed euismod vestibulum justo. Proin porta lobortis purus. Duis venenatis diam tortor, sit amet condimentum eros rhoncus a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc at magna nec diam lobortis efficitur sit amet ut lacus. Nulla quis orci tortor. Pellentesque tempus velit a odio finibus porta. - -Proin feugiat mauris a tellus scelerisque convallis. Maecenas libero magna, blandit nec ultrices id, congue vel mi. Aliquam lacinia, quam vel condimentum convallis, tortor turpis aliquam odio, sed blandit libero lacus et eros. In eleifend iaculis magna ac finibus. Praesent auctor facilisis tellus in congue. Sed molestie lobortis dictum. Nam quis dignissim augue, vel euismod lorem. Curabitur posuere dapibus luctus. Donec ultricies dictum lectus, quis blandit arcu commodo ac. Aenean tincidunt ligula in nunc imperdiet dignissim. Curabitur egestas sollicitudin sapien ut semper. Aenean nec dignissim lacus. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec aliquam dictum vehicula. Donec tortor est, volutpat non nisi nec, varius gravida ex. Nunc vel tristique nunc, vitae mattis nisi. Nunc nec luctus ex, vitae tincidunt lectus. In hac habitasse platea dictumst. Curabitur lobortis ex eget tincidunt tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut a vehicula mi. - -Fusce eu libero finibus, interdum nulla a, placerat neque. Cras bibendum tempor libero nec feugiat. Cras ut sodales eros. Proin viverra, massa sit amet viverra egestas, neque nisl porta ex, sit amet hendrerit libero ligula vel urna. Mauris suscipit lacus id justo rhoncus suscipit. Etiam vel libero tellus. Maecenas non diam molestie, condimentum tellus a, bibendum enim. Mauris aliquet imperdiet tellus, eget sagittis dolor. Sed blandit in neque et luctus. Cras elementum sagittis nunc, vel mollis lorem euismod et. Donec posuere at lacus eget suscipit. - -Nulla nunc mi, pretium non massa vel, tempor semper magna. Nunc a leo pulvinar, tincidunt nunc at, dignissim mi. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut viverra nulla a nisl finibus, at hendrerit ligula ullamcorper. Donec a lorem semper, tempor magna et, lobortis libero. Mauris id sapien leo. Donec dignissim, quam vitae porttitor dignissim, quam justo mattis dui, vel consequat odio elit quis orci. Etiam nec pretium neque, sit amet pretium orci. Duis ac tortor venenatis, feugiat purus non, feugiat nunc. Proin scelerisque nisl in turpis aliquam vulputate. - -Praesent sed est semper, fringilla lorem vitae, tincidunt nibh. Cras eros metus, auctor at mauris sit amet, sodales semper orci. Nunc a ornare ex. Curabitur bibendum arcu congue urna vulputate egestas. Vestibulum finibus id risus et accumsan. Aenean ut volutpat tellus. Aenean tincidunt malesuada urna sit amet vestibulum. Mauris vel tellus dictum, varius lacus quis, dictum arcu. - -Aenean quis metus eu erat feugiat cursus vel at ligula. Proin dapibus sodales urna, id euismod lectus tempus id. Pellentesque ex ligula, convallis et erat vel, vulputate condimentum nisl. Pellentesque pharetra nulla quis massa eleifend hendrerit. Praesent sed massa ipsum. Maecenas vehicula dolor massa, id sodales urna faucibus et. Mauris ac quam non massa tincidunt feugiat et at lacus. Fusce libero massa, vulputate vel scelerisque non, mollis in leo. Ut sit amet ultricies odio. Suspendisse in sapien viverra, facilisis purus ut, pretium libero. - -Vivamus tristique pharetra molestie. Nam a volutpat purus. Praesent consequat gravida nisi, ac blandit nisi suscipit ut. Quisque posuere, ligula a ultrices laoreet, ligula nunc vulputate libero, ut rutrum erat odio tincidunt justo. Sed vitae leo at leo fringilla bibendum. Vestibulum ut augue nec dolor auctor accumsan. Praesent laoreet id eros pulvinar commodo. Suspendisse potenti. Ut pharetra, mauris vitae blandit fringilla, odio ante tincidunt lorem, sit amet tempor metus diam ut turpis. - -Praesent quis egestas arcu. Nullam at porta arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi vulputate ligula malesuada ligula luctus, vulputate tempus erat bibendum. Nunc ullamcorper non lectus at euismod. Etiam nibh felis, tincidunt a metus vel, pellentesque rhoncus neque. Etiam at diam in erat luctus interdum. Nunc vel ipsum pulvinar, sollicitudin lacus ac, tempus urna. Etiam vel lacinia sapien. Pellentesque sagittis velit vel mi efficitur iaculis. Integer euismod sit amet urna in sagittis. Cras eleifend ut nibh in facilisis. Donec et lacus vitae nunc placerat sodales. Nulla sed hendrerit ligula, at dapibus sapien. - -Praesent at iaculis ex. Curabitur est purus, cursus a faucibus quis, dictum id velit. Donec dignissim fringilla viverra. Nunc mauris felis, laoreet sit amet sagittis at, vestibulum in libero. Maecenas quis orci turpis. Quisque ut nibh vitae magna mollis consequat id at mauris. Aliquam eu odio eget nulla bibendum sodales. Quisque vel orci eleifend nisi pretium lacinia. Suspendisse eget risus eget mi volutpat molestie eget quis lacus. Duis nisi libero, tincidunt nec nulla id, faucibus cursus felis. - -Donec tempor eget risus pellentesque molestie. Phasellus porta neque vel arcu egestas, nec blandit velit fringilla. Nullam porta faucibus justo vitae laoreet. Pellentesque viverra id nunc eu varius. Nulla pulvinar lobortis iaculis. Etiam vestibulum odio nec velit tristique, a tristique nisi mattis. In sed fringilla orci, vitae efficitur odio. Quisque dui odio, ornare eget velit at, lacinia consequat libero. Quisque lectus nulla, aliquet eu leo in, porta rutrum diam. Donec nec mattis neque. Nam rutrum, odio ac eleifend bibendum, dolor arcu rutrum neque, eget porta elit tellus a lacus. Sed massa metus, sollicitudin et sapien eu, finibus tempus orci. Proin et sapien sit amet erat molestie interdum. In quis rutrum velit, faucibus ultrices tellus. - -Sed sagittis sed justo eget tincidunt. Maecenas ut leo sagittis, feugiat magna et, viverra velit. Maecenas ex arcu, feugiat at consequat vitae, auctor eu massa. Integer egestas, enim vitae maximus convallis, est lectus pretium mauris, ac posuere lectus nisl quis quam. Aliquam tempus laoreet mi, vitae dapibus dolor varius dapibus. Suspendisse potenti. Donec sit amet purus nec libero dapibus tristique. Pellentesque viverra bibendum ligula. Donec sed felis et ex lobortis laoreet. Phasellus a fringilla libero, vitae malesuada nulla. Pellentesque blandit mattis lacus, et blandit tortor laoreet consequat. Suspendisse libero nunc, viverra sed fermentum in, accumsan egestas arcu. Proin in placerat elit. Sed interdum imperdiet malesuada. Suspendisse aliquet quis mauris eget sollicitudin. - -Vivamus accumsan tellus non erat volutpat, quis dictum dolor feugiat. Praesent rutrum nunc ac est mollis cursus. Fusce semper volutpat dui ut egestas. Curabitur sit amet posuere massa. Cras tincidunt nulla et mi mollis imperdiet. Suspendisse scelerisque ex id sodales vulputate. In nunc augue, pharetra in placerat eu, mattis id tellus. Vivamus cursus efficitur vehicula. Nulla aliquet vehicula aliquet. - -Sed cursus tellus sed porta pulvinar. Sed vitae nisi neque. Nullam aliquet, lorem et efficitur scelerisque, arcu diam aliquam felis, sed pulvinar lorem odio et turpis. Praesent convallis pulvinar turpis eu iaculis. Aliquam nec gravida mi. Curabitur eu nibh tempor, blandit justo in, ultrices felis. Fusce placerat metus non mi sagittis rutrum. Morbi sed dui fringilla, sagittis mauris eget, imperdiet nunc. Phasellus hendrerit sem elit, id hendrerit libero auctor sit amet. Integer sodales elit sit amet consequat cursus. - -Nam semper est eget nunc mollis, in pellentesque lectus fringilla. In finibus vel diam id semper. Nunc mattis quis erat eu consectetur. In hac habitasse platea dictumst. Nullam et ipsum vestibulum ex pulvinar ultricies sit amet id velit. Aenean suscipit mi tortor, a lobortis magna viverra non. Nulla condimentum aliquet ante et ullamcorper. Pellentesque porttitor arcu a posuere tempus. Aenean lacus quam, imperdiet eu justo vitae, pretium efficitur ex. Duis id purus id magna rhoncus ultrices id eu risus. Nunc dignissim et libero id dictum. - -Quisque a tincidunt neque. Phasellus commodo mi sit amet tempor fringilla. Ut rhoncus, neque non porttitor elementum, libero nulla egestas augue, sed fringilla sapien felis ac velit. Phasellus viverra rhoncus mollis. Nam ullamcorper leo vel erat laoreet luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus semper a metus a cursus. Nulla sed orci egestas, efficitur purus ac, malesuada tellus. Aenean rutrum velit at tellus fermentum mollis. Aliquam eleifend euismod metus. - -In hac habitasse platea dictumst. Vestibulum volutpat neque vitae porttitor laoreet. Nam at tellus consequat, sodales quam in, pulvinar arcu. Maecenas varius convallis diam, ac lobortis tellus pellentesque quis. Maecenas eget augue massa. Nullam volutpat nibh ac justo rhoncus, ut iaculis tellus rutrum. Fusce efficitur efficitur libero quis condimentum. Curabitur congue neque non tincidunt tristique. Fusce eget tempor ex, at pellentesque odio. Praesent luctus dictum vestibulum. Etiam non orci nunc. Vivamus vitae laoreet purus, a lobortis velit. Curabitur tincidunt purus ac lectus elementum pellentesque. Quisque sed tincidunt est. - -Sed vel ultrices massa, vitae ultricies justo. Cras finibus mauris nec lacus tempus dignissim. Cras faucibus maximus velit, eget faucibus orci luctus vehicula. Nulla massa nunc, porta ac consequat eget, rhoncus non tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed maximus metus, vel imperdiet ipsum. Ut scelerisque lectus at blandit porttitor. Ut vulputate nunc pharetra, aliquet sapien ac, sollicitudin sapien. Aenean eget ante lorem. Nam accumsan venenatis tellus id dignissim. - -Curabitur fringilla, magna non maximus dapibus, nulla sapien vestibulum lectus, sit amet semper dolor neque vitae nisl. Nunc ultrices vehicula augue sed iaculis. Maecenas nec diam mollis, suscipit orci et, vestibulum ante. Pellentesque eu nisl tortor. Nunc eleifend, lacus quis volutpat volutpat, nisi mi molestie sem, quis mollis ipsum libero a tellus. Ut viverra dolor mattis convallis interdum. Sed tempus nisl at nunc scelerisque aliquet. Quisque tempor tempor lorem id feugiat. Nullam blandit lectus velit, vitae porta lacus tincidunt a. Vivamus sit amet arcu ultrices, tincidunt mi quis, viverra quam. Aenean fringilla libero elementum lorem semper, quis pulvinar eros gravida. Nullam sodales blandit mauris, sed fermentum velit fermentum sit amet. Donec malesuada mauris in augue sodales vulputate. Vestibulum gravida turpis id elit rhoncus dignissim. Integer non congue lorem, eu viverra orci. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec at dolor magna. Aliquam consectetur erat augue, id iaculis velit pharetra ac. Integer rutrum venenatis dignissim. Integer non sodales elit. Curabitur ut magna ut nibh feugiat aliquam ac ut risus. Morbi nibh quam, aliquam id placerat nec, vestibulum eget velit. Suspendisse at dignissim quam. Vivamus aliquet sem sed nisl volutpat, ut cursus orci ultrices. Aliquam ultrices lacinia enim, vitae aliquet neque. - -Quisque scelerisque finibus diam in mattis. Cras cursus auctor velit. Aliquam sem leo, fermentum et maximus et, molestie a libero. Aenean justo elit, rutrum a ornare id, egestas eget enim. Aenean auctor tristique erat. Curabitur condimentum libero lacus, nec consequat orci vestibulum sed. Fusce elit ligula, blandit vitae sapien vitae, dictum ultrices risus. Nam laoreet suscipit sapien, at interdum velit faucibus sit amet. Duis quis metus egestas lectus elementum posuere non nec libero. Aliquam a dolor bibendum, facilisis nunc a, maximus diam. Vestibulum suscipit tristique magna, non dignissim turpis sodales sed. Nunc ornare, velit ac facilisis fringilla, dolor mi consectetur lorem, vitae finibus erat justo suscipit urna. Maecenas sit amet eros erat. Nunc non arcu ornare, suscipit lorem eget, sodales mauris. Aliquam tincidunt, quam nec mollis lacinia, nisi orci fermentum libero, consequat eleifend lectus quam et sapien. Vestibulum a quam urna. - -Cras arcu leo, euismod ac ullamcorper at, faucibus sed massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor velit in enim interdum, non commodo metus ornare. Morbi vel lorem quis nisl luctus tristique quis vitae nisl. Suspendisse condimentum tortor enim, nec eleifend ipsum euismod et. Sed gravida quam ut tristique lacinia. Mauris eu interdum ipsum, ac ultrices odio. Nullam auctor tellus a risus porttitor vehicula. Nulla blandit euismod dictum. In pharetra, enim iaculis pulvinar interdum, dui nunc placerat nunc, sit amet pretium lectus nulla vitae quam. Phasellus quis enim sollicitudin, varius nulla id, ornare purus. Donec quam lacus, vestibulum quis nunc ac, mollis dictum nisi. Cras ut mollis elit. Maecenas ultrices ligula at risus faucibus scelerisque. Etiam vitae porttitor purus. Curabitur blandit lectus urna, ut hendrerit tortor feugiat ut. - -Phasellus fringilla, sapien pellentesque commodo pharetra, ante libero aliquam tellus, ut consectetur augue libero a sapien. Maecenas blandit luctus nisl eget aliquet. Maecenas vitae porta dolor, faucibus laoreet sapien. Suspendisse lobortis, ipsum sed vehicula aliquam, elit purus scelerisque dui, rutrum consectetur diam odio et lorem. In nec lacinia metus. Donec viverra libero est, vel bibendum erat condimentum quis. Donec feugiat purus leo. In laoreet vitae felis a porttitor. Mauris ullamcorper, lacus id condimentum suscipit, neque magna pellentesque arcu, eget cursus neque tellus id metus. Curabitur volutpat ac orci vel ultricies. - -Sed ut finibus erat. Sed diam purus, varius non tincidunt quis, ultrices sit amet ipsum. Donec et egestas nulla. Suspendisse placerat nisi at dui laoreet iaculis. Aliquam aliquet leo at augue faucibus molestie. Nullam lacus augue, hendrerit sed nisi eu, faucibus porta est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ut leo aliquet sem fermentum rutrum quis ac justo. Integer placerat aliquam nisl ut sagittis. Proin erat orci, lobortis et sem eget, eleifend fringilla augue. Mauris varius laoreet arcu, sed tincidunt felis. Pellentesque venenatis lorem odio, id pulvinar velit molestie feugiat. Donec mattis lacus sed eleifend pulvinar. - -Sed condimentum ex in tincidunt hendrerit. Etiam eget risus lacinia, euismod nibh eu, pellentesque quam. Proin elit eros, convallis id mauris ac, bibendum ultrices lectus. Morbi venenatis, purus id fermentum consequat, nunc libero tincidunt ligula, non dictum ligula orci nec quam. Nulla nec ultrices lorem. Aenean maximus augue vel dictum pharetra. Etiam turpis urna, pellentesque quis malesuada eu, molestie faucibus felis. - -Vestibulum pharetra augue ut quam blandit congue in nec risus. Proin eu nibh eu dui eleifend porta vitae id lectus. Proin lacus nibh, lobortis sed ligula vitae, interdum lobortis erat. Suspendisse potenti. In sollicitudin quis sapien ut aliquet. Mauris ac nulla arcu. Fusce tristique justo quis lectus mollis, eu volutpat lectus finibus. Vivamus venenatis facilisis ex ut vestibulum. - -Etiam varius lobortis purus, in hendrerit elit tristique at. In tempus, augue vestibulum fermentum gravida, ligula tellus vulputate arcu, eu molestie ex sapien at purus. Vestibulum nec egestas metus. Duis pulvinar quam nec consequat interdum. Aenean non dapibus lacus. Aliquam sit amet aliquet nulla. Sed venenatis volutpat purus nec convallis. Phasellus aliquet semper sodales. Cras risus sapien, condimentum auctor urna a, pulvinar ornare nisl. Sed tincidunt felis elit, ut elementum est bibendum ac. Morbi interdum justo vel dui faucibus condimentum. - -Sed convallis eu sem at tincidunt. Nullam at auctor est, et ullamcorper ipsum. Pellentesque eget ante ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer euismod, sapien sed dapibus ornare, nibh enim maximus lacus, lacinia placerat urna quam quis felis. Morbi accumsan id nisl ut condimentum. Donec bibendum nisi est, sed volutpat lorem rhoncus in. Vestibulum ac lacinia nunc, eget volutpat magna. Integer aliquam pharetra ipsum, id placerat nunc volutpat quis. Etiam urna diam, rhoncus sit amet varius vel, euismod vel sem. Nullam vel molestie urna. Vivamus ornare erat at venenatis euismod. Suspendisse potenti. Fusce diam justo, tincidunt vel sem at, commodo faucibus nisl. Duis gravida efficitur diam, vel sagittis erat pulvinar ut. - -Quisque vel pharetra felis. Duis efficitur tortor dolor, vitae porttitor erat fermentum sed. Sed eu mi purus. Etiam dignissim tortor eu tempus molestie. Aenean pretium erat enim, in hendrerit ante hendrerit at. Sed ut risus vel nunc venenatis ultricies quis in lacus. Pellentesque vitae purus euismod, placerat risus non, ullamcorper augue. Quisque varius quam ligula, nec aliquet ex faucibus vitae. Quisque rhoncus sit amet leo tincidunt mattis. Cras id mauris eget purus pretium gravida sit amet eu augue. Aliquam dapibus odio augue, id lacinia velit pulvinar eu. - -Mauris fringilla, tellus nec pharetra iaculis, neque nisi ultrices massa, et tincidunt sem dui sed mi. Curabitur erat lorem, venenatis quis tempus lacinia, tempus sit amet nunc. Aliquam at neque ac metus commodo dictum quis vitae justo. Phasellus eget lacus tempus, blandit lorem vel, rutrum est. Aenean pharetra sem ut augue lobortis dignissim. Sed rhoncus at nulla id ultrices. Cras id condimentum felis. In suscipit luctus vulputate. Donec tincidunt lacus nec enim tincidunt sollicitudin ut quis enim. Nam at libero urna. Praesent sit amet massa vitae massa ullamcorper vehicula. - -Nullam bibendum augue ut turpis condimentum bibendum. Proin sit amet urna hendrerit, sodales tortor a, lobortis lectus. Integer sagittis velit turpis, et tincidunt nisi commodo eget. Duis tincidunt elit finibus accumsan cursus. Aenean dignissim scelerisque felis vel lacinia. Nunc lacinia maximus luctus. In hac habitasse platea dictumst. Vestibulum eget urna et enim tempor tempor. Nam feugiat, felis vel vestibulum tempus, orci justo viverra diam, id dapibus lorem justo in ligula. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ac pellentesque sem. Vestibulum lacinia magna dui, eu lacinia augue placerat et. Maecenas pulvinar congue est. Pellentesque commodo dui non pulvinar scelerisque. Etiam interdum est posuere sem bibendum, ac commodo magna dictum. Cras ipsum turpis, rhoncus nec posuere vitae, laoreet a arcu. Integer ac massa sit amet enim placerat lacinia sed ultrices arcu. Suspendisse sem nibh, luctus sit amet volutpat in, pellentesque eu metus. Ut gravida neque eget mi accumsan tempus. Nam sit amet aliquet nibh. - -Pellentesque a purus cursus nulla hendrerit congue quis et odio. Aenean hendrerit, leo ullamcorper sagittis hendrerit, erat dui molestie quam, sed condimentum lacus risus sed tellus. Morbi a dapibus lectus, ut feugiat ex. Phasellus pretium quam et sapien mollis, vel iaculis dui dignissim. Sed ullamcorper est turpis, a viverra lorem consectetur in. Aenean aliquet nibh non cursus rutrum. Suspendisse at tristique urna, id lobortis urna. In hac habitasse platea dictumst. Phasellus libero velit, rutrum sed tellus nec, dapibus tincidunt ligula. Quisque vel dui venenatis, consequat nisl ut, lacinia ipsum. Phasellus vitae magna pellentesque, lobortis est id, faucibus quam. Nam eleifend faucibus dui vel pellentesque. - -Etiam ut est non lacus tincidunt interdum. Maecenas sed massa urna. Quisque ut nibh tortor. Pellentesque felis ipsum, tempor finibus ipsum et, euismod pretium metus. Donec sit amet est ipsum. Quisque rhoncus justo non finibus elementum. Nulla nec lectus ac tortor placerat fringilla. Phasellus ac ultrices nunc, eu efficitur nisl. Nulla rhoncus nunc vitae ante dictum tincidunt. Nunc ultrices, massa sit amet malesuada dignissim, lectus lacus consequat sapien, non eleifend metus sem in eros. Phasellus mauris ante, dictum sit amet suscipit ac, rhoncus eget nisi. Phasellus at orci mollis, imperdiet neque eget, faucibus nulla. In at purus massa. Pellentesque quis rutrum lectus. - -Integer eu faucibus turpis, sit amet mollis massa. Vestibulum id nulla commodo, rutrum ipsum sed, semper ante. Phasellus condimentum orci nec nibh convallis, ac maximus orci ullamcorper. Maecenas vitae sollicitudin mi. Integer et finibus lectus, et condimentum ligula. Donec elementum tristique quam vitae dapibus. Morbi euismod ipsum in tristique ullamcorper. - -Duis fermentum non enim eu auctor. Quisque lacinia nibh vehicula nibh posuere, eu volutpat turpis facilisis. Ut ac faucibus nulla. Sed eleifend quis ex et pellentesque. Vestibulum sollicitudin in libero id fringilla. Phasellus dignissim purus consequat, condimentum dui sit amet, condimentum ante. Pellentesque ac consectetur massa, quis sagittis est. Nulla maximus tristique risus accumsan convallis. Curabitur imperdiet ac lacus a ultrices. Nulla facilisi. Sed quis quam quis lectus placerat lobortis vel sed turpis. In mollis dui id neque iaculis, ut aliquet tellus malesuada. Proin at luctus odio, vel blandit sapien. Praesent dignissim tortor vehicula libero fringilla, nec ultrices erat suscipit. Maecenas scelerisque purus in dapibus fermentum. - -Curabitur magna odio, mattis in tortor ut, porttitor congue est. Vestibulum mollis lacinia elementum. Fusce maximus erat vitae nunc rutrum lobortis. Integer ligula eros, auctor vel elit non, posuere luctus lacus. Maecenas quis auctor massa. Ut ipsum lacus, efficitur posuere euismod et, hendrerit efficitur est. Phasellus fringilla, quam id tincidunt pretium, nunc dui sollicitudin orci, eu dignissim nisi metus ut magna. Integer lobortis interdum dolor, non bibendum purus posuere et. Donec non lectus aliquet, pretium dolor eu, cursus massa. Sed ut dui sapien. In sed vestibulum massa. Pellentesque blandit, dui non sodales vehicula, orci metus mollis nunc, non pharetra ex tellus ac est. Mauris sagittis metus et fermentum pretium. Nulla facilisi. Quisque quis ante ut nulla placerat mattis ut quis nisi. - -Sed quis nulla ligula. Quisque dignissim ligula urna, sed aliquam purus semper at. Suspendisse potenti. Nunc massa lectus, pharetra vehicula arcu bibendum, imperdiet sodales ipsum. Nam ac sapien diam. Mauris iaculis fringilla mattis. Pellentesque tempus eros sit amet justo volutpat mollis. Phasellus ac turpis ipsum. Morbi vel ante elit. Aenean posuere quam consequat velit varius suscipit. Donec tempor quam ut nibh cursus efficitur. - -Morbi molestie dolor nec sem egestas suscipit. Etiam placerat pharetra lectus, et ullamcorper risus tristique in. Sed faucibus ullamcorper lectus eget fringilla. Maecenas malesuada hendrerit congue. Sed eget neque a erat placerat tincidunt. Aliquam vitae dignissim turpis. Fusce at placerat magna, a laoreet lectus. Maecenas a purus nec diam gravida fringilla. Nam malesuada euismod ante non vehicula. In faucibus bibendum leo, faucibus posuere nisl pretium quis. Fusce finibus bibendum finibus. Vestibulum eu justo maximus, hendrerit diam nec, dignissim sapien. Aenean dolor lacus, malesuada quis vestibulum ac, venenatis ac ipsum. Cras a est id nunc finibus facilisis. Cras lacinia neque et interdum vehicula. Suspendisse vulputate tellus elit, eget tempor dui finibus vel. - -Cras sed pretium odio. Proin hendrerit elementum felis in tincidunt. Nam sed turpis vel justo molestie accumsan condimentum eu nunc. Praesent lobortis euismod rhoncus. Nulla vitae euismod nibh, quis mattis mi. Fusce ultrices placerat porttitor. Duis sem ipsum, pellentesque sit amet odio a, molestie vulputate mauris. - -Duis blandit mollis ligula, sit amet mattis ligula finibus sit amet. Nunc a leo molestie, placerat diam et, vestibulum leo. Suspendisse facilisis neque purus, nec pellentesque ligula fermentum nec. Aenean malesuada mauris lorem, eu blandit arcu pulvinar quis. Duis laoreet urna lacus, non maximus arcu rutrum ultricies. Nulla augue dolor, suscipit eu mollis eu, aliquam condimentum diam. Ut semper orci luctus, pharetra turpis at, euismod mi. Nulla leo diam, finibus sit amet purus sed, maximus dictum lorem. Integer eu mi id turpis laoreet rhoncus. - -Integer a mauris tincidunt, finibus orci ut, pretium mauris. Nulla molestie nunc mi, id finibus lorem elementum sed. Proin quis laoreet ante. Integer nulla augue, commodo id molestie quis, rutrum ut turpis. Suspendisse et tortor turpis. Sed ut pharetra massa. Pellentesque elementum blandit sem, ut elementum tellus egestas a. Fusce eu purus nibh. - -Cras dignissim ligula scelerisque magna faucibus ullamcorper. Proin at condimentum risus, auctor malesuada quam. Nullam interdum interdum egestas. Nulla aliquam nisi vitae felis mollis dictum. Suspendisse dapibus consectetur tortor. Ut ut nisi non sem bibendum tincidunt. Vivamus suscipit leo quis gravida dignissim. - -Aliquam interdum, leo id vehicula mollis, eros eros rhoncus diam, non mollis ligula mi eu mauris. Sed ultrices vel velit sollicitudin tincidunt. Nunc auctor metus at ligula gravida elementum. Praesent interdum eu elit et mollis. Duis egestas quam sit amet velit dignissim consequat. Aliquam ac turpis nec nunc convallis sagittis. Fusce blandit, erat ac fringilla consectetur, dolor eros sodales leo, vel aliquet risus nisl et diam. Aliquam luctus felis vitae est eleifend euismod facilisis et lacus. Sed leo tellus, auctor eu arcu in, volutpat sagittis nisl. Pellentesque nisl ligula, placerat vel ullamcorper at, vulputate ac odio. Morbi ac faucibus orci, et tempus nulla. Proin rhoncus rutrum dolor, in venenatis mauris. Suspendisse a fermentum augue, non semper mi. Nunc eget pretium neque. Phasellus augue erat, feugiat ac aliquam congue, rutrum non sapien. Pellentesque ac diam gravida, consectetur felis at, ornare neque. - -Nullam interdum mattis sapien quis porttitor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus aliquet rutrum ipsum id euismod. Maecenas consectetur massa et mi porta viverra. Nunc quam nibh, dignissim vitae maximus et, ullamcorper nec lorem. Nunc vitae justo dapibus, luctus lacus vitae, pretium elit. Maecenas et efficitur leo. Curabitur mauris lectus, placerat quis vehicula vitae, auctor ut urna. Quisque rhoncus pharetra luctus. In hac habitasse platea dictumst. Integer sit amet metus nec eros malesuada aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi hendrerit mi ac leo aliquam, sit amet ultricies libero commodo. Mauris dapibus purus metus, sit amet viverra nibh imperdiet et. Nullam porta nulla tellus, quis vehicula diam imperdiet non. Vivamus enim massa, bibendum in fermentum in, ultrices at ex. - -Suspendisse fermentum id nibh eget accumsan. Duis dapibus bibendum erat ut sollicitudin. Aliquam nec felis risus. Pellentesque rhoncus ligula id sem maximus mollis sed nec massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ipsum ipsum, sodales sed enim id, convallis faucibus eros. Donec ultricies dictum tincidunt. Cras vitae nibh arcu. Pellentesque cursus, sapien nec consequat fermentum, ipsum ante suscipit dui, imperdiet hendrerit est nisl eu massa. Quisque vitae sem ligula. Aenean iaculis metus ut mauris interdum laoreet. Vivamus sed gravida dolor. - -Morbi nulla metus, porttitor sed eros sit amet, efficitur efficitur est. In vel nisl urna. Ut aliquet tellus at congue convallis. Phasellus imperdiet lobortis sollicitudin. Integer sodales, sem eu ultricies pharetra, erat erat porttitor odio, eget dapibus libero ipsum eget velit. Phasellus gravida nulla nisl, eu pharetra mi auctor vel. Sed blandit pharetra velit, ut egestas libero placerat non. Aliquam a interdum quam. Proin at tortor nec dui sollicitudin tempus sed vestibulum elit. Nunc non sollicitudin velit. - -Aenean consequat diam velit, sed rutrum tortor faucibus dictum. Quisque at semper augue. Duis ut est eget mi ornare bibendum id et ligula. Phasellus consequat tortor non leo pulvinar posuere. Proin vestibulum eleifend felis, in hendrerit tortor sollicitudin eu. Phasellus hendrerit, lacus vel laoreet interdum, dui tortor consequat justo, commodo ultricies arcu felis vitae enim. Vivamus eu sapien at leo suscipit rutrum eu at justo. Aenean et dolor a libero ullamcorper posuere. Integer laoreet placerat nisi in vulputate. Mauris laoreet eget risus sed cursus. Donec scelerisque neque a libero eleifend hendrerit. Nulla varius condimentum nunc sit amet fermentum. Aliquam lorem ex, varius nec mollis ut, ultrices in neque. Morbi sit amet porta leo. Integer iaculis fermentum lacus in vestibulum. - -Ut gravida, tellus ut maximus ultrices, erat est venenatis nisl, vitae pretium massa ex ac magna. Sed non purus eget ligula aliquet volutpat non quis arcu. Nam aliquam tincidunt risus, sit amet fringilla sapien vulputate ut. Mauris luctus suscipit pellentesque. Nunc porttitor dapibus ex quis tempus. Ut ullamcorper metus a eros vulputate, vitae viverra lectus convallis. Mauris semper imperdiet augue quis tincidunt. Integer porta pretium magna, sed cursus sem scelerisque sollicitudin. Nam efficitur, nibh pretium eleifend vestibulum, purus diam posuere sem, in egestas mauris augue sit amet urna. - -Vestibulum tincidunt euismod massa in congue. Duis interdum metus non laoreet fringilla. Donec at ligula congue, tincidunt nunc non, scelerisque nunc. Donec bibendum magna non est scelerisque feugiat at nec neque. Ut orci tortor, tempus eget massa non, dignissim faucibus dolor. Nam odio risus, accumsan pretium neque eget, accumsan dignissim dui. In ut neque auctor, scelerisque tellus sed, ullamcorper nisi. Suspendisse varius cursus quam at hendrerit. Vivamus elit libero, sagittis vitae sem ac, vulputate iaculis ligula. - -Sed lobortis laoreet purus sit amet rutrum. Pellentesque feugiat non leo vel lacinia. Quisque feugiat nisl a orci bibendum vestibulum. In et sollicitudin urna. Morbi a arcu ac metus faucibus tempus. Nam eu imperdiet sapien, suscipit mattis tortor. Aenean blandit ipsum nisi, a eleifend ligula euismod at. Integer tincidunt pharetra felis, mollis placerat mauris hendrerit at. Curabitur convallis, est sit amet luctus volutpat, massa lacus cursus augue, sed eleifend magna quam et risus. Aliquam lobortis tincidunt metus vitae porttitor. Suspendisse potenti. Aenean ullamcorper, neque id commodo luctus, nulla nunc lobortis quam, id dapibus neque dui nec mauris. Etiam quis lorem quis elit commodo ornare. Ut pharetra purus ultricies enim ultrices efficitur. Proin vehicula tincidunt molestie. Mauris et placerat sem. - -Aliquam erat volutpat. Suspendisse velit turpis, posuere ac lacus eu, lacinia laoreet velit. Sed interdum felis neque, id blandit sem malesuada sit amet. Ut sagittis justo erat, efficitur semper orci tempor sed. Donec enim massa, posuere varius lectus egestas, pellentesque posuere mi. Cras tincidunt ut libero sed mattis. Suspendisse quis magna et tellus posuere interdum vel at purus. Pellentesque fringilla tristique neque, id aliquet tellus ultricies non. Duis ut tellus vel odio lobortis vulputate. - -Integer at magna ac erat convallis vestibulum. Sed lobortis porttitor mauris. Fusce varius lorem et volutpat pulvinar. Aenean ac vulputate lectus, vitae consequat velit. Suspendisse ex dui, varius ut risus ut, dictum scelerisque sem. Vivamus urna orci, volutpat ut convallis ac, venenatis vitae urna. In hac habitasse platea dictumst. Etiam eu purus arcu. Aenean vulputate leo urna, vel tristique dui sagittis euismod. Suspendisse non tellus efficitur ante rhoncus volutpat at et sapien. - -Sed dapibus accumsan porttitor. Phasellus facilisis lectus finibus ligula dignissim, id pulvinar lectus feugiat. Nullam egestas commodo nisi posuere aliquet. Morbi sit amet tortor sagittis, rutrum dui nec, dapibus sapien. Sed posuere tortor tortor, interdum auctor magna varius vitae. Vestibulum id sagittis augue. Curabitur fermentum arcu sem, eu condimentum quam rutrum non. Phasellus rutrum nibh quis lectus rhoncus pretium. Curabitur dictum interdum elit. Vestibulum maximus sodales imperdiet. Mauris auctor nec purus sed venenatis. In in urna purus. - -Duis placerat molestie suscipit. Morbi a elit id purus efficitur consequat. Nunc ac commodo turpis. Etiam sit amet lacus a ipsum tempus venenatis sed vel nibh. Duis elementum aliquam mi sed tristique. Morbi ligula tortor, semper ac est vel, lobortis maximus erat. Curabitur ipsum felis, laoreet vel condimentum eget, ullamcorper sit amet mauris. Nulla facilisi. Nam at purus sed mi egestas placerat vitae vel magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse at dignissim diam. Phasellus consectetur eget neque vel viverra. Donec sollicitudin mattis dolor vel malesuada. Vivamus vehicula leo neque, vitae fermentum leo posuere et. Praesent dui est, finibus sit amet tristique quis, pharetra vel nibh. - -Duis nulla leo, accumsan eu odio eget, sagittis semper orci. Quisque ullamcorper ligula quam, commodo porttitor mauris ullamcorper eu. Cras varius sagittis felis in aliquam. Duis sodales risus ac justo vehicula, nec mattis diam lacinia. Cras eget lectus ipsum. Ut commodo, enim vitae malesuada hendrerit, ex dolor egestas lectus, sit amet hendrerit metus diam nec est. Vestibulum tortor metus, lobortis sit amet ante eget, tempor molestie lacus. In molestie et urna et semper. Mauris mollis, sem non hendrerit condimentum, sapien nisi cursus est, non suscipit quam justo non metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam enim est, porta ac feugiat vitae, rutrum in lorem. Duis vehicula tortor ut posuere maximus. - -Nullam vestibulum non tellus sed commodo. Quisque mattis elit sit amet sapien sollicitudin, ut condimentum nisl congue. Aenean sagittis massa vel elit faucibus fermentum. Donec tincidunt nisi nec nisl sodales pellentesque. Mauris congue congue ligula ut suscipit. Vivamus velit tortor, tempor et gravida eget, fermentum sit amet ante. Nullam fringilla, lorem at ultrices cursus, urna neque ornare dolor, eu lacinia orci enim sed nibh. Ut a ullamcorper lectus, id mattis purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean maximus sollicitudin posuere. Nunc at augue lacus. Aenean efficitur leo sit amet lacinia efficitur. - -Quisque venenatis quam mi, in pharetra odio vulputate eu. In vel nisl pulvinar, pulvinar ligula ut, sodales risus. Sed efficitur lectus at vestibulum tincidunt. Vestibulum eu ullamcorper elit. Fusce vestibulum magna enim, et tempor lacus posuere vitae. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer leo elit, luctus nec mattis sit amet, sollicitudin in turpis. - -Proin convallis venenatis leo, vitae tristique erat iaculis nec. Nulla facilisi. Duis porttitor, sapien et bibendum vulputate, sem libero sodales lacus, non malesuada felis erat ut libero. Nam non felis semper, finibus est a, mattis mauris. Praesent nec eros quam. Nulla hendrerit, augue consectetur eleifend ultricies, purus mi condimentum nulla, eget dapibus est nunc sed libero. Nullam elementum dui erat, vitae luctus libero sollicitudin et. Nulla odio magna, placerat in augue eu, dapibus imperdiet odio. Suspendisse imperdiet metus sit amet rhoncus dapibus. Cras at enim et urna vehicula cursus eu a mauris. Integer magna ante, eleifend ac placerat vitae, porta at nisi. Cras eget malesuada orci. Curabitur nunc est, vulputate id viverra et, dignissim sed odio. Curabitur non mattis sem. Sed bibendum, turpis vitae vehicula faucibus, nunc quam ultricies lectus, vitae viverra felis turpis at libero. - -Nullam ut egestas ligula. Proin hendrerit justo a lectus commodo venenatis. Nulla facilisi. Ut cursus lorem quis est bibendum condimentum. Aenean in tristique odio. Fusce tempor hendrerit ipsum. Curabitur mollis felis justo, quis dapibus erat auctor vel. Sed augue lectus, finibus ut urna quis, ullamcorper vestibulum dui. Etiam molestie aliquam tempor. Integer mattis sollicitudin erat, et tristique elit varius vel. Mauris a ex justo. - -Nam eros est, imperdiet non volutpat rutrum, pellentesque accumsan ligula. Duis sit amet turpis metus. Aenean in rhoncus metus, ac fringilla ex. Suspendisse condimentum egestas purus, ut pharetra odio vulputate vel. Duis tincidunt massa a placerat ultrices. Mauris ultricies nibh sit amet condimentum malesuada. Duis tincidunt id ipsum sed congue. - -Praesent eu ex augue. Nullam in porta ligula. In tincidunt accumsan arcu, in pellentesque magna tristique in. Mauris eleifend libero ac nisl viverra faucibus. Nam sollicitudin dolor in commodo hendrerit. Cras at orci metus. Ut quis laoreet orci. Vivamus ultrices leo pellentesque tempor aliquet. Maecenas ut eros vitae purus placerat vestibulum. Etiam vitae gravida dolor, quis rhoncus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. - -Suspendisse fringilla lacinia sagittis. Integer tincidunt consectetur tristique. Morbi non orci convallis, congue sapien quis, vulputate nunc. Donec a libero vel magna elementum facilisis non quis mi. Mauris posuere tellus non ipsum ultrices elementum. Vivamus massa velit, facilisis quis placerat aliquet, aliquet nec leo. Praesent a maximus sem. Sed neque elit, feugiat vel quam non, molestie sagittis nunc. Etiam luctus nunc ac mauris scelerisque, nec rhoncus lacus convallis. Nunc pharetra, nunc ac pulvinar aliquam, ex ipsum euismod augue, nec porttitor lacus turpis vitae neque. Fusce bibendum odio id tortor faucibus pellentesque. Sed ac porta nibh, eu gravida erat. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis ullamcorper felis. Nulla mattis sagittis ante ac tincidunt. Integer ac felis efficitur, viverra libero et, facilisis ligula. Suspendisse a metus a massa rhoncus posuere. Phasellus suscipit ligula ut lacus facilisis, ac pellentesque ex tempor. Quisque consectetur massa mi, ac molestie libero dictum quis. Proin porttitor ligula quis erat tincidunt venenatis. Proin congue nunc sed elit gravida, nec consectetur lectus sodales. Etiam tincidunt convallis ipsum at vestibulum. Quisque maximus enim et mauris porttitor, et molestie magna tristique. Morbi vitae metus elit. Maecenas sed volutpat turpis. Aliquam vitae dolor vestibulum, elementum purus eget, dapibus nibh. Nullam egestas dui ac rutrum semper. - -Etiam hendrerit est metus, et condimentum metus aliquam ac. Pellentesque id neque id ipsum rhoncus vulputate. Aliquam erat nisl, posuere sit amet ligula ac, fermentum blandit felis. Vivamus fermentum mi risus, non lacinia purus viverra id. Aenean ac sapien consequat, finibus mauris nec, porta sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis consectetur ex, dignissim bibendum nulla. Phasellus ac libero at quam vehicula euismod non eu leo. Phasellus a sapien augue. - -Maecenas ligula dui, bibendum vitae mauris et, auctor laoreet felis. Duis non libero a mi semper mattis. Quisque consequat luctus massa, quis tristique eros auctor feugiat. Maecenas sodales euismod neque vitae facilisis. Nullam laoreet imperdiet velit at pellentesque. Etiam massa odio, facilisis a consequat vitae, placerat vel magna. Nunc sagittis eros nec urna fringilla, pulvinar vestibulum nibh scelerisque. Sed magna metus, cursus eu consequat et, pharetra a est. Suspendisse elementum neque a dui malesuada lacinia. Donec sed ipsum volutpat, cursus urna id, ullamcorper arcu. Maecenas laoreet nisl eget velit egestas sollicitudin. Etiam nisl turpis, mollis id dignissim vitae, tristique vehicula ante. Maecenas eget placerat est, at rutrum augue. Vivamus faucibus lacinia ullamcorper. Sed pulvinar urna sodales ante sodales, at gravida leo dictum. - -Morbi maximus, quam a lobortis bibendum, enim felis varius elit, ac vehicula elit nisl ut lacus. Quisque ut arcu augue. Praesent id turpis quam. Sed sed arcu eros. Maecenas at cursus lorem, ac eleifend nisi. Fusce mattis felis at commodo pharetra. Praesent ac commodo ipsum. Quisque finibus et eros vitae tincidunt. In hac habitasse platea dictumst. Praesent purus ipsum, luctus lobortis ornare quis, auctor eget justo. Nam vel enim sollicitudin, faucibus tortor eu, sagittis eros. Ut nec consectetur erat. Donec ultricies malesuada ligula, a hendrerit sapien volutpat in. Maecenas sed enim vitae sapien pulvinar faucibus. - -Proin semper nunc nibh, non consequat neque ullamcorper vel. Maecenas lobortis sagittis blandit. Aenean et arcu ultricies turpis malesuada malesuada. Ut quam ex, laoreet ut blandit cursus, feugiat vitae dolor. Etiam ex lacus, scelerisque vel erat vel, efficitur tincidunt magna. Morbi tristique lacinia dolor, in egestas magna ultrices vitae. Integer ultrices leo ac tempus venenatis. Praesent ac porta tortor. Vivamus ornare blandit tristique. Nulla rutrum finibus pellentesque. In non dui elementum, fermentum ipsum vel, varius magna. Pellentesque euismod tortor risus, ac pellentesque nisl faucibus eget. - -Vivamus eu enim purus. Cras ultrices rutrum egestas. Sed mollis erat nibh, at posuere nisl luctus nec. Nunc vulputate, sapien id auctor molestie, nisi diam tristique ante, non convallis tellus nibh at orci. Morbi a posuere purus, in ullamcorper ligula. Etiam elementum sit amet dui imperdiet iaculis. Proin vitae tincidunt ipsum, sit amet placerat lectus. Curabitur commodo sapien quam, et accumsan lectus fringilla non. Nullam eget accumsan enim, ac pharetra mauris. Sed quis tristique velit, vitae commodo nisi. Duis turpis dui, maximus ut risus at, finibus consequat nunc. Maecenas sed est accumsan, aliquet diam in, facilisis risus. Curabitur vehicula rutrum auctor. Nam iaculis risus pulvinar maximus viverra. Nulla vel augue et ex sagittis blandit. - -Ut sem nulla, porta ac ante ac, posuere laoreet eros. Donec sodales posuere justo a auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras mollis at orci hendrerit porta. Nullam sodales tortor tortor, non lacinia diam finibus id. Duis libero orci, suscipit ac odio et, dictum consequat ipsum. Pellentesque eu ligula sagittis, volutpat eros at, lacinia lorem. Cras euismod tellus in iaculis tempor. Quisque accumsan, magna a congue venenatis, ante ipsum aliquam lectus, at egestas enim nunc at justo. Quisque sem purus, viverra ut tristique ut, maximus id enim. Etiam quis placerat sem. In sollicitudin, lacus eu rutrum mollis, nulla eros luctus elit, vel dapibus urna purus nec urna. Phasellus egestas massa quam, ac molestie erat hendrerit a. Praesent ultrices neque ut turpis molestie auctor. Etiam molestie placerat purus, et euismod erat aliquam in. Morbi id suscipit justo. - -Proin est ante, consequat at varius a, mattis quis felis. Sed accumsan nibh sit amet ipsum elementum posuere. Vestibulum bibendum id diam sit amet gravida. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi nec dolor vel ipsum dignissim hendrerit vel non ipsum. Praesent facilisis orci quis elit auctor lobortis. Phasellus cursus risus lectus, vel lobortis libero dapibus in. Quisque tristique tempus leo a pulvinar. Pellentesque a magna tincidunt, pellentesque massa nec, laoreet orci. Morbi congue ornare dolor quis commodo. Phasellus massa nisi, tincidunt at eros dictum, hendrerit lobortis urna. Maecenas porta, magna id mattis molestie, nibh tellus lobortis sem, eget tincidunt ipsum quam eu turpis. - -Ut gravida orci risus, vel rutrum mauris vehicula id. Etiam bibendum, neque a placerat condimentum, ex orci imperdiet lectus, quis dapibus arcu lacus eget lectus. Sed consequat non mi sit amet venenatis. Fusce vestibulum erat libero, eget hendrerit risus vulputate sollicitudin. Integer sed eleifend felis. Donec commodo, sem eu mattis placerat, urna odio aliquam tellus, et laoreet justo tellus eget erat. Fusce sed suscipit tortor. Nam hendrerit nibh ac nunc auctor lacinia. Pellentesque placerat condimentum ipsum, eget semper tortor hendrerit vel. Nullam non urna eu lacus pellentesque congue ut id eros. - -Nunc finibus leo in rhoncus tristique. Sed eu ipsum nec nisl egestas faucibus eget a felis. Pellentesque vitae nisi in nulla accumsan fermentum. Sed venenatis feugiat eleifend. Fusce porttitor varius placerat. Aliquam aliquet lacus sit amet mattis mollis. Sed vel nulla quis dolor suscipit vehicula ac viverra lorem. Duis viverra ipsum eget nulla ullamcorper fermentum. Mauris tincidunt arcu quis quam fringilla ornare. Donec et iaculis tortor. Nam ultricies libero vel ipsum aliquet efficitur. Morbi eget dolor aliquam, tempus sapien eget, viverra ante. Donec varius mollis ex, sed efficitur purus euismod interdum. Quisque vel sapien non neque tincidunt semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Suspendisse sit amet purus leo. Fusce lectus lorem, aliquam ac nulla eget, imperdiet ornare eros. Nullam sem augue, varius in nisi non, sollicitudin pellentesque ante. Etiam eu odio condimentum, tempor libero et, egestas arcu. Cras pellentesque eleifend aliquet. Pellentesque non blandit ligula. Ut congue viverra rhoncus. Phasellus mattis mi ac eros placerat, eu feugiat tellus ultrices. Aenean mollis laoreet libero eu imperdiet. Cras sed pulvinar mi, ac vehicula ligula. Vestibulum sit amet ex massa. In a egestas eros. - -Mauris pretium ipsum risus, venenatis cursus ante imperdiet id. Praesent eu turpis nec risus feugiat maximus ullamcorper ac lectus. Integer placerat at mi vel dapibus. Vestibulum fermentum turpis sit amet turpis viverra, id aliquet diam suscipit. Nam nec ex sed ante ullamcorper pharetra quis sit amet risus. Sed ac faucibus velit, id feugiat nibh. Nullam eget ipsum ex. Vivamus tincidunt non nunc non faucibus. Quisque bibendum viverra facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at nisi hendrerit quam suscipit egestas. Curabitur laoreet maximus ultricies. Duis ut tellus ac augue molestie dictum. - -Suspendisse rhoncus iaculis erat, ut ullamcorper est tristique eget. Donec auctor nec risus at gravida. Vivamus volutpat vulputate tellus, vel ultricies eros suscipit eget. Ut pulvinar id mi eu tempus. Morbi malesuada augue in dui varius, nec blandit neque vehicula. Donec ornare nec nisl in mollis. Morbi enim nisi, rhoncus nec est id, dapibus tempus urna. Ut id elit a felis vestibulum consectetur. Duis lectus quam, pharetra sit amet diam sed, posuere vestibulum erat. Fusce vitae maximus massa. Nullam id metus tempus, iaculis risus eu, lobortis urna. Quisque in congue urna. Pellentesque placerat neque in augue dapibus, non varius ex malesuada. Curabitur ut eleifend libero. Fusce vitae ligula luctus, fermentum enim vitae, ultrices erat. - -Sed viverra augue turpis, scelerisque egestas sapien mattis eu. Duis laoreet magna at ex pharetra dapibus. Praesent eget odio vel quam venenatis dictum. Nulla in sollicitudin dolor. Mauris lobortis nec eros vel rhoncus. Vestibulum porta viverra venenatis. Curabitur vel scelerisque quam, a egestas velit. Praesent volutpat tincidunt magna at laoreet. - -Cras nec lorem odio. Pellentesque quis dui urna. Praesent at tellus ac lectus scelerisque placerat nec eu risus. Vestibulum sit amet mattis ligula. Vivamus sed nisi at leo elementum accumsan at sit amet arcu. Aenean mattis tellus nec leo gravida, eget hendrerit nisl faucibus. Mauris pellentesque luctus condimentum. Maecenas pretium sapien nunc, eget commodo dolor maximus id. Mauris vestibulum accumsan massa a dictum. Phasellus interdum quam ligula, ut maximus diam blandit aliquam. Nunc vitae ex eu erat condimentum consectetur. Maecenas interdum condimentum volutpat. - -Donec et enim a libero rutrum laoreet. Praesent a condimentum sem, at tincidunt quam. In vel molestie risus. Sed urna dui, molestie vitae mollis laoreet, tempor quis lectus. Praesent vitae auctor est, et aliquet nunc. Curabitur vulputate blandit nulla, at gravida metus. Maecenas gravida dui eu iaculis tristique. Pellentesque posuere turpis nec auctor eleifend. Suspendisse bibendum diam eu tellus lobortis, et laoreet quam congue. In hac habitasse platea dictumst. Morbi dictum neque velit, eget rutrum eros ultrices sit amet. - -Phasellus fermentum risus pharetra consectetur bibendum. Donec magna tortor, lacinia vitae nibh quis, aliquet pretium lorem. Donec turpis nisi, pretium eu enim volutpat, mattis malesuada augue. Nullam vel tellus iaculis, sollicitudin elit eget, tincidunt lacus. Fusce elementum elementum felis et iaculis. Suspendisse porta eros nec neque malesuada, in malesuada ante sollicitudin. Vivamus bibendum viverra molestie. - -Integer feugiat, erat nec convallis aliquam, velit felis congue erat, molestie eleifend tellus erat in tellus. Nunc et justo purus. Donec egestas fermentum dui non feugiat. Quisque in sapien sagittis, gravida quam id, iaculis lectus. Cras sagittis rhoncus bibendum. Fusce quis metus in velit scelerisque tincidunt at non ipsum. Vivamus efficitur ante eu odio vulputate, vitae ultricies risus vehicula. Proin eget odio eu sem tincidunt feugiat vel id lorem. - -Vestibulum sit amet nulla dignissim, euismod mi in, fermentum tortor. Donec ut aliquet libero, lacinia accumsan velit. Donec et nulla quam. Nullam laoreet odio nec nunc imperdiet, a congue eros venenatis. Quisque nec tellus sit amet neque interdum posuere. Duis quis mi gravida, tincidunt diam convallis, ultricies augue. Mauris consequat risus non porttitor congue. Ut in ligula consequat, viverra nunc a, eleifend enim. Duis ligula urna, imperdiet nec facilisis et, ornare eu ex. Proin lobortis lectus a lobortis porttitor. Nulla leo metus, egestas eu libero sed, pretium faucibus felis. Vestibulum non sem tortor. Nam cursus est leo. Vivamus luctus enim odio, non interdum sem dapibus a. Aenean accumsan consequat lectus in imperdiet. - -Donec vehicula laoreet ipsum in posuere. Quisque vel quam imperdiet, sollicitudin nisi quis, suscipit velit. Morbi id sodales mauris. Curabitur tellus arcu, feugiat sed dui sit amet, sodales sagittis libero. Aenean vel suscipit metus, non placerat leo. Vestibulum quis nulla elit. Proin scelerisque non ante ut commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed non urna dolor. Suspendisse convallis mi porta pulvinar ultrices. Suspendisse quam ipsum, hendrerit non scelerisque molestie, interdum dictum nunc. Morbi condimentum condimentum turpis eu luctus. Pellentesque sagittis sollicitudin odio, sed ultricies felis ornare sit amet. Sed ultrices ex leo, a tincidunt nisl gravida sed. Nullam ornare accumsan porta. Praesent consectetur id est nec sollicitudin. - -In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sed ultrices nibh. Duis accumsan suscipit eros, a dictum odio tempus sit amet. Aenean imperdiet erat ac lacus finibus, scelerisque cursus massa imperdiet. Mauris molestie risus ut lacinia posuere. Nulla et sodales purus. Maecenas orci erat, placerat in tristique quis, placerat in mi. - -Donec sollicitudin pellentesque odio in feugiat. Morbi eu dolor ut mauris congue sollicitudin. Aliquam erat volutpat. Nulla id varius dui. Curabitur finibus urna ante, consectetur interdum nisi volutpat a. Quisque quis mi tristique, consequat tellus eget, rutrum sapien. Vivamus vitae tellus vulputate, rutrum ex eu, vulputate sem. Suspendisse viverra lorem tellus, vel interdum orci gravida quis. Ut laoreet arcu at mi ullamcorper finibus. Duis porta sagittis vestibulum. Sed commodo nisl vitae urna sollicitudin, nec lacinia est sodales. Curabitur imperdiet sodales dui sed iaculis. Sed ac tellus maximus, eleifend quam sit amet, feugiat elit. Aenean viverra, dui at mattis varius, est odio vestibulum sapien, sit amet mollis libero massa nec velit. Etiam quis sodales justo. - -Ut ultricies, sem eget sodales feugiat, nunc arcu congue elit, ac tempor justo massa nec purus. Maecenas enim nunc, pharetra eget dictum sit amet, tempus pellentesque velit. Suspendisse venenatis ligula in nulla mattis, et imperdiet ex tincidunt. Etiam vulputate, tellus et ultrices suscipit, enim velit laoreet massa, vitae congue odio enim ac urna. Morbi quam lorem, iaculis ac varius sagittis, euismod quis dolor. In ut dui eu purus feugiat consectetur. Vestibulum cursus velit quis lacus pellentesque iaculis. Cras in risus sed mauris porta rutrum. Nulla facilisi. Nullam eu bibendum est, non pellentesque lectus. Sed imperdiet feugiat lorem, quis convallis ante auctor in. Maecenas justo magna, scelerisque sit amet tellus eget, varius elementum risus. Duis placerat et quam sed varius. - -Duis nec nibh vitae nibh dignissim mollis quis sed felis. Curabitur vitae quam placerat, venenatis purus ut, euismod nisl. Curabitur porttitor nibh eu pulvinar ullamcorper. Suspendisse posuere nec ipsum ac dapibus. Cras convallis consectetur urna. Phasellus a nibh in dolor lacinia posuere id eget augue. In eu pharetra lorem, vitae cursus lacus. Aliquam tincidunt nibh lectus. Aenean facilisis ultricies posuere. Sed ut placerat orci. Curabitur scelerisque gravida blandit. Maecenas placerat ligula eget suscipit fringilla. Mauris a tortor justo. Aliquam hendrerit semper mollis. Phasellus et tincidunt libero. Etiam vel quam libero. - -Quisque aliquet tempor ex. Ut ante sem, vehicula at enim vel, gravida porta elit. Etiam vitae lacus a neque lobortis consectetur. Mauris sed interdum odio. Mauris elementum ex blandit tempor cursus. Integer in enim in leo viverra elementum. Fusce consectetur metus et sem rutrum, mattis euismod diam semper. Nunc sed ipsum vel urna consequat vehicula. Donec cursus pretium lorem, vestibulum pretium felis commodo sit amet. Nam blandit felis enim, eget gravida ex faucibus a. In nec neque massa. Etiam laoreet posuere ipsum. Praesent volutpat nunc dolor, ac vulputate magna facilisis non. Aenean congue turpis vel lectus sollicitudin tristique. Sed nec consequat purus, non vehicula quam. Etiam ultricies, est ac dictum tincidunt, turpis turpis pretium massa, a vulputate libero justo at nibh. - -Aliquam erat volutpat. Cras ultrices augue ac sollicitudin lobortis. Curabitur et aliquet purus. Duis feugiat semper facilisis. Phasellus lobortis cursus velit, a sollicitudin tortor. Nam feugiat sapien non dapibus condimentum. Morbi at mi bibendum, commodo quam at, laoreet enim. Integer eu ultrices enim. Sed vestibulum eu urna ut dictum. Curabitur at mattis leo, sed cursus massa. Aliquam porttitor, felis quis fermentum porttitor, justo velit feugiat nulla, eget condimentum sem dui ut sapien. - -In fringilla elit eu orci aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eget fringilla tellus. Curabitur fermentum, mi et condimentum suscipit, elit neque bibendum dui, et hendrerit nunc metus id ipsum. Morbi placerat mi in hendrerit congue. Ut feugiat mauris eget scelerisque viverra. Vivamus sit amet erat dictum, sagittis lectus nec, pulvinar lorem. Sed non enim ac dui sollicitudin aliquet. Quisque ut lacus dolor. Fusce hendrerit malesuada euismod. Nulla faucibus vel mauris eu mollis. Mauris est diam, fringilla ac arcu feugiat, efficitur volutpat turpis. Aliquam venenatis cursus massa sed porttitor. Ut ac finibus enim, in tincidunt sapien. - -Nunc faucibus semper turpis a lacinia. Phasellus gravida, libero vel pulvinar ornare, ex sem tincidunt lectus, sit amet convallis augue risus at tortor. Quisque sit amet ipsum id nulla posuere vestibulum. Pellentesque scelerisque mauris vel leo viverra sodales. Nulla viverra aliquam ex, ut rutrum enim fermentum venenatis. Aenean eget dapibus ex, eget faucibus metus. Vestibulum volutpat leo in diam semper, eget porta magna suscipit. Sed sit amet nulla blandit, aliquam dolor ac, gravida velit. Sed vel velit viverra, maximus est id, convallis justo. - -Curabitur nulla ante, vulputate at libero vel, ullamcorper rutrum nibh. Pellentesque porttitor eu mauris id mattis. Duis vulputate augue elit, eget interdum justo pretium vel. Maecenas eu vulputate arcu, eget posuere purus. Suspendisse viverra a velit dictum eleifend. Suspendisse vitae dapibus diam. Donec vehicula justo in ante interdum, eu luctus diam placerat. Vivamus convallis ipsum eu orci suscipit, sed fermentum enim euismod. Maecenas faucibus elit vitae ex ornare tristique. Donec vestibulum nec elit sit amet porttitor. Aenean tempor lectus eget tortor hendrerit luctus. Nullam interdum vitae lectus vel feugiat. Cras in risus non magna consectetur lobortis. Sed faucibus enim quis gravida convallis. - -Phasellus eget massa sit amet libero ultrices suscipit. Vivamus at risus sapien. Nam mollis nunc eget velit dictum maximus. Sed pellentesque, nunc ac fringilla lacinia, quam enim mattis ex, sed euismod tortor metus eu neque. Ut mattis nisl ut lectus rhoncus, sodales bibendum eros porta. Nulla porttitor enim nec diam sagittis, eget porta velit efficitur. Vestibulum ultricies eros neque. Phasellus rutrum suscipit enim, in interdum ante gravida vitae. Sed in sagittis diam, non commodo velit. - -Morbi hendrerit odio orci, nec tincidunt odio rhoncus nec. Mauris neque velit, vehicula a lorem at, suscipit tristique dui. Sed finibus, nisl in mattis convallis, turpis neque sodales lacus, eu porta enim magna non diam. Nam commodo sodales risus consectetur malesuada. In eget elementum justo. Phasellus sit amet massa imperdiet, dapibus nunc sit amet, suscipit orci. Fusce condimentum laoreet feugiat. Ut ut viverra ante. Praesent bibendum interdum commodo. Nulla mollis nisi a est ornare volutpat. Sed at ligula eu nisi dapibus tempus. Proin cursus vestibulum justo, nec efficitur justo dignissim vel. Nunc quis maximus eros. - -Cras viverra, diam a tristique mattis, libero felis vulputate tellus, a ornare felis leo a dui. Nulla ante nulla, finibus ut tellus ut, blandit pharetra nibh. Proin eleifend fermentum ex, eget auctor libero vulputate in. Nullam ultricies, mauris placerat pretium placerat, leo urna lobortis leo, vel placerat arcu libero sed mauris. Aliquam mauris ligula, ornare at urna at, eleifend gravida ligula. Vestibulum consectetur ut nulla non scelerisque. Donec ornare, sem nec elementum aliquam, urna nulla bibendum metus, eu euismod dui ligula ac est. Fusce laoreet erat eu ex lobortis, quis bibendum ligula interdum. Sed vel mi erat. Vivamus id lacus ac enim mattis tempor. Nunc ultricies pellentesque enim sed euismod. Fusce tincidunt convallis elit quis aliquam. Mauris nulla ipsum, sollicitudin quis diam ac, feugiat volutpat tellus. In nibh nibh, vulputate quis tincidunt quis, pulvinar eget magna. Pellentesque quis finibus dolor. Suspendisse viverra vitae lectus non eleifend. - -Nunc ut orci et sapien maximus semper. Nulla dignissim sem urna, ac varius lectus ultricies id. Quisque aliquet pulvinar pretium. In ultricies molestie tellus vehicula porta. Nam enim lorem, aliquam eget ex et, hendrerit volutpat quam. Maecenas diam lacus, pellentesque eget tempus ac, pharetra eu elit. Donec vel eros a sem facilisis vulputate. Nullam ac nisi vulputate, laoreet nisl ac, eleifend sem. Nullam mi massa, rhoncus sed pharetra interdum, tincidunt eget nunc. Aliquam viverra mattis posuere. Mauris et dui sed nisl sollicitudin fermentum quis ut arcu. Nam placerat eget orci at tincidunt. Curabitur vel turpis metus. Phasellus nibh nulla, fermentum scelerisque sem vel, gravida tincidunt velit. Pellentesque vel quam tempor, finibus massa pellentesque, condimentum dui. - -Donec at mattis neque. Etiam velit diam, consequat auctor mauris id, hendrerit faucibus metus. Maecenas ullamcorper eros a est sodales, ac consectetur odio scelerisque. Donec leo metus, imperdiet at pellentesque vel, feugiat id erat. Suspendisse at magna enim. Vestibulum placerat sodales lorem id sollicitudin. Aenean at euismod ligula, eget mollis diam. Phasellus pulvinar, orci nec pretium condimentum, est erat facilisis purus, quis feugiat augue elit aliquam nulla. Aenean vitae tortor id risus congue tincidunt. Sed dolor enim, mattis a ullamcorper id, volutpat ac leo. - -Proin vehicula feugiat augue, id feugiat quam sodales quis. Donec et ultricies massa, a lacinia nulla. Duis aliquam augue ornare euismod viverra. Ut lectus risus, rutrum sit amet efficitur a, luctus nec nisl. Cras volutpat ullamcorper congue. Sed vitae odio metus. Phasellus aliquet euismod varius. - -Nullam sem ex, malesuada ut magna ut, pretium mollis arcu. Nam porttitor eros cursus mi lacinia faucibus. Suspendisse aliquet eleifend iaculis. Maecenas sit amet viverra tortor. Nunc a mollis risus. Etiam tempus dolor in tortor malesuada mattis. Ut tincidunt venenatis est sit amet dignissim. Vestibulum massa enim, tristique sed scelerisque eu, fringilla ac velit. Donec efficitur quis urna sit amet malesuada. Vestibulum consequat ac ligula in dapibus. Maecenas massa massa, molestie non posuere nec, elementum ut magna. In nisi erat, mollis non venenatis eu, faucibus in justo. Morbi gravida non ex non egestas. Pellentesque finibus laoreet diam, eu commodo augue congue vitae. - -Aenean sem mi, ullamcorper dapibus lobortis vitae, interdum tincidunt tortor. Vivamus eget vulputate libero. Ut bibendum posuere lectus, vel tincidunt tortor aliquet at. Phasellus malesuada orci et bibendum accumsan. Aliquam quis libero vel leo mollis porta. Sed sagittis leo ac lacus dictum, ac malesuada elit finibus. Suspendisse pharetra luctus commodo. Vivamus ultricies a odio non interdum. Vivamus scelerisque tincidunt turpis quis tempor. Pellentesque tortor ligula, varius non nunc eu, blandit sollicitudin neque. Nunc imperdiet, diam et tristique luctus, ipsum ex condimentum nunc, sit amet aliquam justo velit sed libero. Duis vel suscipit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tincidunt neque vel massa ultricies, id dictum leo consequat. Curabitur lobortis ultricies tellus, eget mattis nisl aliquam sit amet. - -Proin at suscipit justo. Vivamus ut vestibulum nisl. Pellentesque enim odio, pharetra non magna sed, efficitur auctor magna. Praesent tincidunt ante quis ante hendrerit viverra. Pellentesque vel ipsum id magna vulputate efficitur. Sed nec neque accumsan, pulvinar sapien quis, euismod mauris. Donec condimentum laoreet sapien quis gravida. Quisque sed mattis purus. Vestibulum placerat vel neque maximus scelerisque. - -Vestibulum mattis quam quis efficitur elementum. Duis dictum dolor ac scelerisque commodo. Fusce sollicitudin nisi sit amet dictum placerat. Suspendisse euismod pharetra eleifend. In eros nisl, porttitor sed mauris at, consectetur aliquet mauris. Donec euismod viverra neque sed fermentum. Phasellus libero magna, accumsan ut ultricies vitae, dignissim eget metus. Donec tellus turpis, interdum eget maximus nec, hendrerit eget massa. Curabitur auctor ligula in iaculis auctor. In ultrices quam suscipit cursus finibus. Aenean id mi at dolor interdum iaculis vitae ut lorem. Nullam sed nibh fringilla, lacinia odio nec, placerat erat. In dui libero, viverra ac viverra ac, pellentesque sit amet turpis. - -Nulla in enim ex. Sed feugiat est et consectetur venenatis. Cras varius facilisis dui vel convallis. Vestibulum et elit eget tellus feugiat pellentesque. In ut ante eu purus aliquet posuere. Nulla nec ornare sem, sed luctus lorem. Nam varius iaculis odio, eget faucibus nisl ullamcorper in. Sed eget cursus felis, nec efficitur nisi. - -Vivamus commodo et sem quis pulvinar. Pellentesque libero ante, venenatis vitae ligula sit amet, ornare sollicitudin nulla. Mauris eget tellus hendrerit, pulvinar metus quis, tempor nisi. Proin magna ex, laoreet sed tortor quis, varius fermentum enim. Integer eu dolor dictum, vulputate tortor et, aliquet ligula. Vestibulum vitae justo id mauris luctus sollicitudin. Suspendisse eget auctor neque, sodales egestas lorem. Vestibulum lacinia egestas metus vitae euismod. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ex tellus, volutpat nec pulvinar sit amet, condimentum vitae dui. Curabitur vel felis sodales, lacinia nunc iaculis, ullamcorper augue. Pellentesque consequat dolor quis eros efficitur malesuada. Nulla ut malesuada lectus. - -Morbi et tristique ante. Aliquam erat volutpat. Vivamus vitae dui nec turpis pellentesque fermentum. Quisque eget velit massa. Pellentesque tristique aliquam nisl, eu sollicitudin justo venenatis sed. Duis eleifend sem eros, ut aliquam libero porttitor id. Sed non nunc consequat, rhoncus diam eu, commodo erat. Praesent fermentum in lectus id blandit. Donec quis ipsum at justo volutpat finibus. Nulla blandit justo nulla, at mollis lacus consequat eget. Aenean sollicitudin quis eros ut ullamcorper. - -Pellentesque venenatis nulla ut mi aliquet feugiat. Cras semper vel magna nec pharetra. Integer mattis felis et sapien commodo imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis quis luctus felis. Vestibulum justo nibh, aliquam non lectus vitae, molestie placerat justo. Donec lorem nibh, gravida sit amet hendrerit ac, maximus id ipsum. Nunc ac libero sodales risus eleifend sagittis. Phasellus est massa, lobortis elementum ex sed, scelerisque consectetur neque. Nunc faucibus neque id lorem malesuada, eget convallis ex mattis. - -Sed turpis tortor, fermentum non turpis id, posuere varius nibh. Donec iaculis lorem dui. Etiam eros ante, sodales eget venenatis at, consectetur eget risus. Curabitur non aliquam ante, a pretium justo. Maecenas tempor nisl tortor, vitae dictum nisi ultrices eu. Duis eget dui ultrices, porttitor lacus sed, lobortis purus. Quisque mattis elit nec neque sagittis, sed commodo leo blandit. Mauris sodales interdum eleifend. Vestibulum condimentum consectetur augue, id luctus diam convallis et. - -Nunc suscipit risus in justo accumsan, a placerat magna tincidunt. Proin a nisl ipsum. Sed libero dui, tristique in augue quis, auctor tristique risus. Sed porttitor ex augue, eu porta augue molestie a. Duis rhoncus purus libero, eu tempus turpis condimentum at. Sed mollis nisi id lectus placerat tincidunt. Maecenas non scelerisque elit, quis rutrum orci. Donec in tellus pharetra urna ornare lobortis. Phasellus id risus at nisi varius rutrum eu ut turpis. - -Duis dictum justo quis nisl porta, eget tincidunt magna suscipit. Sed velit massa, ullamcorper eu sodales ac, pretium a massa. Duis et rutrum tortor. Nulla accumsan hendrerit sapien, cursus volutpat eros egestas eget. Donec sollicitudin at ante quis sollicitudin. Aenean blandit feugiat diam, id feugiat eros faucibus eget. Donec viverra dolor vel justo scelerisque dignissim. Nulla semper sem nunc, rhoncus semper tellus ultricies sed. Duis in ornare diam. Donec vehicula feugiat varius. Maecenas ut suscipit est. Vivamus sem sem, finibus at dolor sit amet, euismod dapibus ligula. Vestibulum fringilla odio dapibus, congue massa eget, congue sem. Donec feugiat magna eget tortor lacinia scelerisque non et ipsum. - -Suspendisse potenti. Nunc convallis sollicitudin ex eget venenatis. Sed iaculis nibh ex, vel ornare ligula congue dignissim. Quisque sollicitudin dolor ac dui vestibulum, sit amet molestie nisi aliquet. Donec at risus felis. Aenean sollicitudin metus a feugiat porta. Aenean a tortor ut dolor cursus sagittis. Vivamus consectetur porttitor nunc in facilisis. Proin sit amet mi vel lectus consectetur ultrices. - -Sed cursus lectus vitae nunc tristique, nec commodo turpis dapibus. Pellentesque luctus ex id facilisis ornare. Morbi quis placerat dolor. Donec in lectus in arcu mattis porttitor ac sit amet metus. Cras congue mauris non risus sodales, vitae feugiat ipsum bibendum. Nulla venenatis urna sed libero elementum, a cursus lorem commodo. Mauris faucibus lobortis eros nec commodo. - -Nullam suscipit ligula ullamcorper lorem commodo blandit. Nulla porta nibh quis pulvinar placerat. Vivamus eu arcu justo. Vestibulum imperdiet est ut fermentum porttitor. Pellentesque consectetur libero in sapien efficitur scelerisque. Curabitur ac erat sit amet odio aliquet dignissim. Pellentesque mi sem, rhoncus et luctus at, porttitor rutrum lectus. Vestibulum sollicitudin sollicitudin suscipit. Aenean efficitur dolor non ultrices imperdiet. Donec vel sem ex. - -Sed convallis mauris aliquam rutrum cursus. Ut tempor porttitor sodales. Etiam eu risus ac augue gravida egestas et eu dolor. Proin id magna ex. Suspendisse quis lectus quis lorem ultricies tempus. Donec porttitor velit vitae tincidunt faucibus. Aliquam vitae semper nisi. Morbi ultrices, leo non pretium dapibus, dui libero pellentesque ex, vel placerat enim ante vitae dui. Nunc varius, sem sit amet sagittis lobortis, lectus odio scelerisque mauris, ut vestibulum orci magna quis neque. Sed id congue justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris congue nisi est, malesuada mollis elit tincidunt sed. Curabitur sed ex sit amet felis tristique elementum vitae vel nibh. - -Etiam mollis pretium lobortis. Mauris augue lacus, efficitur at lacus sed, mollis tincidunt lectus. Aliquam erat volutpat. Donec at euismod elit, et mattis felis. Sed id lobortis urna. Morbi imperdiet vestibulum leo, sed maximus leo blandit eu. Aliquam semper lorem neque, nec euismod turpis mattis mollis. Quisque lobortis urna ultrices odio pretium, ac venenatis orci faucibus. Suspendisse bibendum odio ligula, sed lobortis massa pharetra nec. Donec turpis justo, iaculis at dictum ac, finibus eu libero. Maecenas quis porttitor mi, sit amet aliquet neque. - -Vivamus auctor vulputate ante, at egestas lorem. Donec eu risus in nulla mollis ultricies at et urna. Duis accumsan porta egestas. Ut vel euismod augue. Fusce convallis nulla ante, nec fringilla velit aliquet at. Nam malesuada dapibus ligula, a aliquam nibh scelerisque ac. Praesent malesuada neque et pellentesque interdum. Curabitur volutpat at turpis vitae tristique. Vivamus porttitor semper congue. Quisque suscipit lacus mi, rhoncus ultrices tortor auctor quis. Maecenas neque neque, molestie ac facilisis eget, luctus ac lorem. In ut odio ut lacus suscipit pulvinar vitae sed elit. Nulla imperdiet, sem quis euismod sagittis, dui erat luctus dolor, faucibus faucibus erat sem eget nunc. Nam accumsan placerat malesuada. Maecenas convallis finibus pulvinar. - -Cras at placerat tortor. Morbi facilisis auctor felis sit amet molestie. Donec sodales sed lorem vitae suscipit. Etiam fermentum pharetra ipsum, nec luctus orci gravida eu. Pellentesque gravida, est non condimentum tempus, mauris ligula molestie est, in congue dolor nisl vel sapien. Duis congue tempor augue, id rutrum eros porta dapibus. Etiam rutrum eget est eget vestibulum. Aenean mollis arcu vel consequat varius. Praesent at condimentum felis. Duis nec interdum nisl. Donec commodo lorem sed sapien scelerisque malesuada non eu urna. In blandit non ipsum at porta. Nam lobortis leo vitae dui auctor, non feugiat quam bibendum. Donec auctor lectus sagittis laoreet maximus. Maecenas rhoncus laoreet porttitor. Vestibulum porttitor augue ut lectus hendrerit, eget posuere mi gravida. - -Sed mattis ex in erat pulvinar, eu imperdiet magna dapibus. Etiam nisi nibh, tempus non tellus sit amet, mattis tempor odio. Quisque nec lorem feugiat, lobortis odio et, commodo nunc. Maecenas semper purus nisi, nec vehicula nibh eleifend vitae. Nulla fermentum a lectus at maximus. Phasellus finibus metus non euismod ultrices. Etiam a pulvinar ante. Quisque convallis nec metus sit amet facilisis. Praesent laoreet massa et sollicitudin laoreet. Vestibulum in mauris aliquet, convallis mi ut, elementum purus. Nulla purus nulla, sodales at hendrerit quis, tempus sed lectus. - -Nam ut laoreet neque, ut maximus nibh. Maecenas quis justo pellentesque, sollicitudin elit at, venenatis velit. Aenean nunc velit, vehicula scelerisque odio at, consectetur laoreet purus. Duis dui purus, malesuada quis ipsum sit amet, tempor interdum libero. Curabitur porta scelerisque sapien, vitae cursus diam condimentum eu. Phasellus sed orci quam. Nullam vitae dui quis purus tincidunt vestibulum. Curabitur quis nulla porta, cursus arcu non, auctor enim. Etiam sollicitudin ex id sem vehicula mollis. Morbi viverra laoreet tincidunt. Praesent ut semper dui. Nam sit amet pretium neque. Mauris vitae luctus diam, in lacinia purus. Maecenas ut placerat justo, ut porta felis. Integer eu mauris ante. - -Aenean porttitor tellus diam, tempor consequat metus efficitur id. Suspendisse ut felis at erat tempor dictum at nec sapien. Sed vestibulum interdum felis, ac mattis mauris porta in. Nunc et condimentum massa. Sed cursus dictum justo et luctus. Integer convallis enim nisl, a rutrum lectus ultricies in. Donec dapibus lacus at nulla dapibus, id sollicitudin velit hendrerit. Fusce a magna at orci mollis rutrum ac a dolor. Aliquam erat volutpat. Morbi varius porta nunc, sit amet sodales ex hendrerit commodo. Donec tincidunt tortor sapien, vitae egestas sapien vehicula eget. - -Suspendisse potenti. Donec pulvinar felis nec leo malesuada interdum. Integer posuere placerat maximus. Donec nibh ipsum, tincidunt vitae luctus vitae, bibendum at leo. Sed cursus nisl ut ex faucibus aliquet sed nec eros. Curabitur molestie posuere felis. Integer faucibus velit eget consequat iaculis. Mauris sed vulputate odio. Phasellus maximus, elit a pharetra egestas, lorem magna semper tellus, vestibulum semper diam felis at sapien. Suspendisse facilisis, nisl sit amet euismod vehicula, libero nulla vehicula dolor, quis fermentum nibh elit sit amet diam. - -Morbi lorem enim, euismod eu varius ut, scelerisque quis odio. Nam tempus vitae eros id molestie. Nunc pretium in nulla eget accumsan. Quisque mattis est ut semper aliquet. Maecenas eget diam elementum, fermentum ipsum a, euismod sapien. Duis quam ligula, cursus et velit nec, ullamcorper tincidunt magna. Donec vulputate nisl est, et ullamcorper urna tempor sit amet. - -Proin lacinia dui non turpis congue pretium. Morbi posuere metus vel purus imperdiet interdum. Morbi venenatis vel eros non ultricies. Nulla vel semper elit. Ut quis purus tincidunt, auctor justo ut, faucibus turpis. Proin quis mattis erat, at faucibus ligula. Mauris in mauris enim. Donec facilisis enim at est feugiat hendrerit. Nam vel nisi lorem. Fusce ultricies convallis diam, in feugiat tortor luctus quis. Donec tempor, leo vitae volutpat aliquam, magna elit feugiat leo, quis placerat sapien felis eget arcu. Donec ornare fermentum eleifend. Integer a est orci. - -Proin rhoncus egestas leo. Nulla ultricies porta elit quis ornare. Nunc fermentum interdum vehicula. In in ligula lorem. Donec nec arcu sit amet orci lobortis iaculis. Mauris at mollis erat, sit amet mollis tortor. Mauris laoreet justo ullamcorper porttitor auctor. Aenean sit amet aliquam lectus, id fermentum eros. Praesent urna sem, vehicula ac fermentum id, dapibus ut purus. Vestibulum vitae tempus nunc. Donec at nunc ornare metus volutpat porta at eget magna. Donec varius aliquet metus, eu lobortis risus aliquam sed. Ut dapibus fermentum velit, ac tincidunt libero faucibus at. - -In in purus auctor, feugiat massa quis, facilisis nisi. Donec dolor purus, gravida eget dolor ac, porttitor imperdiet urna. Donec faucibus placerat erat, a sagittis ante finibus ac. Sed venenatis dignissim elit, in iaculis felis posuere faucibus. Praesent sed viverra dolor. Mauris sed nulla consectetur nunc laoreet molestie in ut metus. Proin ac ex sit amet magna vulputate hendrerit ac condimentum urna. Proin ligula metus, gravida et sollicitudin facilisis, iaculis ut odio. Cras tincidunt urna et augue varius, ut facilisis urna consequat. Aenean vehicula finibus quam. Ut iaculis eu diam ac mollis. Nam mi lorem, tristique eget varius at, sodales at urna. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vitae dictum erat, et auctor ipsum. Nullam nunc nunc, sollicitudin quis magna a, vestibulum fermentum mauris. Praesent at erat dolor. Proin laoreet tristique nulla vel efficitur. Nam sed ultrices nibh, id rutrum nunc. Curabitur eleifend a erat sit amet sollicitudin. Nullam metus quam, laoreet vitae dapibus id, placerat sed leo. Aliquam erat volutpat. Donec turpis nisl, cursus eu ex sit amet, lacinia pellentesque nisl. Sed id ipsum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec interdum scelerisque lorem eu mattis. - -Vivamus ac tristique massa, nec facilisis nisl. Nam ipsum neque, tincidunt vel urna in, cursus imperdiet enim. Nam pellentesque egestas tempus. Morbi facilisis imperdiet libero vitae fringilla. Nam lacinia ligula at sapien facilisis malesuada. Nullam accumsan pulvinar sem, et cursus libero porta sit amet. Curabitur vulputate erat elit, ut pulvinar erat maximus vel. - -Cras aliquet metus ut purus sagittis, vel venenatis ante consectetur. Pellentesque nulla lacus, viverra viverra mattis non, placerat vitae nibh. Donec enim turpis, accumsan sit amet tincidunt eu, imperdiet non metus. Morbi ipsum eros, tincidunt vel est ac, tristique porttitor nibh. Praesent ut ullamcorper mauris. Sed laoreet sit amet diam congue venenatis. Integer porta purus nec orci sagittis posuere. - -Donec vehicula mauris eget lacus mollis venenatis et sed nibh. Nam sodales ligula ipsum, scelerisque lacinia ligula sagittis in. Nam sit amet ipsum at erat malesuada congue. Aenean ut sollicitudin sapien. Etiam at tempor odio. Mauris vitae purus ut magna suscipit consequat. Vivamus quis sapien neque. Nulla vulputate sem sit amet massa pellentesque, eleifend tristique ligula egestas. Suspendisse tincidunt gravida mi, in pulvinar lectus egestas non. Aenean imperdiet ex sit amet nunc sollicitudin porta. Integer justo odio, ultricies at interdum in, rhoncus vitae sem. Sed porttitor arcu quis purus aliquet hendrerit. Praesent tempor tortor at dolor dictum pulvinar. Nulla aliquet nunc non ligula scelerisque accumsan. Donec nulla justo, congue vitae massa in, faucibus hendrerit magna. Donec non egestas purus. - -öäüß Vivamus iaculis, lacus efficitur faucibus porta, dui nulla facilisis ligula, ut sodales odio nunc id sapien. Cras viverra auctor ipsum, dapibus mattis neque dictum sed. Sed convallis fermentum molestie. Nulla facilisi turpis duis. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/small.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/small.txt deleted file mode 100644 index da2e8042fb4..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/small.txt +++ /dev/null @@ -1 +0,0 @@ -Small File \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/small_umlaut.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/small_umlaut.txt deleted file mode 100644 index a01c1626b30..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/small_umlaut.txt +++ /dev/null @@ -1 +0,0 @@ -Small File with Ümlaut \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some.utf16le b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some.utf16le deleted file mode 100644 index 41c12add670..00000000000 Binary files a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some.utf16le and /dev/null differ diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_big5.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_big5.txt deleted file mode 100644 index b9e2570fef9..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_big5.txt +++ /dev/null @@ -1 +0,0 @@ -¤¤¤åabc \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_cp1252.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_cp1252.txt deleted file mode 100644 index 2ea52dc709f..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_cp1252.txt +++ /dev/null @@ -1,3 +0,0 @@ -ObjectCount = LoadObjects("Öffentlicher Ordner"); - -Private = "Persönliche Information" diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_cyrillic.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_cyrillic.txt deleted file mode 100644 index f8ee3066712..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_cyrillic.txt +++ /dev/null @@ -1 +0,0 @@ -€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æąįāćäåęēčéźėģķīļ \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_gbk.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_gbk.txt deleted file mode 100644 index eab73d1951b..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_gbk.txt +++ /dev/null @@ -1 +0,0 @@ -ÖŠ¹śabc \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_shiftjis.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_shiftjis.txt deleted file mode 100644 index efa955b3ecb..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_shiftjis.txt +++ /dev/null @@ -1 +0,0 @@ -’†•¶abc \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_small_cp1252.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_small_cp1252.txt deleted file mode 100644 index 0ad555462f2..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_small_cp1252.txt +++ /dev/null @@ -1 +0,0 @@ -Private = "Persönlicheß Information" \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_utf16le.css b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_utf16le.css deleted file mode 100644 index aea04aa2cd1..00000000000 Binary files a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_utf16le.css and /dev/null differ diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_utf8_bom.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_utf8_bom.txt deleted file mode 100644 index 36cdec0c88f..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/some_utf8_bom.txt +++ /dev/null @@ -1 +0,0 @@ -This is some UTF 8 with BOM file. \ No newline at end of file diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/utf16_be_nobom.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/utf16_be_nobom.txt deleted file mode 100644 index 63c29412093..00000000000 Binary files a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/utf16_be_nobom.txt and /dev/null differ diff --git a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/utf16_le_nobom.txt b/src/vs/workbench/services/textfile/test/electron-browser/fixtures/utf16_le_nobom.txt deleted file mode 100644 index 7b94ff215b0..00000000000 Binary files a/src/vs/workbench/services/textfile/test/electron-browser/fixtures/utf16_le_nobom.txt and /dev/null differ diff --git a/src/vs/workbench/services/textfile/test/electron-browser/nativeTextFileService.io.test.ts b/src/vs/workbench/services/textfile/test/electron-browser/nativeTextFileService.io.test.ts deleted file mode 100644 index 3592688acb8..00000000000 --- a/src/vs/workbench/services/textfile/test/electron-browser/nativeTextFileService.io.test.ts +++ /dev/null @@ -1,76 +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 { tmpdir } from 'os'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { IFileService } from 'vs/platform/files/common/files'; -import { TextFileEditorModelManager } from 'vs/workbench/services/textfile/common/textFileEditorModelManager'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; -import { Promises } from 'vs/base/node/pfs'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; -import { detectEncodingByBOM } from 'vs/workbench/services/textfile/test/node/encoding/encoding.test'; -import { workbenchInstantiationService, TestNativeTextFileServiceWithEncodingOverrides } from 'vs/workbench/test/electron-browser/workbenchTestServices'; -import createSuite from 'vs/workbench/services/textfile/test/common/textFileService.io.test'; -import { IWorkingCopyFileService, WorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { WorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; - -flakySuite('Files - NativeTextFileService i/o', function () { - const disposables = new DisposableStore(); - - let service: ITextFileService; - let testDir: string; - - function readFile(path: string): Promise; - function readFile(path: string, encoding: BufferEncoding): Promise; - function readFile(path: string, encoding?: BufferEncoding): Promise { - return Promises.readFile(path, encoding); - } - - createSuite({ - setup: async () => { - const instantiationService = workbenchInstantiationService(disposables); - - const logService = new NullLogService(); - const fileService = new FileService(logService); - - const fileProvider = new DiskFileSystemProvider(logService); - disposables.add(fileService.registerProvider(Schemas.file, fileProvider)); - disposables.add(fileProvider); - - const collection = new ServiceCollection(); - collection.set(IFileService, fileService); - - collection.set(IWorkingCopyFileService, new WorkingCopyFileService(fileService, new WorkingCopyService(), instantiationService, new UriIdentityService(fileService))); - - service = instantiationService.createChild(collection).createInstance(TestNativeTextFileServiceWithEncodingOverrides); - - testDir = getRandomTestPath(tmpdir(), 'vsctests', 'textfileservice'); - const sourceDir = FileAccess.asFileUri('vs/workbench/services/textfile/test/electron-browser/fixtures').fsPath; - - await Promises.copy(sourceDir, testDir, { preserveSymlinks: false }); - - return { service, testDir }; - }, - - teardown: () => { - (service.files).dispose(); - - disposables.clear(); - - return Promises.rm(testDir); - }, - - exists: Promises.exists, - stat: Promises.stat, - readFile, - detectEncodingByBOM - }); -}); diff --git a/src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.io.test.ts b/src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.io.test.ts new file mode 100644 index 00000000000..707780e4c2a --- /dev/null +++ b/src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.io.test.ts @@ -0,0 +1,110 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { NullLogService } from 'vs/platform/log/common/log'; +import { FileService } from 'vs/platform/files/common/fileService'; +import { Schemas } from 'vs/base/common/network'; +import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; +import { TextFileEditorModelManager } from 'vs/workbench/services/textfile/common/textFileEditorModelManager'; +import { DisposableStore } from 'vs/base/common/lifecycle'; +import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { IFileService, IStat } from 'vs/platform/files/common/files'; +import { URI } from 'vs/base/common/uri'; +import { join } from 'vs/base/common/path'; +import { UTF16le, detectEncodingByBOMFromBuffer, UTF8_with_bom, UTF16be, toCanonicalName } from 'vs/workbench/services/textfile/common/encoding'; +import { VSBuffer } from 'vs/base/common/buffer'; +import files from 'vs/workbench/services/textfile/test/common/fixtures/files'; +import createSuite from 'vs/workbench/services/textfile/test/common/textFileService.io.test'; +import { IWorkingCopyFileService, WorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; +import { WorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; +import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; +import { TestInMemoryFileSystemProvider } from 'vs/workbench/test/browser/workbenchTestServices'; +import { TestNativeTextFileServiceWithEncodingOverrides, workbenchInstantiationService } from 'vs/workbench/test/electron-sandbox/workbenchTestServices'; + +suite('Files - NativeTextFileService i/o', function () { + const disposables = new DisposableStore(); + + let service: ITextFileService; + let fileProvider: TestInMemoryFileSystemProvider; + const testDir = 'test'; + + createSuite({ + setup: async () => { + const instantiationService = workbenchInstantiationService(undefined, disposables); + + const logService = new NullLogService(); + const fileService = new FileService(logService); + + fileProvider = new TestInMemoryFileSystemProvider(); + disposables.add(fileService.registerProvider(Schemas.file, fileProvider)); + disposables.add(fileProvider); + + const collection = new ServiceCollection(); + collection.set(IFileService, fileService); + + collection.set(IWorkingCopyFileService, new WorkingCopyFileService(fileService, new WorkingCopyService(), instantiationService, new UriIdentityService(fileService))); + + service = instantiationService.createChild(collection).createInstance(TestNativeTextFileServiceWithEncodingOverrides); + + await fileProvider.mkdir(URI.file(testDir)); + for (const fileName in files) { + await fileProvider.writeFile( + URI.file(join(testDir, fileName)), + files[fileName], + { create: true, overwrite: false, unlock: false, atomic: false } + ); + } + + return { service, testDir }; + }, + + teardown: async () => { + (service.files).dispose(); + + disposables.clear(); + }, + + exists, + stat, + readFile, + detectEncodingByBOM + }); + + async function exists(fsPath: string): Promise { + try { + await fileProvider.readFile(URI.file(fsPath)); + return true; + } + catch (e) { + return false; + } + } + + async function readFile(fsPath: string): Promise; + async function readFile(fsPath: string, encoding: string): Promise; + async function readFile(fsPath: string, encoding?: string): Promise { + const file = await fileProvider.readFile(URI.file(fsPath)); + + if (!encoding) { + return VSBuffer.wrap(file); + } + + return new TextDecoder(toCanonicalName(encoding)).decode(file); + } + + async function stat(fsPath: string): Promise { + return fileProvider.stat(URI.file(fsPath)); + } + + async function detectEncodingByBOM(fsPath: string): Promise { + try { + const buffer = await readFile(fsPath); + + return detectEncodingByBOMFromBuffer(buffer.slice(0, 3), 3); + } catch (error) { + return null; // ignore errors (like file not found) + } + } +}); diff --git a/src/vs/workbench/services/textfile/test/electron-browser/nativeTextFileService.test.ts b/src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.test.ts similarity index 92% rename from src/vs/workbench/services/textfile/test/electron-browser/nativeTextFileService.test.ts rename to src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.test.ts index 58fab632f9f..1ac327fd20c 100644 --- a/src/vs/workbench/services/textfile/test/electron-browser/nativeTextFileService.test.ts +++ b/src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.test.ts @@ -12,7 +12,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle import { DisposableStore } from 'vs/base/common/lifecycle'; import { FileService } from 'vs/platform/files/common/fileService'; import { NullLogService } from 'vs/platform/log/common/log'; -import { workbenchInstantiationService, TestNativeTextFileServiceWithEncodingOverrides, TestServiceAccessor } from 'vs/workbench/test/electron-browser/workbenchTestServices'; +import { TestNativeTextFileServiceWithEncodingOverrides, TestServiceAccessor, workbenchInstantiationService } from 'vs/workbench/test/electron-sandbox/workbenchTestServices'; import { IWorkingCopyFileService, WorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; import { WorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; @@ -28,7 +28,7 @@ suite('Files - NativeTextFileService', function () { let instantiationService: IInstantiationService; setup(() => { - instantiationService = workbenchInstantiationService(disposables); + instantiationService = workbenchInstantiationService(undefined, disposables); const logService = new NullLogService(); const fileService = new FileService(logService); diff --git a/src/vs/workbench/services/textfile/test/node/encoding/encoding.test.ts b/src/vs/workbench/services/textfile/test/node/encoding/encoding.test.ts index f3df7b40bea..bcd51283ba6 100644 --- a/src/vs/workbench/services/textfile/test/node/encoding/encoding.test.ts +++ b/src/vs/workbench/services/textfile/test/node/encoding/encoding.test.ts @@ -7,10 +7,10 @@ import * as assert from 'assert'; import * as fs from 'fs'; import * as encoding from 'vs/workbench/services/textfile/common/encoding'; import * as streams from 'vs/base/common/stream'; -import * as iconv from '@vscode/iconv-lite-umd'; import { newWriteableBufferStream, VSBuffer, VSBufferReadableStream, streamToBufferReadableStream } from 'vs/base/common/buffer'; import { splitLines } from 'vs/base/common/strings'; import { FileAccess } from 'vs/base/common/network'; +import { importAMDNodeModule } from 'vs/amdX'; export async function detectEncodingByBOM(file: string): Promise { try { @@ -213,7 +213,7 @@ suite('Encoding', () => { if (err) { reject(err); } else { - resolve(iconv.decode(data, encoding.toNodeEncoding(fileEncoding!))); + resolve(importAMDNodeModule('@vscode/iconv-lite-umd', 'lib/iconv-lite-umd.js').then(iconv => iconv.decode(data, encoding.toNodeEncoding(fileEncoding!)))); } }); }); @@ -385,6 +385,8 @@ suite('Encoding', () => { const path = FileAccess.asFileUri('vs/workbench/services/textfile/test/node/encoding/fixtures/some_utf16be.css').fsPath; const source = await readAndDecodeFromDisk(path, encoding.UTF16be); + const iconv = await importAMDNodeModule('@vscode/iconv-lite-umd', 'lib/iconv-lite-umd.js'); + const expected = VSBuffer.wrap( iconv.encode(source, encoding.toNodeEncoding(encoding.UTF16be)) ).toString(); @@ -446,7 +448,7 @@ suite('Encoding', () => { if (enc === encoding.UTF8_with_bom) { continue; // skip over encodings from us } - + const iconv = await importAMDNodeModule('@vscode/iconv-lite-umd', 'lib/iconv-lite-umd.js'); assert.strictEqual(iconv.encodingExists(enc), true, enc); } }); diff --git a/src/vs/workbench/services/themes/browser/productIconThemeData.ts b/src/vs/workbench/services/themes/browser/productIconThemeData.ts index da1add76935..98de9b94fc8 100644 --- a/src/vs/workbench/services/themes/browser/productIconThemeData.ts +++ b/src/vs/workbench/services/themes/browser/productIconThemeData.ts @@ -8,10 +8,9 @@ import * as nls from 'vs/nls'; import * as Paths from 'vs/base/common/path'; import * as resources from 'vs/base/common/resources'; import * as Json from 'vs/base/common/json'; -import { ExtensionData, IThemeExtensionPoint, IWorkbenchProductIconTheme } from 'vs/workbench/services/themes/common/workbenchThemeService'; +import { ExtensionData, IThemeExtensionPoint, IWorkbenchProductIconTheme, ThemeSettingDefaults } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { getParseErrorMessage } from 'vs/base/common/jsonErrorMessages'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE } from 'vs/workbench/services/themes/common/themeConfiguration'; import { fontIdRegex, fontWeightRegex, fontStyleRegex, fontFormatRegex } from 'vs/workbench/services/themes/common/productIconThemeSchema'; import { isObject, isString } from 'vs/base/common/types'; import { ILogService } from 'vs/platform/log/common/log'; @@ -98,7 +97,7 @@ export class ProductIconThemeData implements IWorkbenchProductIconTheme { static get defaultTheme(): ProductIconThemeData { let themeData = ProductIconThemeData._defaultProductIconTheme; if (!themeData) { - themeData = ProductIconThemeData._defaultProductIconTheme = new ProductIconThemeData(DEFAULT_PRODUCT_ICON_THEME_ID, nls.localize('defaultTheme', 'Default'), DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE); + themeData = ProductIconThemeData._defaultProductIconTheme = new ProductIconThemeData(DEFAULT_PRODUCT_ICON_THEME_ID, nls.localize('defaultTheme', 'Default'), ThemeSettingDefaults.PRODUCT_ICON_THEME); themeData.isLoaded = true; themeData.extensionData = undefined; themeData.watch = false; diff --git a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts index 41b75f7daf4..ea58be56b01 100644 --- a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts @@ -6,7 +6,7 @@ import * as nls from 'vs/nls'; import * as types from 'vs/base/common/types'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IWorkbenchThemeService, IWorkbenchColorTheme, IWorkbenchFileIconTheme, ExtensionData, VS_LIGHT_THEME, VS_DARK_THEME, VS_HC_THEME, VS_HC_LIGHT_THEME, ThemeSettings, IWorkbenchProductIconTheme, ThemeSettingTarget } from 'vs/workbench/services/themes/common/workbenchThemeService'; +import { IWorkbenchThemeService, IWorkbenchColorTheme, IWorkbenchFileIconTheme, ExtensionData, VS_LIGHT_THEME, VS_DARK_THEME, VS_HC_THEME, VS_HC_LIGHT_THEME, ThemeSettings, IWorkbenchProductIconTheme, ThemeSettingTarget, ThemeSettingDefaults, COLOR_THEME_DARK_INITIAL_COLORS, COLOR_THEME_LIGHT_INITIAL_COLORS } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { Registry } from 'vs/platform/registry/common/platform'; @@ -44,9 +44,6 @@ import { ILanguageService } from 'vs/editor/common/languages/language'; // implementation -const DEFAULT_COLOR_THEME_ID = 'vs-dark vscode-theme-defaults-themes-dark_plus-json'; -const DEFAULT_LIGHT_COLOR_THEME_ID = 'vs vscode-theme-defaults-themes-light_plus-json'; - const PERSISTED_OS_COLOR_SCHEME = 'osColorScheme'; const PERSISTED_OS_COLOR_SCHEME_SCOPE = StorageScope.APPLICATION; // the OS scheme depends on settings in the OS @@ -104,6 +101,8 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { private themeSettingIdBeforeSchemeSwitch: string | undefined; + private hasDefaultUpdated: boolean = false; + constructor( @IExtensionService extensionService: IExtensionService, @IStorageService private readonly storageService: IStorageService, @@ -144,25 +143,29 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { // themes are loaded asynchronously, we need to initialize // a color theme document with good defaults until the theme is loaded let themeData: ColorThemeData | undefined = ColorThemeData.fromStorageData(this.storageService); - if (themeData && this.settings.colorTheme !== themeData.settingsId && this.settings.isDefaultColorTheme()) { + const colorThemeSetting = this.settings.colorTheme; + if (themeData && colorThemeSetting !== themeData.settingsId && this.settings.isDefaultColorTheme()) { + this.hasDefaultUpdated = themeData.settingsId === ThemeSettingDefaults.COLOR_THEME_DARK_OLD || themeData.settingsId === ThemeSettingDefaults.COLOR_THEME_LIGHT_OLD; + // the web has different defaults than the desktop, therefore do not restore when the setting is the default theme and the storage doesn't match that. themeData = undefined; } // the preferred color scheme (high contrast, light, dark) has changed since the last start const preferredColorScheme = this.getPreferredColorScheme(); + const defaultColorMap = colorThemeSetting === ThemeSettingDefaults.COLOR_THEME_LIGHT ? COLOR_THEME_LIGHT_INITIAL_COLORS : colorThemeSetting === ThemeSettingDefaults.COLOR_THEME_DARK ? COLOR_THEME_DARK_INITIAL_COLORS : undefined; if (preferredColorScheme && themeData?.type !== preferredColorScheme && this.storageService.get(PERSISTED_OS_COLOR_SCHEME, PERSISTED_OS_COLOR_SCHEME_SCOPE) !== preferredColorScheme) { - themeData = ColorThemeData.createUnloadedThemeForThemeType(preferredColorScheme); + themeData = ColorThemeData.createUnloadedThemeForThemeType(preferredColorScheme, undefined); } if (!themeData) { const initialColorTheme = environmentService.options?.initialColorTheme; if (initialColorTheme) { - themeData = ColorThemeData.createUnloadedThemeForThemeType(initialColorTheme.themeType, initialColorTheme.colors); + themeData = ColorThemeData.createUnloadedThemeForThemeType(initialColorTheme.themeType, initialColorTheme.colors ?? defaultColorMap); } } if (!themeData) { - themeData = ColorThemeData.createUnloadedThemeForThemeType(isWeb ? ColorScheme.LIGHT : ColorScheme.DARK); + themeData = ColorThemeData.createUnloadedThemeForThemeType(isWeb ? ColorScheme.LIGHT : ColorScheme.DARK, defaultColorMap); } themeData.setCustomizations(this.settings); this.applyTheme(themeData, undefined, true); @@ -206,7 +209,7 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { if (devThemes.length) { return this.setColorTheme(devThemes[0].id, ConfigurationTarget.MEMORY); } - const fallbackTheme = this.currentColorTheme.type === ColorScheme.LIGHT ? DEFAULT_LIGHT_COLOR_THEME_ID : DEFAULT_COLOR_THEME_ID; + const fallbackTheme = this.currentColorTheme.type === ColorScheme.LIGHT ? ThemeSettingDefaults.COLOR_THEME_LIGHT : ThemeSettingDefaults.COLOR_THEME_DARK; const theme = this.colorThemeRegistry.findThemeBySettingsId(this.settings.colorTheme, fallbackTheme); const preferredColorScheme = this.getPreferredColorScheme(); @@ -307,7 +310,7 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { updateColorThemeConfigurationSchemas(event.themes); if (await this.restoreColorTheme()) { // checks if theme from settings exists and is set // restore theme - if (this.currentColorTheme.id === DEFAULT_COLOR_THEME_ID && !types.isUndefined(prevColorId) && await this.colorThemeRegistry.findThemeById(prevColorId)) { + if (this.currentColorTheme.settingsId === ThemeSettingDefaults.COLOR_THEME_DARK && !types.isUndefined(prevColorId) && await this.colorThemeRegistry.findThemeById(prevColorId)) { await this.setColorTheme(prevColorId, 'auto'); prevColorId = undefined; } else if (event.added.some(t => t.settingsId === this.currentColorTheme.settingsId)) { @@ -316,7 +319,8 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { } else if (event.removed.some(t => t.settingsId === this.currentColorTheme.settingsId)) { // current theme is no longer available prevColorId = this.currentColorTheme.id; - await this.setColorTheme(DEFAULT_COLOR_THEME_ID, 'auto'); + const defaultTheme = this.colorThemeRegistry.findThemeBySettingsId(ThemeSettingDefaults.COLOR_THEME_DARK); + await this.setColorTheme(defaultTheme, 'auto'); } }); @@ -423,6 +427,10 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { return null; } + public hasUpdatedDefaultThemes(): boolean { + return this.hasDefaultUpdated; + } + public getColorTheme(): IWorkbenchColorTheme { return this.currentColorTheme; } diff --git a/src/vs/workbench/services/themes/common/themeCompatibility.ts b/src/vs/workbench/services/themes/common/themeCompatibility.ts index 503d6fa50dd..21c643584f0 100644 --- a/src/vs/workbench/services/themes/common/themeCompatibility.ts +++ b/src/vs/workbench/services/themes/common/themeCompatibility.ts @@ -64,8 +64,8 @@ addSettingMapping('lineHighlight', editorColorRegistry.editorLineHighlight); addSettingMapping('rangeHighlight', editorColorRegistry.editorRangeHighlight); addSettingMapping('caret', editorColorRegistry.editorCursorForeground); addSettingMapping('invisibles', editorColorRegistry.editorWhitespaces); -addSettingMapping('guide', editorColorRegistry.editorIndentGuides); -addSettingMapping('activeGuide', editorColorRegistry.editorActiveIndentGuides); +addSettingMapping('guide', editorColorRegistry.editorIndentGuide1); +addSettingMapping('activeGuide', editorColorRegistry.editorActiveIndentGuide1); const ansiColorMap = ['ansiBlack', 'ansiRed', 'ansiGreen', 'ansiYellow', 'ansiBlue', 'ansiMagenta', 'ansiCyan', 'ansiWhite', 'ansiBrightBlack', 'ansiBrightRed', 'ansiBrightGreen', 'ansiBrightYellow', 'ansiBrightBlue', 'ansiBrightMagenta', 'ansiBrightCyan', 'ansiBrightWhite' diff --git a/src/vs/workbench/services/themes/common/themeConfiguration.ts b/src/vs/workbench/services/themes/common/themeConfiguration.ts index 556201b09b3..f7fe4efae08 100644 --- a/src/vs/workbench/services/themes/common/themeConfiguration.ts +++ b/src/vs/workbench/services/themes/common/themeConfiguration.ts @@ -12,19 +12,10 @@ import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { textmateColorsSchemaId, textmateColorGroupSchemaId } from 'vs/workbench/services/themes/common/colorThemeSchema'; import { workbenchColorsSchemaId } from 'vs/platform/theme/common/colorRegistry'; import { tokenStylingSchemaId } from 'vs/platform/theme/common/tokenClassificationRegistry'; -import { ThemeSettings, IWorkbenchColorTheme, IWorkbenchFileIconTheme, IColorCustomizations, ITokenColorCustomizations, IWorkbenchProductIconTheme, ISemanticTokenColorCustomizations, ThemeSettingTarget } from 'vs/workbench/services/themes/common/workbenchThemeService'; +import { ThemeSettings, IWorkbenchColorTheme, IWorkbenchFileIconTheme, IColorCustomizations, ITokenColorCustomizations, IWorkbenchProductIconTheme, ISemanticTokenColorCustomizations, ThemeSettingTarget, ThemeSettingDefaults } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; import { isWeb } from 'vs/base/common/platform'; -const DEFAULT_THEME_DARK_SETTING_VALUE = 'Default Dark+'; -const DEFAULT_THEME_LIGHT_SETTING_VALUE = 'Default Light+'; -const DEFAULT_THEME_HC_DARK_SETTING_VALUE = 'Default High Contrast'; -const DEFAULT_THEME_HC_LIGHT_SETTING_VALUE = 'Default High Contrast Light'; - -const DEFAULT_FILE_ICON_THEME_SETTING_VALUE = 'vs-seti'; - -export const DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE = 'Default'; - // Configuration: Themes const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); @@ -32,10 +23,14 @@ const colorThemeSettingEnum: string[] = []; const colorThemeSettingEnumItemLabels: string[] = []; const colorThemeSettingEnumDescriptions: string[] = []; +function formatSettingAsLink(str: string) { + return `\`#${str}#\``; +} + const colorThemeSettingSchema: IConfigurationPropertySchema = { type: 'string', description: nls.localize('colorTheme', "Specifies the color theme used in the workbench."), - default: isWeb ? DEFAULT_THEME_LIGHT_SETTING_VALUE : DEFAULT_THEME_DARK_SETTING_VALUE, + default: isWeb ? ThemeSettingDefaults.COLOR_THEME_LIGHT : ThemeSettingDefaults.COLOR_THEME_DARK, enum: colorThemeSettingEnum, enumDescriptions: colorThemeSettingEnumDescriptions, enumItemLabels: colorThemeSettingEnumItemLabels, @@ -43,8 +38,8 @@ const colorThemeSettingSchema: IConfigurationPropertySchema = { }; const preferredDarkThemeSettingSchema: IConfigurationPropertySchema = { type: 'string', // - markdownDescription: nls.localize({ key: 'preferredDarkColorTheme', comment: ['`#{0}#` will become a link to an other setting. Do not remove backtick or #'] }, 'Specifies the preferred color theme for dark OS appearance when `#{0}#` is enabled.', ThemeSettings.DETECT_COLOR_SCHEME), - default: DEFAULT_THEME_DARK_SETTING_VALUE, + markdownDescription: nls.localize({ key: 'preferredDarkColorTheme', comment: ['{0} will become a link to another setting.'] }, 'Specifies the preferred color theme for dark OS appearance when {0} is enabled.', formatSettingAsLink(ThemeSettings.DETECT_COLOR_SCHEME)), + default: ThemeSettingDefaults.COLOR_THEME_DARK, enum: colorThemeSettingEnum, enumDescriptions: colorThemeSettingEnumDescriptions, enumItemLabels: colorThemeSettingEnumItemLabels, @@ -52,8 +47,8 @@ const preferredDarkThemeSettingSchema: IConfigurationPropertySchema = { }; const preferredLightThemeSettingSchema: IConfigurationPropertySchema = { type: 'string', - markdownDescription: nls.localize({ key: 'preferredLightColorTheme', comment: ['`#{0}#` will become a link to an other setting. Do not remove backtick or #'] }, 'Specifies the preferred color theme for light OS appearance when `#{0}#` is enabled.', ThemeSettings.DETECT_COLOR_SCHEME), - default: DEFAULT_THEME_LIGHT_SETTING_VALUE, + markdownDescription: nls.localize({ key: 'preferredLightColorTheme', comment: ['{0} will become a link to another setting.'] }, 'Specifies the preferred color theme for light OS appearance when {0} is enabled.', formatSettingAsLink(ThemeSettings.DETECT_COLOR_SCHEME)), + default: ThemeSettingDefaults.COLOR_THEME_LIGHT, enum: colorThemeSettingEnum, enumDescriptions: colorThemeSettingEnumDescriptions, enumItemLabels: colorThemeSettingEnumItemLabels, @@ -61,8 +56,8 @@ const preferredLightThemeSettingSchema: IConfigurationPropertySchema = { }; const preferredHCDarkThemeSettingSchema: IConfigurationPropertySchema = { type: 'string', - markdownDescription: nls.localize({ key: 'preferredHCDarkColorTheme', comment: ['`#{0}#` will become a link to an other setting. Do not remove backtick or #'] }, 'Specifies the preferred color theme used in high contrast dark mode when `#{0}#` is enabled.', ThemeSettings.DETECT_HC), - default: DEFAULT_THEME_HC_DARK_SETTING_VALUE, + markdownDescription: nls.localize({ key: 'preferredHCDarkColorTheme', comment: ['{0} will become a link to another setting.'] }, 'Specifies the preferred color theme used in high contrast dark mode when {0} is enabled.', formatSettingAsLink(ThemeSettings.DETECT_HC)), + default: ThemeSettingDefaults.COLOR_THEME_HC_DARK, enum: colorThemeSettingEnum, enumDescriptions: colorThemeSettingEnumDescriptions, enumItemLabels: colorThemeSettingEnumItemLabels, @@ -70,8 +65,8 @@ const preferredHCDarkThemeSettingSchema: IConfigurationPropertySchema = { }; const preferredHCLightThemeSettingSchema: IConfigurationPropertySchema = { type: 'string', - markdownDescription: nls.localize({ key: 'preferredHCLightColorTheme', comment: ['`#{0}#` will become a link to an other setting. Do not remove backtick or #'] }, 'Specifies the preferred color theme used in high contrast light mode when `#{0}#` is enabled.', ThemeSettings.DETECT_HC), - default: DEFAULT_THEME_HC_LIGHT_SETTING_VALUE, + markdownDescription: nls.localize({ key: 'preferredHCLightColorTheme', comment: ['{0} will become a link to another setting.'] }, 'Specifies the preferred color theme used in high contrast light mode when {0} is enabled.', formatSettingAsLink(ThemeSettings.DETECT_HC)), + default: ThemeSettingDefaults.COLOR_THEME_HC_LIGHT, enum: colorThemeSettingEnum, enumDescriptions: colorThemeSettingEnumDescriptions, enumItemLabels: colorThemeSettingEnumItemLabels, @@ -79,7 +74,7 @@ const preferredHCLightThemeSettingSchema: IConfigurationPropertySchema = { }; const detectColorSchemeSettingSchema: IConfigurationPropertySchema = { type: 'boolean', - markdownDescription: nls.localize('detectColorScheme', 'If set, automatically switch to the preferred color theme based on the OS appearance. If the OS appearance is dark, the theme specified at `#{0}#` is used, for light `#{1}#`.', ThemeSettings.PREFERRED_DARK_THEME, ThemeSettings.PREFERRED_LIGHT_THEME), + markdownDescription: nls.localize({ key: 'detectColorScheme', comment: ['{0} and {1} will become links to other settings.'] }, 'If set, automatically switch to the preferred color theme based on the OS appearance. If the OS appearance is dark, the theme specified at {0} is used, for light {1}.', formatSettingAsLink(ThemeSettings.PREFERRED_DARK_THEME), formatSettingAsLink(ThemeSettings.PREFERRED_LIGHT_THEME)), default: false }; @@ -95,7 +90,7 @@ const colorCustomizationsSchema: IConfigurationPropertySchema = { }; const fileIconThemeSettingSchema: IConfigurationPropertySchema = { type: ['string', 'null'], - default: DEFAULT_FILE_ICON_THEME_SETTING_VALUE, + default: ThemeSettingDefaults.FILE_ICON_THEME, description: nls.localize('iconTheme', "Specifies the file icon theme used in the workbench or 'null' to not show any file icons."), enum: [null], enumItemLabels: [nls.localize('noIconThemeLabel', 'None')], @@ -104,9 +99,9 @@ const fileIconThemeSettingSchema: IConfigurationPropertySchema = { }; const productIconThemeSettingSchema: IConfigurationPropertySchema = { type: ['string', 'null'], - default: DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE, + default: ThemeSettingDefaults.PRODUCT_ICON_THEME, description: nls.localize('productIconTheme', "Specifies the product icon theme used."), - enum: [DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE], + enum: [ThemeSettingDefaults.PRODUCT_ICON_THEME], enumItemLabels: [nls.localize('defaultProductIconThemeLabel', 'Default')], enumDescriptions: [nls.localize('defaultProductIconThemeDesc', 'Default')], errorMessage: nls.localize('productIconThemeError', "Product icon theme is unknown or not installed.") @@ -115,7 +110,7 @@ const productIconThemeSettingSchema: IConfigurationPropertySchema = { const detectHCSchemeSettingSchema: IConfigurationPropertySchema = { type: 'boolean', default: true, - markdownDescription: nls.localize('autoDetectHighContrast', "If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme. The high contrast theme to use is specified by `#{0}#` and `#{1}#`.", ThemeSettings.PREFERRED_HC_DARK_THEME, ThemeSettings.PREFERRED_HC_LIGHT_THEME), + markdownDescription: nls.localize({ key: 'autoDetectHighContrast', comment: ['{0} and {1} will become links to other settings.'] }, "If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme. The high contrast theme to use is specified by {0} and {1}", formatSettingAsLink(ThemeSettings.PREFERRED_HC_DARK_THEME), formatSettingAsLink(ThemeSettings.PREFERRED_HC_LIGHT_THEME)), scope: ConfigurationScope.APPLICATION }; @@ -173,7 +168,7 @@ const tokenColorSchema: IJSONSchema = { semanticHighlighting: { description: nls.localize('editorColors.semanticHighlighting', 'Whether semantic highlighting should be enabled for this theme.'), deprecationMessage: nls.localize('editorColors.semanticHighlighting.deprecationMessage', 'Use `enabled` in `editor.semanticTokenColorCustomizations` setting instead.'), - markdownDeprecationMessage: nls.localize('editorColors.semanticHighlighting.deprecationMessageMarkdown', 'Use `enabled` in `#editor.semanticTokenColorCustomizations#` setting instead.'), + markdownDeprecationMessage: nls.localize({ key: 'editorColors.semanticHighlighting.deprecationMessageMarkdown', comment: ['{0} will become a link to another setting.'] }, 'Use `enabled` in {0} setting instead.', formatSettingAsLink('editor.semanticTokenColorCustomizations')), type: 'boolean' } }, diff --git a/src/vs/workbench/services/themes/common/themeExtensionPoints.ts b/src/vs/workbench/services/themes/common/themeExtensionPoints.ts index 741e79f8f85..8862328cba9 100644 --- a/src/vs/workbench/services/themes/common/themeExtensionPoints.ts +++ b/src/vs/workbench/services/themes/common/themeExtensionPoints.ts @@ -197,24 +197,20 @@ export class ThemeRegistry { return resultingThemes; } - public findThemeById(themeId: string, defaultId?: string): T | undefined { + public findThemeById(themeId: string): T | undefined { if (this.builtInTheme && this.builtInTheme.id === themeId) { return this.builtInTheme; } const allThemes = this.getThemes(); - let defaultTheme: T | undefined = undefined; for (const t of allThemes) { if (t.id === themeId) { return t; } - if (t.id === defaultId) { - defaultTheme = t; - } } - return defaultTheme; + return undefined; } - public findThemeBySettingsId(settingsId: string | null, defaultId?: string): T | undefined { + public findThemeBySettingsId(settingsId: string | null, defaultSettingsId?: string): T | undefined { if (this.builtInTheme && this.builtInTheme.settingsId === settingsId) { return this.builtInTheme; } @@ -224,7 +220,7 @@ export class ThemeRegistry { if (t.settingsId === settingsId) { return t; } - if (t.id === defaultId) { + if (t.settingsId === defaultSettingsId) { defaultTheme = t; } } diff --git a/src/vs/workbench/services/themes/common/workbenchThemeService.ts b/src/vs/workbench/services/themes/common/workbenchThemeService.ts index dbcb760c1bc..22ebde5b0b8 100644 --- a/src/vs/workbench/services/themes/common/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/common/workbenchThemeService.ts @@ -40,6 +40,31 @@ export enum ThemeSettings { DETECT_HC = 'window.autoDetectHighContrast' } +export enum ThemeSettingDefaults { + COLOR_THEME_DARK = 'Default Dark Modern', + COLOR_THEME_LIGHT = 'Default Light Modern', + COLOR_THEME_HC_DARK = 'Default High Contrast', + COLOR_THEME_HC_LIGHT = 'Default High Contrast Light', + + COLOR_THEME_DARK_OLD = 'Default Dark+', + COLOR_THEME_LIGHT_OLD = 'Default Light+', + + FILE_ICON_THEME = 'vs-seti', + PRODUCT_ICON_THEME = 'Default', +} + +export const COLOR_THEME_DARK_INITIAL_COLORS = { + 'activityBar.background': '#181818', + 'statusBar.background': '#181818', + 'statusBar.noFolderBackground': '#1f1f1f', +}; + +export const COLOR_THEME_LIGHT_INITIAL_COLORS = { + 'activityBar.background': '#f8f8f8', + 'statusBar.background': '#f8f8f8', + 'statusBar.noFolderBackground': '#f8f8f8' +}; + export interface IWorkbenchTheme { readonly id: string; readonly label: string; @@ -77,6 +102,8 @@ export interface IWorkbenchThemeService extends IThemeService { getMarketplaceColorThemes(publisher: string, name: string, version: string): Promise; onDidColorThemeChange: Event; + hasUpdatedDefaultThemes(): boolean; + setFileIconTheme(iconThemeId: string | undefined | IWorkbenchFileIconTheme, settingsTarget: ThemeSettingTarget): Promise; getFileIconTheme(): IWorkbenchFileIconTheme; getFileIconThemes(): Promise; diff --git a/src/vs/workbench/services/timer/browser/timerService.ts b/src/vs/workbench/services/timer/browser/timerService.ts index 2f05df001a3..d70ec4df70a 100644 --- a/src/vs/workbench/services/timer/browser/timerService.ts +++ b/src/vs/workbench/services/timer/browser/timerService.ts @@ -19,6 +19,8 @@ import { ViewContainerLocation } from 'vs/workbench/common/views'; import { TelemetryTrustedValue } from 'vs/platform/telemetry/common/telemetryUtils'; import { isWeb } from 'vs/base/common/platform'; import { createBlobWorker } from 'vs/base/browser/defaultWorkerFactory'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { ITerminalBackendRegistry, TerminalExtensions } from 'vs/platform/terminal/common/terminal'; /* __GDPR__FRAGMENT__ "IMemoryInfo" : { @@ -78,7 +80,8 @@ export interface IMemoryInfo { "hasAccessibilitySupport" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "isVMLikelyhood" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "emptyWorkbench" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "loadavg" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" } + "loadavg" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "isARM64Emulated" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true } } */ export interface IStartupMetrics { @@ -388,6 +391,7 @@ export interface IStartupMetrics { readonly meminfo?: IMemoryInfo; readonly cpus?: { count: number; speed: number; model: string }; readonly loadavg?: number[]; + readonly isARM64Emulated?: boolean; } export interface ITimerService { @@ -499,7 +503,8 @@ export abstract class AbstractTimerService implements ITimerService { Promise.all([ this._extensionService.whenInstalledExtensionsRegistered(), // extensions registered _lifecycleService.when(LifecyclePhase.Restored), // workbench created and parts restored - layoutService.whenRestored // layout restored (including visible editors resolved) + layoutService.whenRestored, // layout restored (including visible editors resolved) + Promise.all(Array.from(Registry.as(TerminalExtensions.Backend).backends.values()).map(e => e.whenReady)) ]).then(() => { // set perf mark from renderer this.setPerformanceMarks('renderer', perf.getMarks()); @@ -727,6 +732,7 @@ export class TimerService extends AbstractTimerService { } protected async _extendStartupInfo(info: Writeable): Promise { info.isVMLikelyhood = 0; + info.isARM64Emulated = false; info.platform = navigator.userAgent; info.release = navigator.appVersion; } diff --git a/src/vs/workbench/services/timer/electron-sandbox/timerService.ts b/src/vs/workbench/services/timer/electron-sandbox/timerService.ts index f30a92552e3..5e3f8d5dc05 100644 --- a/src/vs/workbench/services/timer/electron-sandbox/timerService.ts +++ b/src/vs/workbench/services/timer/electron-sandbox/timerService.ts @@ -53,10 +53,11 @@ export class TimerService extends AbstractTimerService { protected async _extendStartupInfo(info: Writeable): Promise { try { - const [osProperties, osStatistics, virtualMachineHint] = await Promise.all([ + const [osProperties, osStatistics, virtualMachineHint, isARM64Emulated] = await Promise.all([ this._nativeHostService.getOSProperties(), this._nativeHostService.getOSStatistics(), - this._nativeHostService.getOSVirtualMachineHint() + this._nativeHostService.getOSVirtualMachineHint(), + this._nativeHostService.isRunningUnderARM64Translation() ]); info.totalmem = osStatistics.totalmem; @@ -65,6 +66,7 @@ export class TimerService extends AbstractTimerService { info.release = osProperties.release; info.arch = osProperties.arch; info.loadavg = osStatistics.loadavg; + info.isARM64Emulated = isARM64Emulated; const processMemoryInfo = await process.getProcessMemoryInfo(); info.meminfo = { diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorHandler.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorHandler.ts index b05efdcfc34..919261dd687 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorHandler.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorHandler.ts @@ -6,7 +6,7 @@ import { Schemas } from 'vs/base/common/network'; import { Disposable } from 'vs/base/common/lifecycle'; import { URI, UriComponents } from 'vs/base/common/uri'; -import { IEditorSerializer, isUntitledWithAssociatedResource } from 'vs/workbench/common/editor'; +import { IEditorSerializer } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { ITextEditorService } from 'vs/workbench/services/textfile/common/textEditorService'; import { isEqual, toLocalResource } from 'vs/base/common/resources'; @@ -17,13 +17,14 @@ import { IFilesConfigurationService } from 'vs/workbench/services/filesConfigura import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { NO_TYPE_ID } from 'vs/workbench/services/workingCopy/common/workingCopy'; -import { IWorkingCopyEditorService } from 'vs/workbench/services/workingCopy/common/workingCopyEditorService'; +import { IWorkingCopyIdentifier, NO_TYPE_ID } from 'vs/workbench/services/workingCopy/common/workingCopy'; +import { IWorkingCopyEditorHandler, IWorkingCopyEditorService } from 'vs/workbench/services/workingCopy/common/workingCopyEditorService'; +import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService'; interface ISerializedUntitledTextEditorInput { - resourceJSON: UriComponents; - modeId: string | undefined; // should be `languageId` but is kept for backwards compatibility - encoding: string | undefined; + readonly resourceJSON: UriComponents; + readonly modeId: string | undefined; // should be `languageId` but is kept for backwards compatibility + readonly encoding: string | undefined; } export class UntitledTextEditorInputSerializer implements IEditorSerializer { @@ -83,36 +84,43 @@ export class UntitledTextEditorInputSerializer implements IEditorSerializer { } } -export class UntitledTextEditorWorkingCopyEditorHandler extends Disposable implements IWorkbenchContribution { +export class UntitledTextEditorWorkingCopyEditorHandler extends Disposable implements IWorkbenchContribution, IWorkingCopyEditorHandler { constructor( - @IWorkingCopyEditorService private readonly workingCopyEditorService: IWorkingCopyEditorService, + @IWorkingCopyEditorService workingCopyEditorService: IWorkingCopyEditorService, @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, @IPathService private readonly pathService: IPathService, - @ITextEditorService private readonly textEditorService: ITextEditorService + @ITextEditorService private readonly textEditorService: ITextEditorService, + @IUntitledTextEditorService private readonly untitledTextEditorService: IUntitledTextEditorService ) { super(); - this.installHandler(); + this._register(workingCopyEditorService.registerHandler(this)); } - private installHandler(): void { - this._register(this.workingCopyEditorService.registerHandler({ - handles: workingCopy => workingCopy.resource.scheme === Schemas.untitled && workingCopy.typeId === NO_TYPE_ID, - isOpen: (workingCopy, editor) => editor instanceof UntitledTextEditorInput && isEqual(workingCopy.resource, editor.resource), - createEditor: workingCopy => { - let editorInputResource: URI; + handles(workingCopy: IWorkingCopyIdentifier): boolean { + return workingCopy.resource.scheme === Schemas.untitled && workingCopy.typeId === NO_TYPE_ID; + } - // If the untitled has an associated resource, - // ensure to restore the local resource it had - if (isUntitledWithAssociatedResource(workingCopy.resource)) { - editorInputResource = toLocalResource(workingCopy.resource, this.environmentService.remoteAuthority, this.pathService.defaultUriScheme); - } else { - editorInputResource = workingCopy.resource; - } + isOpen(workingCopy: IWorkingCopyIdentifier, editor: EditorInput): boolean { + if (!this.handles(workingCopy)) { + return false; + } - return this.textEditorService.createTextEditor({ resource: editorInputResource, forceUntitled: true }); - } - })); + return editor instanceof UntitledTextEditorInput && isEqual(workingCopy.resource, editor.resource); + } + + createEditor(workingCopy: IWorkingCopyIdentifier): EditorInput { + let editorInputResource: URI; + + // If the untitled has an associated resource, + // ensure to restore the local resource it had + if (this.untitledTextEditorService.isUntitledWithAssociatedResource(workingCopy.resource)) { + editorInputResource = toLocalResource(workingCopy.resource, this.environmentService.remoteAuthority, this.pathService.defaultUriScheme); + } else { + editorInputResource = workingCopy.resource; + } + + return this.textEditorService.createTextEditor({ resource: editorInputResource, forceUntitled: true }); } } diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts index c3d68a86cf7..4f23b0f46f6 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts @@ -16,6 +16,7 @@ import { isEqual, toLocalResource } from 'vs/base/common/resources'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; +import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; /** * An editor input to be used for untitled text buffers. @@ -41,9 +42,10 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp @IEditorService editorService: IEditorService, @IFileService fileService: IFileService, @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, - @IPathService private readonly pathService: IPathService + @IPathService private readonly pathService: IPathService, + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService ) { - super(model.resource, undefined, editorService, textFileService, labelService, fileService); + super(model.resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService); this.registerModelListeners(model); } @@ -138,7 +140,7 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp if (typeof options?.preserveViewState === 'number') { untypedInput.encoding = this.getEncoding(); untypedInput.languageId = this.getLanguageId(); - untypedInput.contents = this.model.isDirty() ? this.model.textEditorModel?.getValue() : undefined; + untypedInput.contents = this.model.isModified() ? this.model.textEditorModel?.getValue() : undefined; untypedInput.options.viewState = findViewStateForEditor(this, options.preserveViewState, this.editorService); if (typeof untypedInput.contents === 'string' && !this.model.hasAssociatedFilePath) { diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts index d1b613383bc..ac48868bd37 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts @@ -243,6 +243,10 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt return this.dirty; } + isModified(): boolean { + return this.isDirty(); + } + private setDirty(dirty: boolean): void { if (this.dirty === dirty) { return; @@ -268,6 +272,8 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt } async revert(): Promise { + + // No longer dirty this.setDirty(false); // Emit as event diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts index 919d45b23d1..1122ba55f90 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts @@ -112,6 +112,11 @@ export interface IUntitledTextEditorModelManager { resolve(options?: INewUntitledTextEditorOptions): Promise; resolve(options?: INewUntitledTextEditorWithAssociatedResourceOptions): Promise; resolve(options?: IExistingUntitledTextEditorOptions): Promise; + + /** + * Figures out if the given resource has an associated resource or not. + */ + isUntitledWithAssociatedResource(resource: URI): boolean; } export interface IUntitledTextEditorService extends IUntitledTextEditorModelManager { @@ -123,6 +128,8 @@ export class UntitledTextEditorService extends Disposable implements IUntitledTe declare readonly _serviceBrand: undefined; + private static readonly UNTITLED_WITHOUT_ASSOCIATED_RESOURCE_REGEX = /Untitled-\d+/; + private readonly _onDidChangeDirty = this._register(new Emitter()); readonly onDidChangeDirty = this._onDidChangeDirty.event; @@ -259,6 +266,10 @@ export class UntitledTextEditorService extends Disposable implements IUntitledTe this._onDidChangeDirty.fire(model); } } + + isUntitledWithAssociatedResource(resource: URI): boolean { + return resource.scheme === Schemas.untitled && resource.path.length > 1 && !UntitledTextEditorService.UNTITLED_WITHOUT_ASSOCIATED_RESOURCE_REGEX.test(resource.path); + } } registerSingleton(IUntitledTextEditorService, UntitledTextEditorService, InstantiationType.Delayed); diff --git a/src/vs/workbench/services/untitled/test/browser/untitledTextEditor.integrationTest.ts b/src/vs/workbench/services/untitled/test/browser/untitledTextEditor.integrationTest.ts new file mode 100644 index 00000000000..828a72f1d0d --- /dev/null +++ b/src/vs/workbench/services/untitled/test/browser/untitledTextEditor.integrationTest.ts @@ -0,0 +1,62 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { UntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService'; +import { workbenchInstantiationService, TestServiceAccessor } from 'vs/workbench/test/browser/workbenchTestServices'; +import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { DisposableStore } from 'vs/base/common/lifecycle'; + +suite('Untitled text editors', () => { + + let disposables: DisposableStore; + let instantiationService: IInstantiationService; + let accessor: TestServiceAccessor; + + setup(() => { + disposables = new DisposableStore(); + instantiationService = workbenchInstantiationService(undefined, disposables); + accessor = instantiationService.createInstance(TestServiceAccessor); + }); + + teardown(() => { + (accessor.untitledTextEditorService as UntitledTextEditorService).dispose(); + disposables.dispose(); + }); + + test('backup and restore (simple)', async function () { + return testBackupAndRestore('Some very small file text content.'); + }); + + test('backup and restore (large, #121347)', async function () { + const largeContent = 'źµ­ģ–“ķ•œ\n'.repeat(100000); + return testBackupAndRestore(largeContent); + }); + + async function testBackupAndRestore(content: string) { + const service = accessor.untitledTextEditorService; + const originalInput = instantiationService.createInstance(UntitledTextEditorInput, service.create()); + const restoredInput = instantiationService.createInstance(UntitledTextEditorInput, service.create()); + + const originalModel = await originalInput.resolve(); + originalModel.textEditorModel?.setValue(content); + + const backup = await originalModel.backup(CancellationToken.None); + const modelRestoredIdentifier = { typeId: originalModel.typeId, resource: restoredInput.resource }; + await accessor.workingCopyBackupService.backup(modelRestoredIdentifier, backup.content); + + const restoredModel = await restoredInput.resolve(); + + assert.strictEqual(restoredModel.textEditorModel?.getValue(), content); + assert.strictEqual(restoredModel.isDirty(), true); + + originalInput.dispose(); + originalModel.dispose(); + restoredInput.dispose(); + restoredModel.dispose(); + } +}); diff --git a/src/vs/workbench/services/untitled/test/browser/untitledTextEditor.test.ts b/src/vs/workbench/services/untitled/test/browser/untitledTextEditor.test.ts index 7c6b704a56f..c724a93fd1b 100644 --- a/src/vs/workbench/services/untitled/test/browser/untitledTextEditor.test.ts +++ b/src/vs/workbench/services/untitled/test/browser/untitledTextEditor.test.ts @@ -16,7 +16,7 @@ import { Range } from 'vs/editor/common/core/range'; import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput'; import { IUntitledTextEditorModel } from 'vs/workbench/services/untitled/common/untitledTextEditorModel'; import { CancellationToken } from 'vs/base/common/cancellation'; -import { EditorInputCapabilities, isUntitledWithAssociatedResource } from 'vs/workbench/common/editor'; +import { EditorInputCapabilities } from 'vs/workbench/common/editor'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { isReadable, isReadableStream } from 'vs/base/common/stream'; import { readableToBuffer, streamToBuffer, VSBufferReadable, VSBufferReadableStream } from 'vs/base/common/buffer'; @@ -46,15 +46,17 @@ suite('Untitled text editors', () => { const input1 = instantiationService.createInstance(UntitledTextEditorInput, service.create()); await input1.resolve(); assert.strictEqual(service.get(input1.resource), input1.model); - assert.ok(!isUntitledWithAssociatedResource(input1.resource)); + assert.ok(!accessor.untitledTextEditorService.isUntitledWithAssociatedResource(input1.resource)); assert.ok(service.get(input1.resource)); assert.ok(!service.get(URI.file('testing'))); assert.ok(input1.hasCapability(EditorInputCapabilities.Untitled)); assert.ok(!input1.hasCapability(EditorInputCapabilities.Readonly)); + assert.ok(!input1.isReadonly()); assert.ok(!input1.hasCapability(EditorInputCapabilities.Singleton)); assert.ok(!input1.hasCapability(EditorInputCapabilities.RequiresTrust)); + assert.ok(!input1.hasCapability(EditorInputCapabilities.Scratchpad)); const input2 = instantiationService.createInstance(UntitledTextEditorInput, service.create()); assert.strictEqual(service.get(input2.resource), input2.model); @@ -138,7 +140,7 @@ suite('Untitled text editors', () => { }); const model = service.create({ associatedResource: file }); - assert.ok(isUntitledWithAssociatedResource(model.resource)); + assert.ok(accessor.untitledTextEditorService.isUntitledWithAssociatedResource(model.resource)); const untitled = instantiationService.createInstance(UntitledTextEditorInput, model); assert.ok(untitled.isDirty()); assert.strictEqual(model, onDidChangeDirtyModel); @@ -614,36 +616,4 @@ suite('Untitled text editors', () => { input.dispose(); model.dispose(); }); - - test('backup and restore (simple)', async function () { - return testBackupAndRestore('Some very small file text content.'); - }); - - test('backup and restore (large, #121347)', async function () { - const largeContent = 'źµ­ģ–“ķ•œ\n'.repeat(100000); - return testBackupAndRestore(largeContent); - }); - - async function testBackupAndRestore(content: string) { - const service = accessor.untitledTextEditorService; - const originalInput = instantiationService.createInstance(UntitledTextEditorInput, service.create()); - const restoredInput = instantiationService.createInstance(UntitledTextEditorInput, service.create()); - - const originalModel = await originalInput.resolve(); - originalModel.textEditorModel?.setValue(content); - - const backup = await originalModel.backup(CancellationToken.None); - const modelRestoredIdentifier = { typeId: originalModel.typeId, resource: restoredInput.resource }; - await accessor.workingCopyBackupService.backup(modelRestoredIdentifier, backup.content); - - const restoredModel = await restoredInput.resolve(); - - assert.strictEqual(restoredModel.textEditorModel?.getValue(), content); - assert.strictEqual(restoredModel.isDirty(), true); - - originalInput.dispose(); - originalModel.dispose(); - restoredInput.dispose(); - restoredModel.dispose(); - } }); diff --git a/src/vs/workbench/services/userActivity/browser/domActivityTracker.ts b/src/vs/workbench/services/userActivity/browser/domActivityTracker.ts new file mode 100644 index 00000000000..85f3e5d7019 --- /dev/null +++ b/src/vs/workbench/services/userActivity/browser/domActivityTracker.ts @@ -0,0 +1,63 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as dom from 'vs/base/browser/dom'; +import { IntervalTimer } from 'vs/base/common/async'; +import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { IUserActivityService } from 'vs/workbench/services/userActivity/common/userActivityService'; + +/** + * This uses a time interval and checks whether there's any activity in that + * interval. A naive approach might be to use a debounce whenever an event + * happens, but this has some scheduling overhead. Instead, the tracker counts + * how many intervals have elapsed since any activity happened. + * + * If there's more than `MIN_INTERVALS_WITHOUT_ACTIVITY`, then say the user is + * inactive. Therefore the maximum time before an inactive user is detected + * is `CHECK_INTERVAL * (MIN_INTERVALS_WITHOUT_ACTIVITY + 1)`. + */ +const CHECK_INTERVAL = 30_000; + +/** See {@link CHECK_INTERVAL} */ +const MIN_INTERVALS_WITHOUT_ACTIVITY = 2; + +const eventListenerOptions: AddEventListenerOptions = { + passive: true, /** does not preventDefault() */ + capture: true, /** should dispatch first (before anyone stopPropagation()) */ +}; + +export class DomActivityTracker extends Disposable { + constructor(userActivityService: IUserActivityService) { + super(); + + let intervalsWithoutActivity = MIN_INTERVALS_WITHOUT_ACTIVITY; + const intervalTimer = this._register(new IntervalTimer()); + const activeMutex = this._register(new MutableDisposable()); + activeMutex.value = userActivityService.markActive(); + + const onInterval = () => { + if (++intervalsWithoutActivity === MIN_INTERVALS_WITHOUT_ACTIVITY) { + activeMutex.clear(); + intervalTimer.cancel(); + } + }; + + const onActivity = () => { + // if was inactive, they've now returned + if (intervalsWithoutActivity === MIN_INTERVALS_WITHOUT_ACTIVITY) { + activeMutex.value = userActivityService.markActive(); + intervalTimer.cancelAndSet(onInterval, CHECK_INTERVAL); + } + + intervalsWithoutActivity = 0; + }; + + this._register(dom.addDisposableListener(document, 'touchstart', onActivity, eventListenerOptions)); + this._register(dom.addDisposableListener(document, 'mousedown', onActivity, eventListenerOptions)); + this._register(dom.addDisposableListener(document, 'keydown', onActivity, eventListenerOptions)); + + onActivity(); + } +} diff --git a/src/vs/workbench/services/userActivity/browser/userActivityBrowser.ts b/src/vs/workbench/services/userActivity/browser/userActivityBrowser.ts new file mode 100644 index 00000000000..d8b870a753c --- /dev/null +++ b/src/vs/workbench/services/userActivity/browser/userActivityBrowser.ts @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { DomActivityTracker } from 'vs/workbench/services/userActivity/browser/domActivityTracker'; +import { userActivityRegistry } from 'vs/workbench/services/userActivity/common/userActivityRegistry'; + +userActivityRegistry.add(DomActivityTracker); diff --git a/src/vs/workbench/services/userActivity/common/userActivityRegistry.ts b/src/vs/workbench/services/userActivity/common/userActivityRegistry.ts new file mode 100644 index 00000000000..ed07a4264f5 --- /dev/null +++ b/src/vs/workbench/services/userActivity/common/userActivityRegistry.ts @@ -0,0 +1,23 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IUserActivityService } from 'vs/workbench/services/userActivity/common/userActivityService'; + +class UserActivityRegistry { + private todo: { new(s: IUserActivityService, ...args: any[]): any }[] = []; + + public add = (ctor: { new(s: IUserActivityService, ...args: any[]): any }) => { + this.todo!.push(ctor); + }; + + public take(userActivityService: IUserActivityService, instantiation: IInstantiationService) { + this.add = ctor => instantiation.createInstance(ctor, userActivityService); + this.todo.forEach(this.add); + this.todo = []; + } +} + +export const userActivityRegistry = new UserActivityRegistry(); diff --git a/src/vs/workbench/services/userActivity/common/userActivityService.ts b/src/vs/workbench/services/userActivity/common/userActivityService.ts new file mode 100644 index 00000000000..c632b849ff5 --- /dev/null +++ b/src/vs/workbench/services/userActivity/common/userActivityService.ts @@ -0,0 +1,82 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { RunOnceScheduler, runWhenIdle } from 'vs/base/common/async'; +import { Emitter, Event } from 'vs/base/common/event'; +import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { userActivityRegistry } from 'vs/workbench/services/userActivity/common/userActivityRegistry'; + +/** + * Service that observes user activity in the window. + */ +export interface IUserActivityService { + _serviceBrand: undefined; + + /** + * Whether the user is currently active. + */ + readonly isActive: boolean; + + /** + * Fires when the activity state changes. + */ + readonly onDidChangeIsActive: Event; + + /** + * Marks the user as being active until the Disposable is disposed of. + * Multiple consumers call this method; the user will only be considered + * inactive once all consumers have disposed of their Disposables. + */ + markActive(): IDisposable; +} + +export const IUserActivityService = createDecorator('IUserActivityService'); + +export class UserActivityService extends Disposable implements IUserActivityService { + declare readonly _serviceBrand: undefined; + private readonly markInactive = this._register(new RunOnceScheduler(() => { + this.isActive = false; + this.changeEmitter.fire(false); + }, 10_000)); + + private readonly changeEmitter = this._register(new Emitter); + private active = 0; + + /** + * @inheritdoc + * + * Note: initialized to true, since the user just did something to open the + * window. The bundled DomActivityTracker will initially assume activity + * as well in order to unset this if the window gets abandoned. + */ + public isActive = true; + + /** @inheritdoc */ + onDidChangeIsActive: Event = this.changeEmitter.event; + + constructor(@IInstantiationService instantiationService: IInstantiationService) { + super(); + this._register(runWhenIdle(() => userActivityRegistry.take(this, instantiationService))); + } + + /** @inheritdoc */ + markActive(): IDisposable { + if (++this.active === 1) { + this.isActive = true; + this.changeEmitter.fire(true); + this.markInactive.cancel(); + } + + return toDisposable(() => { + if (--this.active === 0) { + this.markInactive.schedule(); + } + }); + } +} + +registerSingleton(IUserActivityService, UserActivityService, InstantiationType.Delayed); diff --git a/src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts b/src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts new file mode 100644 index 00000000000..4c443c006a1 --- /dev/null +++ b/src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts @@ -0,0 +1,60 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; +import { DomActivityTracker } from 'vs/workbench/services/userActivity/browser/domActivityTracker'; +import { UserActivityService } from 'vs/workbench/services/userActivity/common/userActivityService'; +import * as sinon from 'sinon'; +import * as assert from 'assert'; + +suite('DomActivityTracker', () => { + let uas: UserActivityService; + let dom: DomActivityTracker; + let clock: sinon.SinonFakeTimers; + const maxTimeToBecomeIdle = 3 * 30_000; // (MIN_INTERVALS_WITHOUT_ACTIVITY + 1) * CHECK_INTERVAL; + + setup(() => { + clock = sinon.useFakeTimers(); + uas = new UserActivityService(new TestInstantiationService()); + dom = new DomActivityTracker(uas); + }); + + teardown(() => { + dom.dispose(); + uas.dispose(); + clock.restore(); + }); + + + test('marks inactive on no input', () => { + assert.equal(uas.isActive, true); + clock.tick(maxTimeToBecomeIdle); + assert.equal(uas.isActive, false); + }); + + test('preserves activity state when active', () => { + assert.equal(uas.isActive, true); + + const div = 10; + for (let i = 0; i < div; i++) { + document.dispatchEvent(new MouseEvent('keydown')); + clock.tick(maxTimeToBecomeIdle / div); + } + + assert.equal(uas.isActive, true); + }); + + test('restores active state', () => { + assert.equal(uas.isActive, true); + clock.tick(maxTimeToBecomeIdle); + assert.equal(uas.isActive, false); + + document.dispatchEvent(new MouseEvent('keydown')); + assert.equal(uas.isActive, true); + + clock.tick(maxTimeToBecomeIdle); + assert.equal(uas.isActive, false); + }); +}); diff --git a/src/vs/workbench/services/userData/browser/userDataInit.ts b/src/vs/workbench/services/userData/browser/userDataInit.ts index 308deacf6a3..8bcdfacb81f 100644 --- a/src/vs/workbench/services/userData/browser/userDataInit.ts +++ b/src/vs/workbench/services/userData/browser/userDataInit.ts @@ -3,46 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; -import { AbstractExtensionsInitializer, IExtensionsInitializerPreviewResult } from 'vs/platform/userDataSync/common/extensionsSync'; -import { GlobalStateInitializer, UserDataSyncStoreTypeSynchronizer } from 'vs/platform/userDataSync/common/globalStateSync'; -import { KeybindingsInitializer } from 'vs/platform/userDataSync/common/keybindingsSync'; -import { SettingsInitializer } from 'vs/platform/userDataSync/common/settingsSync'; -import { SnippetsInitializer } from 'vs/platform/userDataSync/common/snippetsSync'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IFileService } from 'vs/platform/files/common/files'; import { createDecorator, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ILogService } from 'vs/platform/log/common/log'; -import { UserDataSyncStoreClient } from 'vs/platform/userDataSync/common/userDataSyncStoreService'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IRequestService } from 'vs/platform/request/common/request'; -import { IRemoteUserData, IUserData, IUserDataInitializer, IUserDataSyncLogService, IUserDataSyncStoreManagementService, SyncResource } from 'vs/platform/userDataSync/common/userDataSync'; -import { AuthenticationSessionInfo, getCurrentAuthenticationSessionInfo } from 'vs/workbench/services/authentication/browser/authenticationService'; -import { getSyncAreaLabel } from 'vs/workbench/services/userDataSync/common/userDataSync'; import { IWorkbenchContribution, IWorkbenchContributionsRegistry, Extensions } from 'vs/workbench/common/contributions'; import { Registry } from 'vs/platform/registry/common/platform'; import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; import { isWeb } from 'vs/base/common/platform'; -import { Barrier, Promises } from 'vs/base/common/async'; -import { IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IExtensionService, toExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; +import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { mark } from 'vs/base/common/performance'; -import { IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; -import { ICredentialsService } from 'vs/platform/credentials/common/credentials'; -import { TasksInitializer } from 'vs/platform/userDataSync/common/tasksSync'; -import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; - -export const IUserDataInitializationService = createDecorator('IUserDataInitializationService'); -export interface IUserDataInitializationService { - _serviceBrand: any; +export interface IUserDataInitializer { requiresInitialization(): Promise; whenInitializationFinished(): Promise; initializeRequiredResources(): Promise; @@ -50,385 +19,46 @@ export interface IUserDataInitializationService { initializeOtherResources(instantiationService: IInstantiationService): Promise; } +export const IUserDataInitializationService = createDecorator('IUserDataInitializationService'); +export interface IUserDataInitializationService extends IUserDataInitializer { + _serviceBrand: any; +} + export class UserDataInitializationService implements IUserDataInitializationService { _serviceBrand: any; - private readonly initialized: SyncResource[] = []; - private readonly initializationFinished = new Barrier(); - private globalStateUserData: IUserData | null = null; - - constructor( - @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, - @ICredentialsService private readonly credentialsService: ICredentialsService, - @IUserDataSyncStoreManagementService private readonly userDataSyncStoreManagementService: IUserDataSyncStoreManagementService, - @IFileService private readonly fileService: IFileService, - @IUserDataProfilesService private readonly userDataProfilesService: IUserDataProfilesService, - @IStorageService private readonly storageService: IStorageService, - @IProductService private readonly productService: IProductService, - @IRequestService private readonly requestService: IRequestService, - @ILogService private readonly logService: ILogService, - @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, - ) { - this.createUserDataSyncStoreClient().then(userDataSyncStoreClient => { - if (!userDataSyncStoreClient) { - this.initializationFinished.open(); - } - }); - } - - private _userDataSyncStoreClientPromise: Promise | undefined; - private createUserDataSyncStoreClient(): Promise { - if (!this._userDataSyncStoreClientPromise) { - this._userDataSyncStoreClientPromise = (async (): Promise => { - try { - if (!isWeb) { - this.logService.trace(`Skipping initializing user data in desktop`); - return; - } - - if (!this.storageService.isNew(StorageScope.APPLICATION)) { - this.logService.trace(`Skipping initializing user data as application was opened before`); - return; - } - - if (!this.storageService.isNew(StorageScope.WORKSPACE)) { - this.logService.trace(`Skipping initializing user data as workspace was opened before`); - return; - } - - let authenticationSession; - try { - authenticationSession = await getCurrentAuthenticationSessionInfo(this.credentialsService, this.productService); - } catch (error) { - this.logService.error(error); - } - if (!authenticationSession) { - this.logService.trace(`Skipping initializing user data as authentication session is not set`); - return; - } - - await this.initializeUserDataSyncStore(authenticationSession); - - const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore; - if (!userDataSyncStore) { - this.logService.trace(`Skipping initializing user data as sync service is not provided`); - return; - } - - const userDataSyncStoreClient = new UserDataSyncStoreClient(userDataSyncStore.url, this.productService, this.requestService, this.logService, this.environmentService, this.fileService, this.storageService); - userDataSyncStoreClient.setAuthToken(authenticationSession.accessToken, authenticationSession.providerId); - - const manifest = await userDataSyncStoreClient.manifest(null); - if (manifest === null) { - userDataSyncStoreClient.dispose(); - this.logService.trace(`Skipping initializing user data as there is no data`); - return; - } - - this.logService.info(`Using settings sync service ${userDataSyncStore.url.toString()} for initialization`); - return userDataSyncStoreClient; - - } catch (error) { - this.logService.error(error); - return; - } - })(); - } - - return this._userDataSyncStoreClientPromise; - } - - private async initializeUserDataSyncStore(authenticationSession: AuthenticationSessionInfo): Promise { - const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore; - if (!userDataSyncStore?.canSwitch) { - return; - } - - const disposables = new DisposableStore(); - try { - const userDataSyncStoreClient = disposables.add(new UserDataSyncStoreClient(userDataSyncStore.url, this.productService, this.requestService, this.logService, this.environmentService, this.fileService, this.storageService)); - userDataSyncStoreClient.setAuthToken(authenticationSession.accessToken, authenticationSession.providerId); - - // Cache global state data for global state initialization - this.globalStateUserData = await userDataSyncStoreClient.readResource(SyncResource.GlobalState, null); - - if (this.globalStateUserData) { - const userDataSyncStoreType = new UserDataSyncStoreTypeSynchronizer(userDataSyncStoreClient, this.storageService, this.environmentService, this.fileService, this.logService).getSyncStoreType(this.globalStateUserData); - if (userDataSyncStoreType) { - await this.userDataSyncStoreManagementService.switch(userDataSyncStoreType); - - // Unset cached global state data if urls are changed - if (!isEqual(userDataSyncStore.url, this.userDataSyncStoreManagementService.userDataSyncStore?.url)) { - this.logService.info('Switched settings sync store'); - this.globalStateUserData = null; - } - } - } - } finally { - disposables.dispose(); - } + constructor(private readonly initializers: IUserDataInitializer[] = []) { } async whenInitializationFinished(): Promise { - await this.initializationFinished.wait(); + if (await this.requiresInitialization()) { + await Promise.all(this.initializers.map(initializer => initializer.whenInitializationFinished())); + } } async requiresInitialization(): Promise { - this.logService.trace(`UserDataInitializationService#requiresInitialization`); - const userDataSyncStoreClient = await this.createUserDataSyncStoreClient(); - return !!userDataSyncStoreClient; + return (await Promise.all(this.initializers.map(initializer => initializer.requiresInitialization()))).some(result => result); } async initializeRequiredResources(): Promise { - this.logService.trace(`UserDataInitializationService#initializeRequiredResources`); - return this.initialize([SyncResource.Settings, SyncResource.GlobalState]); + if (await this.requiresInitialization()) { + await Promise.all(this.initializers.map(initializer => initializer.initializeRequiredResources())); + } } async initializeOtherResources(instantiationService: IInstantiationService): Promise { - try { - this.logService.trace(`UserDataInitializationService#initializeOtherResources`); - await Promise.allSettled([this.initialize([SyncResource.Keybindings, SyncResource.Snippets, SyncResource.Tasks]), this.initializeExtensions(instantiationService)]); - } finally { - this.initializationFinished.open(); + if (await this.requiresInitialization()) { + await Promise.all(this.initializers.map(initializer => initializer.initializeOtherResources(instantiationService))); } } - private async initializeExtensions(instantiationService: IInstantiationService): Promise { - try { - await Promise.all([this.initializeInstalledExtensions(instantiationService), this.initializeNewExtensions(instantiationService)]); - } finally { - this.initialized.push(SyncResource.Extensions); - } - } - - private initializeInstalledExtensionsPromise: Promise | undefined; async initializeInstalledExtensions(instantiationService: IInstantiationService): Promise { - if (!this.initializeInstalledExtensionsPromise) { - this.initializeInstalledExtensionsPromise = (async () => { - this.logService.trace(`UserDataInitializationService#initializeInstalledExtensions`); - const extensionsPreviewInitializer = await this.getExtensionsPreviewInitializer(instantiationService); - if (extensionsPreviewInitializer) { - await instantiationService.createInstance(InstalledExtensionsInitializer, extensionsPreviewInitializer).initialize(); - } - })(); - } - return this.initializeInstalledExtensionsPromise; - } - - private initializeNewExtensionsPromise: Promise | undefined; - private async initializeNewExtensions(instantiationService: IInstantiationService): Promise { - if (!this.initializeNewExtensionsPromise) { - this.initializeNewExtensionsPromise = (async () => { - this.logService.trace(`UserDataInitializationService#initializeNewExtensions`); - const extensionsPreviewInitializer = await this.getExtensionsPreviewInitializer(instantiationService); - if (extensionsPreviewInitializer) { - await instantiationService.createInstance(NewExtensionsInitializer, extensionsPreviewInitializer).initialize(); - } - })(); - } - return this.initializeNewExtensionsPromise; - } - - private extensionsPreviewInitializerPromise: Promise | undefined; - private getExtensionsPreviewInitializer(instantiationService: IInstantiationService): Promise { - if (!this.extensionsPreviewInitializerPromise) { - this.extensionsPreviewInitializerPromise = (async () => { - const userDataSyncStoreClient = await this.createUserDataSyncStoreClient(); - if (!userDataSyncStoreClient) { - return null; - } - const userData = await userDataSyncStoreClient.readResource(SyncResource.Extensions, null); - return instantiationService.createInstance(ExtensionsPreviewInitializer, userData); - })(); - } - return this.extensionsPreviewInitializerPromise; - } - - private async initialize(syncResources: SyncResource[]): Promise { - const userDataSyncStoreClient = await this.createUserDataSyncStoreClient(); - if (!userDataSyncStoreClient) { - return; - } - - await Promises.settled(syncResources.map(async syncResource => { - try { - if (this.initialized.includes(syncResource)) { - this.logService.info(`${getSyncAreaLabel(syncResource)} initialized already.`); - return; - } - this.initialized.push(syncResource); - this.logService.trace(`Initializing ${getSyncAreaLabel(syncResource)}`); - const initializer = this.createSyncResourceInitializer(syncResource); - const userData = await userDataSyncStoreClient.readResource(syncResource, syncResource === SyncResource.GlobalState ? this.globalStateUserData : null); - await initializer.initialize(userData); - this.logService.info(`Initialized ${getSyncAreaLabel(syncResource)}`); - } catch (error) { - this.logService.info(`Error while initializing ${getSyncAreaLabel(syncResource)}`); - this.logService.error(error); - } - })); - } - - private createSyncResourceInitializer(syncResource: SyncResource): IUserDataInitializer { - switch (syncResource) { - case SyncResource.Settings: return new SettingsInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); - case SyncResource.Keybindings: return new KeybindingsInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); - case SyncResource.Tasks: return new TasksInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); - case SyncResource.Snippets: return new SnippetsInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); - case SyncResource.GlobalState: return new GlobalStateInitializer(this.storageService, this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.uriIdentityService); - } - throw new Error(`Cannot create initializer for ${syncResource}`); - } - -} - -class ExtensionsPreviewInitializer extends AbstractExtensionsInitializer { - - private previewPromise: Promise | undefined; - private preview: IExtensionsInitializerPreviewResult | null = null; - - constructor( - private readonly extensionsData: IUserData, - @IExtensionManagementService extensionManagementService: IExtensionManagementService, - @IIgnoredExtensionsManagementService ignoredExtensionsManagementService: IIgnoredExtensionsManagementService, - @IFileService fileService: IFileService, - @IUserDataProfilesService userDataProfilesService: IUserDataProfilesService, - @IEnvironmentService environmentService: IEnvironmentService, - @IUserDataSyncLogService logService: IUserDataSyncLogService, - @IStorageService storageService: IStorageService, - @IUriIdentityService uriIdentityService: IUriIdentityService, - ) { - super(extensionManagementService, ignoredExtensionsManagementService, fileService, userDataProfilesService, environmentService, logService, storageService, uriIdentityService); - } - - getPreview(): Promise { - if (!this.previewPromise) { - this.previewPromise = super.initialize(this.extensionsData).then(() => this.preview); - } - return this.previewPromise; - } - - override initialize(): Promise { - throw new Error('should not be called directly'); - } - - protected override async doInitialize(remoteUserData: IRemoteUserData): Promise { - const remoteExtensions = await this.parseExtensions(remoteUserData); - if (!remoteExtensions) { - this.logService.info('Skipping initializing extensions because remote extensions does not exist.'); - return; - } - const installedExtensions = await this.extensionManagementService.getInstalled(); - this.preview = this.generatePreview(remoteExtensions, installedExtensions); - } -} - -class InstalledExtensionsInitializer implements IUserDataInitializer { - - constructor( - private readonly extensionsPreviewInitializer: ExtensionsPreviewInitializer, - @IGlobalExtensionEnablementService private readonly extensionEnablementService: IGlobalExtensionEnablementService, - @IExtensionStorageService private readonly extensionStorageService: IExtensionStorageService, - @IUserDataSyncLogService private readonly logService: IUserDataSyncLogService, - ) { - } - - async initialize(): Promise { - const preview = await this.extensionsPreviewInitializer.getPreview(); - if (!preview) { - return; - } - - // 1. Initialise already installed extensions state - for (const installedExtension of preview.installedExtensions) { - const syncExtension = preview.remoteExtensions.find(({ identifier }) => areSameExtensions(identifier, installedExtension.identifier)); - if (syncExtension?.state) { - const extensionState = this.extensionStorageService.getExtensionState(installedExtension, true) || {}; - Object.keys(syncExtension.state).forEach(key => extensionState[key] = syncExtension.state![key]); - this.extensionStorageService.setExtensionState(installedExtension, extensionState, true); - } - } - - // 2. Initialise extensions enablement - if (preview.disabledExtensions.length) { - for (const identifier of preview.disabledExtensions) { - this.logService.trace(`Disabling extension...`, identifier.id); - await this.extensionEnablementService.disableExtension(identifier); - this.logService.info(`Disabling extension`, identifier.id); - } - } - } -} - -class NewExtensionsInitializer implements IUserDataInitializer { - - constructor( - private readonly extensionsPreviewInitializer: ExtensionsPreviewInitializer, - @IExtensionService private readonly extensionService: IExtensionService, - @IExtensionStorageService private readonly extensionStorageService: IExtensionStorageService, - @IExtensionGalleryService private readonly galleryService: IExtensionGalleryService, - @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, - @IUserDataSyncLogService private readonly logService: IUserDataSyncLogService, - ) { - } - - async initialize(): Promise { - const preview = await this.extensionsPreviewInitializer.getPreview(); - if (!preview) { - return; - } - - const newlyEnabledExtensions: ILocalExtension[] = []; - const targetPlatform = await this.extensionManagementService.getTargetPlatform(); - const galleryExtensions = await this.galleryService.getExtensions(preview.newExtensions, { targetPlatform, compatible: true }, CancellationToken.None); - for (const galleryExtension of galleryExtensions) { - try { - const extensionToSync = preview.remoteExtensions.find(({ identifier }) => areSameExtensions(identifier, galleryExtension.identifier)); - if (!extensionToSync) { - continue; - } - if (extensionToSync.state) { - this.extensionStorageService.setExtensionState(galleryExtension, extensionToSync.state, true); - } - this.logService.trace(`Installing extension...`, galleryExtension.identifier.id); - const local = await this.extensionManagementService.installFromGallery(galleryExtension, { - isMachineScoped: false, /* set isMachineScoped to prevent install and sync dialog in web */ - donotIncludePackAndDependencies: true, - installGivenVersion: !!extensionToSync.version, - installPreReleaseVersion: extensionToSync.preRelease - }); - if (!preview.disabledExtensions.some(identifier => areSameExtensions(identifier, galleryExtension.identifier))) { - newlyEnabledExtensions.push(local); - } - this.logService.info(`Installed extension.`, galleryExtension.identifier.id); - } catch (error) { - this.logService.error(error); - } - } - - const canEnabledExtensions = newlyEnabledExtensions.filter(e => this.extensionService.canAddExtension(toExtensionDescription(e))); - if (!(await this.areExtensionsRunning(canEnabledExtensions))) { - await new Promise((c, e) => { - const disposable = this.extensionService.onDidChangeExtensions(async () => { - try { - if (await this.areExtensionsRunning(canEnabledExtensions)) { - disposable.dispose(); - c(); - } - } catch (error) { - e(error); - } - }); - }); + if (await this.requiresInitialization()) { + await Promise.all(this.initializers.map(initializer => initializer.initializeInstalledExtensions(instantiationService))); } } - private async areExtensionsRunning(extensions: ILocalExtension[]): Promise { - await this.extensionService.whenInstalledExtensionsRegistered(); - const runningExtensions = this.extensionService.extensions; - return extensions.every(e => runningExtensions.some(r => areSameExtensions({ id: r.identifier.value }, e.identifier))); - } } class InitializeOtherResourcesContribution implements IWorkbenchContribution { diff --git a/src/vs/workbench/services/userDataProfile/browser/extensionsResource.ts b/src/vs/workbench/services/userDataProfile/browser/extensionsResource.ts index c93123c8847..3940f2a06b7 100644 --- a/src/vs/workbench/services/userDataProfile/browser/extensionsResource.ts +++ b/src/vs/workbench/services/userDataProfile/browser/extensionsResource.ts @@ -7,7 +7,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { localize } from 'vs/nls'; import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService'; -import { EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT, IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementService, IGlobalExtensionEnablementService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT, IExtensionGalleryService, IExtensionIdentifier, IExtensionManagementService, IGlobalExtensionEnablementService, ILocalExtension, InstallExtensionInfo } from 'vs/platform/extensionManagement/common/extensionManagement'; import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; @@ -16,7 +16,7 @@ import { IStorageService } from 'vs/platform/storage/common/storage'; import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; import { IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; import { ITreeItemCheckboxState, TreeItemCollapsibleState } from 'vs/workbench/common/views'; -import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceTreeItem, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceInitializer, IProfileResourceTreeItem, IUserDataProfileService, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; interface IProfileExtension { identifier: IExtensionIdentifier; @@ -26,9 +26,77 @@ interface IProfileExtension { version?: string; } +export class ExtensionsResourceInitializer implements IProfileResourceInitializer { + + constructor( + @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, + @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, + @IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService, + @IGlobalExtensionEnablementService private readonly extensionEnablementService: IGlobalExtensionEnablementService, + @ILogService private readonly logService: ILogService, + ) { + } + + async initialize(content: string): Promise { + const profileExtensions: IProfileExtension[] = JSON.parse(content); + const installedExtensions = await this.extensionManagementService.getInstalled(undefined, this.userDataProfileService.currentProfile.extensionsResource); + const extensionsToEnableOrDisable: { extension: IExtensionIdentifier; enable: boolean }[] = []; + const extensionsToInstall: IProfileExtension[] = []; + for (const e of profileExtensions) { + const isDisabled = this.extensionEnablementService.getDisabledExtensions().some(disabledExtension => areSameExtensions(disabledExtension, e.identifier)); + const installedExtension = installedExtensions.find(installed => areSameExtensions(installed.identifier, e.identifier)); + if (!installedExtension || (!installedExtension.isBuiltin && installedExtension.preRelease !== e.preRelease)) { + extensionsToInstall.push(e); + } + if (isDisabled !== !!e.disabled) { + extensionsToEnableOrDisable.push({ extension: e.identifier, enable: !e.disabled }); + } + } + const extensionsToUninstall: ILocalExtension[] = installedExtensions.filter(extension => !extension.isBuiltin && !profileExtensions.some(({ identifier }) => areSameExtensions(identifier, extension.identifier))); + for (const { extension, enable } of extensionsToEnableOrDisable) { + if (enable) { + this.logService.trace(`Initializing Profile: Enabling extension...`, extension.id); + await this.extensionEnablementService.enableExtension(extension); + this.logService.info(`Initializing Profile: Enabled extension...`, extension.id); + } else { + this.logService.trace(`Initializing Profile: Disabling extension...`, extension.id); + await this.extensionEnablementService.disableExtension(extension); + this.logService.info(`Initializing Profile: Disabled extension...`, extension.id); + } + } + if (extensionsToInstall.length) { + const galleryExtensions = await this.extensionGalleryService.getExtensions(extensionsToInstall.map(e => ({ ...e.identifier, version: e.version, hasPreRelease: e.version ? undefined : e.preRelease })), CancellationToken.None); + await Promise.all(extensionsToInstall.map(async e => { + const extension = galleryExtensions.find(galleryExtension => areSameExtensions(galleryExtension.identifier, e.identifier)); + if (!extension) { + return; + } + if (await this.extensionManagementService.canInstall(extension)) { + this.logService.trace(`Initializing Profile: Installing extension...`, extension.identifier.id, extension.version); + await this.extensionManagementService.installFromGallery(extension, { + isMachineScoped: false,/* set isMachineScoped value to prevent install and sync dialog in web */ + donotIncludePackAndDependencies: true, + installGivenVersion: !!e.version, + installPreReleaseVersion: e.preRelease, + profileLocation: this.userDataProfileService.currentProfile.extensionsResource, + context: { [EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT]: true } + }); + this.logService.info(`Initializing Profile: Installed extension...`, extension.identifier.id, extension.version); + } else { + this.logService.info(`Initializing Profile: Skipped installing extension because it cannot be installed.`, extension.identifier.id); + } + })); + } + if (extensionsToUninstall.length) { + await Promise.all(extensionsToUninstall.map(e => this.extensionManagementService.uninstall(e))); + } + } +} + export class ExtensionsResource implements IProfileResource { constructor( + private readonly extensionsDisabled: boolean, @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, @IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService, @IUserDataProfileStorageService private readonly userDataProfileStorageService: IUserDataProfileStorageService, @@ -50,7 +118,7 @@ export class ExtensionsResource implements IProfileResource { return this.withProfileScopedServices(profile, async (extensionEnablementService) => { const profileExtensions: IProfileExtension[] = await this.getProfileExtensions(content); const installedExtensions = await this.extensionManagementService.getInstalled(undefined, profile.extensionsResource); - const extensionsToEnableOrDisable: { extension: ILocalExtension; enable: boolean }[] = []; + const extensionsToEnableOrDisable: { extension: IExtensionIdentifier; enable: boolean }[] = []; const extensionsToInstall: IProfileExtension[] = []; for (const e of profileExtensions) { const isDisabled = extensionEnablementService.getDisabledExtensions().some(disabledExtension => areSameExtensions(disabledExtension, e.identifier)); @@ -58,44 +126,51 @@ export class ExtensionsResource implements IProfileResource { if (!installedExtension || (!installedExtension.isBuiltin && installedExtension.preRelease !== e.preRelease)) { extensionsToInstall.push(e); } - if (installedExtension && isDisabled !== !!e.disabled) { - extensionsToEnableOrDisable.push({ extension: installedExtension, enable: !e.disabled }); + if (isDisabled !== !!e.disabled) { + extensionsToEnableOrDisable.push({ extension: e.identifier, enable: !e.disabled }); } } const extensionsToUninstall: ILocalExtension[] = installedExtensions.filter(extension => !extension.isBuiltin && !profileExtensions.some(({ identifier }) => areSameExtensions(identifier, extension.identifier))); for (const { extension, enable } of extensionsToEnableOrDisable) { if (enable) { - this.logService.trace(`Importing Profile (${profile.name}): Enabling extension...`, extension.identifier.id); - await extensionEnablementService.enableExtension(extension.identifier); - this.logService.info(`Importing Profile (${profile.name}): Enabled extension...`, extension.identifier.id); + this.logService.trace(`Importing Profile (${profile.name}): Enabling extension...`, extension.id); + await extensionEnablementService.enableExtension(extension); + this.logService.info(`Importing Profile (${profile.name}): Enabled extension...`, extension.id); } else { - this.logService.trace(`Importing Profile (${profile.name}): Disabling extension...`, extension.identifier.id); - await extensionEnablementService.disableExtension(extension.identifier); - this.logService.info(`Importing Profile (${profile.name}): Disabled extension...`, extension.identifier.id); + this.logService.trace(`Importing Profile (${profile.name}): Disabling extension...`, extension.id); + await extensionEnablementService.disableExtension(extension); + this.logService.info(`Importing Profile (${profile.name}): Disabled extension...`, extension.id); } } if (extensionsToInstall.length) { + this.logService.info(`Importing Profile (${profile.name}): Started installing extensions.`); const galleryExtensions = await this.extensionGalleryService.getExtensions(extensionsToInstall.map(e => ({ ...e.identifier, version: e.version, hasPreRelease: e.version ? undefined : e.preRelease })), CancellationToken.None); + const installExtensionInfos: InstallExtensionInfo[] = []; await Promise.all(extensionsToInstall.map(async e => { const extension = galleryExtensions.find(galleryExtension => areSameExtensions(galleryExtension.identifier, e.identifier)); if (!extension) { return; } if (await this.extensionManagementService.canInstall(extension)) { - this.logService.trace(`Importing Profile (${profile.name}): Installing extension...`, extension.identifier.id, extension.version); - await this.extensionManagementService.installFromGallery(extension, { - isMachineScoped: false,/* set isMachineScoped value to prevent install and sync dialog in web */ - donotIncludePackAndDependencies: true, - installGivenVersion: !!e.version, - installPreReleaseVersion: e.preRelease, - profileLocation: profile.extensionsResource, - context: { [EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT]: true } + installExtensionInfos.push({ + extension, + options: { + isMachineScoped: false,/* set isMachineScoped value to prevent install and sync dialog in web */ + donotIncludePackAndDependencies: true, + installGivenVersion: !!e.version, + installPreReleaseVersion: e.preRelease, + profileLocation: profile.extensionsResource, + context: { [EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT]: true } + } }); - this.logService.info(`Importing Profile (${profile.name}): Installed extension...`, extension.identifier.id, extension.version); } else { this.logService.info(`Importing Profile (${profile.name}): Skipped installing extension because it cannot be installed.`, extension.identifier.id); } })); + if (installExtensionInfos.length) { + await this.extensionManagementService.installGalleryExtensions(installExtensionInfos); + } + this.logService.info(`Importing Profile (${profile.name}): Finished installing extensions.`); } if (extensionsToUninstall.length) { await Promise.all(extensionsToUninstall.map(e => this.extensionManagementService.uninstall(e))); @@ -120,13 +195,9 @@ export class ExtensionsResource implements IProfileResource { // skip user extensions without uuid continue; } - if (disabled && !extension.isBuiltin) { - // skip user disabled extensions - continue; - } } const profileExtension: IProfileExtension = { identifier, displayName: extension.manifest.displayName }; - if (disabled) { + if (this.extensionsDisabled || disabled) { profileExtension.disabled = true; } if (!extension.isBuiltin && extension.pinned) { @@ -188,7 +259,8 @@ export abstract class ExtensionsResourceTreeItem implements IProfileResourceTree } else { that.excludedExtensions.add(e.identifier.id.toLowerCase()); } - } + }, + tooltip: localize('exclude', "Select {0} Extension", e.displayName || e.identifier.id) } : undefined, command: { id: 'extension.open', @@ -212,17 +284,18 @@ export class ExtensionsResourceExportTreeItem extends ExtensionsResourceTreeItem constructor( private readonly profile: IUserDataProfile, + private readonly extensionsDisabled: boolean, @IInstantiationService private readonly instantiationService: IInstantiationService, ) { super(); } protected getExtensions(): Promise { - return this.instantiationService.createInstance(ExtensionsResource).getLocalExtensions(this.profile); + return this.instantiationService.createInstance(ExtensionsResource, this.extensionsDisabled).getLocalExtensions(this.profile); } async getContent(): Promise { - return this.instantiationService.createInstance(ExtensionsResource).getContent(this.profile, [...this.excludedExtensions.values()]); + return this.instantiationService.createInstance(ExtensionsResource, this.extensionsDisabled).getContent(this.profile, [...this.excludedExtensions.values()]); } } @@ -237,11 +310,11 @@ export class ExtensionsResourceImportTreeItem extends ExtensionsResourceTreeItem } protected getExtensions(): Promise { - return this.instantiationService.createInstance(ExtensionsResource).getProfileExtensions(this.content); + return this.instantiationService.createInstance(ExtensionsResource, false).getProfileExtensions(this.content); } async getContent(): Promise { - const extensionsResource = this.instantiationService.createInstance(ExtensionsResource); + const extensionsResource = this.instantiationService.createInstance(ExtensionsResource, false); const extensions = await extensionsResource.getProfileExtensions(this.content); return extensionsResource.toContent(extensions, [...this.excludedExtensions.values()]); } diff --git a/src/vs/workbench/services/userDataProfile/browser/globalStateResource.ts b/src/vs/workbench/services/userDataProfile/browser/globalStateResource.ts index cdfc7a75daa..7d610f28156 100644 --- a/src/vs/workbench/services/userDataProfile/browser/globalStateResource.ts +++ b/src/vs/workbench/services/userDataProfile/browser/globalStateResource.ts @@ -8,17 +8,35 @@ import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { IInstantiationService } 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 { IStorageEntry, IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; import { IUserDataProfileStorageService } from 'vs/platform/userDataProfile/common/userDataProfileStorageService'; import { API_OPEN_EDITOR_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; import { ITreeItemCheckboxState, TreeItemCollapsibleState } from 'vs/workbench/common/views'; -import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceTreeItem, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceInitializer, IProfileResourceTreeItem, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; interface IGlobalState { storage: IStringDictionary; } +export class GlobalStateResourceInitializer implements IProfileResourceInitializer { + + constructor(@IStorageService private readonly storageService: IStorageService) { + } + + async initialize(content: string): Promise { + const globalState: IGlobalState = JSON.parse(content); + const storageKeys = Object.keys(globalState.storage); + if (storageKeys.length) { + const storageEntries: Array = []; + for (const key of storageKeys) { + storageEntries.push({ key, value: globalState.storage[key], scope: StorageScope.PROFILE, target: StorageTarget.USER }); + } + this.storageService.storeAll(storageEntries, true); + } + } +} + export class GlobalStateResource implements IProfileResource { constructor( diff --git a/src/vs/workbench/services/userDataProfile/browser/keybindingsResource.ts b/src/vs/workbench/services/userDataProfile/browser/keybindingsResource.ts index 8ff33f900ce..3c3f6b9be6a 100644 --- a/src/vs/workbench/services/userDataProfile/browser/keybindingsResource.ts +++ b/src/vs/workbench/services/userDataProfile/browser/keybindingsResource.ts @@ -6,7 +6,7 @@ import { VSBuffer } from 'vs/base/common/buffer'; import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; import { ILogService } from 'vs/platform/log/common/log'; -import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceTreeItem, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceInitializer, IProfileResourceTreeItem, IUserDataProfileService, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; import { platform, Platform } from 'vs/base/common/platform'; import { ITreeItemCheckboxState, TreeItemCollapsibleState } from 'vs/workbench/common/views'; import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; @@ -19,6 +19,25 @@ interface IKeybindingsResourceContent { keybindings: string | null; } +export class KeybindingsResourceInitializer implements IProfileResourceInitializer { + + constructor( + @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, + @IFileService private readonly fileService: IFileService, + @ILogService private readonly logService: ILogService, + ) { + } + + async initialize(content: string): Promise { + const keybindingsContent: IKeybindingsResourceContent = JSON.parse(content); + if (keybindingsContent.keybindings === null) { + this.logService.info(`Initializing Profile: No keybindings to apply...`); + return; + } + await this.fileService.writeFile(this.userDataProfileService.currentProfile.keybindingsResource, VSBuffer.fromString(keybindingsContent.keybindings)); + } +} + export class KeybindingsResource implements IProfileResource { constructor( diff --git a/src/vs/workbench/services/userDataProfile/browser/settingsResource.ts b/src/vs/workbench/services/userDataProfile/browser/settingsResource.ts index 8f03f912918..f0d212d138b 100644 --- a/src/vs/workbench/services/userDataProfile/browser/settingsResource.ts +++ b/src/vs/workbench/services/userDataProfile/browser/settingsResource.ts @@ -8,7 +8,7 @@ import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platf import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; import { ILogService } from 'vs/platform/log/common/log'; import { Registry } from 'vs/platform/registry/common/platform'; -import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceTreeItem, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceInitializer, IProfileResourceTreeItem, IUserDataProfileService, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; import { updateIgnoredSettings } from 'vs/platform/userDataSync/common/settingsMerge'; import { IUserDataSyncUtilService } from 'vs/platform/userDataSync/common/userDataSync'; import { ITreeItemCheckboxState, TreeItemCollapsibleState } from 'vs/workbench/common/views'; @@ -21,6 +21,25 @@ interface ISettingsContent { settings: string | null; } +export class SettingsResourceInitializer implements IProfileResourceInitializer { + + constructor( + @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, + @IFileService private readonly fileService: IFileService, + @ILogService private readonly logService: ILogService, + ) { + } + + async initialize(content: string): Promise { + const settingsContent: ISettingsContent = JSON.parse(content); + if (settingsContent.settings === null) { + this.logService.info(`Initializing Profile: No settings to apply...`); + return; + } + await this.fileService.writeFile(this.userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString(settingsContent.settings)); + } +} + export class SettingsResource implements IProfileResource { constructor( diff --git a/src/vs/workbench/services/userDataProfile/browser/snippetsResource.ts b/src/vs/workbench/services/userDataProfile/browser/snippetsResource.ts index 3a154a7bf7e..82de3f6e6ca 100644 --- a/src/vs/workbench/services/userDataProfile/browser/snippetsResource.ts +++ b/src/vs/workbench/services/userDataProfile/browser/snippetsResource.ts @@ -14,12 +14,30 @@ import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity' import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; import { API_OPEN_EDITOR_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; import { ITreeItemCheckboxState, TreeItemCollapsibleState } from 'vs/workbench/common/views'; -import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceTreeItem, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceInitializer, IProfileResourceTreeItem, IUserDataProfileService, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; interface ISnippetsContent { snippets: IStringDictionary; } +export class SnippetsResourceInitializer implements IProfileResourceInitializer { + + constructor( + @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, + @IFileService private readonly fileService: IFileService, + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, + ) { + } + + async initialize(content: string): Promise { + const snippetsContent: ISnippetsContent = JSON.parse(content); + for (const key in snippetsContent.snippets) { + const resource = this.uriIdentityService.extUri.joinPath(this.userDataProfileService.currentProfile.snippetsHome, key); + await this.fileService.writeFile(resource, VSBuffer.fromString(snippetsContent.snippets[key])); + } + } +} + export class SnippetsResource implements IProfileResource { constructor( diff --git a/src/vs/workbench/services/userDataProfile/browser/tasksResource.ts b/src/vs/workbench/services/userDataProfile/browser/tasksResource.ts index 91fbc7d3310..2fc82df17e8 100644 --- a/src/vs/workbench/services/userDataProfile/browser/tasksResource.ts +++ b/src/vs/workbench/services/userDataProfile/browser/tasksResource.ts @@ -11,12 +11,31 @@ import { ILogService } from 'vs/platform/log/common/log'; import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; import { API_OPEN_EDITOR_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; import { ITreeItemCheckboxState, TreeItemCollapsibleState } from 'vs/workbench/common/views'; -import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceTreeItem, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IProfileResource, IProfileResourceChildTreeItem, IProfileResourceInitializer, IProfileResourceTreeItem, IUserDataProfileService, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; interface ITasksResourceContent { tasks: string | null; } +export class TasksResourceInitializer implements IProfileResourceInitializer { + + constructor( + @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, + @IFileService private readonly fileService: IFileService, + @ILogService private readonly logService: ILogService, + ) { + } + + async initialize(content: string): Promise { + const tasksContent: ITasksResourceContent = JSON.parse(content); + if (!tasksContent.tasks) { + this.logService.info(`Initializing Profile: No tasks to apply...`); + return; + } + await this.fileService.writeFile(this.userDataProfileService.currentProfile.tasksResource, VSBuffer.fromString(tasksContent.tasks)); + } +} + export class TasksResource implements IProfileResource { constructor( diff --git a/src/vs/workbench/services/userDataProfile/browser/userDataProfileImportExportService.ts b/src/vs/workbench/services/userDataProfile/browser/userDataProfileImportExportService.ts index bf0ff614dd8..eb091f8a9c5 100644 --- a/src/vs/workbench/services/userDataProfile/browser/userDataProfileImportExportService.ts +++ b/src/vs/workbench/services/userDataProfile/browser/userDataProfileImportExportService.ts @@ -10,7 +10,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { INotificationService } from 'vs/platform/notification/common/notification'; import { Emitter, Event } from 'vs/base/common/event'; import * as DOM from 'vs/base/browser/dom'; -import { IUserDataProfileImportExportService, PROFILE_FILTER, PROFILE_EXTENSION, IUserDataProfileContentHandler, IS_PROFILE_IMPORT_IN_PROGRESS_CONTEXT, PROFILES_TTILE, defaultUserDataProfileIcon, IUserDataProfileService, IProfileResourceTreeItem, IProfileResourceChildTreeItem, PROFILES_CATEGORY, IUserDataProfileManagementService, ProfileResourceType, IS_PROFILE_EXPORT_IN_PROGRESS_CONTEXT, ISaveProfileResult, IProfileImportOptions, PROFILE_URL_AUTHORITY, toUserDataProfileUri } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IUserDataProfileImportExportService, PROFILE_FILTER, PROFILE_EXTENSION, IUserDataProfileContentHandler, IS_PROFILE_IMPORT_IN_PROGRESS_CONTEXT, PROFILES_TITLE, defaultUserDataProfileIcon, IUserDataProfileService, IProfileResourceTreeItem, PROFILES_CATEGORY, IUserDataProfileManagementService, ProfileResourceType, IS_PROFILE_EXPORT_IN_PROGRESS_CONTEXT, ISaveProfileResult, IProfileImportOptions, PROFILE_URL_AUTHORITY, toUserDataProfileUri } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { IDialogService, IFileDialogService, IPromptButton } from 'vs/platform/dialogs/common/dialogs'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; @@ -60,7 +60,6 @@ import { asText, IRequestService } from 'vs/platform/request/common/request'; import { IProductService } from 'vs/platform/product/common/productService'; import { isUndefined } from 'vs/base/common/types'; import { Action, ActionRunner, IAction, IActionRunner } from 'vs/base/common/actions'; -import { showWindowLogActionId } from 'vs/workbench/common/logConstants'; import { isWeb } from 'vs/base/common/platform'; import { Action2, MenuId, registerAction2 } from 'vs/platform/actions/common/actions'; import { Codicon } from 'vs/base/common/codicons'; @@ -70,6 +69,7 @@ import { ExtensionType } from 'vs/platform/extensions/common/extensions'; import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { MarkdownString } from 'vs/base/common/htmlContent'; import { renderMarkdown } from 'vs/base/browser/markdownRenderer'; +import { showWindowLogActionId } from 'vs/workbench/services/log/common/logConstants'; interface IUserDataProfileTemplate { readonly name: string; @@ -107,7 +107,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU private readonly isProfileImportInProgressContextKey: IContextKey; private readonly viewContainer: ViewContainer; - private readonly fileUserDataProfileContentHandler: IUserDataProfileContentHandler; + private readonly fileUserDataProfileContentHandler: FileUserDataProfileContentHandler; constructor( @IInstantiationService private readonly instantiationService: IInstantiationService, @@ -115,7 +115,6 @@ export class UserDataProfileImportExportService extends Disposable implements IU @IViewsService private readonly viewsService: IViewsService, @IEditorService private readonly editorService: IEditorService, @IContextKeyService contextKeyService: IContextKeyService, - @IFileService private readonly fileService: IFileService, @IUserDataProfileManagementService private readonly userDataProfileManagementService: IUserDataProfileManagementService, @IUserDataProfilesService private readonly userDataProfilesService: IUserDataProfilesService, @IExtensionService private readonly extensionService: IExtensionService, @@ -140,7 +139,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU this.viewContainer = Registry.as(Extensions.ViewContainersRegistry).registerViewContainer( { id: 'userDataProfiles', - title: PROFILES_TTILE, + title: PROFILES_TITLE, ctorDescriptor: new SyncDescriptor( ViewPaneContainer, ['userDataProfiles', { mergeViewWithContainerWhenSingleView: true }] @@ -203,7 +202,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU const profileTemplate = await this.progressService.withProgress({ location: ProgressLocation.Window, command: showWindowLogActionId, - title: localize('resolving uri', "{0}: Resolving profile content...", options?.preview ? localize('preview profile', "Preview Profile") : localize('import profile', "Import Profile")), + title: localize('resolving uri', "{0}: Resolving profile content...", options?.preview ? localize('preview profile', "Preview Profile") : localize('import profile', "Create Profile")), }, () => this.resolveProfileTemplate(uri)); if (!profileTemplate) { return; @@ -211,7 +210,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU if (options?.preview) { await this.previewProfile(uri, profileTemplate); } else { - await this.doImportProfile(uri, profileTemplate); + await this.doImportProfile(profileTemplate); } } finally { disposables.dispose(); @@ -226,13 +225,18 @@ export class UserDataProfileImportExportService extends Disposable implements IU } const disposables = new DisposableStore(); try { - const userDataProfilesExportState = disposables.add(this.instantiationService.createInstance(UserDataProfileExportState, this.userDataProfileService.currentProfile)); + const userDataProfilesExportState = disposables.add(this.instantiationService.createInstance(UserDataProfileExportState, this.userDataProfileService.currentProfile, false)); const barrier = new Barrier(); - const exportAction = new BarrierAction(barrier, new Action('export', localize('export', "Export"), undefined, true, () => { + const exportAction = new BarrierAction(barrier, new Action('export', localize('export', "Export"), undefined, true, async () => { exportAction.enabled = false; - return this.doExportProfile(userDataProfilesExportState); - })); - const closeAction = new BarrierAction(barrier, new Action('close', localize('close', "Close"))); + try { + await this.doExportProfile(userDataProfilesExportState); + } catch (error) { + this.notificationService.error(error); + throw error; + } + }), this.notificationService); + const closeAction = new BarrierAction(barrier, new Action('close', localize('close', "Close")), this.notificationService); await this.showProfilePreviewView(EXPORT_PROFILE_PREVIEW_VIEW, userDataProfilesExportState.profile.name, exportAction, closeAction, true, userDataProfilesExportState); disposables.add(this.userDataProfileService.onDidChangeCurrentProfile(e => barrier.open())); await barrier.wait(); @@ -242,6 +246,31 @@ export class UserDataProfileImportExportService extends Disposable implements IU } } + async createFromCurrentProfile(name: string): Promise { + const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, this.userDataProfileService.currentProfile, false); + try { + const profileTemplate = await userDataProfilesExportState.getProfileTemplate(name, undefined); + await this.doImportProfile(profileTemplate); + } finally { + userDataProfilesExportState.dispose(); + } + } + + async createTroubleshootProfile(): Promise { + const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, this.userDataProfileService.currentProfile, true); + try { + const profileTemplate = await userDataProfilesExportState.getProfileTemplate(localize('troubleshoot issue', "Troubleshoot Issue"), undefined); + await this.progressService.withProgress({ + location: ProgressLocation.Notification, + delay: 1000, + sticky: true, + }, progress => + this.importAndSwitchWithProgress(profileTemplate, true, true, true, message => progress.report({ message: localize('troubleshoot profile progress', "Setting up Troubleshoot Profile: {0}", message) }))); + } finally { + userDataProfilesExportState.dispose(); + } + } + private async doExportProfile(userDataProfilesExportState: UserDataProfileExportState): Promise { const profile = await userDataProfilesExportState.getProfileToExport(); if (!profile) { @@ -265,7 +294,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU if (!profileContentHandler) { return; } - const saveResult = await profileContentHandler.saveProfile(profile.name, JSON.stringify(profile), CancellationToken.None); + const saveResult = await profileContentHandler.saveProfile(profile.name.replace('/', '-'), JSON.stringify(profile), CancellationToken.None); if (!saveResult) { return; } @@ -328,7 +357,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU const userDataProfileImportState = disposables.add(this.instantiationService.createInstance(UserDataProfileImportState, profileTemplate)); profileTemplate = await userDataProfileImportState.getProfileTemplateToImport(); - const importedProfile = await this.importAndSwitch(profileTemplate, true, false, localize('preview profile', "Preview Profile")); + const importedProfile = await this.importAndSwitch(profileTemplate, true, false, false, localize('preview profile', "Preview Profile")); if (!importedProfile) { return; @@ -336,11 +365,14 @@ export class UserDataProfileImportExportService extends Disposable implements IU const barrier = new Barrier(); const importAction = this.getImportAction(barrier, userDataProfileImportState); + const primaryAction = isWeb + ? new Action('importInDesktop', localize('import in desktop', "Create Profile in {0}", this.productService.nameLong), undefined, true, async () => this.openerService.open(uri, { openExternal: true })) + : importAction; const secondaryAction = isWeb - ? new Action('importInDesktop', localize('import in desktop', "Import Profile in {1}", importedProfile.name, this.productService.nameLong), undefined, true, async () => this.openerService.open(uri, { openExternal: true })) - : new BarrierAction(barrier, new Action('close', localize('close', "Close"))); + ? importAction + : new BarrierAction(barrier, new Action('close', localize('close', "Close")), this.notificationService); - const view = await this.showProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW, importedProfile.name, importAction, secondaryAction, false, userDataProfileImportState); + const view = await this.showProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW, importedProfile.name, primaryAction, secondaryAction, false, userDataProfileImportState); const message = new MarkdownString(); message.appendMarkdown(localize('preview profile message', "By default, extensions aren't installed when previewing a profile on the web. You can still install them manually before importing the profile. ")); message.appendMarkdown(`[${localize('learn more', "Learn more")}](https://aka.ms/vscode-extension-marketplace#_can-i-trust-extensions-from-the-marketplace).`); @@ -368,7 +400,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU view.setMessage(undefined); const profileTemplate = await userDataProfileImportState.getProfileTemplateToImport(); if (profileTemplate.extensions) { - await that.instantiationService.createInstance(ExtensionsResource).apply(profileTemplate.extensions, importedProfile); + await that.instantiationService.createInstance(ExtensionsResource, false).apply(profileTemplate.extensions, importedProfile); } }); } @@ -376,7 +408,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU disposables.add(Event.debounce(this.extensionManagementService.onDidInstallExtensions, () => undefined, 100)(async () => { const profileTemplate = await userDataProfileImportState.getProfileTemplateToImport(); if (profileTemplate.extensions) { - const profileExtensions = await that.instantiationService.createInstance(ExtensionsResource).getProfileExtensions(profileTemplate.extensions!); + const profileExtensions = await that.instantiationService.createInstance(ExtensionsResource, false).getProfileExtensions(profileTemplate.extensions!); const installed = await this.extensionManagementService.getInstalled(ExtensionType.User); if (profileExtensions.every(e => installed.some(i => areSameExtensions(e.identifier, i.identifier)))) { disposable.dispose(); @@ -391,9 +423,8 @@ export class UserDataProfileImportExportService extends Disposable implements IU } } - private async doImportProfile(uri: URI, profileTemplate: IUserDataProfileTemplate): Promise { + private async doImportProfile(profileTemplate: IUserDataProfileTemplate): Promise { const disposables = new DisposableStore(); - try { const userDataProfileImportState = disposables.add(this.instantiationService.createInstance(UserDataProfileImportState, profileTemplate)); const barrier = new Barrier(); @@ -401,7 +432,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU if (userDataProfileImportState.isEmpty()) { await importAction.run(); } else { - await this.showProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW, profileTemplate.name, importAction, new BarrierAction(barrier, new Action('cancel', localize('cancel', "Cancel"))), false, userDataProfileImportState); + await this.showProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW, profileTemplate.name, importAction, new BarrierAction(barrier, new Action('cancel', localize('cancel', "Cancel")), this.notificationService), false, userDataProfileImportState); } await barrier.wait(); await this.hideProfilePreviewView(IMPORT_PROFILE_PREVIEW_VIEW); @@ -411,22 +442,15 @@ export class UserDataProfileImportExportService extends Disposable implements IU } private getImportAction(barrier: Barrier, userDataProfileImportState: UserDataProfileImportState): IAction { - const title = localize('import', "Import Profile", userDataProfileImportState.profile.name); + const title = localize('import', "Create Profile", userDataProfileImportState.profile.name); const importAction = new BarrierAction(barrier, new Action('import', title, undefined, true, () => { const importProfileFn = async () => { importAction.enabled = false; const profileTemplate = await userDataProfileImportState.getProfileTemplateToImport(); - const importedProfile = await this.importAndSwitch(profileTemplate, false, true, title); + const importedProfile = await this.importAndSwitch(profileTemplate, false, true, false, title); if (!importedProfile) { return; } - this.notificationService.notify({ - severity: Severity.Info, - message: localize('imported profile', "Profile '{0}' is imported successfully.", importedProfile.name), - actions: { - primary: [new Action('profiles.showProfileContents', localize('show profile contents', "Show Profile Contents"), undefined, true, () => this.showProfileContents())] - } - }); }; if (userDataProfileImportState.isEmpty()) { return importProfileFn(); @@ -435,54 +459,58 @@ export class UserDataProfileImportExportService extends Disposable implements IU location: IMPORT_PROFILE_PREVIEW_VIEW, }, () => importProfileFn()); } - })); + }), this.notificationService); return importAction; } - private async importAndSwitch(profileTemplate: IUserDataProfileTemplate, temporaryProfile: boolean, extensions: boolean, title: string): Promise { + private async importAndSwitch(profileTemplate: IUserDataProfileTemplate, temporaryProfile: boolean, extensions: boolean, extensionsDisabled: boolean, title: string): Promise { return this.progressService.withProgress({ location: ProgressLocation.Window, command: showWindowLogActionId, }, async (progress) => { progress.report({ message: localize('Importing profile', "{0} ({1})...", title, profileTemplate.name) }); - const profile = await this.getProfileToImport(profileTemplate, temporaryProfile); - if (!profile) { - return undefined; - } - - if (profileTemplate.settings) { - progress.report({ message: localize('progress settings', "{0} ({1}): Applying Settings...", title, profileTemplate.name) }); - await this.instantiationService.createInstance(SettingsResource).apply(profileTemplate.settings, profile); - } - if (profileTemplate.keybindings) { - progress.report({ message: localize('progress keybindings', "{0} ({1}): Applying Keyboard Shortcuts...", title, profileTemplate.name) }); - await this.instantiationService.createInstance(KeybindingsResource).apply(profileTemplate.keybindings, profile); - } - if (profileTemplate.tasks) { - progress.report({ message: localize('progress tasks', "{0} ({1}): Applying Tasks...", title, profileTemplate.name) }); - await this.instantiationService.createInstance(TasksResource).apply(profileTemplate.tasks, profile); - } - if (profileTemplate.snippets) { - progress.report({ message: localize('progress snippets', "{0} ({1}): Applying Snippets...", title, profileTemplate.name) }); - await this.instantiationService.createInstance(SnippetsResource).apply(profileTemplate.snippets, profile); - } - if (profileTemplate.globalState) { - progress.report({ message: localize('progress global state', "{0} ({1}): Applying State...", title, profileTemplate.name) }); - await this.instantiationService.createInstance(GlobalStateResource).apply(profileTemplate.globalState, profile); - } - if (profileTemplate.extensions && extensions) { - progress.report({ message: localize('progress extensions', "{0} ({1}): Applying Extensions...", title, profileTemplate.name) }); - await this.instantiationService.createInstance(ExtensionsResource).apply(profileTemplate.extensions, profile); - } - - progress.report({ message: localize('switching profile', "{0} ({1}): Applying...", title, profileTemplate.name) }); - await this.userDataProfileManagementService.switchProfile(profile); - return profile; + return this.importAndSwitchWithProgress(profileTemplate, temporaryProfile, extensions, extensionsDisabled, message => progress.report({ message: `${title} (${profileTemplate.name}): ${message}` })); }); } + private async importAndSwitchWithProgress(profileTemplate: IUserDataProfileTemplate, temporaryProfile: boolean, extensions: boolean, extensionsDisabled: boolean, progress: (message: string) => void): Promise { + const profile = await this.getProfileToImport(profileTemplate, temporaryProfile); + if (!profile) { + return undefined; + } + + if (profileTemplate.settings) { + progress(localize('progress settings', "Applying Settings...")); + await this.instantiationService.createInstance(SettingsResource).apply(profileTemplate.settings, profile); + } + if (profileTemplate.keybindings) { + progress(localize('progress keybindings', "{0}ying Keyboard Shortcuts...")); + await this.instantiationService.createInstance(KeybindingsResource).apply(profileTemplate.keybindings, profile); + } + if (profileTemplate.tasks) { + progress(localize('progress tasks', "Applying Tasks...")); + await this.instantiationService.createInstance(TasksResource).apply(profileTemplate.tasks, profile); + } + if (profileTemplate.snippets) { + progress(localize('progress snippets', "Applying Snippets...")); + await this.instantiationService.createInstance(SnippetsResource).apply(profileTemplate.snippets, profile); + } + if (profileTemplate.globalState) { + progress(localize('progress global state', "Applying State...")); + await this.instantiationService.createInstance(GlobalStateResource).apply(profileTemplate.globalState, profile); + } + if (profileTemplate.extensions && extensions) { + progress(localize('progress extensions', "Applying Extensions...")); + await this.instantiationService.createInstance(ExtensionsResource, extensionsDisabled).apply(profileTemplate.extensions, profile); + } + + progress(localize('switching profile', " Applying...")); + await this.userDataProfileManagementService.switchProfile(profile); + return profile; + } + private async resolveProfileContent(resource: URI): Promise { - if (await this.fileService.canHandleResource(resource)) { + if (await this.fileUserDataProfileContentHandler.canHandle(resource)) { return this.fileUserDataProfileContentHandler.readProfile(resource, CancellationToken.None); } @@ -522,7 +550,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU private async pickProfileContentHandler(name: string): Promise { await this.extensionService.activateByEvent('onProfile'); if (this.profileContentHandlers.size === 1) { - return this.profileContentHandlers.values().next().value; + return this.profileContentHandlers.keys().next().value; } const options: QuickPickItem[] = []; for (const [id, profileContentHandler] of this.profileContentHandlers) { @@ -536,11 +564,12 @@ export class UserDataProfileImportExportService extends Disposable implements IU return result?.id; } - private async getProfileToImport(profileTemplate: IUserDataProfileTemplate, temp?: boolean): Promise { - const profile = this.userDataProfilesService.profiles.find(p => p.name === profileTemplate.name); + private async getProfileToImport(profileTemplate: IUserDataProfileTemplate, temp: boolean): Promise { + const profileName = profileTemplate.name; + const profile = this.userDataProfilesService.profiles.find(p => p.name === profileName); if (profile) { if (temp) { - return this.userDataProfilesService.createNamedProfile(`${profileTemplate.name} ${this.getProfileNameIndex(profileTemplate.name)}`, { shortName: profileTemplate.shortName, transient: temp }); + return this.userDataProfilesService.createNamedProfile(`${profileName} ${this.getProfileNameIndex(profileName)}`, { shortName: profileTemplate.shortName, transient: temp }); } enum ImportProfileChoice { @@ -550,7 +579,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU } const { result } = await this.dialogService.prompt({ type: Severity.Info, - message: localize('profile already exists', "Profile with name '{0}' already exists. Do you want to overwrite it?", profileTemplate.name), + message: localize('profile already exists', "Profile with name '{0}' already exists. Do you want to overwrite it?", profileName), buttons: [ { label: localize({ key: 'overwrite', comment: ['&& denotes a mnemonic'] }, "&&Overwrite"), @@ -578,7 +607,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU const name = await this.quickInputService.input({ placeHolder: localize('name', "Profile name"), title: localize('create new title', "Create New Profile"), - value: `${profileTemplate.name} ${this.getProfileNameIndex(profileTemplate.name)}`, + value: `${profileName} ${this.getProfileNameIndex(profileName)}`, validateInput: async (value: string) => { if (this.userDataProfilesService.profiles.some(p => p.name === value)) { return localize('profileExists', "Profile with name {0} already exists.", value); @@ -591,7 +620,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU } return this.userDataProfilesService.createNamedProfile(name); } else { - return this.userDataProfilesService.createNamedProfile(profileTemplate.name, { shortName: profileTemplate.shortName, transient: temp }); + return this.userDataProfilesService.createNamedProfile(profileName, { shortName: profileTemplate.shortName, transient: temp }); } } @@ -656,7 +685,7 @@ export class UserDataProfileImportExportService extends Disposable implements IU await this.instantiationService.createInstance(GlobalStateResource).apply(profile.globalState, this.userDataProfileService.currentProfile); } if (profile.extensions) { - await this.instantiationService.createInstance(ExtensionsResource).apply(profile.extensions, this.userDataProfileService.currentProfile); + await this.instantiationService.createInstance(ExtensionsResource, false).apply(profile.extensions, this.userDataProfileService.currentProfile); } }); this.notificationService.info(localize('applied profile', "{0}: Applied successfully.", PROFILES_CATEGORY.value)); @@ -689,8 +718,12 @@ class FileUserDataProfileContentHandler implements IUserDataProfileContentHandle return { link, id: link.toString() }; } + async canHandle(uri: URI): Promise { + return uri.scheme !== Schemas.http && uri.scheme !== Schemas.https && await this.fileService.canHandleResource(uri); + } + async readProfile(uri: URI, token: CancellationToken): Promise { - if (await this.fileService.canHandleResource(uri)) { + if (await this.canHandle(uri)) { return (await this.fileService.readFile(uri, undefined, token)).value.toString(); } return null; @@ -743,10 +776,7 @@ class UserDataProfilePreviewViewPane extends TreeViewPane { super.renderTreeView(DOM.append(container, DOM.$('.profile-view-tree-container'))); this.messageContainer = DOM.append(container, DOM.$('.profile-view-message-container.hide')); this.createButtons(container); - this._register(this.treeView.onDidChangeCheckboxState(items => { - this.treeView.refresh(this.userDataProfileData.onDidChangeCheckboxState(items)); - this.updateConfirmButtonEnablement(); - })); + this._register(this.treeView.onDidChangeCheckboxState(() => this.updateConfirmButtonEnablement())); this.computeAndLayout(); this._register(Event.any(this.userDataProfileData.onDidChangeRoots, this.treeView.onDidCollapseItem, this.treeView.onDidExpandItem)(() => this.computeAndLayout())); } @@ -873,27 +903,6 @@ abstract class UserDataProfileImportExportState extends Disposable implements IT } } - onDidChangeCheckboxState(items: ITreeItem[]): ITreeItem[] { - const toRefresh: ITreeItem[] = []; - for (const item of items) { - if (item.children) { - for (const child of item.children) { - if (child.checkbox) { - child.checkbox.isChecked = !!item.checkbox?.isChecked; - } - } - toRefresh.push(item); - } else { - const parent = (item).parent; - if (item.checkbox?.isChecked && parent?.checkbox) { - parent.checkbox.isChecked = true; - toRefresh.push(parent); - } - } - } - return items; - } - async getChildren(element?: ITreeItem): Promise { if (element) { return (element).getChildren(); @@ -912,7 +921,7 @@ abstract class UserDataProfileImportExportState extends Disposable implements IT this.roots = await this.fetchRoots(); for (const root of this.roots) { if (this.canSelect) { - root.checkbox = { isChecked: true }; + root.checkbox = { isChecked: true, tooltip: localize('select', "Select {0}", root.label.label) }; } else { root.checkbox = undefined; } @@ -931,7 +940,7 @@ abstract class UserDataProfileImportExportState extends Disposable implements IT return this.roots.some(root => this.isSelected(root)); } - protected async getProfileTemplate(name: string, shortName: string | undefined): Promise { + async getProfileTemplate(name: string, shortName: string | undefined): Promise { const roots = await this.getRoots(); let settings: string | undefined; let keybindings: string | undefined; @@ -983,6 +992,7 @@ class UserDataProfileExportState extends UserDataProfileImportExportState { constructor( readonly profile: IUserDataProfile, + private readonly disableExtensions: boolean, @IQuickInputService quickInputService: IQuickInputService, @IFileService private readonly fileService: IFileService, @IInstantiationService private readonly instantiationService: IInstantiationService @@ -1038,7 +1048,7 @@ class UserDataProfileExportState extends UserDataProfileImportExportState { roots.push(globalStateResourceTreeItem); } - const extensionsResourceTreeItem = this.instantiationService.createInstance(ExtensionsResourceExportTreeItem, exportPreviewProfle); + const extensionsResourceTreeItem = this.instantiationService.createInstance(ExtensionsResourceExportTreeItem, exportPreviewProfle, this.disableExtensions); if (await extensionsResourceTreeItem.hasContent()) { roots.push(extensionsResourceTreeItem); } @@ -1061,6 +1071,7 @@ class UserDataProfileExportState extends UserDataProfileImportExportState { tasksResource: profile.tasksResource.with({ scheme: USER_DATA_PROFILE_EXPORT_SCHEME }), snippetsHome: profile.snippetsHome.with({ scheme: USER_DATA_PROFILE_EXPORT_SCHEME }), extensionsResource: profile.extensionsResource, + cacheHome: profile.cacheHome, useDefaultFlags: profile.useDefaultFlags, isTransient: profile.isTransient }; @@ -1108,7 +1119,7 @@ class UserDataProfileImportState extends UserDataProfileImportExportState { const inMemoryProvider = this._register(new InMemoryFileSystemProvider()); this.disposables.add(this.fileService.registerProvider(USER_DATA_PROFILE_IMPORT_PREVIEW_SCHEME, inMemoryProvider)); const roots: IProfileResourceTreeItem[] = []; - const importPreviewProfle = toUserDataProfile(generateUuid(), this.profile.name, URI.file('/root').with({ scheme: USER_DATA_PROFILE_IMPORT_PREVIEW_SCHEME })); + const importPreviewProfle = toUserDataProfile(generateUuid(), this.profile.name, URI.file('/root').with({ scheme: USER_DATA_PROFILE_IMPORT_PREVIEW_SCHEME }), URI.file('/cache').with({ scheme: USER_DATA_PROFILE_IMPORT_PREVIEW_SCHEME })); if (this.profile.settings) { const settingsResource = this.instantiationService.createInstance(SettingsResource); @@ -1178,9 +1189,15 @@ class UserDataProfileImportState extends UserDataProfileImportExportState { } class BarrierAction extends Action { - constructor(barrier: Barrier, action: Action) { + constructor(barrier: Barrier, action: Action, + notificationService: INotificationService) { super(action.id, action.label, action.class, action.enabled, async () => { - await action.run(); + try { + await action.run(); + } catch (error) { + notificationService.error(error); + throw error; + } barrier.open(); }); } diff --git a/src/vs/workbench/services/userDataProfile/browser/userDataProfileInit.ts b/src/vs/workbench/services/userDataProfile/browser/userDataProfileInit.ts new file mode 100644 index 00000000000..0c05c284536 --- /dev/null +++ b/src/vs/workbench/services/userDataProfile/browser/userDataProfileInit.ts @@ -0,0 +1,156 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; +import { IFileService } from 'vs/platform/files/common/files'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { ILogService } from 'vs/platform/log/common/log'; +import { Barrier, Promises } from 'vs/base/common/async'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { IUserDataInitializer } from 'vs/workbench/services/userData/browser/userDataInit'; +import { IProfileResourceInitializer, IUserDataProfileService, IUserDataProfileTemplate, ProfileResourceType } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { SettingsResourceInitializer } from 'vs/workbench/services/userDataProfile/browser/settingsResource'; +import { GlobalStateResourceInitializer } from 'vs/workbench/services/userDataProfile/browser/globalStateResource'; +import { KeybindingsResourceInitializer } from 'vs/workbench/services/userDataProfile/browser/keybindingsResource'; +import { TasksResourceInitializer } from 'vs/workbench/services/userDataProfile/browser/tasksResource'; +import { SnippetsResourceInitializer } from 'vs/workbench/services/userDataProfile/browser/snippetsResource'; +import { ExtensionsResourceInitializer } from 'vs/workbench/services/userDataProfile/browser/extensionsResource'; +import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; +import { isString } from 'vs/base/common/types'; +import { IRequestService, asJson } from 'vs/platform/request/common/request'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { URI } from 'vs/base/common/uri'; + +export class UserDataProfileInitializer implements IUserDataInitializer { + + _serviceBrand: any; + + private readonly initialized: ProfileResourceType[] = []; + private readonly initializationFinished = new Barrier(); + + constructor( + @IBrowserWorkbenchEnvironmentService private readonly environmentService: IBrowserWorkbenchEnvironmentService, + @IFileService private readonly fileService: IFileService, + @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, + @IStorageService private readonly storageService: IStorageService, + @ILogService private readonly logService: ILogService, + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, + @IRequestService private readonly requestService: IRequestService, + ) { + } + + async whenInitializationFinished(): Promise { + await this.initializationFinished.wait(); + } + + async requiresInitialization(): Promise { + if (!this.environmentService.options?.profile?.contents) { + return false; + } + if (!this.storageService.isNew(StorageScope.PROFILE)) { + return false; + } + return true; + } + + async initializeRequiredResources(): Promise { + this.logService.trace(`UserDataProfileInitializer#initializeRequiredResources`); + const promises = []; + const profileTemplate = await this.getProfileTemplate(); + if (profileTemplate?.settings) { + promises.push(this.initialize(new SettingsResourceInitializer(this.userDataProfileService, this.fileService, this.logService), profileTemplate.settings, ProfileResourceType.Settings)); + } + if (profileTemplate?.globalState) { + promises.push(this.initialize(new GlobalStateResourceInitializer(this.storageService), profileTemplate.globalState, ProfileResourceType.GlobalState)); + } + await Promise.all(promises); + } + + async initializeOtherResources(instantiationService: IInstantiationService): Promise { + try { + this.logService.trace(`UserDataProfileInitializer#initializeOtherResources`); + const promises = []; + const profileTemplate = await this.getProfileTemplate(); + if (profileTemplate?.keybindings) { + promises.push(this.initialize(new KeybindingsResourceInitializer(this.userDataProfileService, this.fileService, this.logService), profileTemplate.keybindings, ProfileResourceType.Keybindings)); + } + if (profileTemplate?.tasks) { + promises.push(this.initialize(new TasksResourceInitializer(this.userDataProfileService, this.fileService, this.logService), profileTemplate.tasks, ProfileResourceType.Tasks)); + } + if (profileTemplate?.snippets) { + promises.push(this.initialize(new SnippetsResourceInitializer(this.userDataProfileService, this.fileService, this.uriIdentityService), profileTemplate.snippets, ProfileResourceType.Snippets)); + } + promises.push(this.initializeInstalledExtensions(instantiationService)); + await Promises.settled(promises); + } finally { + this.initializationFinished.open(); + } + } + + private initializeInstalledExtensionsPromise: Promise | undefined; + async initializeInstalledExtensions(instantiationService: IInstantiationService): Promise { + if (!this.initializeInstalledExtensionsPromise) { + const profileTemplate = await this.getProfileTemplate(); + if (profileTemplate?.extensions) { + this.initializeInstalledExtensionsPromise = this.initialize(instantiationService.createInstance(ExtensionsResourceInitializer), profileTemplate.extensions, ProfileResourceType.Extensions); + } else { + this.initializeInstalledExtensionsPromise = Promise.resolve(); + } + + } + return this.initializeInstalledExtensionsPromise; + } + + private profileTemplatePromise: Promise | undefined; + private getProfileTemplate(): Promise { + if (!this.profileTemplatePromise) { + this.profileTemplatePromise = this.doGetProfileTemplate(); + } + return this.profileTemplatePromise; + } + + private async doGetProfileTemplate(): Promise { + if (!this.environmentService.options?.profile?.contents) { + return null; + } + if (isString(this.environmentService.options.profile.contents)) { + try { + return JSON.parse(this.environmentService.options.profile.contents); + } catch (error) { + this.logService.error(error); + return null; + } + } + try { + const url = URI.revive(this.environmentService.options.profile.contents).toString(true); + const context = await this.requestService.request({ type: 'GET', url }, CancellationToken.None); + if (context.res.statusCode === 200) { + return await asJson(context); + } else { + this.logService.warn(`UserDataProfileInitializer: Failed to get profile from URL: ${url}. Status code: ${context.res.statusCode}.`); + } + } catch (error) { + this.logService.error(error); + } + return null; + } + + private async initialize(initializer: IProfileResourceInitializer, content: string, profileResource: ProfileResourceType): Promise { + try { + if (this.initialized.includes(profileResource)) { + this.logService.info(`UserDataProfileInitializer: ${profileResource} initialized already.`); + return; + } + this.initialized.push(profileResource); + this.logService.trace(`UserDataProfileInitializer: Initializing ${profileResource}`); + await initializer.initialize(content); + this.logService.info(`UserDataProfileInitializer: Initialized ${profileResource}`); + } catch (error) { + this.logService.info(`UserDataProfileInitializer: Error while initializing ${profileResource}`); + this.logService.error(error); + } + } + +} diff --git a/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.ts b/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.ts index 02f05fdeb7a..75d7d57e639 100644 --- a/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.ts +++ b/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { CancellationError } from 'vs/base/common/errors'; import { Disposable } from 'vs/base/common/lifecycle'; import { localize } from 'vs/nls'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; @@ -46,14 +47,14 @@ export class UserDataProfileManagementService extends Disposable implements IUse private onDidChangeProfiles(e: DidChangeProfilesEvent): void { if (e.removed.some(profile => profile.id === this.userDataProfileService.currentProfile.id)) { - this.enterProfile(this.userDataProfilesService.defaultProfile, false, localize('reload message when removed', "The current profile has been removed. Please reload to switch back to default profile")); + this.enterProfile(this.userDataProfilesService.defaultProfile, localize('reload message when removed', "The current profile has been removed. Please reload to switch back to default profile")); return; } } private onDidResetWorkspaces(): void { if (!this.userDataProfileService.currentProfile.isDefault) { - this.enterProfile(this.userDataProfilesService.defaultProfile, false, localize('reload message when removed', "The current profile has been removed. Please reload to switch back to default profile")); + this.enterProfile(this.userDataProfilesService.defaultProfile, localize('reload message when removed', "The current profile has been removed. Please reload to switch back to default profile")); return; } } @@ -64,16 +65,16 @@ export class UserDataProfileManagementService extends Disposable implements IUse } } - async createAndEnterProfile(name: string, options?: IUserDataProfileOptions, fromExisting?: boolean): Promise { + async createAndEnterProfile(name: string, options?: IUserDataProfileOptions): Promise { const profile = await this.userDataProfilesService.createNamedProfile(name, options, toWorkspaceIdentifier(this.workspaceContextService.getWorkspace())); - await this.enterProfile(profile, !!fromExisting); + await this.enterProfile(profile); this.telemetryService.publicLog2('profileManagementActionExecuted', { id: 'createAndEnterProfile' }); return profile; } async createAndEnterTransientProfile(): Promise { const profile = await this.userDataProfilesService.createTransientProfile(toWorkspaceIdentifier(this.workspaceContextService.getWorkspace())); - await this.enterProfile(profile, false); + await this.enterProfile(profile); this.telemetryService.publicLog2('profileManagementActionExecuted', { id: 'createAndEnterTransientProfile' }); return profile; } @@ -109,19 +110,25 @@ export class UserDataProfileManagementService extends Disposable implements IUse return; } await this.userDataProfilesService.setProfileForWorkspace(workspaceIdentifier, profile); - await this.enterProfile(profile, false); + await this.enterProfile(profile); this.telemetryService.publicLog2('profileManagementActionExecuted', { id: 'switchProfile' }); } - private async enterProfile(profile: IUserDataProfile, preserveData: boolean, reloadMessage?: string): Promise { + private async enterProfile(profile: IUserDataProfile, reloadMessage?: string): Promise { const isRemoteWindow = !!this.environmentService.remoteAuthority; if (!isRemoteWindow) { - this.extensionService.stopExtensionHosts(); + if (!(await this.extensionService.stopExtensionHosts(localize('switch profile', "Switching to a profile.")))) { + // If extension host did not stop, do not switch profile + if (this.userDataProfilesService.profiles.some(p => p.id === this.userDataProfileService.currentProfile.id)) { + await this.userDataProfilesService.setProfileForWorkspace(toWorkspaceIdentifier(this.workspaceContextService.getWorkspace()), this.userDataProfileService.currentProfile); + } + throw new CancellationError(); + } } // In a remote window update current profile before reloading so that data is preserved from current profile if asked to preserve - await this.userDataProfileService.updateCurrentProfile(profile, preserveData); + await this.userDataProfileService.updateCurrentProfile(profile); if (isRemoteWindow) { const { confirmed } = await this.dialogService.confirm({ diff --git a/src/vs/workbench/services/userDataProfile/common/userDataProfile.ts b/src/vs/workbench/services/userDataProfile/common/userDataProfile.ts index 904deb8d5cf..87b0b2edc53 100644 --- a/src/vs/workbench/services/userDataProfile/common/userDataProfile.ts +++ b/src/vs/workbench/services/userDataProfile/common/userDataProfile.ts @@ -19,7 +19,6 @@ import { IDisposable } from 'vs/base/common/lifecycle'; import { IProductService } from 'vs/platform/product/common/productService'; export interface DidChangeUserDataProfileEvent { - readonly preserveData: boolean; readonly previous: IUserDataProfile; readonly profile: IUserDataProfile; join(promise: Promise): void; @@ -31,7 +30,7 @@ export interface IUserDataProfileService { readonly onDidUpdateCurrentProfile: Event; readonly onDidChangeCurrentProfile: Event; readonly currentProfile: IUserDataProfile; - updateCurrentProfile(currentProfile: IUserDataProfile, preserveData: boolean): Promise; + updateCurrentProfile(currentProfile: IUserDataProfile): Promise; getShortName(profile: IUserDataProfile): string; } @@ -39,7 +38,7 @@ export const IUserDataProfileManagementService = createDecorator; + createAndEnterProfile(name: string, options?: IUserDataProfileOptions): Promise; createAndEnterTransientProfile(): Promise; removeProfile(profile: IUserDataProfile): Promise; updateProfile(profile: IUserDataProfile, updateOptions: IUserDataProfileUpdateOptions): Promise; @@ -88,6 +87,8 @@ export interface IUserDataProfileImportExportService { exportProfile(): Promise; importProfile(uri: URI, options?: IProfileImportOptions): Promise; showProfileContents(): Promise; + createFromCurrentProfile(name: string): Promise; + createTroubleshootProfile(): Promise; setProfile(profile: IUserDataProfileTemplate): Promise; } @@ -100,6 +101,10 @@ export const enum ProfileResourceType { GlobalState = 'globalState', } +export interface IProfileResourceInitializer { + initialize(content: string): Promise; +} + export interface IProfileResource { getContent(profile: IUserDataProfile): Promise; apply(content: string, profile: IUserDataProfile): Promise; @@ -133,8 +138,8 @@ export const defaultUserDataProfileIcon = registerIcon('defaultProfile-icon', Co export const ProfilesMenu = new MenuId('Profiles'); export const MANAGE_PROFILES_ACTION_ID = 'workbench.profiles.actions.manage'; -export const PROFILES_TTILE = { value: localize('profiles', "Profiles"), original: 'Profiles' }; -export const PROFILES_CATEGORY = { ...PROFILES_TTILE }; +export const PROFILES_TITLE = { value: localize('profiles', "Profiles"), original: 'Profiles' }; +export const PROFILES_CATEGORY = { ...PROFILES_TITLE }; export const PROFILE_EXTENSION = 'code-profile'; export const PROFILE_FILTER = [{ name: localize('profile', "Profile"), extensions: [PROFILE_EXTENSION] }]; export const PROFILES_ENABLEMENT_CONTEXT = new RawContextKey('profiles.enabled', true); diff --git a/src/vs/workbench/services/userDataProfile/common/userDataProfileService.ts b/src/vs/workbench/services/userDataProfile/common/userDataProfileService.ts index 2d7dbc829c3..c86fa236bab 100644 --- a/src/vs/workbench/services/userDataProfile/common/userDataProfileService.ts +++ b/src/vs/workbench/services/userDataProfile/common/userDataProfileService.ts @@ -38,7 +38,7 @@ export class UserDataProfileService extends Disposable implements IUserDataProfi })); } - async updateCurrentProfile(userDataProfile: IUserDataProfile, preserveData: boolean): Promise { + async updateCurrentProfile(userDataProfile: IUserDataProfile): Promise { if (this._currentProfile.id === userDataProfile.id) { return; } @@ -46,7 +46,6 @@ export class UserDataProfileService extends Disposable implements IUserDataProfi this._currentProfile = userDataProfile; const joiners: Promise[] = []; this._onDidChangeCurrentProfile.fire({ - preserveData, previous, profile: userDataProfile, join(promise) { diff --git a/src/vs/workbench/services/userDataSync/browser/userDataSyncInit.ts b/src/vs/workbench/services/userDataSync/browser/userDataSyncInit.ts new file mode 100644 index 00000000000..ef77a1a411d --- /dev/null +++ b/src/vs/workbench/services/userDataSync/browser/userDataSyncInit.ts @@ -0,0 +1,425 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; +import { AbstractExtensionsInitializer, IExtensionsInitializerPreviewResult } from 'vs/platform/userDataSync/common/extensionsSync'; +import { GlobalStateInitializer, UserDataSyncStoreTypeSynchronizer } from 'vs/platform/userDataSync/common/globalStateSync'; +import { KeybindingsInitializer } from 'vs/platform/userDataSync/common/keybindingsSync'; +import { SettingsInitializer } from 'vs/platform/userDataSync/common/settingsSync'; +import { SnippetsInitializer } from 'vs/platform/userDataSync/common/snippetsSync'; +import { IFileService } from 'vs/platform/files/common/files'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { ILogService } from 'vs/platform/log/common/log'; +import { UserDataSyncStoreClient } from 'vs/platform/userDataSync/common/userDataSyncStoreService'; +import { IProductService } from 'vs/platform/product/common/productService'; +import { IRequestService } from 'vs/platform/request/common/request'; +import { IRemoteUserData, IUserData, IUserDataSyncResourceInitializer, IUserDataSyncLogService, IUserDataSyncStoreManagementService, SyncResource } from 'vs/platform/userDataSync/common/userDataSync'; +import { AuthenticationSessionInfo, getCurrentAuthenticationSessionInfo } from 'vs/workbench/services/authentication/browser/authenticationService'; +import { getSyncAreaLabel } from 'vs/workbench/services/userDataSync/common/userDataSync'; +import { isWeb } from 'vs/base/common/platform'; +import { Barrier, Promises } from 'vs/base/common/async'; +import { IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { IExtensionService, toExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; +import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; +import { IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions'; +import { DisposableStore } from 'vs/base/common/lifecycle'; +import { isEqual } from 'vs/base/common/resources'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage'; +import { ICredentialsService } from 'vs/platform/credentials/common/credentials'; +import { TasksInitializer } from 'vs/platform/userDataSync/common/tasksSync'; +import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; +import { IUserDataInitializer } from 'vs/workbench/services/userData/browser/userDataInit'; +import { ISecretStorageService } from 'vs/platform/secrets/common/secrets'; + +export class UserDataSyncInitializer implements IUserDataInitializer { + + _serviceBrand: any; + + private readonly initialized: SyncResource[] = []; + private readonly initializationFinished = new Barrier(); + private globalStateUserData: IUserData | null = null; + + constructor( + @IBrowserWorkbenchEnvironmentService private readonly environmentService: IBrowserWorkbenchEnvironmentService, + @ISecretStorageService private readonly secretStorageService: ISecretStorageService, + @ICredentialsService private readonly credentialsService: ICredentialsService, + @IUserDataSyncStoreManagementService private readonly userDataSyncStoreManagementService: IUserDataSyncStoreManagementService, + @IFileService private readonly fileService: IFileService, + @IUserDataProfilesService private readonly userDataProfilesService: IUserDataProfilesService, + @IStorageService private readonly storageService: IStorageService, + @IProductService private readonly productService: IProductService, + @IRequestService private readonly requestService: IRequestService, + @ILogService private readonly logService: ILogService, + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, + ) { + this.createUserDataSyncStoreClient().then(userDataSyncStoreClient => { + if (!userDataSyncStoreClient) { + this.initializationFinished.open(); + } + }); + } + + private _userDataSyncStoreClientPromise: Promise | undefined; + private createUserDataSyncStoreClient(): Promise { + if (!this._userDataSyncStoreClientPromise) { + this._userDataSyncStoreClientPromise = (async (): Promise => { + try { + if (!isWeb) { + this.logService.trace(`Skipping initializing user data in desktop`); + return; + } + + if (!this.storageService.isNew(StorageScope.APPLICATION)) { + this.logService.trace(`Skipping initializing user data as application was opened before`); + return; + } + + if (!this.storageService.isNew(StorageScope.WORKSPACE)) { + this.logService.trace(`Skipping initializing user data as workspace was opened before`); + return; + } + + if (this.environmentService.options?.settingsSyncOptions?.authenticationProvider && !this.environmentService.options.settingsSyncOptions.enabled) { + this.logService.trace(`Skipping initializing user data as settings sync is disabled`); + return; + } + + let authenticationSession; + try { + authenticationSession = await getCurrentAuthenticationSessionInfo(this.credentialsService, this.secretStorageService, this.productService); + } catch (error) { + this.logService.error(error); + } + if (!authenticationSession) { + this.logService.trace(`Skipping initializing user data as authentication session is not set`); + return; + } + + await this.initializeUserDataSyncStore(authenticationSession); + + const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore; + if (!userDataSyncStore) { + this.logService.trace(`Skipping initializing user data as sync service is not provided`); + return; + } + + const userDataSyncStoreClient = new UserDataSyncStoreClient(userDataSyncStore.url, this.productService, this.requestService, this.logService, this.environmentService, this.fileService, this.storageService); + userDataSyncStoreClient.setAuthToken(authenticationSession.accessToken, authenticationSession.providerId); + + const manifest = await userDataSyncStoreClient.manifest(null); + if (manifest === null) { + userDataSyncStoreClient.dispose(); + this.logService.trace(`Skipping initializing user data as there is no data`); + return; + } + + this.logService.info(`Using settings sync service ${userDataSyncStore.url.toString()} for initialization`); + return userDataSyncStoreClient; + + } catch (error) { + this.logService.error(error); + return; + } + })(); + } + + return this._userDataSyncStoreClientPromise; + } + + private async initializeUserDataSyncStore(authenticationSession: AuthenticationSessionInfo): Promise { + const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore; + if (!userDataSyncStore?.canSwitch) { + return; + } + + const disposables = new DisposableStore(); + try { + const userDataSyncStoreClient = disposables.add(new UserDataSyncStoreClient(userDataSyncStore.url, this.productService, this.requestService, this.logService, this.environmentService, this.fileService, this.storageService)); + userDataSyncStoreClient.setAuthToken(authenticationSession.accessToken, authenticationSession.providerId); + + // Cache global state data for global state initialization + this.globalStateUserData = await userDataSyncStoreClient.readResource(SyncResource.GlobalState, null); + + if (this.globalStateUserData) { + const userDataSyncStoreType = new UserDataSyncStoreTypeSynchronizer(userDataSyncStoreClient, this.storageService, this.environmentService, this.fileService, this.logService).getSyncStoreType(this.globalStateUserData); + if (userDataSyncStoreType) { + await this.userDataSyncStoreManagementService.switch(userDataSyncStoreType); + + // Unset cached global state data if urls are changed + if (!isEqual(userDataSyncStore.url, this.userDataSyncStoreManagementService.userDataSyncStore?.url)) { + this.logService.info('Switched settings sync store'); + this.globalStateUserData = null; + } + } + } + } finally { + disposables.dispose(); + } + } + + async whenInitializationFinished(): Promise { + await this.initializationFinished.wait(); + } + + async requiresInitialization(): Promise { + this.logService.trace(`UserDataInitializationService#requiresInitialization`); + const userDataSyncStoreClient = await this.createUserDataSyncStoreClient(); + return !!userDataSyncStoreClient; + } + + async initializeRequiredResources(): Promise { + this.logService.trace(`UserDataInitializationService#initializeRequiredResources`); + return this.initialize([SyncResource.Settings, SyncResource.GlobalState]); + } + + async initializeOtherResources(instantiationService: IInstantiationService): Promise { + try { + this.logService.trace(`UserDataInitializationService#initializeOtherResources`); + await Promise.allSettled([this.initialize([SyncResource.Keybindings, SyncResource.Snippets, SyncResource.Tasks]), this.initializeExtensions(instantiationService)]); + } finally { + this.initializationFinished.open(); + } + } + + private async initializeExtensions(instantiationService: IInstantiationService): Promise { + try { + await Promise.all([this.initializeInstalledExtensions(instantiationService), this.initializeNewExtensions(instantiationService)]); + } finally { + this.initialized.push(SyncResource.Extensions); + } + } + + private initializeInstalledExtensionsPromise: Promise | undefined; + async initializeInstalledExtensions(instantiationService: IInstantiationService): Promise { + if (!this.initializeInstalledExtensionsPromise) { + this.initializeInstalledExtensionsPromise = (async () => { + this.logService.trace(`UserDataInitializationService#initializeInstalledExtensions`); + const extensionsPreviewInitializer = await this.getExtensionsPreviewInitializer(instantiationService); + if (extensionsPreviewInitializer) { + await instantiationService.createInstance(InstalledExtensionsInitializer, extensionsPreviewInitializer).initialize(); + } + })(); + } + return this.initializeInstalledExtensionsPromise; + } + + private initializeNewExtensionsPromise: Promise | undefined; + private async initializeNewExtensions(instantiationService: IInstantiationService): Promise { + if (!this.initializeNewExtensionsPromise) { + this.initializeNewExtensionsPromise = (async () => { + this.logService.trace(`UserDataInitializationService#initializeNewExtensions`); + const extensionsPreviewInitializer = await this.getExtensionsPreviewInitializer(instantiationService); + if (extensionsPreviewInitializer) { + await instantiationService.createInstance(NewExtensionsInitializer, extensionsPreviewInitializer).initialize(); + } + })(); + } + return this.initializeNewExtensionsPromise; + } + + private extensionsPreviewInitializerPromise: Promise | undefined; + private getExtensionsPreviewInitializer(instantiationService: IInstantiationService): Promise { + if (!this.extensionsPreviewInitializerPromise) { + this.extensionsPreviewInitializerPromise = (async () => { + const userDataSyncStoreClient = await this.createUserDataSyncStoreClient(); + if (!userDataSyncStoreClient) { + return null; + } + const userData = await userDataSyncStoreClient.readResource(SyncResource.Extensions, null); + return instantiationService.createInstance(ExtensionsPreviewInitializer, userData); + })(); + } + return this.extensionsPreviewInitializerPromise; + } + + private async initialize(syncResources: SyncResource[]): Promise { + const userDataSyncStoreClient = await this.createUserDataSyncStoreClient(); + if (!userDataSyncStoreClient) { + return; + } + + await Promises.settled(syncResources.map(async syncResource => { + try { + if (this.initialized.includes(syncResource)) { + this.logService.info(`${getSyncAreaLabel(syncResource)} initialized already.`); + return; + } + this.initialized.push(syncResource); + this.logService.trace(`Initializing ${getSyncAreaLabel(syncResource)}`); + const initializer = this.createSyncResourceInitializer(syncResource); + const userData = await userDataSyncStoreClient.readResource(syncResource, syncResource === SyncResource.GlobalState ? this.globalStateUserData : null); + await initializer.initialize(userData); + this.logService.info(`Initialized ${getSyncAreaLabel(syncResource)}`); + } catch (error) { + this.logService.info(`Error while initializing ${getSyncAreaLabel(syncResource)}`); + this.logService.error(error); + } + })); + } + + private createSyncResourceInitializer(syncResource: SyncResource): IUserDataSyncResourceInitializer { + switch (syncResource) { + case SyncResource.Settings: return new SettingsInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); + case SyncResource.Keybindings: return new KeybindingsInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); + case SyncResource.Tasks: return new TasksInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); + case SyncResource.Snippets: return new SnippetsInitializer(this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.storageService, this.uriIdentityService); + case SyncResource.GlobalState: return new GlobalStateInitializer(this.storageService, this.fileService, this.userDataProfilesService, this.environmentService, this.logService, this.uriIdentityService); + } + throw new Error(`Cannot create initializer for ${syncResource}`); + } + +} + +class ExtensionsPreviewInitializer extends AbstractExtensionsInitializer { + + private previewPromise: Promise | undefined; + private preview: IExtensionsInitializerPreviewResult | null = null; + + constructor( + private readonly extensionsData: IUserData, + @IExtensionManagementService extensionManagementService: IExtensionManagementService, + @IIgnoredExtensionsManagementService ignoredExtensionsManagementService: IIgnoredExtensionsManagementService, + @IFileService fileService: IFileService, + @IUserDataProfilesService userDataProfilesService: IUserDataProfilesService, + @IEnvironmentService environmentService: IEnvironmentService, + @IUserDataSyncLogService logService: IUserDataSyncLogService, + @IStorageService storageService: IStorageService, + @IUriIdentityService uriIdentityService: IUriIdentityService, + ) { + super(extensionManagementService, ignoredExtensionsManagementService, fileService, userDataProfilesService, environmentService, logService, storageService, uriIdentityService); + } + + getPreview(): Promise { + if (!this.previewPromise) { + this.previewPromise = super.initialize(this.extensionsData).then(() => this.preview); + } + return this.previewPromise; + } + + override initialize(): Promise { + throw new Error('should not be called directly'); + } + + protected override async doInitialize(remoteUserData: IRemoteUserData): Promise { + const remoteExtensions = await this.parseExtensions(remoteUserData); + if (!remoteExtensions) { + this.logService.info('Skipping initializing extensions because remote extensions does not exist.'); + return; + } + const installedExtensions = await this.extensionManagementService.getInstalled(); + this.preview = this.generatePreview(remoteExtensions, installedExtensions); + } +} + +class InstalledExtensionsInitializer implements IUserDataSyncResourceInitializer { + + constructor( + private readonly extensionsPreviewInitializer: ExtensionsPreviewInitializer, + @IGlobalExtensionEnablementService private readonly extensionEnablementService: IGlobalExtensionEnablementService, + @IExtensionStorageService private readonly extensionStorageService: IExtensionStorageService, + @IUserDataSyncLogService private readonly logService: IUserDataSyncLogService, + ) { + } + + async initialize(): Promise { + const preview = await this.extensionsPreviewInitializer.getPreview(); + if (!preview) { + return; + } + + // 1. Initialise already installed extensions state + for (const installedExtension of preview.installedExtensions) { + const syncExtension = preview.remoteExtensions.find(({ identifier }) => areSameExtensions(identifier, installedExtension.identifier)); + if (syncExtension?.state) { + const extensionState = this.extensionStorageService.getExtensionState(installedExtension, true) || {}; + Object.keys(syncExtension.state).forEach(key => extensionState[key] = syncExtension.state![key]); + this.extensionStorageService.setExtensionState(installedExtension, extensionState, true); + } + } + + // 2. Initialise extensions enablement + if (preview.disabledExtensions.length) { + for (const identifier of preview.disabledExtensions) { + this.logService.trace(`Disabling extension...`, identifier.id); + await this.extensionEnablementService.disableExtension(identifier); + this.logService.info(`Disabling extension`, identifier.id); + } + } + } +} + +class NewExtensionsInitializer implements IUserDataSyncResourceInitializer { + + constructor( + private readonly extensionsPreviewInitializer: ExtensionsPreviewInitializer, + @IExtensionService private readonly extensionService: IExtensionService, + @IExtensionStorageService private readonly extensionStorageService: IExtensionStorageService, + @IExtensionGalleryService private readonly galleryService: IExtensionGalleryService, + @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, + @IUserDataSyncLogService private readonly logService: IUserDataSyncLogService, + ) { + } + + async initialize(): Promise { + const preview = await this.extensionsPreviewInitializer.getPreview(); + if (!preview) { + return; + } + + const newlyEnabledExtensions: ILocalExtension[] = []; + const targetPlatform = await this.extensionManagementService.getTargetPlatform(); + const galleryExtensions = await this.galleryService.getExtensions(preview.newExtensions, { targetPlatform, compatible: true }, CancellationToken.None); + for (const galleryExtension of galleryExtensions) { + try { + const extensionToSync = preview.remoteExtensions.find(({ identifier }) => areSameExtensions(identifier, galleryExtension.identifier)); + if (!extensionToSync) { + continue; + } + if (extensionToSync.state) { + this.extensionStorageService.setExtensionState(galleryExtension, extensionToSync.state, true); + } + this.logService.trace(`Installing extension...`, galleryExtension.identifier.id); + const local = await this.extensionManagementService.installFromGallery(galleryExtension, { + isMachineScoped: false, /* set isMachineScoped to prevent install and sync dialog in web */ + donotIncludePackAndDependencies: true, + installGivenVersion: !!extensionToSync.version, + installPreReleaseVersion: extensionToSync.preRelease + }); + if (!preview.disabledExtensions.some(identifier => areSameExtensions(identifier, galleryExtension.identifier))) { + newlyEnabledExtensions.push(local); + } + this.logService.info(`Installed extension.`, galleryExtension.identifier.id); + } catch (error) { + this.logService.error(error); + } + } + + const canEnabledExtensions = newlyEnabledExtensions.filter(e => this.extensionService.canAddExtension(toExtensionDescription(e))); + if (!(await this.areExtensionsRunning(canEnabledExtensions))) { + await new Promise((c, e) => { + const disposable = this.extensionService.onDidChangeExtensions(async () => { + try { + if (await this.areExtensionsRunning(canEnabledExtensions)) { + disposable.dispose(); + c(); + } + } catch (error) { + e(error); + } + }); + }); + } + } + + private async areExtensionsRunning(extensions: ILocalExtension[]): Promise { + await this.extensionService.whenInstalledExtensionsRegistered(); + const runningExtensions = this.extensionService.extensions; + return extensions.every(e => runningExtensions.some(r => areSameExtensions({ id: r.identifier.value }, e.identifier))); + } +} diff --git a/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts b/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts index 6c76709eac7..ecc0fb248af 100644 --- a/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts +++ b/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts @@ -18,12 +18,10 @@ import { IStorageService, IStorageValueChangeEvent, StorageScope, StorageTarget import { ILogService } from 'vs/platform/log/common/log'; import { IProductService } from 'vs/platform/product/common/productService'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { localize } from 'vs/nls'; import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { Action } from 'vs/base/common/actions'; import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; import { URI } from 'vs/base/common/uri'; import { IViewsService, IViewDescriptorService } from 'vs/workbench/common/views'; @@ -39,6 +37,9 @@ import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cance import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { isDiffEditorInput } from 'vs/workbench/common/editor'; +import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; +import { IUserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit'; +import { ISecretStorageService } from 'vs/platform/secrets/common/secrets'; type AccountQuickPickItem = { label: string; authenticationProvider: IAuthenticationProvider; account?: UserDataSyncAccount; description?: string }; @@ -63,6 +64,7 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat _serviceBrand: any; private static DONOT_USE_WORKBENCH_SESSION_STORAGE_KEY = 'userDataSyncAccount.donotUseWorkbenchSession'; + private static CACHED_AUTHENTICATION_PROVIDER_KEY = 'userDataSyncAccountProvider'; private static CACHED_SESSION_STORAGE_KEY = 'userDataSyncAccountPreference'; get enabled() { return !!this.userDataSyncStoreManagementService.userDataSyncStore; } @@ -102,8 +104,9 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat @ILogService private readonly logService: ILogService, @IProductService private readonly productService: IProductService, @IExtensionService private readonly extensionService: IExtensionService, - @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, + @IBrowserWorkbenchEnvironmentService private readonly environmentService: IBrowserWorkbenchEnvironmentService, @ICredentialsService private readonly credentialsService: ICredentialsService, + @ISecretStorageService private readonly secretStorageService: ISecretStorageService, @INotificationService private readonly notificationService: INotificationService, @IProgressService private readonly progressService: IProgressService, @IDialogService private readonly dialogService: IDialogService, @@ -114,6 +117,7 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat @ILifecycleService private readonly lifecycleService: ILifecycleService, @IInstantiationService private readonly instantiationService: IInstantiationService, @IEditorService private readonly editorService: IEditorService, + @IUserDataInitializationService private readonly userDataInitializationService: IUserDataInitializationService, ) { super(); this.syncEnablementContext = CONTEXT_SYNC_ENABLEMENT.bindTo(contextKeyService); @@ -143,7 +147,7 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat private async waitAndInitialize(): Promise { /* wait */ - await this.extensionService.whenInstalledExtensionsRegistered(); + await Promise.all([this.extensionService.whenInstalledExtensionsRegistered(), this.userDataInitializationService.whenInitializationFinished()]); /* initialize */ try { @@ -167,9 +171,16 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat } private async initialize(): Promise { - const authenticationSession = await getCurrentAuthenticationSessionInfo(this.credentialsService, this.productService); - if (this.currentSessionId === undefined && this.useWorkbenchSessionId && (authenticationSession?.id)) { - this.currentSessionId = authenticationSession?.id; + const authenticationSession = await getCurrentAuthenticationSessionInfo(this.credentialsService, this.secretStorageService, this.productService); + if (this.currentSessionId === undefined && authenticationSession?.id) { + if (this.environmentService.options?.settingsSyncOptions?.authenticationProvider && this.environmentService.options.settingsSyncOptions.enabled) { + this.currentSessionId = authenticationSession.id; + } + + // Backward compatibility + else if (this.useWorkbenchSessionId) { + this.currentSessionId = authenticationSession.id; + } this.useWorkbenchSessionId = false; } @@ -189,7 +200,7 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat this._register(Event.filter(this.authenticationService.onDidChangeSessions, e => this.isSupportedAuthenticationProviderId(e.providerId))(({ event }) => this.onDidChangeSessions(event))); this._register(this.storageService.onDidChangeValue(e => this.onDidChangeStorage(e))); - this._register(Event.filter(this.userDataSyncAccountService.onTokenFailed, isSuccessive => isSuccessive)(() => this.onDidSuccessiveAuthFailures())); + this._register(Event.filter(this.userDataSyncAccountService.onTokenFailed, bailout => bailout)(() => this.onDidAuthFailure())); this.hasConflicts.set(this.userDataSyncService.conflicts.length > 0); this._register(this.userDataSyncService.onDidChangeConflicts(conflicts => { this.hasConflicts.set(conflicts.length > 0); @@ -221,6 +232,9 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat this._all = allAccounts; const current = this.current; + if (current) { + this.currentAuthenticationProviderId = current.authenticationProviderId; + } await this.updateToken(current); this.updateAccountStatus(current ? AccountStatus.Available : AccountStatus.Unavailable); } @@ -293,22 +307,6 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat throw new Error(localize('no account', "No account available")); } - await this.turnOnUsingCurrentAccount(); - } - - async turnOnUsingCurrentAccount(): Promise { - if (this.userDataSyncEnablementService.isEnabled()) { - return; - } - - if (this.userDataSyncService.status !== SyncStatus.Idle) { - throw new Error('Cannot turn on sync while syncing'); - } - - if (this.accountStatus !== AccountStatus.Available) { - throw new Error(localize('no account', "No account available")); - } - const turnOnSyncCancellationToken = this.turnOnSyncCancellationToken = new CancellationTokenSource(); const disposable = isWeb ? Disposable.None : this.lifecycleService.onBeforeShutdown(e => e.veto((async () => { const { confirmed } = await this.dialogService.confirm({ @@ -335,15 +333,23 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat await this.synchroniseUserDataSyncStoreType(); } + this.currentAuthenticationProviderId = this.current?.authenticationProviderId; + if (this.environmentService.options?.settingsSyncOptions?.enablementHandler && this.currentAuthenticationProviderId) { + this.environmentService.options.settingsSyncOptions.enablementHandler(true, this.currentAuthenticationProviderId); + } + this.notificationService.info(localize('sync turned on', "{0} is turned on", SYNC_TITLE)); } async turnoff(everywhere: boolean): Promise { if (this.userDataSyncEnablementService.isEnabled()) { - return this.userDataAutoSyncService.turnOff(everywhere); + await this.userDataAutoSyncService.turnOff(everywhere); + if (this.environmentService.options?.settingsSyncOptions?.enablementHandler && this.currentAuthenticationProviderId) { + this.environmentService.options.settingsSyncOptions.enablementHandler(false, this.currentAuthenticationProviderId); + } } if (this.turnOnSyncCancellationToken) { - return this.turnOnSyncCancellationToken.cancel(); + this.turnOnSyncCancellationToken.cancel(); } } @@ -485,7 +491,13 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat } async signIn(): Promise { - await this.pick(); + const currentAuthenticationProviderId = this.currentAuthenticationProviderId; + const authenticationProvider = currentAuthenticationProviderId ? this.authenticationProviders.find(p => p.id === currentAuthenticationProviderId) : undefined; + if (authenticationProvider) { + await this.doSignIn(authenticationProvider); + } else { + await this.pick(); + } } private async pick(): Promise { @@ -493,20 +505,7 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat if (!result) { return false; } - let sessionId: string, accountName: string, accountId: string, authenticationProviderId: string; - if (isAuthenticationProvider(result)) { - const session = await this.authenticationService.createSession(result.id, result.scopes); - sessionId = session.id; - accountName = session.account.label; - accountId = session.account.id; - authenticationProviderId = result.id; - } else { - sessionId = result.sessionId; - accountName = result.accountName; - accountId = result.accountId; - authenticationProviderId = result.authenticationProviderId; - } - await this.switch(sessionId, accountName, accountId, authenticationProviderId); + await this.doSignIn(result); return true; } @@ -580,29 +579,29 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat return quickPickItems; } - private async switch(sessionId: string, accountName: string, accountId: string, authenticationProviderId: string): Promise { - const currentAccount = this.current; - if (this.userDataSyncEnablementService.isEnabled() && (currentAccount && currentAccount.accountName !== accountName)) { - // accounts are switched while sync is enabled. + private async doSignIn(accountOrAuthProvider: UserDataSyncAccount | IAuthenticationProvider): Promise { + let sessionId: string; + if (isAuthenticationProvider(accountOrAuthProvider)) { + if (this.environmentService.options?.settingsSyncOptions?.authenticationProvider?.id === accountOrAuthProvider.id) { + sessionId = await this.environmentService.options?.settingsSyncOptions?.authenticationProvider?.signIn(); + } else { + sessionId = (await this.authenticationService.createSession(accountOrAuthProvider.id, accountOrAuthProvider.scopes)).id; + } + } else { + if (this.environmentService.options?.settingsSyncOptions?.authenticationProvider?.id === accountOrAuthProvider.authenticationProviderId) { + sessionId = await this.environmentService.options?.settingsSyncOptions?.authenticationProvider?.signIn(); + } else { + sessionId = accountOrAuthProvider.sessionId; + } } this.currentSessionId = sessionId; await this.update(); } - private async onDidSuccessiveAuthFailures(): Promise { + private async onDidAuthFailure(): Promise { this.telemetryService.publicLog2<{}, { owner: 'sandy081'; comment: 'Report when there are successive auth failures during settings sync' }>('sync/successiveAuthFailures'); this.currentSessionId = undefined; await this.update(); - - if (this.userDataSyncEnablementService.isEnabled()) { - this.notificationService.notify({ - severity: Severity.Error, - message: localize('successive auth failures', "Settings sync is suspended because of successive authorization failures. Please sign in again to continue synchronizing"), - actions: { - primary: [new Action('sign in', localize('sign in', "Sign in"), undefined, true, () => this.signIn())] - } - }); - } } private onDidChangeSessions(e: AuthenticationSessionsChangeEvent): void { @@ -620,6 +619,25 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat } } + private _cachedCurrentAuthenticationProviderId: string | undefined | null = null; + private get currentAuthenticationProviderId(): string | undefined { + if (this._cachedCurrentAuthenticationProviderId === null) { + this._cachedCurrentAuthenticationProviderId = this.storageService.get(UserDataSyncWorkbenchService.CACHED_AUTHENTICATION_PROVIDER_KEY, StorageScope.APPLICATION); + } + return this._cachedCurrentAuthenticationProviderId; + } + + private set currentAuthenticationProviderId(currentAuthenticationProviderId: string | undefined) { + if (this._cachedCurrentAuthenticationProviderId !== currentAuthenticationProviderId) { + this._cachedCurrentAuthenticationProviderId = currentAuthenticationProviderId; + if (currentAuthenticationProviderId === undefined) { + this.storageService.remove(UserDataSyncWorkbenchService.CACHED_AUTHENTICATION_PROVIDER_KEY, StorageScope.APPLICATION); + } else { + this.storageService.store(UserDataSyncWorkbenchService.CACHED_AUTHENTICATION_PROVIDER_KEY, currentAuthenticationProviderId, StorageScope.APPLICATION, StorageTarget.MACHINE); + } + } + } + private _cachedCurrentSessionId: string | undefined | null = null; private get currentSessionId(): string | undefined { if (this._cachedCurrentSessionId === null) { diff --git a/src/vs/workbench/services/userDataSync/browser/webUserDataSyncEnablementService.ts b/src/vs/workbench/services/userDataSync/browser/webUserDataSyncEnablementService.ts index a05ae03d23d..9b230c592cb 100644 --- a/src/vs/workbench/services/userDataSync/browser/webUserDataSyncEnablementService.ts +++ b/src/vs/workbench/services/userDataSync/browser/webUserDataSyncEnablementService.ts @@ -35,9 +35,6 @@ export class WebUserDataSyncEnablementService extends UserDataSyncEnablementServ if (this.enabled !== enabled) { this.enabled = enabled; super.setEnablement(enabled); - if (this.workbenchEnvironmentService.options?.settingsSyncOptions?.enablementHandler) { - this.workbenchEnvironmentService.options.settingsSyncOptions.enablementHandler(this.enabled); - } } } diff --git a/src/vs/workbench/services/userDataSync/common/userDataSync.ts b/src/vs/workbench/services/userDataSync/common/userDataSync.ts index 245b2b09664..9a709322d34 100644 --- a/src/vs/workbench/services/userDataSync/common/userDataSync.ts +++ b/src/vs/workbench/services/userDataSync/common/userDataSync.ts @@ -33,7 +33,6 @@ export interface IUserDataSyncWorkbenchService { readonly onDidChangeAccountStatus: Event; turnOn(): Promise; - turnOnUsingCurrentAccount(): Promise; turnoff(everyWhere: boolean): Promise; signIn(): Promise; @@ -56,6 +55,7 @@ export function getSyncAreaLabel(source: SyncResource): string { case SyncResource.Extensions: return localize('extensions', "Extensions"); case SyncResource.GlobalState: return localize('ui state label', "UI State"); case SyncResource.Profiles: return localize('profiles', "Profiles"); + case SyncResource.WorkspaceState: return localize('workspace state label', "Workspace State"); } } diff --git a/src/vs/workbench/services/utilityProcess/electron-sandbox/utilityProcessWorkerWorkbenchService.ts b/src/vs/workbench/services/utilityProcess/electron-sandbox/utilityProcessWorkerWorkbenchService.ts index 5ff45dbcffc..d56de04eee4 100644 --- a/src/vs/workbench/services/utilityProcess/electron-sandbox/utilityProcessWorkerWorkbenchService.ts +++ b/src/vs/workbench/services/utilityProcess/electron-sandbox/utilityProcessWorkerWorkbenchService.ts @@ -5,7 +5,6 @@ import { ILogService } from 'vs/platform/log/common/log'; import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { ISharedProcessService } from 'vs/platform/ipc/electron-sandbox/services'; import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; import { Client as MessagePortClient } from 'vs/base/parts/ipc/common/ipc.mp'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; @@ -77,7 +76,7 @@ export class UtilityProcessWorkerWorkbenchService extends Disposable implements private _utilityProcessWorkerService: IUtilityProcessWorkerService | undefined = undefined; private get utilityProcessWorkerService(): IUtilityProcessWorkerService { if (!this._utilityProcessWorkerService) { - const channel = this.useUtilityProcess ? this.mainProcessService.getChannel(ipcUtilityProcessWorkerChannelName) : this.sharedProcessService.getChannel(ipcUtilityProcessWorkerChannelName); + const channel = this.mainProcessService.getChannel(ipcUtilityProcessWorkerChannelName); this._utilityProcessWorkerService = ProxyChannel.toService(channel); } @@ -88,9 +87,7 @@ export class UtilityProcessWorkerWorkbenchService extends Disposable implements constructor( readonly windowId: number, - private readonly useUtilityProcess: boolean, @ILogService private readonly logService: ILogService, - @ISharedProcessService private readonly sharedProcessService: ISharedProcessService, @IMainProcessService private readonly mainProcessService: IMainProcessService ) { super(); diff --git a/src/vs/workbench/services/views/browser/treeViewsService.ts b/src/vs/workbench/services/views/browser/treeViewsService.ts index 2ea49fe806d..77f421f1829 100644 --- a/src/vs/workbench/services/views/browser/treeViewsService.ts +++ b/src/vs/workbench/services/views/browser/treeViewsService.ts @@ -5,10 +5,9 @@ import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { VSDataTransfer } from 'vs/base/common/dataTransfer'; import { ITreeItem } from 'vs/workbench/common/views'; import { ITreeViewsService as ITreeViewsServiceCommon, TreeviewsService } from 'vs/workbench/services/views/common/treeViewsService'; -export interface ITreeViewsService extends ITreeViewsServiceCommon { } +export interface ITreeViewsService extends ITreeViewsServiceCommon { } export const ITreeViewsService = createDecorator('treeViewsService'); registerSingleton(ITreeViewsService, TreeviewsService, InstantiationType.Delayed); diff --git a/src/vs/workbench/services/views/browser/viewDescriptorService.ts b/src/vs/workbench/services/views/browser/viewDescriptorService.ts index a06908ff860..906e48e5b12 100644 --- a/src/vs/workbench/services/views/browser/viewDescriptorService.ts +++ b/src/vs/workbench/services/views/browser/viewDescriptorService.ts @@ -574,7 +574,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor } // Execute View Movements for (const { views, from, to } of viewsToMove) { - this.moveViewsWithoutSaving(views, from, to); + this.moveViewsWithoutSaving(views, from, to, ViewVisibilityState.Default); } this.viewContainersCustomLocations = newViewContainerCustomizations; diff --git a/src/vs/workbench/services/views/common/treeViewsService.ts b/src/vs/workbench/services/views/common/treeViewsService.ts index 5e141cddd4e..ac1631c2d5f 100644 --- a/src/vs/workbench/services/views/common/treeViewsService.ts +++ b/src/vs/workbench/services/views/common/treeViewsService.ts @@ -3,36 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -export interface ITreeViewsService { +export interface ITreeViewsService { readonly _serviceBrand: undefined; - removeDragOperationTransfer(uuid: string | undefined): Promise | undefined; - addDragOperationTransfer(uuid: string, transferPromise: Promise): void; - getRenderedTreeElement(node: U): V | undefined; addRenderedTreeItemElement(node: U, element: V): void; removeRenderedTreeItemElement(node: U): void; } -export class TreeviewsService implements ITreeViewsService { +export class TreeviewsService implements ITreeViewsService { _serviceBrand: undefined; - private _dragOperations: Map> = new Map(); private _renderedElements: Map = new Map(); - removeDragOperationTransfer(uuid: string | undefined): Promise | undefined { - if ((uuid && this._dragOperations.has(uuid))) { - const operation = this._dragOperations.get(uuid); - this._dragOperations.delete(uuid); - return operation; - } - return undefined; - } - - addDragOperationTransfer(uuid: string, transferPromise: Promise): void { - this._dragOperations.set(uuid, transferPromise); - } - - getRenderedTreeElement(node: U): V | undefined { if (this._renderedElements.has(node)) { return this._renderedElements.get(node); diff --git a/src/vs/workbench/services/views/common/viewContainerModel.ts b/src/vs/workbench/services/views/common/viewContainerModel.ts index 63fd3640e94..5849cf9b862 100644 --- a/src/vs/workbench/services/views/common/viewContainerModel.ts +++ b/src/vs/workbench/services/views/common/viewContainerModel.ts @@ -369,16 +369,6 @@ export class ViewContainerModel extends Disposable implements IViewContainerMode this.viewDescriptorsState = this._register(instantiationService.createInstance(ViewDescriptorsState, viewContainer.storageId || `${viewContainer.id}.state`, typeof viewContainer.title === 'string' ? viewContainer.title : viewContainer.title.original)); this._register(this.viewDescriptorsState.onDidChangeStoredState(items => this.updateVisibility(items))); - this._register(Event.any( - Event.map(this.onDidAddVisibleViewDescriptors, added => `Added views:${added.map(v => v.viewDescriptor.id).join(',')} in ${this.viewContainer.id}`), - Event.map(this.onDidRemoveVisibleViewDescriptors, removed => `Removed views:${removed.map(v => v.viewDescriptor.id).join(',')} from ${this.viewContainer.id}`), - Event.map(this.onDidMoveVisibleViewDescriptors, ({ from, to }) => `Moved view ${from.viewDescriptor.id} to ${to.viewDescriptor.id} in ${this.viewContainer.id}`)) - (message => { - this.logger.info(message); - this.viewDescriptorsState.updateState(this.allViewDescriptors); - this.updateContainerInfo(); - })); - this.updateContainerInfo(); } @@ -527,10 +517,7 @@ export class ViewContainerModel extends Disposable implements IViewContainerMode this.viewDescriptorItems[index].state.order = index; } - this._onDidMoveVisibleViewDescriptors.fire({ - from: { index: fromIndex, viewDescriptor: fromViewDescriptor.viewDescriptor }, - to: { index: toIndex, viewDescriptor: toViewDescriptor.viewDescriptor } - }); + this.broadCastMovedViewDescriptors({ index: fromIndex, viewDescriptor: fromViewDescriptor.viewDescriptor }, { index: toIndex, viewDescriptor: toViewDescriptor.viewDescriptor }); } add(addedViewDescriptorStates: IAddedViewDescriptorState[]): void { @@ -679,15 +666,28 @@ export class ViewContainerModel extends Disposable implements IViewContainerMode private broadCastAddedVisibleViewDescriptors(added: IAddedViewDescriptorRef[]): void { if (added.length) { this._onDidAddVisibleViewDescriptors.fire(added.sort((a, b) => a.index - b.index)); + this.updateState(`Added views:${added.map(v => v.viewDescriptor.id).join(',')} in ${this.viewContainer.id}`); } } private broadCastRemovedVisibleViewDescriptors(removed: IViewDescriptorRef[]): void { if (removed.length) { this._onDidRemoveVisibleViewDescriptors.fire(removed.sort((a, b) => b.index - a.index)); + this.updateState(`Removed views:${removed.map(v => v.viewDescriptor.id).join(',')} from ${this.viewContainer.id}`); } } + private broadCastMovedViewDescriptors(from: IViewDescriptorRef, to: IViewDescriptorRef): void { + this._onDidMoveVisibleViewDescriptors.fire({ from, to }); + this.updateState(`Moved view ${from.viewDescriptor.id} to ${to.viewDescriptor.id} in ${this.viewContainer.id}`); + } + + private updateState(reason: string): void { + this.logger.info(reason); + this.viewDescriptorsState.updateState(this.allViewDescriptors); + this.updateContainerInfo(); + } + private isViewDescriptorVisible(viewDescriptorItem: IViewDescriptorItem): boolean { if (!viewDescriptorItem.state.active) { return false; diff --git a/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts b/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts index 2e42e0fc5f1..c873bc6800e 100644 --- a/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts +++ b/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts @@ -16,6 +16,7 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { generateUuid } from 'vs/base/common/uuid'; +import { compare } from 'vs/base/common/strings'; const ViewsRegistry = Registry.as(ViewContainerExtensions.ViewsRegistry); const ViewContainersRegistry = Registry.as(ViewContainerExtensions.ViewContainersRegistry); @@ -664,4 +665,56 @@ suite('ViewDescriptorService', () => { assert.deepStrictEqual(generatedViewContainerModel.allViewDescriptors.map(v => v.id), ['view1']); }); + test('storage change move views and retain visibility state', async function () { + const storageService = instantiationService.get(IStorageService); + const testObject = aViewDescriptorService(); + + const viewContainer = ViewContainersRegistry.registerViewContainer({ id: `${viewContainerIdPrefix}-${generateUuid()}`, title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + const viewDescriptors: IViewDescriptor[] = [ + { + id: 'view1', + ctorDescriptor: null!, + name: 'Test View 1', + canMoveView: true, + canToggleVisibility: true + }, + { + id: 'view2', + ctorDescriptor: null!, + name: 'Test View 2', + canMoveView: true + } + ]; + ViewsRegistry.registerViews(viewDescriptors, viewContainer); + + testObject.whenExtensionsRegistered(); + + const viewContainer1Views = testObject.getViewContainerModel(viewContainer); + viewContainer1Views.setVisible('view1', false); + + const generateViewContainerId = `workbench.views.service.${ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar)}.${generateUuid()}`; + const viewsCustomizations = { + viewContainerLocations: { + [generateViewContainerId]: ViewContainerLocation.AuxiliaryBar, + }, + viewLocations: { + 'view1': generateViewContainerId + } + }; + storageService.store('views.customizations', JSON.stringify(viewsCustomizations), StorageScope.PROFILE, StorageTarget.USER); + + const generateViewContainer = testObject.getViewContainerById(generateViewContainerId)!; + const generatedViewContainerModel = testObject.getViewContainerModel(generateViewContainer); + + assert.deepStrictEqual(viewContainer1Views.allViewDescriptors.map(v => v.id), ['view2']); + assert.deepStrictEqual(testObject.getViewContainerLocation(generateViewContainer), ViewContainerLocation.AuxiliaryBar); + assert.deepStrictEqual(generatedViewContainerModel.allViewDescriptors.map(v => v.id), ['view1']); + + storageService.store('views.customizations', JSON.stringify({}), StorageScope.PROFILE, StorageTarget.USER); + + assert.deepStrictEqual(viewContainer1Views.allViewDescriptors.map(v => v.id).sort((a, b) => compare(a, b)), ['view1', 'view2']); + assert.deepStrictEqual(viewContainer1Views.visibleViewDescriptors.map(v => v.id), ['view2']); + assert.deepStrictEqual(generatedViewContainerModel.allViewDescriptors.map(v => v.id), []); + }); + }); diff --git a/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts b/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts index 82c5d7a8b83..2b21497e1bc 100644 --- a/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts +++ b/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts @@ -32,27 +32,27 @@ export class BrowserWorkingCopyBackupTracker extends WorkingCopyBackupTracker im protected onFinalBeforeShutdown(reason: ShutdownReason): boolean { // Web: we cannot perform long running in the shutdown phase - // As such we need to check sync if there are any dirty working + // As such we need to check sync if there are any modified working // copies that have not been backed up yet and then prevent the // shutdown if that is the case. - const dirtyWorkingCopies = this.workingCopyService.dirtyWorkingCopies; - if (!dirtyWorkingCopies.length) { - return false; // no dirty: no veto + const modifiedWorkingCopies = this.workingCopyService.modifiedWorkingCopies; + if (!modifiedWorkingCopies.length) { + return false; // nothing modified: no veto } if (!this.filesConfigurationService.isHotExitEnabled) { - return true; // dirty without backup: veto + return true; // modified without backup: veto } - for (const dirtyWorkingCopy of dirtyWorkingCopies) { - if (!this.workingCopyBackupService.hasBackupSync(dirtyWorkingCopy, this.getContentVersion(dirtyWorkingCopy))) { + for (const modifiedWorkingCopy of modifiedWorkingCopies) { + if (!this.workingCopyBackupService.hasBackupSync(modifiedWorkingCopy, this.getContentVersion(modifiedWorkingCopy))) { this.logService.warn('Unload veto: pending backups'); - return true; // dirty without backup: veto + return true; // modified without backup: veto } } - return false; // dirty with backups: no veto + return false; // modified and backed up: no veto } } diff --git a/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts b/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts index 3e9c8ade776..03f5326c233 100644 --- a/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts +++ b/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts @@ -23,6 +23,18 @@ export interface IFileWorkingCopyModelFactory { createModel(resource: URI, contents: VSBufferReadableStream, token: CancellationToken): Promise; } +export interface IFileWorkingCopyModelConfiguration { + + /** + * The delay in milliseconds to wait before triggering + * a backup after the content of the model has changed. + * + * If not configured, a sensible default will be taken + * based on user settings. + */ + readonly backupDelay?: number; +} + /** * A generic file working copy model to be reused by untitled * and stored file working copies. @@ -50,6 +62,12 @@ export interface IFileWorkingCopyModel extends IDisposable { */ readonly onWillDispose: Event; + /** + * Optional additional configuration for the model that drives + * some of the working copy behaviour. + */ + readonly configuration?: IFileWorkingCopyModelConfiguration; + /** * Snapshots the model's current content for writing. This must include * any changes that were made to the model that are in memory. diff --git a/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts b/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts index 2e94b6dc0ce..00ab0443125 100644 --- a/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts +++ b/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts @@ -247,7 +247,7 @@ export class FileWorkingCopyManager; } export interface IStoredFileWorkingCopyModelContentChangedEvent { @@ -117,9 +127,9 @@ export interface IStoredFileWorkingCopy e resolve(options?: IStoredFileWorkingCopyResolveOptions): Promise; /** - * Explicitly sets the working copy to be dirty. + * Explicitly sets the working copy to be modified. */ - markDirty(): void; + markModified(): void; /** * Whether the stored file working copy is in the provided `state` @@ -145,7 +155,7 @@ export interface IStoredFileWorkingCopy e /** * Whether the stored file working copy is readonly or not. */ - isReadonly(): boolean; + isReadonly(): boolean | IMarkdownString; } export interface IResolvedStoredFileWorkingCopy extends IStoredFileWorkingCopy { @@ -332,6 +342,12 @@ export class StoredFileWorkingCopy extend // Make known to working copy service this._register(workingCopyService.registerWorkingCopy(this)); + + this.registerListeners(); + } + + private registerListeners(): void { + this._register(this.filesConfigurationService.onReadonlyChange(() => this._onDidChangeReadonly.fire())); } //#region Dirty @@ -343,8 +359,8 @@ export class StoredFileWorkingCopy extend return this.dirty; } - markDirty(): void { - this.setDirty(true); + markModified(): void { + this.setDirty(true); // stored file working copy tracks modified via dirty } private setDirty(dirty: boolean): void { @@ -484,7 +500,8 @@ export class StoredFileWorkingCopy extend size, etag, value: buffer, - readonly: false + readonly: false, + locked: false }, true /* dirty (resolved from buffer) */); } @@ -524,7 +541,8 @@ export class StoredFileWorkingCopy extend size: backup.meta ? backup.meta.size : 0, etag: backup.meta ? backup.meta.etag : ETAG_DISABLED, // etag disabled if unknown! value: backup.value, - readonly: false + readonly: false, + locked: false }, true /* dirty (resolved from backup) */); // Restore orphaned flag based on state @@ -616,6 +634,7 @@ export class StoredFileWorkingCopy extend size: content.size, etag: content.etag, readonly: content.readonly, + locked: content.locked, isFile: true, isDirectory: false, isSymbolicLink: false, @@ -747,6 +766,10 @@ export class StoredFileWorkingCopy extend //#region Backup + get backupDelay(): number | undefined { + return this.model?.configuration?.backupDelay; + } + async backup(token: CancellationToken): Promise { // Fill in metadata if we are resolved @@ -960,34 +983,43 @@ export class StoredFileWorkingCopy extend const resolvedFileWorkingCopy = this; return this.saveSequentializer.setPending(versionId, (async () => { try { - - // Snapshot working copy model contents - const snapshot = await raceCancellation(resolvedFileWorkingCopy.model.snapshot(saveCancellation.token), saveCancellation.token); - - // It is possible that a subsequent save is cancelling this - // running save. As such we return early when we detect that - // However, we do not pass the token into the file service - // because that is an atomic operation currently without - // cancellation support, so we dispose the cancellation if - // it was not cancelled yet. - if (saveCancellation.token.isCancellationRequested) { - return; - } else { - saveCancellation.dispose(); - } - const writeFileOptions: IWriteFileOptions = { mtime: lastResolvedFileStat.mtime, etag: (options.ignoreModifiedSince || !this.filesConfigurationService.preventSaveConflicts(lastResolvedFileStat.resource)) ? ETAG_DISABLED : lastResolvedFileStat.etag, unlock: options.writeUnlock }; - // Write them to disk let stat: IFileStatWithMetadata; - if (options?.writeElevated && this.elevatedFileService.isSupported(lastResolvedFileStat.resource)) { - stat = await this.elevatedFileService.writeFileElevated(lastResolvedFileStat.resource, assertIsDefined(snapshot), writeFileOptions); - } else { - stat = await this.fileService.writeFile(lastResolvedFileStat.resource, assertIsDefined(snapshot), writeFileOptions); + + // Delegate to working copy model save method if any + if (typeof resolvedFileWorkingCopy.model.save === 'function') { + stat = await resolvedFileWorkingCopy.model.save(writeFileOptions, saveCancellation.token); + } + + // Otherwise ask for a snapshot and save via file services + else { + + // Snapshot working copy model contents + const snapshot = await raceCancellation(resolvedFileWorkingCopy.model.snapshot(saveCancellation.token), saveCancellation.token); + + // It is possible that a subsequent save is cancelling this + // running save. As such we return early when we detect that + // However, we do not pass the token into the file service + // because that is an atomic operation currently without + // cancellation support, so we dispose the cancellation if + // it was not cancelled yet. + if (saveCancellation.token.isCancellationRequested) { + return; + } else { + saveCancellation.dispose(); + } + + // Write them to disk + if (options?.writeElevated && this.elevatedFileService.isSupported(lastResolvedFileStat.resource)) { + stat = await this.elevatedFileService.writeFileElevated(lastResolvedFileStat.resource, assertIsDefined(snapshot), writeFileOptions); + } else { + stat = await this.fileService.writeFile(lastResolvedFileStat.resource, assertIsDefined(snapshot), writeFileOptions); + } } this.handleSaveSuccess(stat, versionId, options); @@ -1065,10 +1097,15 @@ export class StoredFileWorkingCopy extend // Any other save error else { const isWriteLocked = fileOperationError.fileOperationResult === FileOperationResult.FILE_WRITE_LOCKED; - const triedToUnlock = isWriteLocked && fileOperationError.options?.unlock; + const triedToUnlock = isWriteLocked && (fileOperationError.options as IWriteFileOptions | undefined)?.unlock; const isPermissionDenied = fileOperationError.fileOperationResult === FileOperationResult.FILE_PERMISSION_DENIED; const canSaveElevated = this.elevatedFileService.isSupported(this.resource); + // Error with Actions + if (isErrorWithActions(error)) { + primaryActions.push(...error.actions); + } + // Save Elevated if (canSaveElevated && (isPermissionDenied || triedToUnlock)) { primaryActions.push(toAction({ @@ -1096,10 +1133,13 @@ export class StoredFileWorkingCopy extend primaryActions.push(toAction({ id: 'fileWorkingCopy.saveAs', label: localize('saveAs', "Save As..."), - run: () => { + run: async () => { const editor = this.workingCopyEditorService.findEditor(this); if (editor) { - this.editorService.save(editor, { saveAs: true, reason: SaveReason.EXPLICIT }); + const result = await this.editorService.save(editor, { saveAs: true, reason: SaveReason.EXPLICIT }); + if (!result.success) { + this.doHandleSaveError(error); // show error again given the operation failed + } } } })); @@ -1230,8 +1270,8 @@ export class StoredFileWorkingCopy extend //#region Utilities - isReadonly(): boolean { - return this.lastResolvedFileStat?.readonly || this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly); + isReadonly(): boolean | IMarkdownString { + return this.filesConfigurationService.isReadonly(this.resource, this.lastResolvedFileStat); } private trace(msg: string): void { diff --git a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts index 7b3ffb8c368..d08c9d07a14 100644 --- a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts +++ b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts @@ -371,15 +371,16 @@ export class StoredFileWorkingCopyManager if (workingCopiesToRestore) { this.mapCorrelationIdToWorkingCopiesToRestore.delete(e.correlationId); - workingCopiesToRestore.forEach(workingCopy => { + for (const workingCopy of workingCopiesToRestore) { - // Snapshot presence means this working copy used to be dirty and so we restore that + // Snapshot presence means this working copy used to be modified and so we restore that // flag. we do NOT have to restore the content because the working copy was only soft - // reverted and did not loose its original dirty contents. + // reverted and did not loose its original modified contents. + if (workingCopy.snapshot) { - this.get(workingCopy.source)?.markDirty(); + this.get(workingCopy.source)?.markModified(); } - }); + } } } } diff --git a/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopy.ts b/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopy.ts index 59d79abeefd..6638739535d 100644 --- a/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopy.ts +++ b/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopy.ts @@ -37,9 +37,9 @@ export interface IUntitledFileWorkingCopyModelContentChangedEvent { /** * Flag that indicates that the content change should - * clear the dirty flag, e.g. because the contents are + * clear the dirty/modified flags, e.g. because the contents are * back to being empty or back to an initial state that - * should not be considered as dirty. + * should not be considered as modified. */ readonly isInitial: boolean; } @@ -82,17 +82,17 @@ export interface IUntitledFileWorkingCopyInitialContents { /** * If not provided, the untitled file working copy will be marked - * dirty by default given initial contents are provided. + * modified by default given initial contents are provided. * * Note: if the untitled file working copy has an associated path - * the dirty state will always be set. + * the modified state will always be set. */ - readonly markDirty?: boolean; + readonly markModified?: boolean; } export class UntitledFileWorkingCopy extends Disposable implements IUntitledFileWorkingCopy { - readonly capabilities = WorkingCopyCapabilities.Untitled; + readonly capabilities = this.isScratchpad ? WorkingCopyCapabilities.Untitled | WorkingCopyCapabilities.Scratchpad : WorkingCopyCapabilities.Untitled; private _model: M | undefined = undefined; get model(): M | undefined { return this._model; } @@ -121,6 +121,7 @@ export class UntitledFileWorkingCopy ex readonly resource: URI, readonly name: string, readonly hasAssociatedFilePath: boolean, + private readonly isScratchpad: boolean, private readonly initialContents: IUntitledFileWorkingCopyInitialContents | undefined, private readonly modelFactory: IUntitledFileWorkingCopyModelFactory, private readonly saveDelegate: IUntitledFileWorkingCopySaveDelegate, @@ -134,21 +135,27 @@ export class UntitledFileWorkingCopy ex this._register(workingCopyService.registerWorkingCopy(this)); } - //#region Dirty + //#region Dirty/Modified - private dirty = this.hasAssociatedFilePath || Boolean(this.initialContents && this.initialContents.markDirty !== false); + private modified = this.hasAssociatedFilePath || Boolean(this.initialContents && this.initialContents.markModified !== false); isDirty(): boolean { - return this.dirty; + return this.modified && !this.isScratchpad; // Scratchpad working copies are never dirty } - private setDirty(dirty: boolean): void { - if (this.dirty === dirty) { + isModified(): boolean { + return this.modified; + } + + private setModified(modified: boolean): void { + if (this.modified === modified) { return; } - this.dirty = dirty; - this._onDidChangeDirty.fire(); + this.modified = modified; + if (!this.isScratchpad) { + this._onDidChangeDirty.fire(); + } } //#endregion @@ -189,8 +196,8 @@ export class UntitledFileWorkingCopy ex // Create model await this.doCreateModel(untitledContents); - // Untitled associated to file path are dirty right away as well as untitled with content - this.setDirty(this.hasAssociatedFilePath || !!backup || Boolean(this.initialContents && this.initialContents.markDirty !== false)); + // Untitled associated to file path are modified right away as well as untitled with content + this.setModified(this.hasAssociatedFilePath || !!backup || Boolean(this.initialContents && this.initialContents.markModified !== false)); // If we have initial contents, make sure to emit this // as the appropriate events to the outside. @@ -220,16 +227,16 @@ export class UntitledFileWorkingCopy ex private onModelContentChanged(e: IUntitledFileWorkingCopyModelContentChangedEvent): void { - // Mark the untitled file working copy as non-dirty once its + // Mark the untitled file working copy as non-modified once its // in case provided by the change event and in case we do not // have an associated path set if (!this.hasAssociatedFilePath && e.isInitial) { - this.setDirty(false); + this.setModified(false); } - // Turn dirty otherwise + // Turn modified otherwise else { - this.setDirty(true); + this.setModified(true); } // Emit as general content change event @@ -245,6 +252,10 @@ export class UntitledFileWorkingCopy ex //#region Backup + get backupDelay(): number | undefined { + return this.model?.configuration?.backupDelay; + } + async backup(token: CancellationToken): Promise { let content: VSBufferReadableStream | undefined = undefined; @@ -287,8 +298,8 @@ export class UntitledFileWorkingCopy ex async revert(): Promise { this.trace('revert()'); - // No longer dirty - this.setDirty(false); + // No longer modified + this.setModified(false); // Emit as event this._onDidRevert.fire(); diff --git a/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopyManager.ts b/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopyManager.ts index f985afb7dc9..1f50142c3d6 100644 --- a/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopyManager.ts +++ b/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopyManager.ts @@ -91,6 +91,12 @@ export interface INewOrExistingUntitledFileWorkingCopyOptions extends INewUntitl * Note: the resource will not be used unless the scheme is `untitled`. */ untitledResource: URI; + + /** + * A flag that will prevent the working copy from appearing dirty in the UI + * and not show a confirmation dialog when closed with unsaved content. + */ + isScratchpad?: boolean; } type IInternalUntitledFileWorkingCopyOptions = INewUntitledFileWorkingCopyOptions & INewUntitledFileWorkingCopyWithAssociatedResourceOptions & INewOrExistingUntitledFileWorkingCopyOptions; @@ -165,8 +171,11 @@ export class UntitledFileWorkingCopyManager { const model = await this.ready; + // Ensure to await any pending backup operations + await this.joinBackups(); + return model.count() > 0; } @@ -409,48 +373,60 @@ class WorkingCopyBackupServiceImpl extends Disposable implements IWorkingCopyBac async getBackups(): Promise { const model = await this.ready; + // Ensure to await any pending backup operations + await this.joinBackups(); + const backups = await Promise.all(model.get().map(backupResource => this.resolveIdentifier(backupResource, model))); return coalesce(backups); } private async resolveIdentifier(backupResource: URI, model: WorkingCopyBackupsModel): Promise { + let res: IWorkingCopyIdentifier | undefined = undefined; - // Read the entire backup preamble by reading up to - // `PREAMBLE_MAX_LENGTH` in the backup file until - // the `PREAMBLE_END_MARKER` is found - const backupPreamble = await this.readToMatchingString(backupResource, WorkingCopyBackupServiceImpl.PREAMBLE_END_MARKER, WorkingCopyBackupServiceImpl.PREAMBLE_MAX_LENGTH); - if (!backupPreamble) { - return undefined; - } + await this.ioOperationQueues.queueFor(backupResource).queue(async () => { + if (!model.has(backupResource)) { + return; // require backup to be present + } - // Figure out the offset in the preamble where meta - // information possibly starts. This can be `-1` for - // older backups without meta. - const metaStartIndex = backupPreamble.indexOf(WorkingCopyBackupServiceImpl.PREAMBLE_META_SEPARATOR); + // Read the entire backup preamble by reading up to + // `PREAMBLE_MAX_LENGTH` in the backup file until + // the `PREAMBLE_END_MARKER` is found + const backupPreamble = await this.readToMatchingString(backupResource, WorkingCopyBackupServiceImpl.PREAMBLE_END_MARKER, WorkingCopyBackupServiceImpl.PREAMBLE_MAX_LENGTH); + if (!backupPreamble) { + return; + } - // Extract the preamble content for resource and meta - let resourcePreamble: string; - let metaPreamble: string | undefined; - if (metaStartIndex > 0) { - resourcePreamble = backupPreamble.substring(0, metaStartIndex); - metaPreamble = backupPreamble.substr(metaStartIndex + 1); - } else { - resourcePreamble = backupPreamble; - metaPreamble = undefined; - } + // Figure out the offset in the preamble where meta + // information possibly starts. This can be `-1` for + // older backups without meta. + const metaStartIndex = backupPreamble.indexOf(WorkingCopyBackupServiceImpl.PREAMBLE_META_SEPARATOR); - // Try to parse the meta preamble for figuring out - // `typeId` and `meta` if defined. - const { typeId, meta } = this.parsePreambleMeta(metaPreamble); + // Extract the preamble content for resource and meta + let resourcePreamble: string; + let metaPreamble: string | undefined; + if (metaStartIndex > 0) { + resourcePreamble = backupPreamble.substring(0, metaStartIndex); + metaPreamble = backupPreamble.substr(metaStartIndex + 1); + } else { + resourcePreamble = backupPreamble; + metaPreamble = undefined; + } - // Update model entry with now resolved meta - model.update(backupResource, meta); + // Try to parse the meta preamble for figuring out + // `typeId` and `meta` if defined. + const { typeId, meta } = this.parsePreambleMeta(metaPreamble); - return { - typeId: typeId ?? NO_TYPE_ID, - resource: URI.parse(resourcePreamble) - }; + // Update model entry with now resolved meta + model.update(backupResource, meta); + + res = { + typeId: typeId ?? NO_TYPE_ID, + resource: URI.parse(resourcePreamble) + }; + }); + + return res; } private async readToMatchingString(backupResource: URI, matchingString: string, maximumBytesToRead: number): Promise { @@ -469,50 +445,57 @@ class WorkingCopyBackupServiceImpl extends Disposable implements IWorkingCopyBac const backupResource = this.toBackupResource(identifier); const model = await this.ready; - if (!model.has(backupResource)) { - return undefined; // require backup to be present - } - // Load the backup content and peek into the first chunk - // to be able to resolve the meta data - const backupStream = await this.fileService.readFileStream(backupResource); - const peekedBackupStream = await peekStream(backupStream.value, 1); - const firstBackupChunk = VSBuffer.concat(peekedBackupStream.buffer); + let res: IResolvedWorkingCopyBackup | undefined = undefined; - // We have seen reports (e.g. https://github.com/microsoft/vscode/issues/78500) where - // if VSCode goes down while writing the backup file, the file can turn empty because - // it always first gets truncated and then written to. In this case, we will not find - // the meta-end marker ('\n') and as such the backup can only be invalid. We bail out - // here if that is the case. - const preambleEndIndex = firstBackupChunk.buffer.indexOf(WorkingCopyBackupServiceImpl.PREAMBLE_END_MARKER_CHARCODE); - if (preambleEndIndex === -1) { - this.logService.trace(`Backup: Could not find meta end marker in ${backupResource}. The file is probably corrupt (filesize: ${backupStream.size}).`); + await this.ioOperationQueues.queueFor(backupResource).queue(async () => { + if (!model.has(backupResource)) { + return; // require backup to be present + } - return undefined; - } + // Load the backup content and peek into the first chunk + // to be able to resolve the meta data + const backupStream = await this.fileService.readFileStream(backupResource); + const peekedBackupStream = await peekStream(backupStream.value, 1); + const firstBackupChunk = VSBuffer.concat(peekedBackupStream.buffer); - const preambelRaw = firstBackupChunk.slice(0, preambleEndIndex).toString(); + // We have seen reports (e.g. https://github.com/microsoft/vscode/issues/78500) where + // if VSCode goes down while writing the backup file, the file can turn empty because + // it always first gets truncated and then written to. In this case, we will not find + // the meta-end marker ('\n') and as such the backup can only be invalid. We bail out + // here if that is the case. + const preambleEndIndex = firstBackupChunk.buffer.indexOf(WorkingCopyBackupServiceImpl.PREAMBLE_END_MARKER_CHARCODE); + if (preambleEndIndex === -1) { + this.logService.trace(`Backup: Could not find meta end marker in ${backupResource}. The file is probably corrupt (filesize: ${backupStream.size}).`); - // Extract meta data (if any) - let meta: T | undefined; - const metaStartIndex = preambelRaw.indexOf(WorkingCopyBackupServiceImpl.PREAMBLE_META_SEPARATOR); - if (metaStartIndex !== -1) { - meta = this.parsePreambleMeta(preambelRaw.substr(metaStartIndex + 1)).meta as T; - } + return undefined; + } - // Update model entry with now resolved meta - model.update(backupResource, meta); + const preambelRaw = firstBackupChunk.slice(0, preambleEndIndex).toString(); - // Build a new stream without the preamble - const firstBackupChunkWithoutPreamble = firstBackupChunk.slice(preambleEndIndex + 1); - let value: VSBufferReadableStream; - if (peekedBackupStream.ended) { - value = bufferToStream(firstBackupChunkWithoutPreamble); - } else { - value = prefixedBufferStream(firstBackupChunkWithoutPreamble, peekedBackupStream.stream); - } + // Extract meta data (if any) + let meta: T | undefined; + const metaStartIndex = preambelRaw.indexOf(WorkingCopyBackupServiceImpl.PREAMBLE_META_SEPARATOR); + if (metaStartIndex !== -1) { + meta = this.parsePreambleMeta(preambelRaw.substr(metaStartIndex + 1)).meta as T; + } - return { value, meta }; + // Update model entry with now resolved meta + model.update(backupResource, meta); + + // Build a new stream without the preamble + const firstBackupChunkWithoutPreamble = firstBackupChunk.slice(preambleEndIndex + 1); + let value: VSBufferReadableStream; + if (peekedBackupStream.ended) { + value = bufferToStream(firstBackupChunkWithoutPreamble); + } else { + value = prefixedBufferStream(firstBackupChunkWithoutPreamble, peekedBackupStream.stream); + } + + res = { value, meta }; + }); + + return res; } private parsePreambleMeta(preambleMetaRaw: string | undefined): { typeId: string | undefined; meta: T | undefined } { diff --git a/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts b/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts index 2a001349e6f..8775ac71554 100644 --- a/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts +++ b/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts @@ -21,7 +21,7 @@ import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editor /** * The working copy backup tracker deals with: * - restoring backups that exist - * - creating backups for dirty working copies + * - creating backups for modified working copies * - deleting backups for saved working copies * - handling backups on shutdown */ @@ -39,8 +39,8 @@ export abstract class WorkingCopyBackupTracker extends Disposable { ) { super(); - // Fill in initial dirty working copies - for (const workingCopy of this.workingCopyService.dirtyWorkingCopies) { + // Fill in initial modified working copies + for (const workingCopy of this.workingCopyService.modifiedWorkingCopies) { this.onDidRegister(workingCopy); } @@ -87,7 +87,7 @@ export abstract class WorkingCopyBackupTracker extends Disposable { // have different scheduling delays based on auto save. This helps to // avoid a (not critical but also not really wanted) race between saving // (after 1s per default) and making a backup of the working copy. - private static readonly BACKUP_SCHEDULE_DELAYS = { + private static readonly DEFAULT_BACKUP_SCHEDULE_DELAYS = { [AutoSaveMode.OFF]: 1000, [AutoSaveMode.ON_FOCUS_CHANGE]: 1000, [AutoSaveMode.ON_WINDOW_CHANGE]: 1000, @@ -114,7 +114,7 @@ export abstract class WorkingCopyBackupTracker extends Disposable { return; } - if (workingCopy.isDirty()) { + if (workingCopy.isModified()) { this.scheduleBackup(workingCopy); } } @@ -159,8 +159,8 @@ export abstract class WorkingCopyBackupTracker extends Disposable { return; } - // Schedule backup if dirty - if (workingCopy.isDirty()) { + // Schedule backup for modified working copies + if (workingCopy.isModified()) { // this listener will make sure that the backup is // pushed out for as long as the user is still changing // the content of the working copy. @@ -183,8 +183,8 @@ export abstract class WorkingCopyBackupTracker extends Disposable { return; } - // Backup if dirty - if (workingCopy.isDirty()) { + // Backup if modified + if (workingCopy.isModified()) { this.logService.trace(`[backup tracker] creating backup`, workingCopy.resource.toString(), workingCopy.typeId); try { @@ -193,7 +193,7 @@ export abstract class WorkingCopyBackupTracker extends Disposable { return; } - if (workingCopy.isDirty()) { + if (workingCopy.isModified()) { this.logService.trace(`[backup tracker] storing backup`, workingCopy.resource.toString(), workingCopy.typeId); await this.workingCopyBackupService.backup(workingCopy, backup.content, this.getContentVersion(workingCopy), backup.meta, cts.token); @@ -220,12 +220,16 @@ export abstract class WorkingCopyBackupTracker extends Disposable { } protected getBackupScheduleDelay(workingCopy: IWorkingCopy): number { + if (typeof workingCopy.backupDelay === 'number') { + return workingCopy.backupDelay; // respect working copy override + } + let autoSaveMode = this.filesConfigurationService.getAutoSaveMode(); if (workingCopy.capabilities & WorkingCopyCapabilities.Untitled) { autoSaveMode = AutoSaveMode.OFF; // auto-save is never on for untitled working copies } - return WorkingCopyBackupTracker.BACKUP_SCHEDULE_DELAYS[autoSaveMode]; + return WorkingCopyBackupTracker.DEFAULT_BACKUP_SCHEDULE_DELAYS[autoSaveMode]; } protected getContentVersion(workingCopy: IWorkingCopy): number { @@ -340,7 +344,7 @@ export abstract class WorkingCopyBackupTracker extends Disposable { // associated editor. const restoredBackups = new Set(); for (const unrestoredBackup of this.unrestoredBackups) { - const canHandleUnrestoredBackup = handler.handles(unrestoredBackup); + const canHandleUnrestoredBackup = await handler.handles(unrestoredBackup); if (!canHandleUnrestoredBackup) { continue; } @@ -383,7 +387,7 @@ export abstract class WorkingCopyBackupTracker extends Disposable { } // Then, resolve each opened editor to make sure the working copy - // is loaded and the dirty editor appears properly + // is loaded and the modified editor appears properly. // We only do that for editors that are not active in a group // already to prevent calling `resolve` twice! await Promises.settled([...openedEditorsForBackups].map(async openedEditorForBackup => { diff --git a/src/vs/workbench/services/workingCopy/common/workingCopyEditorService.ts b/src/vs/workbench/services/workingCopy/common/workingCopyEditorService.ts index f95cb71ff84..643d3a3e2b4 100644 --- a/src/vs/workbench/services/workingCopy/common/workingCopyEditorService.ts +++ b/src/vs/workbench/services/workingCopy/common/workingCopyEditorService.ts @@ -20,7 +20,7 @@ export interface IWorkingCopyEditorHandler { * Whether the handler is capable of opening the specific backup in * an editor. */ - handles(workingCopy: IWorkingCopyIdentifier): boolean; + handles(workingCopy: IWorkingCopyIdentifier): boolean | Promise; /** * Whether the provided working copy is opened in the provided editor. @@ -87,7 +87,7 @@ export class WorkingCopyEditorService extends Disposable implements IWorkingCopy private isOpen(workingCopy: IWorkingCopy, editor: EditorInput): boolean { for (const handler of this.handlers) { - if (handler.handles(workingCopy) && handler.isOpen(workingCopy, editor)) { + if (handler.isOpen(workingCopy, editor)) { return true; } } diff --git a/src/vs/workbench/services/workingCopy/common/workingCopyHistoryService.ts b/src/vs/workbench/services/workingCopy/common/workingCopyHistoryService.ts index 1e299593f87..a689d217c5e 100644 --- a/src/vs/workbench/services/workingCopy/common/workingCopyHistoryService.ts +++ b/src/vs/workbench/services/workingCopy/common/workingCopyHistoryService.ts @@ -4,23 +4,23 @@ *--------------------------------------------------------------------------------------------*/ import { localize } from 'vs/nls'; -import { Emitter } from 'vs/base/common/event'; +import { Event, Emitter } from 'vs/base/common/event'; import { assertIsDefined } from 'vs/base/common/types'; import { Registry } from 'vs/platform/registry/common/platform'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; -import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; +import { ILifecycleService, LifecyclePhase, WillShutdownEvent } from 'vs/workbench/services/lifecycle/common/lifecycle'; import { WorkingCopyHistoryTracker } from 'vs/workbench/services/workingCopy/common/workingCopyHistoryTracker'; import { Disposable } from 'vs/base/common/lifecycle'; import { IWorkingCopyHistoryEntry, IWorkingCopyHistoryEntryDescriptor, IWorkingCopyHistoryEvent, IWorkingCopyHistoryService, MAX_PARALLEL_HISTORY_IO_OPS } from 'vs/workbench/services/workingCopy/common/workingCopyHistory'; import { FileOperationError, FileOperationResult, IFileService, IFileStatWithMetadata } from 'vs/platform/files/common/files'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; import { URI } from 'vs/base/common/uri'; -import { DeferredPromise, Limiter } from 'vs/base/common/async'; +import { DeferredPromise, Limiter, RunOnceScheduler } from 'vs/base/common/async'; import { dirname, extname, isEqual, joinPath } from 'vs/base/common/resources'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { hash } from 'vs/base/common/hash'; import { indexOfPath, randomPath } from 'vs/base/common/extpath'; -import { CancellationToken } from 'vs/base/common/cancellation'; +import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { ResourceMap } from 'vs/base/common/map'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { ILabelService } from 'vs/platform/label/common/label'; @@ -786,5 +786,83 @@ export abstract class WorkingCopyHistoryService extends Disposable implements IW } +export class NativeWorkingCopyHistoryService extends WorkingCopyHistoryService { + + private static readonly STORE_ALL_INTERVAL = 5 * 60 * 1000; // 5min + + private readonly isRemotelyStored = typeof this.environmentService.remoteAuthority === 'string'; + + private readonly storeAllCts = this._register(new CancellationTokenSource()); + private readonly storeAllScheduler = this._register(new RunOnceScheduler(() => this.storeAll(this.storeAllCts.token), NativeWorkingCopyHistoryService.STORE_ALL_INTERVAL)); + + constructor( + @IFileService fileService: IFileService, + @IRemoteAgentService remoteAgentService: IRemoteAgentService, + @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, + @IUriIdentityService uriIdentityService: IUriIdentityService, + @ILabelService labelService: ILabelService, + @ILifecycleService private readonly lifecycleService: ILifecycleService, + @ILogService logService: ILogService, + @IConfigurationService configurationService: IConfigurationService + ) { + super(fileService, remoteAgentService, environmentService, uriIdentityService, labelService, logService, configurationService); + + this.registerListeners(); + } + + private registerListeners(): void { + if (!this.isRemotelyStored) { + + // Local: persist all on shutdown + this.lifecycleService.onWillShutdown(e => this.onWillShutdown(e)); + + // Local: schedule persist on change + this._register(Event.any(this.onDidAddEntry, this.onDidChangeEntry, this.onDidReplaceEntry, this.onDidRemoveEntry)(() => this.onDidChangeModels())); + } + } + + protected getModelOptions(): IWorkingCopyHistoryModelOptions { + return { flushOnChange: this.isRemotelyStored /* because the connection might drop anytime */ }; + } + + private onWillShutdown(e: WillShutdownEvent): void { + + // Dispose the scheduler... + this.storeAllScheduler.dispose(); + this.storeAllCts.dispose(true); + + // ...because we now explicitly store all models + e.join(this.storeAll(e.token), { id: 'join.workingCopyHistory', label: localize('join.workingCopyHistory', "Saving local history") }); + } + + private onDidChangeModels(): void { + if (!this.storeAllScheduler.isScheduled()) { + this.storeAllScheduler.schedule(); + } + } + + private async storeAll(token: CancellationToken): Promise { + const limiter = new Limiter(MAX_PARALLEL_HISTORY_IO_OPS); + const promises = []; + + const models = Array.from(this.models.values()); + for (const model of models) { + promises.push(limiter.queue(async () => { + if (token.isCancellationRequested) { + return; + } + + try { + await model.store(token); + } catch (error) { + this.logService.trace(error); + } + })); + } + + await Promise.all(promises); + } +} + // Register History Tracker Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(WorkingCopyHistoryTracker, LifecyclePhase.Restored); diff --git a/src/vs/workbench/services/workingCopy/common/workingCopyService.ts b/src/vs/workbench/services/workingCopy/common/workingCopyService.ts index e9a5927e310..a5f58b91345 100644 --- a/src/vs/workbench/services/workingCopy/common/workingCopyService.ts +++ b/src/vs/workbench/services/workingCopy/common/workingCopyService.ts @@ -68,6 +68,18 @@ export interface IWorkingCopyService { */ readonly dirtyWorkingCopies: readonly IWorkingCopy[]; + /** + * The number of modified working copies that are registered, + * including scratchpads, which are never dirty. + */ + readonly modifiedCount: number; + + /** + * All working copies with unsaved changes, + * including scratchpads, which are never dirty. + */ + readonly modifiedWorkingCopies: readonly IWorkingCopy[]; + /** * Whether there is any registered working copy that is dirty. */ @@ -265,6 +277,22 @@ export class WorkingCopyService extends Disposable implements IWorkingCopyServic return this.workingCopies.filter(workingCopy => workingCopy.isDirty()); } + get modifiedCount(): number { + let totalModifiedCount = 0; + + for (const workingCopy of this._workingCopies) { + if (workingCopy.isModified()) { + totalModifiedCount++; + } + } + + return totalModifiedCount; + } + + get modifiedWorkingCopies(): IWorkingCopy[] { + return this.workingCopies.filter(workingCopy => workingCopy.isModified()); + } + isDirty(resource: URI, typeId?: string): boolean { const workingCopies = this.mapResourceToWorkingCopies.get(resource); if (workingCopies) { diff --git a/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupTracker.ts b/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupTracker.ts index 6994989e01d..16038d823f0 100644 --- a/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupTracker.ts +++ b/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupTracker.ts @@ -49,7 +49,7 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp protected async onFinalBeforeShutdown(reason: ShutdownReason): Promise { - // Important: we are about to shutdown and handle dirty working copies + // Important: we are about to shutdown and handle modified working copies // and backups. We do not want any pending backup ops to interfer with // this because there is a risk of a backup being scheduled after we have // acknowledged to shutdown and then might end up with partial backups @@ -67,61 +67,62 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp try { - // Dirty working copies need treatment on shutdown - const dirtyWorkingCopies = this.workingCopyService.dirtyWorkingCopies; - if (dirtyWorkingCopies.length) { - return await this.onBeforeShutdownWithDirty(reason, dirtyWorkingCopies); + // Modified working copies need treatment on shutdown + const modifiedWorkingCopies = this.workingCopyService.modifiedWorkingCopies; + if (modifiedWorkingCopies.length) { + return await this.onBeforeShutdownWithModified(reason, modifiedWorkingCopies); } - // No dirty working copies + // No modified working copies else { - return await this.onBeforeShutdownWithoutDirty(); + return await this.onBeforeShutdownWithoutModified(); } } finally { resume(); } } - protected async onBeforeShutdownWithDirty(reason: ShutdownReason, dirtyWorkingCopies: readonly IWorkingCopy[]): Promise { + protected async onBeforeShutdownWithModified(reason: ShutdownReason, modifiedWorkingCopies: readonly IWorkingCopy[]): Promise { // If auto save is enabled, save all non-untitled working copies - // and then check again for dirty copies + // and then check again for modified copies if (this.filesConfigurationService.getAutoSaveMode() !== AutoSaveMode.OFF) { - // Save all dirty working copies + // Save all modified working copies that can be auto-saved try { - await this.doSaveAllBeforeShutdown(false /* not untitled */, SaveReason.AUTO); + const workingCopiesToSave = modifiedWorkingCopies.filter(wc => !(wc.capabilities & WorkingCopyCapabilities.Untitled)); + await this.doSaveAllBeforeShutdown(workingCopiesToSave, SaveReason.AUTO); } catch (error) { - this.logService.error(`[backup tracker] error saving dirty working copies: ${error}`); // guard against misbehaving saves, we handle remaining dirty below + this.logService.error(`[backup tracker] error saving modified working copies: ${error}`); // guard against misbehaving saves, we handle remaining modified below } - // If we still have dirty working copies, we either have untitled ones or working copies that cannot be saved - const remainingDirtyWorkingCopies = this.workingCopyService.dirtyWorkingCopies; - if (remainingDirtyWorkingCopies.length) { - return this.handleDirtyBeforeShutdown(remainingDirtyWorkingCopies, reason); + // If we still have modified working copies, we either have untitled ones or working copies that cannot be saved + const remainingModifiedWorkingCopies = this.workingCopyService.modifiedWorkingCopies; + if (remainingModifiedWorkingCopies.length) { + return this.handleModifiedBeforeShutdown(remainingModifiedWorkingCopies, reason); } - return this.noVeto([...dirtyWorkingCopies]); // no veto (dirty auto-saved) + return this.noVeto([...modifiedWorkingCopies]); // no veto (modified auto-saved) } // Auto save is not enabled - return this.handleDirtyBeforeShutdown(dirtyWorkingCopies, reason); + return this.handleModifiedBeforeShutdown(modifiedWorkingCopies, reason); } - private async handleDirtyBeforeShutdown(dirtyWorkingCopies: readonly IWorkingCopy[], reason: ShutdownReason): Promise { + private async handleModifiedBeforeShutdown(modifiedWorkingCopies: readonly IWorkingCopy[], reason: ShutdownReason): Promise { // Trigger backup if configured and enabled for shutdown reason let backups: IWorkingCopy[] = []; let backupError: Error | undefined = undefined; - const backup = await this.shouldBackupBeforeShutdown(reason); - if (backup) { + const modifiedWorkingCopiesToBackup = await this.shouldBackupBeforeShutdown(reason, modifiedWorkingCopies); + if (modifiedWorkingCopiesToBackup.length > 0) { try { - const backupResult = await this.backupBeforeShutdown(dirtyWorkingCopies); + const backupResult = await this.backupBeforeShutdown(modifiedWorkingCopiesToBackup); backups = backupResult.backups; backupError = backupResult.error; - if (backups.length === dirtyWorkingCopies.length) { + if (backups.length === modifiedWorkingCopies.length) { return false; // no veto (backup was successful for all working copies) } } catch (error) { @@ -129,7 +130,7 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp } } - const remainingDirtyWorkingCopies = dirtyWorkingCopies.filter(workingCopy => !backups.includes(workingCopy)); + const remainingModifiedWorkingCopies = modifiedWorkingCopies.filter(workingCopy => !backups.includes(workingCopy)); // We ran a backup but received an error that we show to the user if (backupError) { @@ -139,7 +140,7 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp return false; // do not block shutdown during extension development (https://github.com/microsoft/vscode/issues/115028) } - this.showErrorDialog(localize('backupTrackerBackupFailed', "The following editors with unsaved changes could not be saved to the back up location."), remainingDirtyWorkingCopies, backupError); + this.showErrorDialog(localize('backupTrackerBackupFailed', "The following editors with unsaved changes could not be saved to the back up location."), remainingModifiedWorkingCopies, backupError); return true; // veto (the backup failed) } @@ -148,71 +149,75 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp // the working copies that did not successfully backup try { - return await this.confirmBeforeShutdown(remainingDirtyWorkingCopies); + return await this.confirmBeforeShutdown(remainingModifiedWorkingCopies); } catch (error) { if (this.environmentService.isExtensionDevelopment) { - this.logService.error(`[backup tracker] error saving or reverting dirty working copies: ${error}`); + this.logService.error(`[backup tracker] error saving or reverting modified working copies: ${error}`); return false; // do not block shutdown during extension development (https://github.com/microsoft/vscode/issues/115028) } - this.showErrorDialog(localize('backupTrackerConfirmFailed', "The following editors with unsaved changes could not be saved or reverted."), remainingDirtyWorkingCopies, error); + this.showErrorDialog(localize('backupTrackerConfirmFailed', "The following editors with unsaved changes could not be saved or reverted."), remainingModifiedWorkingCopies, error); return true; // veto (save or revert failed) } } - private async shouldBackupBeforeShutdown(reason: ShutdownReason): Promise { - let backup: boolean | undefined; + private async shouldBackupBeforeShutdown(reason: ShutdownReason, modifiedWorkingCopies: readonly IWorkingCopy[]): Promise { if (!this.filesConfigurationService.isHotExitEnabled) { - backup = false; // never backup when hot exit is disabled via settings - } else if (this.environmentService.isExtensionDevelopment) { - backup = true; // always backup closing extension development window without asking to speed up debugging - } else { - - // When quit is requested skip the confirm callback and attempt to backup all workspaces. - // When quit is not requested the confirm callback should be shown when the window being - // closed is the only VS Code window open, except for on Mac where hot exit is only - // ever activated when quit is requested. - - switch (reason) { - case ShutdownReason.CLOSE: - if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.filesConfigurationService.hotExitConfiguration === HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE) { - backup = true; // backup if a folder is open and onExitAndWindowClose is configured - } else if (await this.nativeHostService.getWindowCount() > 1 || isMacintosh) { - backup = false; // do not backup if a window is closed that does not cause quitting of the application - } else { - backup = true; // backup if last window is closed on win/linux where the application quits right after - } - break; - - case ShutdownReason.QUIT: - backup = true; // backup because next start we restore all backups - break; - - case ShutdownReason.RELOAD: - backup = true; // backup because after window reload, backups restore - break; - - case ShutdownReason.LOAD: - if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.filesConfigurationService.hotExitConfiguration === HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE) { - backup = true; // backup if a folder is open and onExitAndWindowClose is configured - } else { - backup = false; // do not backup because we are switching contexts - } - break; - } + return []; // never backup when hot exit is disabled via settings } - return backup; + if (this.environmentService.isExtensionDevelopment) { + return modifiedWorkingCopies; // always backup closing extension development window without asking to speed up debugging + } + + switch (reason) { + + // Window Close + case ShutdownReason.CLOSE: + if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.filesConfigurationService.hotExitConfiguration === HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE) { + return modifiedWorkingCopies; // backup if a workspace/folder is open and onExitAndWindowClose is configured + } + + if (isMacintosh || await this.nativeHostService.getWindowCount() > 1) { + if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY) { + return modifiedWorkingCopies.filter(modifiedWorkingCopy => modifiedWorkingCopy.capabilities & WorkingCopyCapabilities.Scratchpad); // backup scratchpads automatically to avoid user confirmation + } + + return []; // do not backup if a window is closed that does not cause quitting of the application + } + + return modifiedWorkingCopies; // backup if last window is closed on win/linux where the application quits right after + + // Application Quit + case ShutdownReason.QUIT: + return modifiedWorkingCopies; // backup because next start we restore all backups + + // Window Reload + case ShutdownReason.RELOAD: + return modifiedWorkingCopies; // backup because after window reload, backups restore + + // Workspace Change + case ShutdownReason.LOAD: + if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY) { + if (this.filesConfigurationService.hotExitConfiguration === HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE) { + return modifiedWorkingCopies; // backup if a workspace/folder is open and onExitAndWindowClose is configured + } + + return modifiedWorkingCopies.filter(modifiedWorkingCopy => modifiedWorkingCopy.capabilities & WorkingCopyCapabilities.Scratchpad); // backup scratchpads automatically to avoid user confirmation + } + + return []; // do not backup because we are switching contexts with no workspace/folder open + } } private showErrorDialog(msg: string, workingCopies: readonly IWorkingCopy[], error?: Error): void { - const dirtyWorkingCopies = workingCopies.filter(workingCopy => workingCopy.isDirty()); + const modifiedWorkingCopies = workingCopies.filter(workingCopy => workingCopy.isModified()); const advice = localize('backupErrorDetails', "Try saving or reverting the editors with unsaved changes first and then try again."); - const detail = dirtyWorkingCopies.length - ? getFileNamesMessage(dirtyWorkingCopies.map(x => x.name)) + '\n' + advice + const detail = modifiedWorkingCopies.length + ? getFileNamesMessage(modifiedWorkingCopies.map(x => x.name)) + '\n' + advice : advice; this.dialogService.error(msg, detail); @@ -220,15 +225,15 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp this.logService.error(error ? `[backup tracker] ${msg}: ${error}` : `[backup tracker] ${msg}`); } - private async backupBeforeShutdown(dirtyWorkingCopies: readonly IWorkingCopy[]): Promise<{ backups: IWorkingCopy[]; error?: Error }> { + private async backupBeforeShutdown(modifiedWorkingCopies: readonly IWorkingCopy[]): Promise<{ backups: IWorkingCopy[]; error?: Error }> { const backups: IWorkingCopy[] = []; let error: Error | undefined = undefined; await this.withProgressAndCancellation(async token => { - // Perform a backup of all dirty working copies unless a backup already exists + // Perform a backup of all modified working copies unless a backup already exists try { - await Promises.settled(dirtyWorkingCopies.map(async workingCopy => { + await Promises.settled(modifiedWorkingCopies.map(async workingCopy => { // Backup exists const contentVersion = this.getContentVersion(workingCopy); @@ -262,93 +267,85 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp return { backups, error }; } - private async confirmBeforeShutdown(dirtyWorkingCopies: IWorkingCopy[]): Promise { + private async confirmBeforeShutdown(modifiedWorkingCopies: IWorkingCopy[]): Promise { // Save - const confirm = await this.fileDialogService.showSaveConfirm(dirtyWorkingCopies.map(workingCopy => workingCopy.name)); + const confirm = await this.fileDialogService.showSaveConfirm(modifiedWorkingCopies.map(workingCopy => workingCopy.name)); if (confirm === ConfirmResult.SAVE) { - const dirtyCountBeforeSave = this.workingCopyService.dirtyCount; + const modifiedCountBeforeSave = this.workingCopyService.modifiedCount; try { - await this.doSaveAllBeforeShutdown(dirtyWorkingCopies, SaveReason.EXPLICIT); + await this.doSaveAllBeforeShutdown(modifiedWorkingCopies, SaveReason.EXPLICIT); } catch (error) { - this.logService.error(`[backup tracker] error saving dirty working copies: ${error}`); // guard against misbehaving saves, we handle remaining dirty below + this.logService.error(`[backup tracker] error saving modified working copies: ${error}`); // guard against misbehaving saves, we handle remaining modified below } - const savedWorkingCopies = dirtyCountBeforeSave - this.workingCopyService.dirtyCount; - if (savedWorkingCopies < dirtyWorkingCopies.length) { + const savedWorkingCopies = modifiedCountBeforeSave - this.workingCopyService.modifiedCount; + if (savedWorkingCopies < modifiedWorkingCopies.length) { return true; // veto (save failed or was canceled) } - return this.noVeto(dirtyWorkingCopies); // no veto (dirty saved) + return this.noVeto(modifiedWorkingCopies); // no veto (modified saved) } // Don't Save else if (confirm === ConfirmResult.DONT_SAVE) { try { - await this.doRevertAllBeforeShutdown(dirtyWorkingCopies); + await this.doRevertAllBeforeShutdown(modifiedWorkingCopies); } catch (error) { - this.logService.error(`[backup tracker] error reverting dirty working copies: ${error}`); // do not block the shutdown on errors from revert + this.logService.error(`[backup tracker] error reverting modified working copies: ${error}`); // do not block the shutdown on errors from revert } - return this.noVeto(dirtyWorkingCopies); // no veto (dirty reverted) + return this.noVeto(modifiedWorkingCopies); // no veto (modified reverted) } // Cancel return true; // veto (user canceled) } - private doSaveAllBeforeShutdown(dirtyWorkingCopies: IWorkingCopy[], reason: SaveReason): Promise; - private doSaveAllBeforeShutdown(includeUntitled: boolean, reason: SaveReason): Promise; - private doSaveAllBeforeShutdown(arg1: IWorkingCopy[] | boolean, reason: SaveReason): Promise { - const dirtyWorkingCopies = Array.isArray(arg1) ? arg1 : this.workingCopyService.dirtyWorkingCopies.filter(workingCopy => { - if (arg1 === false && (workingCopy.capabilities & WorkingCopyCapabilities.Untitled)) { - return false; // skip untitled unless explicitly included - } - - return true; - }); - + private doSaveAllBeforeShutdown(workingCopies: IWorkingCopy[], reason: SaveReason): Promise { return this.withProgressAndCancellation(async () => { // Skip save participants on shutdown for performance reasons const saveOptions = { skipSaveParticipants: true, reason }; // First save through the editor service if we save all to benefit - // from some extras like switching to untitled dirty editors before saving. - + // from some extras like switching to untitled modified editors before saving. let result: boolean | undefined = undefined; - if (typeof arg1 === 'boolean' || dirtyWorkingCopies.length === this.workingCopyService.dirtyCount) { - result = await this.editorService.saveAll({ includeUntitled: typeof arg1 === 'boolean' ? arg1 : true, ...saveOptions }); + if (workingCopies.length === this.workingCopyService.modifiedCount) { + result = (await this.editorService.saveAll({ + includeUntitled: { includeScratchpad: true }, + ...saveOptions + })).success; } - // If we still have dirty working copies, save those directly + // If we still have modified working copies, save those directly // unless the save was not successful (e.g. cancelled) if (result !== false) { - await Promises.settled(dirtyWorkingCopies.map(workingCopy => workingCopy.isDirty() ? workingCopy.save(saveOptions) : Promise.resolve(true))); + await Promises.settled(workingCopies.map(workingCopy => workingCopy.isModified() ? workingCopy.save(saveOptions) : Promise.resolve(true))); } }, localize('saveBeforeShutdown', "Saving editors with unsaved changes is taking a bit longer...")); } - private doRevertAllBeforeShutdown(dirtyWorkingCopies: IWorkingCopy[]): Promise { + private doRevertAllBeforeShutdown(modifiedWorkingCopies: IWorkingCopy[]): Promise { return this.withProgressAndCancellation(async () => { // Soft revert is good enough on shutdown const revertOptions = { soft: true }; // First revert through the editor service if we revert all - if (dirtyWorkingCopies.length === this.workingCopyService.dirtyCount) { + if (modifiedWorkingCopies.length === this.workingCopyService.modifiedCount) { await this.editorService.revertAll(revertOptions); } - // If we still have dirty working copies, revert those directly - await Promises.settled(dirtyWorkingCopies.map(workingCopy => workingCopy.isDirty() ? workingCopy.revert(revertOptions) : Promise.resolve())); + // If we still have modified working copies, revert those directly + await Promises.settled(modifiedWorkingCopies.map(workingCopy => workingCopy.isModified() ? workingCopy.revert(revertOptions) : Promise.resolve())); }, localize('revertBeforeShutdown', "Reverting editors with unsaved changes is taking a bit longer...")); } - private onBeforeShutdownWithoutDirty(): Promise { + private onBeforeShutdownWithoutModified(): Promise { - // We are about to shutdown without dirty editors + // We are about to shutdown without modified editors // and will discard any backups that are still // around that have not been handled depending // on the window state. @@ -377,7 +374,7 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp await this.discardBackupsBeforeShutdown(arg1); - return false; // no veto (no dirty) + return false; // no veto (no modified) } private discardBackupsBeforeShutdown(backupsToDiscard: IWorkingCopyIdentifier[]): Promise; @@ -396,7 +393,7 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp await this.withProgressAndCancellation(async () => { - // When we shutdown either with no dirty working copies left + // When we shutdown either with no modified working copies left // or with some handled, we start to discard these backups // to free them up. This helps to get rid of stale backups // as reported in https://github.com/microsoft/vscode/issues/92962 diff --git a/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyHistoryService.ts b/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyHistoryService.ts index 173e036770e..adb216e83d3 100644 --- a/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyHistoryService.ts +++ b/src/vs/workbench/services/workingCopy/electron-sandbox/workingCopyHistoryService.ts @@ -3,99 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { localize } from 'vs/nls'; -import { Event } from 'vs/base/common/event'; -import { Limiter, RunOnceScheduler } from 'vs/base/common/async'; -import { ILifecycleService, WillShutdownEvent } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IWorkingCopyHistoryModelOptions, WorkingCopyHistoryService } from 'vs/workbench/services/workingCopy/common/workingCopyHistoryService'; +import { NativeWorkingCopyHistoryService } from 'vs/workbench/services/workingCopy/common/workingCopyHistoryService'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { IWorkingCopyHistoryService, MAX_PARALLEL_HISTORY_IO_OPS } from 'vs/workbench/services/workingCopy/common/workingCopyHistory'; -import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; - -export class NativeWorkingCopyHistoryService extends WorkingCopyHistoryService { - - private static readonly STORE_ALL_INTERVAL = 5 * 60 * 1000; // 5min - - private readonly isRemotelyStored = typeof this.environmentService.remoteAuthority === 'string'; - - private readonly storeAllCts = this._register(new CancellationTokenSource()); - private readonly storeAllScheduler = this._register(new RunOnceScheduler(() => this.storeAll(this.storeAllCts.token), NativeWorkingCopyHistoryService.STORE_ALL_INTERVAL)); - - constructor( - @IFileService fileService: IFileService, - @IRemoteAgentService remoteAgentService: IRemoteAgentService, - @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, - @IUriIdentityService uriIdentityService: IUriIdentityService, - @ILabelService labelService: ILabelService, - @ILifecycleService private readonly lifecycleService: ILifecycleService, - @ILogService logService: ILogService, - @IConfigurationService configurationService: IConfigurationService - ) { - super(fileService, remoteAgentService, environmentService, uriIdentityService, labelService, logService, configurationService); - - this.registerListeners(); - } - - private registerListeners(): void { - if (!this.isRemotelyStored) { - - // Local: persist all on shutdown - this.lifecycleService.onWillShutdown(e => this.onWillShutdown(e)); - - // Local: schedule persist on change - this._register(Event.any(this.onDidAddEntry, this.onDidChangeEntry, this.onDidReplaceEntry, this.onDidRemoveEntry)(() => this.onDidChangeModels())); - } - } - - protected getModelOptions(): IWorkingCopyHistoryModelOptions { - return { flushOnChange: this.isRemotelyStored /* because the connection might drop anytime */ }; - } - - private onWillShutdown(e: WillShutdownEvent): void { - - // Dispose the scheduler... - this.storeAllScheduler.dispose(); - this.storeAllCts.dispose(true); - - // ...because we now explicitly store all models - e.join(this.storeAll(e.token), { id: 'join.workingCopyHistory', label: localize('join.workingCopyHistory', "Saving local history") }); - } - - private onDidChangeModels(): void { - if (!this.storeAllScheduler.isScheduled()) { - this.storeAllScheduler.schedule(); - } - } - - private async storeAll(token: CancellationToken): Promise { - const limiter = new Limiter(MAX_PARALLEL_HISTORY_IO_OPS); - const promises = []; - - const models = Array.from(this.models.values()); - for (const model of models) { - promises.push(limiter.queue(async () => { - if (token.isCancellationRequested) { - return; - } - - try { - await model.store(token); - } catch (error) { - this.logService.trace(error); - } - })); - } - - await Promise.all(promises); - } -} +import { IWorkingCopyHistoryService } from 'vs/workbench/services/workingCopy/common/workingCopyHistory'; // Register Service registerSingleton(IWorkingCopyHistoryService, NativeWorkingCopyHistoryService, InstantiationType.Delayed); diff --git a/src/vs/workbench/services/workingCopy/test/browser/storedFileWorkingCopy.test.ts b/src/vs/workbench/services/workingCopy/test/browser/storedFileWorkingCopy.test.ts index eaba8825a8f..df3106ac319 100644 --- a/src/vs/workbench/services/workingCopy/test/browser/storedFileWorkingCopy.test.ts +++ b/src/vs/workbench/services/workingCopy/test/browser/storedFileWorkingCopy.test.ts @@ -13,7 +13,7 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { TestServiceAccessor, workbenchInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { basename } from 'vs/base/common/resources'; -import { FileChangesEvent, FileChangeType, FileOperationError, FileOperationResult, NotModifiedSinceFileOperationError } from 'vs/platform/files/common/files'; +import { FileChangesEvent, FileChangeType, FileOperationError, FileOperationResult, IFileStatWithMetadata, IWriteFileOptions, NotModifiedSinceFileOperationError } from 'vs/platform/files/common/files'; import { SaveReason, SaveSourceRegistry } from 'vs/workbench/common/editor'; import { Promises, timeout } from 'vs/base/common/async'; import { consumeReadable, consumeStream, isReadableStream } from 'vs/base/common/stream'; @@ -82,6 +82,35 @@ export class TestStoredFileWorkingCopyModel extends Disposable implements IStore } } +export class TestStoredFileWorkingCopyModelWithCustomSave extends TestStoredFileWorkingCopyModel { + + saveCounter = 0; + throwOnSave = false; + + async save(options: IWriteFileOptions, token: CancellationToken): Promise { + if (this.throwOnSave) { + throw new Error('Fail'); + } + + this.saveCounter++; + + return { + resource: this.resource, + ctime: 0, + etag: '', + isDirectory: false, + isFile: true, + mtime: 0, + name: 'resource2', + size: 0, + isSymbolicLink: false, + readonly: false, + locked: false, + children: undefined + }; + } +} + export class TestStoredFileWorkingCopyModelFactory implements IStoredFileWorkingCopyModelFactory { async createModel(resource: URI, contents: VSBufferReadableStream, token: CancellationToken): Promise { @@ -89,6 +118,84 @@ export class TestStoredFileWorkingCopyModelFactory implements IStoredFileWorking } } +export class TestStoredFileWorkingCopyModelWithCustomSaveFactory implements IStoredFileWorkingCopyModelFactory { + + async createModel(resource: URI, contents: VSBufferReadableStream, token: CancellationToken): Promise { + return new TestStoredFileWorkingCopyModelWithCustomSave(resource, (await streamToBuffer(contents)).toString()); + } +} + +suite('StoredFileWorkingCopy (with custom save)', function () { + + const factory = new TestStoredFileWorkingCopyModelWithCustomSaveFactory(); + + let disposables: DisposableStore; + const resource = URI.file('test/resource'); + let instantiationService: IInstantiationService; + let accessor: TestServiceAccessor; + let workingCopy: StoredFileWorkingCopy; + + function createWorkingCopy(uri: URI = resource) { + const workingCopy: StoredFileWorkingCopy = new StoredFileWorkingCopy('testStoredFileWorkingCopyType', uri, basename(uri), factory, options => workingCopy.resolve(options), accessor.fileService, accessor.logService, accessor.workingCopyFileService, accessor.filesConfigurationService, accessor.workingCopyBackupService, accessor.workingCopyService, accessor.notificationService, accessor.workingCopyEditorService, accessor.editorService, accessor.elevatedFileService); + + return workingCopy; + } + + setup(() => { + disposables = new DisposableStore(); + instantiationService = workbenchInstantiationService(undefined, disposables); + accessor = instantiationService.createInstance(TestServiceAccessor); + + workingCopy = createWorkingCopy(); + }); + + teardown(() => { + workingCopy.dispose(); + disposables.dispose(); + }); + + test('save (custom implemented)', async () => { + let savedCounter = 0; + let lastSaveEvent: IStoredFileWorkingCopySaveEvent | undefined = undefined; + workingCopy.onDidSave(e => { + savedCounter++; + lastSaveEvent = e; + }); + + let saveErrorCounter = 0; + workingCopy.onDidSaveError(() => { + saveErrorCounter++; + }); + + // unresolved + await workingCopy.save(); + assert.strictEqual(savedCounter, 0); + assert.strictEqual(saveErrorCounter, 0); + + // simple + await workingCopy.resolve(); + workingCopy.model?.updateContents('hello save'); + await workingCopy.save(); + + assert.strictEqual(savedCounter, 1); + assert.strictEqual(saveErrorCounter, 0); + assert.strictEqual(workingCopy.isDirty(), false); + assert.strictEqual(lastSaveEvent!.reason, SaveReason.EXPLICIT); + assert.ok(lastSaveEvent!.stat); + assert.ok(isStoredFileWorkingCopySaveEvent(lastSaveEvent!)); + assert.strictEqual(workingCopy.model?.pushedStackElement, true); + assert.strictEqual((workingCopy.model as TestStoredFileWorkingCopyModelWithCustomSave).saveCounter, 1); + + // error + workingCopy.model?.updateContents('hello save error'); + (workingCopy.model as TestStoredFileWorkingCopyModelWithCustomSave).throwOnSave = true; + await workingCopy.save(); + + assert.strictEqual(saveErrorCounter, 1); + assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.ERROR), true); + }); +}); + suite('StoredFileWorkingCopy', function () { const factory = new TestStoredFileWorkingCopyModelFactory(); @@ -146,7 +253,8 @@ suite('StoredFileWorkingCopy', function () { }); }); - test('dirty', async () => { + test('dirty / modified', async () => { + assert.strictEqual(workingCopy.isModified(), false); assert.strictEqual(workingCopy.isDirty(), false); assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.DIRTY), false); @@ -172,12 +280,14 @@ suite('StoredFileWorkingCopy', function () { workingCopy.model?.updateContents('hello dirty'); assert.strictEqual(contentChangeCounter, 1); + assert.strictEqual(workingCopy.isModified(), true); assert.strictEqual(workingCopy.isDirty(), true); assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.DIRTY), true); assert.strictEqual(changeDirtyCounter, 1); await workingCopy.save(); + assert.strictEqual(workingCopy.isModified(), false); assert.strictEqual(workingCopy.isDirty(), false); assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.DIRTY), false); assert.strictEqual(changeDirtyCounter, 2); @@ -187,25 +297,29 @@ suite('StoredFileWorkingCopy', function () { await workingCopy.resolve({ contents: bufferToStream(VSBuffer.fromString('hello dirty stream')) }); assert.strictEqual(contentChangeCounter, 2); // content of model did not change + assert.strictEqual(workingCopy.isModified(), true); assert.strictEqual(workingCopy.isDirty(), true); assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.DIRTY), true); assert.strictEqual(changeDirtyCounter, 3); await workingCopy.revert({ soft: true }); + assert.strictEqual(workingCopy.isModified(), false); assert.strictEqual(workingCopy.isDirty(), false); assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.DIRTY), false); assert.strictEqual(changeDirtyCounter, 4); - // Dirty from: API - workingCopy.markDirty(); + // Modified from: API + workingCopy.markModified(); + assert.strictEqual(workingCopy.isModified(), true); assert.strictEqual(workingCopy.isDirty(), true); assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.DIRTY), true); assert.strictEqual(changeDirtyCounter, 5); await workingCopy.revert(); + assert.strictEqual(workingCopy.isModified(), false); assert.strictEqual(workingCopy.isDirty(), false); assert.strictEqual(workingCopy.hasState(StoredFileWorkingCopyState.DIRTY), false); assert.strictEqual(changeDirtyCounter, 6); @@ -383,7 +497,7 @@ suite('StoredFileWorkingCopy', function () { accessor.fileService.readShouldThrowError = undefined; } - assert.strictEqual(workingCopy.isReadonly(), true); + assert.strictEqual(!!workingCopy.isReadonly(), true); assert.strictEqual(readonlyChangeCounter, 1); try { @@ -907,7 +1021,7 @@ suite('StoredFileWorkingCopy', function () { await workingCopy.resolve(); - assert.strictEqual(workingCopy.isReadonly(), true); + assert.strictEqual(!!workingCopy.isReadonly(), true); accessor.fileService.readonly = false; diff --git a/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopy.test.ts b/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopy.test.ts index 6d4bbc6e1d2..c98fad63dac 100644 --- a/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopy.test.ts +++ b/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopy.test.ts @@ -102,6 +102,7 @@ suite('UntitledFileWorkingCopy', () => { uri, basename(uri), hasAssociatedFilePath, + false, initialValue.length > 0 ? { value: bufferToStream(VSBuffer.fromString(initialValue)) } : undefined, factory, async workingCopy => { await workingCopy.revert(); return true; }, diff --git a/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopyManager.test.ts b/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopyManager.test.ts index 69f8c133efc..c32b141d5f6 100644 --- a/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopyManager.test.ts +++ b/src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopyManager.test.ts @@ -89,20 +89,24 @@ suite('UntitledFileWorkingCopyManager', () => { for (const workingCopy of [workingCopy1, workingCopy2]) { assert.strictEqual(workingCopy.capabilities, WorkingCopyCapabilities.Untitled); assert.strictEqual(workingCopy.isDirty(), false); + assert.strictEqual(workingCopy.isModified(), false); assert.ok(workingCopy.model); } workingCopy1.model?.updateContents('Hello World'); assert.strictEqual(workingCopy1.isDirty(), true); + assert.strictEqual(workingCopy1.isModified(), true); assert.strictEqual(dirtyCounter, 1); - workingCopy1.model?.updateContents(''); // change to empty clears dirty flag + workingCopy1.model?.updateContents(''); // change to empty clears dirty/modified flags assert.strictEqual(workingCopy1.isDirty(), false); + assert.strictEqual(workingCopy1.isModified(), false); assert.strictEqual(dirtyCounter, 2); workingCopy2.model?.fireContentChangeEvent({ isInitial: false }); assert.strictEqual(workingCopy2.isDirty(), true); + assert.strictEqual(workingCopy2.isModified(), true); assert.strictEqual(dirtyCounter, 3); workingCopy1.dispose(); @@ -118,6 +122,33 @@ suite('UntitledFileWorkingCopyManager', () => { assert.strictEqual(disposeCounter, 2); }); + test('dirty - scratchpads are never dirty', async () => { + let dirtyCounter = 0; + manager.untitled.onDidChangeDirty(e => { + dirtyCounter++; + }); + + const workingCopy1 = await manager.resolve({ + untitledResource: URI.from({ scheme: Schemas.untitled, path: `/myscratchpad` }), + isScratchpad: true + }); + + assert.strictEqual(workingCopy1.resource.scheme, Schemas.untitled); + assert.strictEqual(manager.untitled.workingCopies.length, 1); + + workingCopy1.model?.updateContents('contents'); + assert.strictEqual(workingCopy1.isDirty(), false); + assert.strictEqual(workingCopy1.isModified(), true); + + workingCopy1.model?.fireContentChangeEvent({ isInitial: true }); + assert.strictEqual(workingCopy1.isDirty(), false); + assert.strictEqual(workingCopy1.isModified(), false); + + assert.strictEqual(dirtyCounter, 0); + + workingCopy1.dispose(); + }); + test('resolve - with initial value', async () => { let dirtyCounter = 0; manager.untitled.onDidChangeDirty(e => { @@ -126,14 +157,16 @@ suite('UntitledFileWorkingCopyManager', () => { const workingCopy1 = await manager.untitled.resolve({ contents: { value: bufferToStream(VSBuffer.fromString('Hello World')) } }); + assert.strictEqual(workingCopy1.isModified(), true); assert.strictEqual(workingCopy1.isDirty(), true); assert.strictEqual(dirtyCounter, 1); assert.strictEqual(workingCopy1.model?.contents, 'Hello World'); workingCopy1.dispose(); - const workingCopy2 = await manager.untitled.resolve({ contents: { value: bufferToStream(VSBuffer.fromString('Hello World')), markDirty: true } }); + const workingCopy2 = await manager.untitled.resolve({ contents: { value: bufferToStream(VSBuffer.fromString('Hello World')), markModified: true } }); + assert.strictEqual(workingCopy2.isModified(), true); assert.strictEqual(workingCopy2.isDirty(), true); assert.strictEqual(dirtyCounter, 2); assert.strictEqual(workingCopy2.model?.contents, 'Hello World'); @@ -147,8 +180,9 @@ suite('UntitledFileWorkingCopyManager', () => { dirtyCounter++; }); - const workingCopy = await manager.untitled.resolve({ contents: { value: bufferToStream(VSBuffer.fromString('Hello World')), markDirty: false } }); + const workingCopy = await manager.untitled.resolve({ contents: { value: bufferToStream(VSBuffer.fromString('Hello World')), markModified: false } }); + assert.strictEqual(workingCopy.isModified(), false); assert.strictEqual(workingCopy.isDirty(), false); assert.strictEqual(dirtyCounter, 0); assert.strictEqual(workingCopy.model?.contents, 'Hello World'); diff --git a/src/vs/workbench/services/workingCopy/test/browser/untitledScratchpadWorkingCopy.test.ts b/src/vs/workbench/services/workingCopy/test/browser/untitledScratchpadWorkingCopy.test.ts new file mode 100644 index 00000000000..b3f94c4ab9c --- /dev/null +++ b/src/vs/workbench/services/workingCopy/test/browser/untitledScratchpadWorkingCopy.test.ts @@ -0,0 +1,273 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { VSBufferReadableStream, VSBuffer, streamToBuffer, bufferToStream, readableToBuffer, VSBufferReadable } from 'vs/base/common/buffer'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { DisposableStore } from 'vs/base/common/lifecycle'; +import { Schemas } from 'vs/base/common/network'; +import { basename } from 'vs/base/common/resources'; +import { consumeReadable, consumeStream, isReadable, isReadableStream } from 'vs/base/common/stream'; +import { URI } from 'vs/base/common/uri'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IUntitledFileWorkingCopyModelFactory, UntitledFileWorkingCopy } from 'vs/workbench/services/workingCopy/common/untitledFileWorkingCopy'; +import { TestUntitledFileWorkingCopyModel } from 'vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopy.test'; +import { TestServiceAccessor, workbenchInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices'; + +export class TestUntitledFileWorkingCopyModelFactory implements IUntitledFileWorkingCopyModelFactory { + + async createModel(resource: URI, contents: VSBufferReadableStream, token: CancellationToken): Promise { + return new TestUntitledFileWorkingCopyModel(resource, (await streamToBuffer(contents)).toString()); + } +} + +suite('UntitledScratchpadWorkingCopy', () => { + + const factory = new TestUntitledFileWorkingCopyModelFactory(); + + let disposables: DisposableStore; + const resource = URI.from({ scheme: Schemas.untitled, path: 'Untitled-1' }); + let instantiationService: IInstantiationService; + let accessor: TestServiceAccessor; + let workingCopy: UntitledFileWorkingCopy; + + function createWorkingCopy(uri: URI = resource, hasAssociatedFilePath = false, initialValue = '') { + return new UntitledFileWorkingCopy( + 'testUntitledWorkingCopyType', + uri, + basename(uri), + hasAssociatedFilePath, + true, + initialValue.length > 0 ? { value: bufferToStream(VSBuffer.fromString(initialValue)) } : undefined, + factory, + async workingCopy => { await workingCopy.revert(); return true; }, + accessor.workingCopyService, + accessor.workingCopyBackupService, + accessor.logService + ); + } + + setup(() => { + disposables = new DisposableStore(); + instantiationService = workbenchInstantiationService(undefined, disposables); + accessor = instantiationService.createInstance(TestServiceAccessor); + + workingCopy = createWorkingCopy(); + }); + + teardown(() => { + workingCopy.dispose(); + disposables.dispose(); + }); + + test('registers with working copy service', async () => { + assert.strictEqual(accessor.workingCopyService.workingCopies.length, 1); + + workingCopy.dispose(); + + assert.strictEqual(accessor.workingCopyService.workingCopies.length, 0); + }); + + test('modified - not dirty', async () => { + assert.strictEqual(workingCopy.isDirty(), false); + + let changeDirtyCounter = 0; + workingCopy.onDidChangeDirty(() => { + changeDirtyCounter++; + }); + + let contentChangeCounter = 0; + workingCopy.onDidChangeContent(() => { + contentChangeCounter++; + }); + + await workingCopy.resolve(); + assert.strictEqual(workingCopy.isResolved(), true); + + // Modified from: Model content change + workingCopy.model?.updateContents('hello modified'); + assert.strictEqual(contentChangeCounter, 1); + + assert.strictEqual(workingCopy.isDirty(), false); + assert.strictEqual(workingCopy.isModified(), true); + assert.strictEqual(changeDirtyCounter, 0); + + await workingCopy.save(); + + assert.strictEqual(workingCopy.isDirty(), false); + assert.strictEqual(changeDirtyCounter, 0); + }); + + test('modified - cleared when content event signals isEmpty', async () => { + assert.strictEqual(workingCopy.isModified(), false); + + await workingCopy.resolve(); + + workingCopy.model?.updateContents('hello modified'); + + assert.strictEqual(workingCopy.isModified(), true); + + workingCopy.model?.fireContentChangeEvent({ isInitial: true }); + + assert.strictEqual(workingCopy.isModified(), false); + }); + + test('modified - not cleared when content event signals isEmpty when associated resource', async () => { + workingCopy.dispose(); + workingCopy = createWorkingCopy(resource, true); + + await workingCopy.resolve(); + + workingCopy.model?.updateContents('hello modified'); + assert.strictEqual(workingCopy.isModified(), true); + + workingCopy.model?.fireContentChangeEvent({ isInitial: true }); + + assert.strictEqual(workingCopy.isModified(), true); + }); + + test('revert', async () => { + let revertCounter = 0; + workingCopy.onDidRevert(() => { + revertCounter++; + }); + + let disposeCounter = 0; + workingCopy.onWillDispose(() => { + disposeCounter++; + }); + + await workingCopy.resolve(); + + workingCopy.model?.updateContents('hello modified'); + assert.strictEqual(workingCopy.isModified(), true); + + await workingCopy.revert(); + + assert.strictEqual(revertCounter, 1); + assert.strictEqual(disposeCounter, 1); + assert.strictEqual(workingCopy.isModified(), false); + }); + + test('dispose', async () => { + let disposeCounter = 0; + workingCopy.onWillDispose(() => { + disposeCounter++; + }); + + await workingCopy.resolve(); + workingCopy.dispose(); + + assert.strictEqual(disposeCounter, 1); + }); + + test('backup', async () => { + assert.strictEqual((await workingCopy.backup(CancellationToken.None)).content, undefined); + + await workingCopy.resolve(); + + workingCopy.model?.updateContents('Hello Backup'); + const backup = await workingCopy.backup(CancellationToken.None); + + let backupContents: string | undefined = undefined; + if (isReadableStream(backup.content)) { + backupContents = (await consumeStream(backup.content, chunks => VSBuffer.concat(chunks))).toString(); + } else if (backup.content) { + backupContents = consumeReadable(backup.content, chunks => VSBuffer.concat(chunks)).toString(); + } + + assert.strictEqual(backupContents, 'Hello Backup'); + }); + + test('resolve - without contents', async () => { + assert.strictEqual(workingCopy.isResolved(), false); + assert.strictEqual(workingCopy.hasAssociatedFilePath, false); + assert.strictEqual(workingCopy.model, undefined); + + await workingCopy.resolve(); + + assert.strictEqual(workingCopy.isResolved(), true); + assert.ok(workingCopy.model); + }); + + test('resolve - with initial contents', async () => { + workingCopy.dispose(); + + workingCopy = createWorkingCopy(resource, false, 'Hello Initial'); + + let contentChangeCounter = 0; + workingCopy.onDidChangeContent(() => { + contentChangeCounter++; + }); + + assert.strictEqual(workingCopy.isModified(), true); + + await workingCopy.resolve(); + + assert.strictEqual(workingCopy.isModified(), true); + assert.strictEqual(workingCopy.model?.contents, 'Hello Initial'); + assert.strictEqual(contentChangeCounter, 1); + + workingCopy.model.updateContents('Changed contents'); + + await workingCopy.resolve(); // second resolve should be ignored + assert.strictEqual(workingCopy.model?.contents, 'Changed contents'); + }); + + test('backup - with initial contents uses those even if unresolved', async () => { + workingCopy.dispose(); + + workingCopy = createWorkingCopy(resource, false, 'Hello Initial'); + + assert.strictEqual(workingCopy.isModified(), true); + + const backup = (await workingCopy.backup(CancellationToken.None)).content; + if (isReadableStream(backup)) { + const value = await streamToBuffer(backup as VSBufferReadableStream); + assert.strictEqual(value.toString(), 'Hello Initial'); + } else if (isReadable(backup)) { + const value = readableToBuffer(backup as VSBufferReadable); + assert.strictEqual(value.toString(), 'Hello Initial'); + } else { + assert.fail('Missing untitled backup'); + } + }); + + + test('resolve - with associated resource', async () => { + workingCopy.dispose(); + workingCopy = createWorkingCopy(resource, true); + + await workingCopy.resolve(); + + assert.strictEqual(workingCopy.isModified(), true); + assert.strictEqual(workingCopy.hasAssociatedFilePath, true); + }); + + test('resolve - with backup', async () => { + await workingCopy.resolve(); + workingCopy.model?.updateContents('Hello Backup'); + + const backup = await workingCopy.backup(CancellationToken.None); + await accessor.workingCopyBackupService.backup(workingCopy, backup.content, undefined, backup.meta); + + assert.strictEqual(accessor.workingCopyBackupService.hasBackupSync(workingCopy), true); + + workingCopy.dispose(); + + workingCopy = createWorkingCopy(); + + let contentChangeCounter = 0; + workingCopy.onDidChangeContent(() => { + contentChangeCounter++; + }); + + await workingCopy.resolve(); + + assert.strictEqual(workingCopy.isModified(), true); + assert.strictEqual(workingCopy.model?.contents, 'Hello Backup'); + assert.strictEqual(contentChangeCounter, 1); + }); +}); diff --git a/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts b/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts index 44da1f93dc2..eab01d63a3b 100644 --- a/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts +++ b/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts @@ -146,16 +146,16 @@ suite('WorkingCopyBackupTracker (browser)', function () { class TestBackupWorkingCopy extends TestWorkingCopy { - backupDelay = 0; - constructor(resource: URI) { super(resource); accessor.workingCopyService.registerWorkingCopy(this); } + readonly backupDelay = 10; + override async backup(token: CancellationToken): Promise { - await timeout(this.backupDelay); + await timeout(0); return {}; } diff --git a/src/vs/workbench/services/workingCopy/test/common/workingCopyService.test.ts b/src/vs/workbench/services/workingCopy/test/common/workingCopyService.test.ts index 679b0ceff4a..81f856c6d9d 100644 --- a/src/vs/workbench/services/workingCopy/test/common/workingCopyService.test.ts +++ b/src/vs/workbench/services/workingCopy/test/common/workingCopyService.test.ts @@ -48,6 +48,7 @@ suite('WorkingCopyService', () => { assert.strictEqual(onDidRegister.length, 1); assert.strictEqual(onDidRegister[0], copy1); assert.strictEqual(service.dirtyCount, 0); + assert.strictEqual(service.modifiedCount, 0); assert.strictEqual(service.isDirty(resource1), false); assert.strictEqual(service.has(resource1), true); assert.strictEqual(service.has(copy1), true); @@ -65,6 +66,9 @@ suite('WorkingCopyService', () => { assert.strictEqual(service.dirtyCount, 1); assert.strictEqual(service.dirtyWorkingCopies.length, 1); assert.strictEqual(service.dirtyWorkingCopies[0], copy1); + assert.strictEqual(service.modifiedCount, 1); + assert.strictEqual(service.modifiedWorkingCopies.length, 1); + assert.strictEqual(service.modifiedWorkingCopies[0], copy1); assert.strictEqual(service.workingCopies.length, 1); assert.strictEqual(service.workingCopies[0], copy1); assert.strictEqual(service.isDirty(resource1), true); diff --git a/src/vs/workbench/services/workingCopy/test/electron-browser/fixtures/binary.txt b/src/vs/workbench/services/workingCopy/test/electron-browser/fixtures/binary.txt deleted file mode 100644 index fc30693d792..00000000000 Binary files a/src/vs/workbench/services/workingCopy/test/electron-browser/fixtures/binary.txt and /dev/null differ diff --git a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test.ts b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupService.test.ts similarity index 66% rename from src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test.ts rename to src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupService.test.ts index 5244db22ad4..55c7d283f9a 100644 --- a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test.ts +++ b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupService.test.ts @@ -5,39 +5,73 @@ import * as assert from 'assert'; import { isWindows } from 'vs/base/common/platform'; -import { tmpdir } from 'os'; -import { createHash } from 'crypto'; import { insert } from 'vs/base/common/arrays'; import { hash } from 'vs/base/common/hash'; -import { isEqual } from 'vs/base/common/resources'; -import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'; -import { dirname, join } from 'vs/base/common/path'; -import { Promises, readdirSync } from 'vs/base/node/pfs'; +import { isEqual, joinPath, dirname } from 'vs/base/common/resources'; +import { join } from 'vs/base/common/path'; import { URI } from 'vs/base/common/uri'; import { WorkingCopyBackupsModel, hashIdentifier } from 'vs/workbench/services/workingCopy/common/workingCopyBackupService'; import { createTextModel } from 'vs/editor/test/common/testTextModel'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { FileAccess, Schemas } from 'vs/base/common/network'; +import { Schemas } from 'vs/base/common/network'; import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; +import { LogLevel, NullLogService } from 'vs/platform/log/common/log'; import { NativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService'; import { toBufferOrReadable } from 'vs/workbench/services/textfile/common/textfiles'; import { IFileService } from 'vs/platform/files/common/files'; import { NativeWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupService'; import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; import { bufferToReadable, bufferToStream, streamToBuffer, VSBuffer, VSBufferReadable, VSBufferReadableStream } from 'vs/base/common/buffer'; -import { TestNativeWindowConfiguration } from 'vs/workbench/test/electron-browser/workbenchTestServices'; import { TestLifecycleService, toTypedWorkingCopyId, toUntypedWorkingCopyId } from 'vs/workbench/test/browser/workbenchTestServices'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { IWorkingCopyBackupMeta, IWorkingCopyIdentifier } from 'vs/workbench/services/workingCopy/common/workingCopy'; import { consumeStream } from 'vs/base/common/stream'; import { TestProductService } from 'vs/workbench/test/common/workbenchTestServices'; +import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; +import { generateUuid } from 'vs/base/common/uuid'; +import { INativeWindowConfiguration } from 'vs/platform/window/common/window'; +import product from 'vs/platform/product/common/product'; -class TestWorkbenchEnvironmentService extends NativeWorkbenchEnvironmentService { +const homeDir = URI.file('home').with({ scheme: Schemas.inMemory }); +const tmpDir = URI.file('tmp').with({ scheme: Schemas.inMemory }); +const NULL_PROFILE = { + name: '', + id: '', + shortName: '', + isDefault: false, + location: homeDir, + settingsResource: joinPath(homeDir, 'settings.json'), + globalStorageHome: joinPath(homeDir, 'globalStorage'), + keybindingsResource: joinPath(homeDir, 'keybindings.json'), + tasksResource: joinPath(homeDir, 'tasks.json'), + snippetsHome: joinPath(homeDir, 'snippets'), + extensionsResource: joinPath(homeDir, 'extensions.json'), + cacheHome: joinPath(homeDir, 'cache') +}; - constructor(testDir: string, backupPath: string) { - super({ ...TestNativeWindowConfiguration, backupPath, 'user-data-dir': testDir }, TestProductService); +const TestNativeWindowConfiguration: INativeWindowConfiguration = { + windowId: 0, + machineId: 'testMachineId', + logLevel: LogLevel.Error, + loggers: { global: [], window: [] }, + mainPid: 0, + appRoot: '', + userEnv: {}, + execPath: process.execPath, + perfMarks: [], + colorScheme: { dark: true, highContrast: false }, + os: { release: 'unknown', hostname: 'unknown' }, + product, + homeDir: homeDir.fsPath, + tmpDir: tmpDir.fsPath, + userDataDir: joinPath(homeDir, product.nameShort).fsPath, + profiles: { profile: NULL_PROFILE, all: [NULL_PROFILE], home: homeDir }, + _: [] +}; + +export class TestNativeWorkbenchEnvironmentService extends NativeWorkbenchEnvironmentService { + + constructor(testDir: URI, backupPath: URI) { + super({ ...TestNativeWindowConfiguration, backupPath: backupPath.fsPath, 'user-data-dir': testDir.fsPath }, TestProductService); } } @@ -48,18 +82,21 @@ export class NodeTestWorkingCopyBackupService extends NativeWorkingCopyBackupSer discardedBackups: IWorkingCopyIdentifier[]; discardedAllBackups: boolean; private pendingBackupsArr: Promise[]; - private diskFileSystemProvider: DiskFileSystemProvider; - constructor(testDir: string, workspaceBackupPath: string) { - const environmentService = new TestWorkbenchEnvironmentService(testDir, workspaceBackupPath); + readonly _fileService: IFileService; + + constructor(testDir: URI, workspaceBackupPath: URI) { + const environmentService = new TestNativeWorkbenchEnvironmentService(testDir, workspaceBackupPath); const logService = new NullLogService(); const fileService = new FileService(logService); const lifecycleService = new TestLifecycleService(); super(environmentService, fileService, logService, lifecycleService); - this.diskFileSystemProvider = new DiskFileSystemProvider(logService); - fileService.registerProvider(Schemas.file, this.diskFileSystemProvider); - fileService.registerProvider(Schemas.vscodeUserData, new FileUserDataProvider(Schemas.file, this.diskFileSystemProvider, Schemas.vscodeUserData, logService)); + const fsp = new InMemoryFileSystemProvider(); + fileService.registerProvider(Schemas.inMemory, fsp); + fileService.registerProvider(Schemas.vscodeUserData, new FileUserDataProvider(Schemas.file, fsp, Schemas.vscodeUserData, logService)); + + this._fileService = fileService; this.backupResourceJoiners = []; this.discardBackupJoiners = []; @@ -121,20 +158,17 @@ export class NodeTestWorkingCopyBackupService extends NativeWorkingCopyBackupSer return fileContents.value.toString(); } - - dispose() { - this.diskFileSystemProvider.dispose(); - } } -flakySuite('WorkingCopyBackupService', () => { +suite('WorkingCopyBackupService', () => { - let testDir: string; - let backupHome: string; - let workspacesJsonPath: string; - let workspaceBackupPath: string; + let testDir: URI; + let backupHome: URI; + let workspacesJsonPath: URI; + let workspaceBackupPath: URI; let service: NodeTestWorkingCopyBackupService; + let fileService: IFileService; const workspaceResource = URI.file(isWindows ? 'c:\\workspace' : '/workspace'); const fooFile = URI.file(isWindows ? 'c:\\Foo' : '/Foo'); @@ -145,21 +179,17 @@ flakySuite('WorkingCopyBackupService', () => { const untitledFile = URI.from({ scheme: Schemas.untitled, path: 'Untitled-1' }); setup(async () => { - testDir = getRandomTestPath(tmpdir(), 'vsctests', 'workingcopybackupservice'); - backupHome = join(testDir, 'Backups'); - workspacesJsonPath = join(backupHome, 'workspaces.json'); - workspaceBackupPath = join(backupHome, hash(workspaceResource.fsPath).toString(16)); + testDir = URI.file(join(generateUuid(), 'vsctests', 'workingcopybackupservice')).with({ scheme: Schemas.inMemory }); + backupHome = joinPath(testDir, 'Backups'); + workspacesJsonPath = joinPath(backupHome, 'workspaces.json'); + workspaceBackupPath = joinPath(backupHome, hash(workspaceResource.fsPath).toString(16)); service = new NodeTestWorkingCopyBackupService(testDir, workspaceBackupPath); + fileService = service._fileService; - await Promises.mkdir(backupHome, { recursive: true }); + await fileService.createFolder(backupHome); - return Promises.writeFile(workspacesJsonPath, ''); - }); - - teardown(() => { - service.dispose(); - return Promises.rm(testDir); + return fileService.writeFile(workspacesJsonPath, VSBuffer.fromString('')); }); suite('hashIdentifier', () => { @@ -276,13 +306,13 @@ flakySuite('WorkingCopyBackupService', () => { // No Type ID let backupId = toUntypedWorkingCopyId(backupResource); let filePathHash = hashIdentifier(backupId); - let expectedPath = URI.file(join(backupHome, workspaceHash, Schemas.file, filePathHash)).with({ scheme: Schemas.vscodeUserData }).toString(); + let expectedPath = joinPath(backupHome, workspaceHash, Schemas.file, filePathHash).with({ scheme: Schemas.vscodeUserData }).toString(); assert.strictEqual(service.toBackupResource(backupId).toString(), expectedPath); // With Type ID backupId = toTypedWorkingCopyId(backupResource); filePathHash = hashIdentifier(backupId); - expectedPath = URI.file(join(backupHome, workspaceHash, Schemas.file, filePathHash)).with({ scheme: Schemas.vscodeUserData }).toString(); + expectedPath = joinPath(backupHome, workspaceHash, Schemas.file, filePathHash).with({ scheme: Schemas.vscodeUserData }).toString(); assert.strictEqual(service.toBackupResource(backupId).toString(), expectedPath); }); @@ -295,13 +325,13 @@ flakySuite('WorkingCopyBackupService', () => { // No Type ID let backupId = toUntypedWorkingCopyId(backupResource); let filePathHash = hashIdentifier(backupId); - let expectedPath = URI.file(join(backupHome, workspaceHash, Schemas.untitled, filePathHash)).with({ scheme: Schemas.vscodeUserData }).toString(); + let expectedPath = joinPath(backupHome, workspaceHash, Schemas.untitled, filePathHash).with({ scheme: Schemas.vscodeUserData }).toString(); assert.strictEqual(service.toBackupResource(backupId).toString(), expectedPath); // With Type ID backupId = toTypedWorkingCopyId(backupResource); filePathHash = hashIdentifier(backupId); - expectedPath = URI.file(join(backupHome, workspaceHash, Schemas.untitled, filePathHash)).with({ scheme: Schemas.vscodeUserData }).toString(); + expectedPath = joinPath(backupHome, workspaceHash, Schemas.untitled, filePathHash).with({ scheme: Schemas.vscodeUserData }).toString(); assert.strictEqual(service.toBackupResource(backupId).toString(), expectedPath); }); @@ -314,13 +344,13 @@ flakySuite('WorkingCopyBackupService', () => { // No Type ID let backupId = toUntypedWorkingCopyId(backupResource); let filePathHash = hashIdentifier(backupId); - let expectedPath = URI.file(join(backupHome, workspaceHash, 'custom', filePathHash)).with({ scheme: Schemas.vscodeUserData }).toString(); + let expectedPath = joinPath(backupHome, workspaceHash, 'custom', filePathHash).with({ scheme: Schemas.vscodeUserData }).toString(); assert.strictEqual(service.toBackupResource(backupId).toString(), expectedPath); // With Type ID backupId = toTypedWorkingCopyId(backupResource); filePathHash = hashIdentifier(backupId); - expectedPath = URI.file(join(backupHome, workspaceHash, 'custom', filePathHash)).with({ scheme: Schemas.vscodeUserData }).toString(); + expectedPath = joinPath(backupHome, workspaceHash, 'custom', filePathHash).with({ scheme: Schemas.vscodeUserData }).toString(); assert.strictEqual(service.toBackupResource(backupId).toString(), expectedPath); }); }); @@ -342,111 +372,111 @@ flakySuite('WorkingCopyBackupService', () => { service.joinBackups().then(() => backupJoined = true); const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const backupPromise = service.backup(identifier); assert.strictEqual(backupJoined, false); await backupPromise; assert.strictEqual(backupJoined, true); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier)); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier)); assert.ok(service.hasBackupSync(identifier)); }); test('no text', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier)); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier)); assert.ok(service.hasBackupSync(identifier)); }); test('text file', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test')); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test')); assert.ok(service.hasBackupSync(identifier)); }); test('text file (with version)', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test')), 666); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test')); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test')); assert.ok(!service.hasBackupSync(identifier, 555)); assert.ok(service.hasBackupSync(identifier, 666)); }); test('text file (with meta)', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const meta = { etag: '678', orphaned: true }; await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test')), undefined, meta); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test', meta)); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test', meta)); assert.ok(service.hasBackupSync(identifier)); }); test('text file with whitespace in name and type (with meta)', async () => { const fileWithSpace = URI.file(isWindows ? 'c:\\Foo \n Bar' : '/Foo \n Bar'); const identifier = toTypedWorkingCopyId(fileWithSpace, ' test id \n'); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const meta = { etag: '678 \n k', orphaned: true }; await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test')), undefined, meta); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test', meta)); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test', meta)); assert.ok(service.hasBackupSync(identifier)); }); test('text file with unicode character in name and type (with meta)', async () => { const fileWithUnicode = URI.file(isWindows ? 'c:\\soš’€…meą „' : '/soš’€…meą „'); const identifier = toTypedWorkingCopyId(fileWithUnicode, ' test soš’€…meą „ id \n'); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const meta = { etag: '678soš’€…meą „', orphaned: true }; await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test')), undefined, meta); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test', meta)); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test', meta)); assert.ok(service.hasBackupSync(identifier)); }); test('untitled file', async () => { const identifier = toUntypedWorkingCopyId(untitledFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'untitled')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test')); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'untitled'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test')); assert.ok(service.hasBackupSync(identifier)); }); test('text file (readable)', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const model = createTextModel('test'); await service.backup(identifier, toBufferOrReadable(model.createSnapshot())); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test')); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test')); assert.ok(service.hasBackupSync(identifier)); model.dispose(); @@ -454,13 +484,13 @@ flakySuite('WorkingCopyBackupService', () => { test('untitled file (readable)', async () => { const identifier = toUntypedWorkingCopyId(untitledFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const model = createTextModel('test'); await service.backup(identifier, toBufferOrReadable(model.createSnapshot())); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'untitled')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, 'test')); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'untitled'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, 'test')); model.dispose(); }); @@ -482,25 +512,25 @@ flakySuite('WorkingCopyBackupService', () => { async function testLargeTextFile(largeString: string, buffer: VSBufferReadable | VSBufferReadableStream) { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier, buffer, undefined, { largeTest: true }); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, largeString, { largeTest: true })); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, largeString, { largeTest: true })); assert.ok(service.hasBackupSync(identifier)); } test('untitled file (large file, readable)', async () => { const identifier = toUntypedWorkingCopyId(untitledFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const largeString = (new Array(30 * 1024)).join('Large String\n'); const model = createTextModel(largeString); await service.backup(identifier, toBufferOrReadable(model.createSnapshot())); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'untitled')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier, largeString)); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'untitled'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier, largeString)); assert.ok(service.hasBackupSync(identifier)); model.dispose(); @@ -508,20 +538,20 @@ flakySuite('WorkingCopyBackupService', () => { test('cancellation', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); const cts = new CancellationTokenSource(); const promise = service.backup(identifier, undefined, undefined, undefined, cts.token); cts.cancel(); await promise; - assert.strictEqual(existsSync(backupPath), false); + assert.strictEqual((await fileService.exists(backupPath)), false); assert.ok(!service.hasBackupSync(identifier)); }); test('multiple', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await Promise.all([ service.backup(identifier), @@ -530,9 +560,9 @@ flakySuite('WorkingCopyBackupService', () => { service.backup(identifier) ]); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readFileSync(backupPath).toString(), toExpectedPreamble(identifier)); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.readFile(backupPath)).value.toString(), toExpectedPreamble(identifier)); assert.ok(service.hasBackupSync(identifier)); }); @@ -547,12 +577,12 @@ flakySuite('WorkingCopyBackupService', () => { service.backup(backupId3) ]); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 3); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 3); for (const backupId of [backupId1, backupId2, backupId3]) { - const fooBackupPath = join(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); - assert.strictEqual(existsSync(fooBackupPath), true); - assert.strictEqual(readFileSync(fooBackupPath).toString(), toExpectedPreamble(backupId)); + const fooBackupPath = joinPath(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); + assert.strictEqual((await fileService.exists(fooBackupPath)), true); + assert.strictEqual((await fileService.readFile(fooBackupPath)).value.toString(), toExpectedPreamble(backupId)); assert.ok(service.hasBackupSync(backupId)); } }); @@ -562,10 +592,10 @@ flakySuite('WorkingCopyBackupService', () => { test('joining', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); assert.ok(service.hasBackupSync(identifier)); let backupJoined = false; @@ -576,35 +606,35 @@ flakySuite('WorkingCopyBackupService', () => { await discardBackupPromise; assert.strictEqual(backupJoined, true); - assert.strictEqual(existsSync(backupPath), false); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 0); + assert.strictEqual((await fileService.exists(backupPath)), false); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 0); assert.ok(!service.hasBackupSync(identifier)); }); test('text file', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); assert.ok(service.hasBackupSync(identifier)); await service.discardBackup(identifier); - assert.strictEqual(existsSync(backupPath), false); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 0); + assert.strictEqual((await fileService.exists(backupPath)), false); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 0); assert.ok(!service.hasBackupSync(identifier)); }); test('untitled file', async () => { const identifier = toUntypedWorkingCopyId(untitledFile); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); await service.backup(identifier, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'untitled')).length, 1); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'untitled'))).children?.length, 1); await service.discardBackup(identifier); - assert.strictEqual(existsSync(backupPath), false); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'untitled')).length, 0); + assert.strictEqual((await fileService.exists(backupPath)), false); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'untitled'))).children?.length, 0); }); test('multiple same resource, different type id', async () => { @@ -618,14 +648,14 @@ flakySuite('WorkingCopyBackupService', () => { service.backup(backupId3) ]); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 3); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 3); for (const backupId of [backupId1, backupId2, backupId3]) { - const backupPath = join(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); + const backupPath = joinPath(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); await service.discardBackup(backupId); - assert.strictEqual(existsSync(backupPath), false); + assert.strictEqual((await fileService.exists(backupPath)), false); } - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 0); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 0); }); }); @@ -636,39 +666,39 @@ flakySuite('WorkingCopyBackupService', () => { const backupId3 = toTypedWorkingCopyId(barFile); await service.backup(backupId1, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); await service.backup(backupId2, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 2); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 2); await service.backup(backupId3, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 3); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 3); await service.discardBackups(); for (const backupId of [backupId1, backupId2, backupId3]) { - const backupPath = join(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); - assert.strictEqual(existsSync(backupPath), false); + const backupPath = joinPath(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); + assert.strictEqual((await fileService.exists(backupPath)), false); } - assert.strictEqual(existsSync(join(workspaceBackupPath, 'file')), false); + assert.strictEqual((await fileService.exists(joinPath(workspaceBackupPath, 'file'))), false); }); test('untitled file', async () => { const backupId = toUntypedWorkingCopyId(untitledFile); - const backupPath = join(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); + const backupPath = joinPath(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); await service.backup(backupId, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'untitled')).length, 1); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'untitled'))).children?.length, 1); await service.discardBackups(); - assert.strictEqual(existsSync(backupPath), false); - assert.strictEqual(existsSync(join(workspaceBackupPath, 'untitled')), false); + assert.strictEqual((await fileService.exists(backupPath)), false); + assert.strictEqual((await fileService.exists(joinPath(workspaceBackupPath, 'untitled'))), false); }); test('can backup after discarding all', async () => { await service.discardBackups(); await service.backup(toUntypedWorkingCopyId(untitledFile), bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(existsSync(workspaceBackupPath), true); + assert.strictEqual((await fileService.exists(workspaceBackupPath)), true); }); }); @@ -679,43 +709,43 @@ flakySuite('WorkingCopyBackupService', () => { const backupId3 = toTypedWorkingCopyId(barFile); await service.backup(backupId1, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 1); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 1); await service.backup(backupId2, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 2); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 2); await service.backup(backupId3, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'file')).length, 3); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'file'))).children?.length, 3); await service.discardBackups({ except: [backupId2, backupId3] }); - let backupPath = join(workspaceBackupPath, backupId1.resource.scheme, hashIdentifier(backupId1)); - assert.strictEqual(existsSync(backupPath), false); + let backupPath = joinPath(workspaceBackupPath, backupId1.resource.scheme, hashIdentifier(backupId1)); + assert.strictEqual((await fileService.exists(backupPath)), false); - backupPath = join(workspaceBackupPath, backupId2.resource.scheme, hashIdentifier(backupId2)); - assert.strictEqual(existsSync(backupPath), true); + backupPath = joinPath(workspaceBackupPath, backupId2.resource.scheme, hashIdentifier(backupId2)); + assert.strictEqual((await fileService.exists(backupPath)), true); - backupPath = join(workspaceBackupPath, backupId3.resource.scheme, hashIdentifier(backupId3)); - assert.strictEqual(existsSync(backupPath), true); + backupPath = joinPath(workspaceBackupPath, backupId3.resource.scheme, hashIdentifier(backupId3)); + assert.strictEqual((await fileService.exists(backupPath)), true); await service.discardBackups({ except: [backupId1] }); for (const backupId of [backupId1, backupId2, backupId3]) { - const backupPath = join(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); - assert.strictEqual(existsSync(backupPath), false); + const backupPath = joinPath(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); + assert.strictEqual((await fileService.exists(backupPath)), false); } }); test('untitled file', async () => { const backupId = toUntypedWorkingCopyId(untitledFile); - const backupPath = join(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); + const backupPath = joinPath(workspaceBackupPath, backupId.resource.scheme, hashIdentifier(backupId)); await service.backup(backupId, bufferToReadable(VSBuffer.fromString('test'))); - assert.strictEqual(existsSync(backupPath), true); - assert.strictEqual(readdirSync(join(workspaceBackupPath, 'untitled')).length, 1); + assert.strictEqual((await fileService.exists(backupPath)), true); + assert.strictEqual((await fileService.resolve(joinPath(workspaceBackupPath, 'untitled'))).children?.length, 1); await service.discardBackups({ except: [backupId] }); - assert.strictEqual(existsSync(backupPath), true); + assert.strictEqual((await fileService.exists(backupPath)), true); }); }); @@ -1015,14 +1045,14 @@ flakySuite('WorkingCopyBackupService', () => { await service.backup(identifier, bufferToReadable(VSBuffer.fromString(contents)), 1, meta); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); - const fileContents = readFileSync(backupPath).toString(); + const fileContents = (await fileService.readFile(backupPath)).value.toString(); assert.strictEqual(fileContents.indexOf(identifier.resource.toString()), 0); const metaIndex = fileContents.indexOf('{'); const newFileContents = fileContents.substring(0, metaIndex) + '{{' + fileContents.substr(metaIndex); - writeFileSync(backupPath, newFileContents); + await fileService.writeFile(backupPath, VSBuffer.fromString(newFileContents)); const backup = await service.resolve(identifier); assert.ok(backup); @@ -1052,7 +1082,7 @@ flakySuite('WorkingCopyBackupService', () => { await service.backup(identifier, bufferToReadable(VSBuffer.fromString(contents)), 1, meta); - const backupPath = join(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); + const backupPath = joinPath(workspaceBackupPath, identifier.resource.scheme, hashIdentifier(identifier)); // Simulate the condition of the backups model loading initially without // meta data information and then getting the meta data updated on the @@ -1062,15 +1092,15 @@ flakySuite('WorkingCopyBackupService', () => { // This is not really something that would happen in real life because any // backup that is made via backup service will update the model accordingly. - const originalFileContents = readFileSync(backupPath).toString(); - writeFileSync(backupPath, originalFileContents.replace(meta.etag, updatedMeta.etag)); + const originalFileContents = (await fileService.readFile(backupPath)).value.toString(); + await fileService.writeFile(backupPath, VSBuffer.fromString(originalFileContents.replace(meta.etag, updatedMeta.etag))); await service.resolve(identifier); assert.strictEqual(service.hasBackupSync(identifier, undefined, meta), false); assert.strictEqual(service.hasBackupSync(identifier, undefined, updatedMeta), true); - writeFileSync(backupPath, originalFileContents); + await fileService.writeFile(backupPath, VSBuffer.fromString(originalFileContents)); await service.getBackups(); @@ -1109,10 +1139,9 @@ flakySuite('WorkingCopyBackupService', () => { test('file with binary data', async () => { const identifier = toUntypedWorkingCopyId(fooFile); - const sourceDir = FileAccess.asFileUri('vs/workbench/services/workingCopy/test/electron-browser/fixtures').fsPath; - - const buffer = await Promises.readFile(join(sourceDir, 'binary.txt')); - const hash = createHash('md5').update(buffer).digest('base64'); + const buffer = Uint8Array.from([ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 73, 0, 0, 0, 67, 8, 2, 0, 0, 0, 95, 138, 191, 237, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 71, 116, 69, 88, 116, 83, 111, 117, 114, 99, 101, 0, 83, 104, 111, 116, 116, 121, 32, 118, 50, 46, 48, 46, 50, 46, 50, 49, 54, 32, 40, 67, 41, 32, 84, 104, 111, 109, 97, 115, 32, 66, 97, 117, 109, 97, 110, 110, 32, 45, 32, 104, 116, 116, 112, 58, 47, 47, 115, 104, 111, 116, 116, 121, 46, 100, 101, 118, 115, 45, 111, 110, 46, 110, 101, 116, 44, 132, 21, 213, 0, 0, 0, 84, 73, 68, 65, 84, 120, 218, 237, 207, 65, 17, 0, 0, 12, 2, 32, 211, 217, 63, 146, 37, 246, 218, 65, 3, 210, 191, 226, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 118, 100, 169, 4, 173, 8, 44, 248, 184, 40, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130 + ]); await service.backup(identifier, bufferToReadable(VSBuffer.wrap(buffer)), undefined, { binaryTest: 'true' }); @@ -1121,17 +1150,13 @@ flakySuite('WorkingCopyBackupService', () => { const backupBuffer = await consumeStream(backup.value, chunks => VSBuffer.concat(chunks)); assert.strictEqual(backupBuffer.buffer.byteLength, buffer.byteLength); - - const backupHash = createHash('md5').update(backupBuffer.buffer).digest('base64'); - - assert.strictEqual(hash, backupHash); }); }); suite('WorkingCopyBackupsModel', () => { test('simple', async () => { - const model = await WorkingCopyBackupsModel.create(URI.file(workspaceBackupPath), service.testGetFileService()); + const model = await WorkingCopyBackupsModel.create(workspaceBackupPath, service.testGetFileService()); const resource1 = URI.file('test.html'); @@ -1187,24 +1212,19 @@ flakySuite('WorkingCopyBackupService', () => { model.update(resource4); assert.strictEqual(model.has(resource4), true); assert.strictEqual(model.has(resource4, undefined, { foo: 'nothing' }), false); - - const resource5 = URI.file('test4.html'); - model.move(resource4, resource5); - assert.strictEqual(model.has(resource4), false); - assert.strictEqual(model.has(resource5), true); }); test('create', async () => { - const fooBackupPath = join(workspaceBackupPath, fooFile.scheme, hashIdentifier(toUntypedWorkingCopyId(fooFile))); - await Promises.mkdir(dirname(fooBackupPath), { recursive: true }); - writeFileSync(fooBackupPath, 'foo'); - const model = await WorkingCopyBackupsModel.create(URI.file(workspaceBackupPath), service.testGetFileService()); + const fooBackupPath = joinPath(workspaceBackupPath, fooFile.scheme, hashIdentifier(toUntypedWorkingCopyId(fooFile))); + await fileService.createFolder(dirname(fooBackupPath)); + await fileService.writeFile(fooBackupPath, VSBuffer.fromString('foo')); + const model = await WorkingCopyBackupsModel.create(workspaceBackupPath, service.testGetFileService()); - assert.strictEqual(model.has(URI.file(fooBackupPath)), true); + assert.strictEqual(model.has(fooBackupPath), true); }); test('get', async () => { - const model = await WorkingCopyBackupsModel.create(URI.file(workspaceBackupPath), service.testGetFileService()); + const model = await WorkingCopyBackupsModel.create(workspaceBackupPath, service.testGetFileService()); assert.deepStrictEqual(model.get(), []); @@ -1220,50 +1240,6 @@ flakySuite('WorkingCopyBackupService', () => { }); }); - suite('Hash migration', () => { - - test('works', async () => { - const fooBackupId = toUntypedWorkingCopyId(fooFile); - const untitledBackupId = toUntypedWorkingCopyId(untitledFile); - const customBackupId = toUntypedWorkingCopyId(customFile); - - const fooBackupPath = join(workspaceBackupPath, fooFile.scheme, hashIdentifier(fooBackupId)); - const untitledBackupPath = join(workspaceBackupPath, untitledFile.scheme, hashIdentifier(untitledBackupId)); - const customFileBackupPath = join(workspaceBackupPath, customFile.scheme, hashIdentifier(customBackupId)); - - // Prepare backups of the old MD5 hash format - mkdirSync(join(workspaceBackupPath, fooFile.scheme), { recursive: true }); - mkdirSync(join(workspaceBackupPath, untitledFile.scheme), { recursive: true }); - mkdirSync(join(workspaceBackupPath, customFile.scheme), { recursive: true }); - writeFileSync(join(workspaceBackupPath, fooFile.scheme, '8a8589a2f1c9444b89add38166f50229'), `${fooFile.toString()}\ntest file`); - writeFileSync(join(workspaceBackupPath, untitledFile.scheme, '13264068d108c6901b3592ea654fcd57'), `${untitledFile.toString()}\ntest untitled`); - writeFileSync(join(workspaceBackupPath, customFile.scheme, 'bf018572af7b38746b502893bd0adf6c'), `${customFile.toString()}\ntest custom`); - - service.reinitialize(URI.file(workspaceBackupPath)); - - const backups = await service.getBackups(); - assert.strictEqual(backups.length, 3); - assert.ok(backups.some(backup => isEqual(backup.resource, fooFile))); - assert.ok(backups.some(backup => isEqual(backup.resource, untitledFile))); - assert.ok(backups.some(backup => isEqual(backup.resource, customFile))); - - assert.strictEqual(readdirSync(join(workspaceBackupPath, fooFile.scheme)).length, 1); - assert.strictEqual(existsSync(fooBackupPath), true); - assert.strictEqual(readFileSync(fooBackupPath).toString(), `${fooFile.toString()}\ntest file`); - assert.ok(service.hasBackupSync(fooBackupId)); - - assert.strictEqual(readdirSync(join(workspaceBackupPath, untitledFile.scheme)).length, 1); - assert.strictEqual(existsSync(untitledBackupPath), true); - assert.strictEqual(readFileSync(untitledBackupPath).toString(), `${untitledFile.toString()}\ntest untitled`); - assert.ok(service.hasBackupSync(untitledBackupId)); - - assert.strictEqual(readdirSync(join(workspaceBackupPath, customFile.scheme)).length, 1); - assert.strictEqual(existsSync(customFileBackupPath), true); - assert.strictEqual(readFileSync(customFileBackupPath).toString(), `${customFile.toString()}\ntest custom`); - assert.ok(service.hasBackupSync(customBackupId)); - }); - }); - suite('typeId migration', () => { test('works (when meta is missing)', async () => { @@ -1271,19 +1247,19 @@ flakySuite('WorkingCopyBackupService', () => { const untitledBackupId = toUntypedWorkingCopyId(untitledFile); const customBackupId = toUntypedWorkingCopyId(customFile); - const fooBackupPath = join(workspaceBackupPath, fooFile.scheme, hashIdentifier(fooBackupId)); - const untitledBackupPath = join(workspaceBackupPath, untitledFile.scheme, hashIdentifier(untitledBackupId)); - const customFileBackupPath = join(workspaceBackupPath, customFile.scheme, hashIdentifier(customBackupId)); + const fooBackupPath = joinPath(workspaceBackupPath, fooFile.scheme, hashIdentifier(fooBackupId)); + const untitledBackupPath = joinPath(workspaceBackupPath, untitledFile.scheme, hashIdentifier(untitledBackupId)); + const customFileBackupPath = joinPath(workspaceBackupPath, customFile.scheme, hashIdentifier(customBackupId)); // Prepare backups of the old format without meta - mkdirSync(join(workspaceBackupPath, fooFile.scheme), { recursive: true }); - mkdirSync(join(workspaceBackupPath, untitledFile.scheme), { recursive: true }); - mkdirSync(join(workspaceBackupPath, customFile.scheme), { recursive: true }); - writeFileSync(fooBackupPath, `${fooFile.toString()}\ntest file`); - writeFileSync(untitledBackupPath, `${untitledFile.toString()}\ntest untitled`); - writeFileSync(customFileBackupPath, `${customFile.toString()}\ntest custom`); + await fileService.createFolder(joinPath(workspaceBackupPath, fooFile.scheme)); + await fileService.createFolder(joinPath(workspaceBackupPath, untitledFile.scheme)); + await fileService.createFolder(joinPath(workspaceBackupPath, customFile.scheme)); + await fileService.writeFile(fooBackupPath, VSBuffer.fromString(`${fooFile.toString()}\ntest file`)); + await fileService.writeFile(untitledBackupPath, VSBuffer.fromString(`${untitledFile.toString()}\ntest untitled`)); + await fileService.writeFile(customFileBackupPath, VSBuffer.fromString(`${customFile.toString()}\ntest custom`)); - service.reinitialize(URI.file(workspaceBackupPath)); + service.reinitialize(workspaceBackupPath); const backups = await service.getBackups(); assert.strictEqual(backups.length, 3); @@ -1298,19 +1274,19 @@ flakySuite('WorkingCopyBackupService', () => { const untitledBackupId = toUntypedWorkingCopyId(untitledFile); const customBackupId = toUntypedWorkingCopyId(customFile); - const fooBackupPath = join(workspaceBackupPath, fooFile.scheme, hashIdentifier(fooBackupId)); - const untitledBackupPath = join(workspaceBackupPath, untitledFile.scheme, hashIdentifier(untitledBackupId)); - const customFileBackupPath = join(workspaceBackupPath, customFile.scheme, hashIdentifier(customBackupId)); + const fooBackupPath = joinPath(workspaceBackupPath, fooFile.scheme, hashIdentifier(fooBackupId)); + const untitledBackupPath = joinPath(workspaceBackupPath, untitledFile.scheme, hashIdentifier(untitledBackupId)); + const customFileBackupPath = joinPath(workspaceBackupPath, customFile.scheme, hashIdentifier(customBackupId)); // Prepare backups of the old format without meta - mkdirSync(join(workspaceBackupPath, fooFile.scheme), { recursive: true }); - mkdirSync(join(workspaceBackupPath, untitledFile.scheme), { recursive: true }); - mkdirSync(join(workspaceBackupPath, customFile.scheme), { recursive: true }); - writeFileSync(fooBackupPath, `${fooFile.toString()} ${JSON.stringify({ foo: 'bar' })}\ntest file`); - writeFileSync(untitledBackupPath, `${untitledFile.toString()} ${JSON.stringify({ foo: 'bar' })}\ntest untitled`); - writeFileSync(customFileBackupPath, `${customFile.toString()} ${JSON.stringify({ foo: 'bar' })}\ntest custom`); + await fileService.createFolder(joinPath(workspaceBackupPath, fooFile.scheme)); + await fileService.createFolder(joinPath(workspaceBackupPath, untitledFile.scheme)); + await fileService.createFolder(joinPath(workspaceBackupPath, customFile.scheme)); + await fileService.writeFile(fooBackupPath, VSBuffer.fromString(`${fooFile.toString()} ${JSON.stringify({ foo: 'bar' })}\ntest file`)); + await fileService.writeFile(untitledBackupPath, VSBuffer.fromString(`${untitledFile.toString()} ${JSON.stringify({ foo: 'bar' })}\ntest untitled`)); + await fileService.writeFile(customFileBackupPath, VSBuffer.fromString(`${customFile.toString()} ${JSON.stringify({ foo: 'bar' })}\ntest custom`)); - service.reinitialize(URI.file(workspaceBackupPath)); + service.reinitialize(workspaceBackupPath); const backups = await service.getBackups(); assert.strictEqual(backups.length, 3); diff --git a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupTracker.test.ts b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts similarity index 66% rename from src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupTracker.test.ts rename to src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts index 12ed796a77e..8b53c58a362 100644 --- a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupTracker.test.ts +++ b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts @@ -5,11 +5,8 @@ import * as assert from 'assert'; import { isMacintosh, isWindows } from 'vs/base/common/platform'; -import { tmpdir } from 'os'; import { join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; import { URI } from 'vs/base/common/uri'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; import { hash } from 'vs/base/common/hash'; import { NativeWorkingCopyBackupTracker } from 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupTracker'; import { TextFileEditorModelManager } from 'vs/workbench/services/textfile/common/textFileEditorModelManager'; @@ -18,7 +15,6 @@ import { EditorPart } from 'vs/workbench/browser/parts/editor/editorPart'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; import { EditorService } from 'vs/workbench/services/editor/browser/editorService'; import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; -import { NodeTestWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { toResource } from 'vs/base/test/common/utils'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; @@ -29,11 +25,10 @@ import { ShutdownReason, ILifecycleService } from 'vs/workbench/services/lifecyc import { IFileDialogService, ConfirmResult, IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { INativeHostService } from 'vs/platform/native/common/native'; -import { workbenchInstantiationService, TestServiceAccessor } from 'vs/workbench/test/electron-browser/workbenchTestServices'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { createEditorPart, registerTestFileEditor, TestBeforeShutdownEvent, TestFilesConfigurationService } from 'vs/workbench/test/browser/workbenchTestServices'; +import { createEditorPart, registerTestFileEditor, TestBeforeShutdownEvent, TestEnvironmentService, TestFilesConfigurationService, TestFileService } from 'vs/workbench/test/browser/workbenchTestServices'; import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; @@ -42,10 +37,16 @@ import { IProgressService } from 'vs/platform/progress/common/progress'; import { IWorkingCopyEditorService } from 'vs/workbench/services/workingCopy/common/workingCopyEditorService'; import { TestContextService, TestWorkingCopy } from 'vs/workbench/test/common/workbenchTestServices'; import { CancellationToken } from 'vs/base/common/cancellation'; -import { IWorkingCopyBackup } from 'vs/workbench/services/workingCopy/common/workingCopy'; +import { IWorkingCopyBackup, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopy'; import { Event, Emitter } from 'vs/base/common/event'; +import { generateUuid } from 'vs/base/common/uuid'; +import { Schemas } from 'vs/base/common/network'; +import { joinPath } from 'vs/base/common/resources'; +import { VSBuffer } from 'vs/base/common/buffer'; +import { TestServiceAccessor, workbenchInstantiationService } from 'vs/workbench/test/electron-sandbox/workbenchTestServices'; +import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -flakySuite('WorkingCopyBackupTracker (native)', function () { +suite('WorkingCopyBackupTracker (native)', function () { class TestWorkingCopyBackupTracker extends NativeWorkingCopyBackupTracker { @@ -107,9 +108,9 @@ flakySuite('WorkingCopyBackupTracker (native)', function () { } } - let testDir: string; - let backupHome: string; - let workspaceBackupPath: string; + let testDir: URI; + let backupHome: URI; + let workspaceBackupPath: URI; let accessor: TestServiceAccessor; let disposables: DisposableStore; @@ -117,35 +118,31 @@ flakySuite('WorkingCopyBackupTracker (native)', function () { setup(async () => { disposables = new DisposableStore(); - testDir = getRandomTestPath(tmpdir(), 'vsctests', 'backuprestorer'); - backupHome = join(testDir, 'Backups'); - const workspacesJsonPath = join(backupHome, 'workspaces.json'); + testDir = URI.file(join(generateUuid(), 'vsctests', 'workingcopybackuptracker')).with({ scheme: Schemas.inMemory }); + backupHome = joinPath(testDir, 'Backups'); + const workspacesJsonPath = joinPath(backupHome, 'workspaces.json'); - const workspaceResource = URI.file(isWindows ? 'c:\\workspace' : '/workspace'); - workspaceBackupPath = join(backupHome, hash(workspaceResource.fsPath).toString(16)); + const workspaceResource = URI.file(isWindows ? 'c:\\workspace' : '/workspace').with({ scheme: Schemas.inMemory }); + workspaceBackupPath = joinPath(backupHome, hash(workspaceResource.toString()).toString(16)); - const instantiationService = workbenchInstantiationService(disposables); + const instantiationService = workbenchInstantiationService(undefined, disposables); accessor = instantiationService.createInstance(TestServiceAccessor); disposables.add((accessor.textFileService.files)); disposables.add(registerTestFileEditor()); - await Promises.mkdir(backupHome, { recursive: true }); - await Promises.mkdir(workspaceBackupPath, { recursive: true }); + await accessor.fileService.createFolder(backupHome); + await accessor.fileService.createFolder(workspaceBackupPath); - return Promises.writeFile(workspacesJsonPath, ''); + return accessor.fileService.writeFile(workspacesJsonPath, VSBuffer.fromString('')); }); teardown(async () => { disposables.dispose(); - - return Promises.rm(testDir); }); async function createTracker(autoSaveEnabled = false): Promise<{ accessor: TestServiceAccessor; part: EditorPart; tracker: TestWorkingCopyBackupTracker; instantiationService: IInstantiationService; cleanup: () => Promise }> { - const workingCopyBackupService = new NodeTestWorkingCopyBackupService(testDir, workspaceBackupPath); - const instantiationService = workbenchInstantiationService(disposables); - instantiationService.stub(IWorkingCopyBackupService, workingCopyBackupService); + const instantiationService = workbenchInstantiationService(undefined, disposables); const configurationService = new TestConfigurationService(); if (autoSaveEnabled) { @@ -156,7 +153,10 @@ flakySuite('WorkingCopyBackupTracker (native)', function () { instantiationService.stub(IFilesConfigurationService, new TestFilesConfigurationService( instantiationService.createInstance(MockContextKeyService), configurationService, - new TestContextService(TestWorkspace) + new TestContextService(TestWorkspace), + TestEnvironmentService, + new UriIdentityService(new TestFileService()), + new TestFileService() )); const part = await createEditorPart(instantiationService, disposables); @@ -319,7 +319,7 @@ flakySuite('WorkingCopyBackupTracker (native)', function () { const veto = await event.value; assert.ok(!veto); - assert.ok(!accessor.workingCopyBackupService.discardedAllBackups); + assert.ok(accessor.workingCopyBackupService.discardedAllBackups); await cleanup(); }); @@ -381,6 +381,48 @@ flakySuite('WorkingCopyBackupTracker (native)', function () { await cleanup(); }); + test('onWillShutdown - scratchpads - veto if backup fails', async function () { + const { accessor, cleanup } = await createTracker(); + + class TestBackupWorkingCopy extends TestWorkingCopy { + + constructor(resource: URI) { + super(resource); + + accessor.workingCopyService.registerWorkingCopy(this); + } + + override capabilities = WorkingCopyCapabilities.Untitled | WorkingCopyCapabilities.Scratchpad; + + override async backup(token: CancellationToken): Promise { + throw new Error('unable to backup'); + } + + override isDirty(): boolean { + return false; + } + + override isModified(): boolean { + return true; + } + } + + const resource = toResource.call(this, '/path/custom.txt'); + new TestBackupWorkingCopy(resource); + + const event = new TestBeforeShutdownEvent(); + event.reason = ShutdownReason.QUIT; + accessor.lifecycleService.fireBeforeShutdown(event); + + const veto = await event.value; + assert.ok(veto); + + const finalVeto = await event.finalValue?.(); + assert.ok(finalVeto); // assert the tracker uses the internal finalVeto API + + await cleanup(); + }); + test('onWillShutdown - pending backup operations canceled and tracker suspended/resumsed', async function () { const { accessor, tracker, cleanup } = await createTracker(); @@ -523,6 +565,109 @@ flakySuite('WorkingCopyBackupTracker (native)', function () { }); }); + suite('"onExit" setting - scratchpad', () => { + test('should hot exit (reason: CLOSE, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.CLOSE, false, true, false); + }); + test('should hot exit (reason: CLOSE, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.CLOSE, false, false, !!isMacintosh); + }); + test('should hot exit (reason: CLOSE, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.CLOSE, true, true, false); + }); + test('should NOT hot exit (reason: CLOSE, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.CLOSE, true, false, true); + }); + test('should hot exit (reason: QUIT, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.QUIT, false, true, false); + }); + test('should hot exit (reason: QUIT, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.QUIT, false, false, false); + }); + test('should hot exit (reason: QUIT, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.QUIT, true, true, false); + }); + test('should hot exit (reason: QUIT, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.QUIT, true, false, false); + }); + test('should hot exit (reason: RELOAD, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.RELOAD, false, true, false); + }); + test('should hot exit (reason: RELOAD, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.RELOAD, false, false, false); + }); + test('should hot exit (reason: RELOAD, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.RELOAD, true, true, false); + }); + test('should hot exit (reason: RELOAD, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.RELOAD, true, false, false); + }); + test('should hot exit (reason: LOAD, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.LOAD, false, true, false); + }); + test('should NOT hot exit (reason: LOAD, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.LOAD, false, false, true); + }); + test('should hot exit (reason: LOAD, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.LOAD, true, true, false); + }); + test('should NOT hot exit (reason: LOAD, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT, ShutdownReason.LOAD, true, false, true); + }); + }); + + suite('"onExitAndWindowClose" setting - scratchpad', () => { + test('should hot exit (reason: CLOSE, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.CLOSE, false, true, false); + }); + test('should hot exit (reason: CLOSE, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.CLOSE, false, false, !!isMacintosh); + }); + test('should hot exit (reason: CLOSE, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.CLOSE, true, true, false); + }); + test('should NOT hot exit (reason: CLOSE, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.CLOSE, true, false, true); + }); + test('should hot exit (reason: QUIT, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.QUIT, false, true, false); + }); + test('should hot exit (reason: QUIT, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.QUIT, false, false, false); + }); + test('should hot exit (reason: QUIT, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.QUIT, true, true, false); + }); + test('should hot exit (reason: QUIT, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.QUIT, true, false, false); + }); + test('should hot exit (reason: RELOAD, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.RELOAD, false, true, false); + }); + test('should hot exit (reason: RELOAD, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.RELOAD, false, false, false); + }); + test('should hot exit (reason: RELOAD, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.RELOAD, true, true, false); + }); + test('should hot exit (reason: RELOAD, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.RELOAD, true, false, false); + }); + test('should hot exit (reason: LOAD, windows: single, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.LOAD, false, true, false); + }); + test('should NOT hot exit (reason: LOAD, windows: single, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.LOAD, false, false, true); + }); + test('should hot exit (reason: LOAD, windows: multiple, workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.LOAD, true, true, false); + }); + test('should NOT hot exit (reason: LOAD, windows: multiple, empty workspace)', function () { + return scratchpadHotExitTest.call(this, HotExitConfiguration.ON_EXIT_AND_WINDOW_CLOSE, ShutdownReason.LOAD, true, false, true); + }); + }); + + async function hotExitTest(this: any, setting: string, shutdownReason: ShutdownReason, multipleWindows: boolean, workspace: boolean, shouldVeto: boolean): Promise { const { accessor, cleanup } = await createTracker(); @@ -562,5 +707,58 @@ flakySuite('WorkingCopyBackupTracker (native)', function () { await cleanup(); } + + async function scratchpadHotExitTest(this: any, setting: string, shutdownReason: ShutdownReason, multipleWindows: boolean, workspace: boolean, shouldVeto: boolean): Promise { + const { accessor, cleanup } = await createTracker(); + + class TestBackupWorkingCopy extends TestWorkingCopy { + + constructor(resource: URI) { + super(resource); + + accessor.workingCopyService.registerWorkingCopy(this); + } + + override capabilities = WorkingCopyCapabilities.Untitled | WorkingCopyCapabilities.Scratchpad; + + override isDirty(): boolean { + return false; + } + + override isModified(): boolean { + return true; + } + } + + // Set hot exit config + accessor.filesConfigurationService.testOnFilesConfigurationChange({ files: { hotExit: setting } }); + + // Set empty workspace if required + if (!workspace) { + accessor.contextService.setWorkspace(new Workspace('empty:1508317022751')); + } + + // Set multiple windows if required + if (multipleWindows) { + accessor.nativeHostService.windowCount = Promise.resolve(2); + } + + // Set cancel to force a veto if hot exit does not trigger + accessor.fileDialogService.setConfirmResult(ConfirmResult.CANCEL); + + const resource = toResource.call(this, '/path/custom.txt'); + new TestBackupWorkingCopy(resource); + + const event = new TestBeforeShutdownEvent(); + event.reason = shutdownReason; + accessor.lifecycleService.fireBeforeShutdown(event); + + const veto = await event.value; + assert.ok(typeof event.finalValue === 'function'); // assert the tracker uses the internal finalVeto API + assert.strictEqual(accessor.workingCopyBackupService.discardedBackups.length, 0); // When hot exit is set, backups should never be cleaned since the confirm result is cancel + assert.strictEqual(veto, shouldVeto); + + await cleanup(); + } }); }); diff --git a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyHistoryService.test.ts b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryService.test.ts similarity index 79% rename from src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyHistoryService.test.ts rename to src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryService.test.ts index 169bbdfc8bf..9d9094116bc 100644 --- a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyHistoryService.test.ts +++ b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryService.test.ts @@ -4,40 +4,25 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { NativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService'; -import { TestNativePathService, TestNativeWindowConfiguration } from 'vs/workbench/test/electron-browser/workbenchTestServices'; -import { TestContextService, TestProductService, TestStorageService, TestWorkingCopy } from 'vs/workbench/test/common/workbenchTestServices'; +import { TestContextService, TestStorageService, TestWorkingCopy } from 'vs/workbench/test/common/workbenchTestServices'; import { NullLogService } from 'vs/platform/log/common/log'; import { FileService } from 'vs/platform/files/common/fileService'; -import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider'; import { Schemas } from 'vs/base/common/network'; -import { flakySuite, getRandomTestPath } from 'vs/base/test/node/testUtils'; -import { tmpdir } from 'os'; -import { dirname, join } from 'vs/base/common/path'; -import { Promises } from 'vs/base/node/pfs'; import { URI } from 'vs/base/common/uri'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { existsSync, readFileSync, unlinkSync } from 'fs'; import { IWorkingCopyHistoryEntry, IWorkingCopyHistoryEntryDescriptor, IWorkingCopyHistoryEvent } from 'vs/workbench/services/workingCopy/common/workingCopyHistory'; import { IFileService } from 'vs/platform/files/common/files'; import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; import { LabelService } from 'vs/workbench/services/label/common/labelService'; -import { TestLifecycleService, TestRemoteAgentService, TestWillShutdownEvent } from 'vs/workbench/test/browser/workbenchTestServices'; +import { TestEnvironmentService, TestLifecycleService, TestPathService, TestRemoteAgentService, TestWillShutdownEvent } from 'vs/workbench/test/browser/workbenchTestServices'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; -import { NativeWorkingCopyHistoryService } from 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyHistoryService'; -import { joinPath, dirname as resourcesDirname, basename } from 'vs/base/common/resources'; +import { NativeWorkingCopyHistoryService } from 'vs/workbench/services/workingCopy/common/workingCopyHistoryService'; +import { joinPath, dirname, basename } from 'vs/base/common/resources'; import { firstOrDefault } from 'vs/base/common/arrays'; - -class TestWorkbenchEnvironmentService extends NativeWorkbenchEnvironmentService { - - constructor(private readonly testDir: URI | string) { - super({ ...TestNativeWindowConfiguration, 'user-data-dir': URI.isUri(testDir) ? testDir.fsPath : testDir }, TestProductService); - } - - override get localHistoryHome() { - return joinPath(URI.isUri(this.testDir) ? this.testDir : URI.file(this.testDir), 'History'); - } -} +import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; +import { generateUuid } from 'vs/base/common/uuid'; +import { join } from 'vs/base/common/path'; +import { VSBuffer } from 'vs/base/common/buffer'; export class TestWorkingCopyHistoryService extends NativeWorkingCopyHistoryService { @@ -45,19 +30,21 @@ export class TestWorkingCopyHistoryService extends NativeWorkingCopyHistoryServi readonly _configurationService: TestConfigurationService; readonly _lifecycleService: TestLifecycleService; - constructor(testDir: URI | string) { - const environmentService = new TestWorkbenchEnvironmentService(testDir); + constructor(fileService?: IFileService) { + const environmentService = TestEnvironmentService; const logService = new NullLogService(); - const fileService = new FileService(logService); - const diskFileSystemProvider = new DiskFileSystemProvider(logService); - fileService.registerProvider(Schemas.file, diskFileSystemProvider); + if (!fileService) { + fileService = new FileService(logService); + fileService.registerProvider(Schemas.inMemory, new InMemoryFileSystemProvider()); + fileService.registerProvider(Schemas.vscodeUserData, new InMemoryFileSystemProvider()); + } const remoteAgentService = new TestRemoteAgentService(); const uriIdentityService = new UriIdentityService(fileService); - const labelService = new LabelService(environmentService, new TestContextService(), new TestNativePathService(), new TestRemoteAgentService(), new TestStorageService(), new TestLifecycleService()); + const labelService = new LabelService(environmentService, new TestContextService(), new TestPathService(), new TestRemoteAgentService(), new TestStorageService(), new TestLifecycleService()); const lifecycleService = new TestLifecycleService(); @@ -71,16 +58,17 @@ export class TestWorkingCopyHistoryService extends NativeWorkingCopyHistoryServi } } -flakySuite('WorkingCopyHistoryService', () => { +suite('WorkingCopyHistoryService', () => { - let testDir: string; - let historyHome: string; - let workHome: string; + let testDir: URI; + let historyHome: URI; + let workHome: URI; let service: TestWorkingCopyHistoryService; + let fileService: IFileService; - let testFile1Path: string; - let testFile2Path: string; - let testFile3Path: string; + let testFile1Path: URI; + let testFile2Path: URI; + let testFile3Path: URI; const testFile1PathContents = 'Hello Foo'; const testFile2PathContents = [ @@ -92,22 +80,23 @@ flakySuite('WorkingCopyHistoryService', () => { const testFile3PathContents = 'Hello Bar'; setup(async () => { - testDir = getRandomTestPath(tmpdir(), 'vsctests', 'workingcopyhistoryservice'); - historyHome = join(testDir, 'User', 'History'); - workHome = join(testDir, 'work'); + testDir = URI.file(join(generateUuid(), 'vsctests', 'workingcopyhistoryservice')).with({ scheme: Schemas.inMemory }); + historyHome = joinPath(testDir, 'User', 'History'); + workHome = joinPath(testDir, 'work'); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(); + fileService = service._fileService; - await Promises.mkdir(historyHome, { recursive: true }); - await Promises.mkdir(workHome, { recursive: true }); + await fileService.createFolder(historyHome); + await fileService.createFolder(workHome); - testFile1Path = join(workHome, 'foo.txt'); - testFile2Path = join(workHome, 'bar.txt'); - testFile3Path = join(workHome, 'foo-bar.txt'); + testFile1Path = joinPath(workHome, 'foo.txt'); + testFile2Path = joinPath(workHome, 'bar.txt'); + testFile3Path = joinPath(workHome, 'foo-bar.txt'); - await Promises.writeFile(testFile1Path, testFile1PathContents); - await Promises.writeFile(testFile2Path, testFile2PathContents); - await Promises.writeFile(testFile3Path, testFile3PathContents); + await fileService.writeFile(testFile1Path, VSBuffer.fromString(testFile1PathContents)); + await fileService.writeFile(testFile2Path, VSBuffer.fromString(testFile2PathContents)); + await fileService.writeFile(testFile3Path, VSBuffer.fromString(testFile3PathContents)); }); let increasingTimestampCounter = 1; @@ -122,7 +111,7 @@ flakySuite('WorkingCopyHistoryService', () => { if (expectEntryAdded) { assert.ok(entry, 'Unexpected undefined local history entry'); - assert.strictEqual(existsSync(entry.location.fsPath), true, 'Unexpected local history not stored on disk'); + assert.strictEqual((await fileService.exists(entry.location)), true, 'Unexpected local history not stored'); } return entry; @@ -130,24 +119,22 @@ flakySuite('WorkingCopyHistoryService', () => { teardown(() => { service.dispose(); - - return Promises.rm(testDir); }); test('addEntry', async () => { const addEvents: IWorkingCopyHistoryEvent[] = []; service.onDidAddEntry(e => addEvents.push(e)); - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); - const workingCopy2 = new TestWorkingCopy(URI.file(testFile2Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); + const workingCopy2 = new TestWorkingCopy(testFile2Path); // Add Entry works const entry1A = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); const entry2A = await addEntry({ resource: workingCopy2.resource, source: 'My Source' }, CancellationToken.None); - assert.strictEqual(readFileSync(entry1A.location.fsPath).toString(), testFile1PathContents); - assert.strictEqual(readFileSync(entry2A.location.fsPath).toString(), testFile2PathContents); + assert.strictEqual((await fileService.readFile(entry1A.location)).value.toString(), testFile1PathContents); + assert.strictEqual((await fileService.readFile(entry2A.location)).value.toString(), testFile2PathContents); assert.strictEqual(addEvents.length, 2); assert.strictEqual(addEvents[0].entry.workingCopy.resource.toString(), workingCopy1.resource.toString()); @@ -157,8 +144,8 @@ flakySuite('WorkingCopyHistoryService', () => { const entry1B = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); const entry2B = await addEntry({ resource: workingCopy2.resource }, CancellationToken.None); - assert.strictEqual(readFileSync(entry1B.location.fsPath).toString(), testFile1PathContents); - assert.strictEqual(readFileSync(entry2B.location.fsPath).toString(), testFile2PathContents); + assert.strictEqual((await fileService.readFile(entry1B.location)).value.toString(), testFile1PathContents); + assert.strictEqual((await fileService.readFile(entry2B.location)).value.toString(), testFile2PathContents); assert.strictEqual(addEvents.length, 4); assert.strictEqual(addEvents[2].entry.workingCopy.resource.toString(), workingCopy1.resource.toString()); @@ -177,7 +164,7 @@ flakySuite('WorkingCopyHistoryService', () => { // Invalid working copies are ignored - const workingCopy3 = new TestWorkingCopy(URI.file(testFile2Path).with({ scheme: 'unsupported' })); + const workingCopy3 = new TestWorkingCopy(testFile2Path.with({ scheme: 'unsupported' })); const entry3A = await addEntry({ resource: workingCopy3.resource }, CancellationToken.None, false); assert.ok(!entry3A); @@ -188,7 +175,7 @@ flakySuite('WorkingCopyHistoryService', () => { const changeEvents: IWorkingCopyHistoryEvent[] = []; service.onDidChangeEntry(e => changeEvents.push(e)); - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); const entry = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); @@ -210,10 +197,10 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 3); @@ -224,7 +211,7 @@ flakySuite('WorkingCopyHistoryService', () => { const removeEvents: IWorkingCopyHistoryEvent[] = []; service.onDidRemoveEntry(e => removeEvents.push(e)); - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); const entry2 = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); @@ -252,17 +239,17 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 3); }); test('removeEntry - deletes history entries folder when last entry removed', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); let entry = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); @@ -271,12 +258,12 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); - assert.strictEqual(existsSync(dirname(entry.location.fsPath)), true); + assert.strictEqual((await fileService.exists(dirname(entry.location))), true); entry = firstOrDefault(await service.getEntries(workingCopy1.resource, CancellationToken.None))!; assert.ok(entry); @@ -288,20 +275,20 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); - assert.strictEqual(existsSync(dirname(entry.location.fsPath)), false); + assert.strictEqual((await fileService.exists(dirname(entry.location))), false); }); test('removeAll', async () => { let removed = false; service.onDidRemoveEntries(() => removed = true); - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); - const workingCopy2 = new TestWorkingCopy(URI.file(testFile2Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); + const workingCopy2 = new TestWorkingCopy(testFile2Path); await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); @@ -327,10 +314,10 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 0); @@ -339,8 +326,8 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getEntries - simple', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); - const workingCopy2 = new TestWorkingCopy(URI.file(testFile2Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); + const workingCopy2 = new TestWorkingCopy(testFile2Path); let entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 0); @@ -368,8 +355,8 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getEntries - metadata preserved when stored', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); - const workingCopy2 = new TestWorkingCopy(URI.file(testFile2Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); + const workingCopy2 = new TestWorkingCopy(testFile2Path); const entry1 = await addEntry({ resource: workingCopy1.resource, source: 'test-source' }, CancellationToken.None); const entry2 = await addEntry({ resource: workingCopy2.resource }, CancellationToken.None); @@ -380,10 +367,10 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); let entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 1); @@ -396,7 +383,7 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getEntries - corrupt meta.json is no problem', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); const entry1 = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); @@ -405,14 +392,14 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); - const metaFile = join(dirname(entry1.location.fsPath), 'entries.json'); - assert.ok(existsSync(metaFile)); - unlinkSync(metaFile); + const metaFile = joinPath(dirname(entry1.location), 'entries.json'); + assert.ok((await fileService.exists(metaFile))); + await fileService.del(metaFile); const entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 1); @@ -420,7 +407,7 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getEntries - missing entries from meta.json is no problem', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); const entry1 = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); const entry2 = await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); @@ -430,12 +417,12 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); - unlinkSync(entry1.location.fsPath); + await fileService.del(entry1.location); const entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 1); @@ -443,7 +430,7 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getEntries - in-memory and on-disk entries are merged', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); const entry1 = await addEntry({ resource: workingCopy1.resource, source: 'test-source' }, CancellationToken.None); const entry2 = await addEntry({ resource: workingCopy1.resource, source: 'other-source' }, CancellationToken.None); @@ -453,10 +440,10 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); const entry3 = await addEntry({ resource: workingCopy1.resource, source: 'test-source' }, CancellationToken.None); const entry4 = await addEntry({ resource: workingCopy1.resource, source: 'other-source' }, CancellationToken.None); @@ -470,7 +457,7 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getEntries - configured max entries respected', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); await addEntry({ resource: workingCopy1.resource }, CancellationToken.None); @@ -496,8 +483,8 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getAll', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); - const workingCopy2 = new TestWorkingCopy(URI.file(testFile2Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); + const workingCopy2 = new TestWorkingCopy(testFile2Path); let resources = await service.getAll(CancellationToken.None); assert.strictEqual(resources.length, 0); @@ -520,12 +507,12 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); - const workingCopy3 = new TestWorkingCopy(URI.file(testFile3Path)); + const workingCopy3 = new TestWorkingCopy(testFile3Path); await addEntry({ resource: workingCopy3.resource, source: 'test-source' }, CancellationToken.None); resources = await service.getAll(CancellationToken.None); @@ -538,7 +525,7 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('getAll - ignores resource when no entries exist', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); const entry = await addEntry({ resource: workingCopy1.resource, source: 'test-source' }, CancellationToken.None); @@ -555,10 +542,10 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); resources = await service.getAll(CancellationToken.None); assert.strictEqual(resources.length, 0); @@ -576,7 +563,7 @@ flakySuite('WorkingCopyHistoryService', () => { } test('entries cleaned up on shutdown', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); const entry1 = await addEntry({ resource: workingCopy1.resource, source: 'test-source' }, CancellationToken.None); const entry2 = await addEntry({ resource: workingCopy1.resource, source: 'other-source' }, CancellationToken.None); @@ -590,15 +577,15 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - assert.ok(!existsSync(entry1.location.fsPath)); - assert.ok(!existsSync(entry2.location.fsPath)); - assert.ok(existsSync(entry3.location.fsPath)); - assert.ok(existsSync(entry4.location.fsPath)); + assert.ok(!(await fileService.exists(entry1.location))); + assert.ok(!(await fileService.exists(entry2.location))); + assert.ok((await fileService.exists(entry3.location))); + assert.ok((await fileService.exists(entry4.location))); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); let entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 2); @@ -614,14 +601,14 @@ flakySuite('WorkingCopyHistoryService', () => { service._lifecycleService.fireWillShutdown(event); await Promise.allSettled(event.value); - assert.ok(existsSync(entry3.location.fsPath)); - assert.ok(existsSync(entry4.location.fsPath)); - assert.ok(existsSync(entry5.location.fsPath)); + assert.ok((await fileService.exists(entry3.location))); + assert.ok((await fileService.exists(entry4.location))); + assert.ok((await fileService.exists(entry5.location))); - // Resolve from disk fresh and verify again + // Resolve from file service fresh and verify again service.dispose(); - service = new TestWorkingCopyHistoryService(testDir); + service = new TestWorkingCopyHistoryService(fileService); entries = await service.getEntries(workingCopy1.resource, CancellationToken.None); assert.strictEqual(entries.length, 3); @@ -634,7 +621,7 @@ flakySuite('WorkingCopyHistoryService', () => { let replaced: IWorkingCopyHistoryEntry | undefined = undefined; service.onDidReplaceEntry(e => replaced = e.entry); - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); service._configurationService.setUserConfiguration('workbench.localHistory.mergeWindow', 1); @@ -661,7 +648,7 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('move entries (file rename)', async () => { - const workingCopy = new TestWorkingCopy(URI.file(testFile1Path)); + const workingCopy = new TestWorkingCopy(testFile1Path); const entry1 = await addEntry({ resource: workingCopy.resource, source: 'test-source' }, CancellationToken.None); const entry2 = await addEntry({ resource: workingCopy.resource, source: 'test-source' }, CancellationToken.None); @@ -670,8 +657,8 @@ flakySuite('WorkingCopyHistoryService', () => { let entries = await service.getEntries(workingCopy.resource, CancellationToken.None); assert.strictEqual(entries.length, 3); - const renamedWorkingCopyResource = joinPath(resourcesDirname(workingCopy.resource), 'renamed.txt'); - await service._fileService.move(workingCopy.resource, renamedWorkingCopyResource); + const renamedWorkingCopyResource = joinPath(dirname(workingCopy.resource), 'renamed.txt'); + await fileService.move(workingCopy.resource, renamedWorkingCopyResource); const result = await service.moveEntries(workingCopy.resource, renamedWorkingCopyResource); @@ -708,8 +695,8 @@ flakySuite('WorkingCopyHistoryService', () => { }); test('entries moved (folder rename)', async () => { - const workingCopy1 = new TestWorkingCopy(URI.file(testFile1Path)); - const workingCopy2 = new TestWorkingCopy(URI.file(testFile2Path)); + const workingCopy1 = new TestWorkingCopy(testFile1Path); + const workingCopy2 = new TestWorkingCopy(testFile2Path); const entry1A = await addEntry({ resource: workingCopy1.resource, source: 'test-source' }, CancellationToken.None); const entry2A = await addEntry({ resource: workingCopy1.resource, source: 'test-source' }, CancellationToken.None); @@ -725,10 +712,10 @@ flakySuite('WorkingCopyHistoryService', () => { entries = await service.getEntries(workingCopy2.resource, CancellationToken.None); assert.strictEqual(entries.length, 3); - const renamedWorkHome = joinPath(resourcesDirname(URI.file(workHome)), 'renamed'); - await service._fileService.move(URI.file(workHome), renamedWorkHome); + const renamedWorkHome = joinPath(dirname(workHome), 'renamed'); + await fileService.move(workHome, renamedWorkHome); - const resources = await service.moveEntries(URI.file(workHome), renamedWorkHome); + const resources = await service.moveEntries(workHome, renamedWorkHome); const renamedWorkingCopy1Resource = joinPath(renamedWorkHome, basename(workingCopy1.resource)); const renamedWorkingCopy2Resource = joinPath(renamedWorkHome, basename(workingCopy2.resource)); diff --git a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyHistoryTracker.test.ts b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryTracker.test.ts similarity index 87% rename from src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyHistoryTracker.test.ts rename to src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryTracker.test.ts index 931ac6cbaef..5bbe9b30267 100644 --- a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyHistoryTracker.test.ts +++ b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryTracker.test.ts @@ -5,16 +5,14 @@ import * as assert from 'assert'; import { Event } from 'vs/base/common/event'; -import { TestContextService, TestWorkingCopy } from 'vs/workbench/test/common/workbenchTestServices'; +import { TestContextService, TestStorageService, TestWorkingCopy } from 'vs/workbench/test/common/workbenchTestServices'; import { randomPath } from 'vs/base/common/extpath'; -import { tmpdir } from 'os'; import { join } from 'vs/base/common/path'; import { URI } from 'vs/base/common/uri'; -import { TestWorkingCopyHistoryService } from 'vs/workbench/services/workingCopy/test/electron-browser/workingCopyHistoryService.test'; import { WorkingCopyHistoryTracker } from 'vs/workbench/services/workingCopy/common/workingCopyHistoryTracker'; import { WorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { TestFileService, TestPathService } from 'vs/workbench/test/browser/workbenchTestServices'; +import { TestEnvironmentService, TestFileService, TestLifecycleService, TestPathService, TestRemoteAgentService } from 'vs/workbench/test/browser/workbenchTestServices'; import { DeferredPromise } from 'vs/base/common/async'; import { IFileService } from 'vs/platform/files/common/files'; import { Schemas } from 'vs/base/common/network'; @@ -29,6 +27,41 @@ import { assertIsDefined } from 'vs/base/common/types'; import { VSBuffer } from 'vs/base/common/buffer'; import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; import { IDisposable } from 'vs/base/common/lifecycle'; +import { NativeWorkingCopyHistoryService } from 'vs/workbench/services/workingCopy/common/workingCopyHistoryService'; +import { NullLogService } from 'vs/platform/log/common/log'; +import { FileService } from 'vs/platform/files/common/fileService'; +import { LabelService } from 'vs/workbench/services/label/common/labelService'; + +class TestWorkingCopyHistoryService extends NativeWorkingCopyHistoryService { + + readonly _fileService: IFileService; + readonly _configurationService: TestConfigurationService; + readonly _lifecycleService: TestLifecycleService; + + constructor(testDir: URI | string) { + const environmentService = TestEnvironmentService; + const logService = new NullLogService(); + const fileService = new FileService(logService); + + fileService.registerProvider(Schemas.vscodeUserData, new InMemoryFileSystemProvider()); + + const remoteAgentService = new TestRemoteAgentService(); + + const uriIdentityService = new UriIdentityService(fileService); + + const labelService = new LabelService(environmentService, new TestContextService(), new TestPathService(), new TestRemoteAgentService(), new TestStorageService(), new TestLifecycleService()); + + const lifecycleService = new TestLifecycleService(); + + const configurationService = new TestConfigurationService(); + + super(fileService, remoteAgentService, environmentService, uriIdentityService, labelService, lifecycleService, logService, configurationService); + + this._fileService = fileService; + this._configurationService = configurationService; + this._lifecycleService = lifecycleService; + } +} suite('WorkingCopyHistoryTracker', () => { @@ -67,7 +100,7 @@ suite('WorkingCopyHistoryTracker', () => { } setup(async () => { - testDir = URI.file(randomPath(join(tmpdir(), 'vsctests', 'workingcopyhistorytracker'))).with({ scheme: Schemas.inMemory }); + testDir = URI.file(randomPath(join('vsctests', 'workingcopyhistorytracker'))).with({ scheme: Schemas.inMemory }); historyHome = joinPath(testDir, 'User', 'History'); workHome = joinPath(testDir, 'work'); diff --git a/src/vs/workbench/services/workspaces/common/canonicalUriService.ts b/src/vs/workbench/services/workspaces/common/canonicalUriService.ts new file mode 100644 index 00000000000..bd2a007835c --- /dev/null +++ b/src/vs/workbench/services/workspaces/common/canonicalUriService.ts @@ -0,0 +1,33 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CancellationToken } from 'vs/base/common/cancellation'; +import { IDisposable } from 'vs/base/common/lifecycle'; +import { URI } from 'vs/base/common/uri'; +import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { ICanonicalUriService, ICanonicalUriProvider } from 'vs/platform/workspace/common/canonicalUri'; + +export class CanonicalUriService implements ICanonicalUriService { + declare readonly _serviceBrand: undefined; + + private readonly _providers = new Map(); + + registerCanonicalUriProvider(provider: ICanonicalUriProvider): IDisposable { + this._providers.set(provider.scheme, provider); + return { + dispose: () => this._providers.delete(provider.scheme) + }; + } + + async provideCanonicalUri(uri: URI, targetScheme: string, token: CancellationToken): Promise { + const provider = this._providers.get(uri.scheme); + if (provider) { + return provider.provideCanonicalUri(uri, targetScheme, token); + } + return undefined; + } +} + +registerSingleton(ICanonicalUriService, CanonicalUriService, InstantiationType.Delayed); diff --git a/src/vs/workbench/services/workspaces/common/workspaceIdentityService.ts b/src/vs/workbench/services/workspaces/common/workspaceIdentityService.ts new file mode 100644 index 00000000000..78f1109a124 --- /dev/null +++ b/src/vs/workbench/services/workspaces/common/workspaceIdentityService.ts @@ -0,0 +1,143 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { VSBuffer } from 'vs/base/common/buffer'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { isEqualOrParent, joinPath, relativePath } from 'vs/base/common/resources'; +import { URI } from 'vs/base/common/uri'; +import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { IWorkspaceStateFolder } from 'vs/platform/userDataSync/common/userDataSync'; +import { EditSessionIdentityMatch, IEditSessionIdentityService } from 'vs/platform/workspace/common/editSessions'; +import { IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; + +export const IWorkspaceIdentityService = createDecorator('IWorkspaceIdentityService'); +export interface IWorkspaceIdentityService { + _serviceBrand: undefined; + matches(folders: IWorkspaceStateFolder[], cancellationToken: CancellationToken): Promise<((obj: any) => any) | false>; + getWorkspaceStateFolders(cancellationToken: CancellationToken): Promise; +} + +export class WorkspaceIdentityService implements IWorkspaceIdentityService { + declare _serviceBrand: undefined; + + constructor( + @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, + @IEditSessionIdentityService private readonly editSessionIdentityService: IEditSessionIdentityService + ) { } + + async getWorkspaceStateFolders(cancellationToken: CancellationToken): Promise { + const workspaceStateFolders: IWorkspaceStateFolder[] = []; + + for (const workspaceFolder of this.workspaceContextService.getWorkspace().folders) { + const workspaceFolderIdentity = await this.editSessionIdentityService.getEditSessionIdentifier(workspaceFolder, cancellationToken); + if (!workspaceFolderIdentity) { continue; } + workspaceStateFolders.push({ resourceUri: workspaceFolder.uri.toString(), workspaceFolderIdentity }); + } + + return workspaceStateFolders; + } + + async matches(incomingWorkspaceFolders: IWorkspaceStateFolder[], cancellationToken: CancellationToken): Promise<((value: any) => any) | false> { + const incomingToCurrentWorkspaceFolderUris: { [key: string]: string } = {}; + + const incomingIdentitiesToIncomingWorkspaceFolders: { [key: string]: string } = {}; + for (const workspaceFolder of incomingWorkspaceFolders) { + incomingIdentitiesToIncomingWorkspaceFolders[workspaceFolder.workspaceFolderIdentity] = workspaceFolder.resourceUri; + } + + // Precompute the identities of the current workspace folders + const currentWorkspaceFoldersToIdentities = new Map(); + for (const workspaceFolder of this.workspaceContextService.getWorkspace().folders) { + const workspaceFolderIdentity = await this.editSessionIdentityService.getEditSessionIdentifier(workspaceFolder, cancellationToken); + if (!workspaceFolderIdentity) { continue; } + currentWorkspaceFoldersToIdentities.set(workspaceFolder, workspaceFolderIdentity); + } + + // Match the current workspace folders to the incoming workspace folders + for (const [currentWorkspaceFolder, currentWorkspaceFolderIdentity] of currentWorkspaceFoldersToIdentities.entries()) { + + // Happy case: identities do not need further disambiguation + const incomingWorkspaceFolder = incomingIdentitiesToIncomingWorkspaceFolders[currentWorkspaceFolderIdentity]; + if (incomingWorkspaceFolder) { + // There is an incoming workspace folder with the exact same identity as the current workspace folder + incomingToCurrentWorkspaceFolderUris[incomingWorkspaceFolder] = currentWorkspaceFolder.uri.toString(); + continue; + } + + // Unhappy case: compare the identity of the current workspace folder to all incoming workspace folder identities + let hasCompleteMatch = false; + for (const [incomingIdentity, incomingFolder] of Object.entries(incomingIdentitiesToIncomingWorkspaceFolders)) { + if (await this.editSessionIdentityService.provideEditSessionIdentityMatch(currentWorkspaceFolder, currentWorkspaceFolderIdentity, incomingIdentity, cancellationToken) === EditSessionIdentityMatch.Complete) { + incomingToCurrentWorkspaceFolderUris[incomingFolder] = currentWorkspaceFolder.uri.toString(); + hasCompleteMatch = true; + break; + } + } + + if (hasCompleteMatch) { + continue; + } + + return false; + } + + const convertUri = (uriToConvert: URI) => { + // Figure out which current folder the incoming URI is a child of + for (const incomingFolderUriKey of Object.keys(incomingToCurrentWorkspaceFolderUris)) { + const incomingFolderUri = URI.parse(incomingFolderUriKey); + if (isEqualOrParent(incomingFolderUri, uriToConvert)) { + const currentWorkspaceFolderUri = incomingToCurrentWorkspaceFolderUris[incomingFolderUriKey]; + + // Compute the relative file path section of the uri to convert relative to the folder it came from + const relativeFilePath = relativePath(incomingFolderUri, uriToConvert); + + // Reparent the relative file path under the current workspace folder it belongs to + if (relativeFilePath) { + return joinPath(URI.parse(currentWorkspaceFolderUri), relativeFilePath); + } + } + } + + // No conversion was possible; return the original URI + return uriToConvert; + }; + + // Recursively look for any URIs in the provided object and + // replace them with the URIs of the current workspace folders + const uriReplacer = (obj: any, depth = 0) => { + if (!obj || depth > 200) { + return obj; + } + + if (obj instanceof VSBuffer || obj instanceof Uint8Array) { + return obj; + } + + if (URI.isUri(obj)) { + return convertUri(obj); + } + + if (Array.isArray(obj)) { + for (let i = 0; i < obj.length; ++i) { + obj[i] = uriReplacer(obj[i], depth + 1); + } + } else { + // walk object + for (const key in obj) { + if (Object.hasOwnProperty.call(obj, key)) { + obj[key] = uriReplacer(obj[key], depth + 1); + } + } + } + + return obj; + }; + + return uriReplacer; + } +} + +registerSingleton(IWorkspaceIdentityService, WorkspaceIdentityService, InstantiationType.Delayed); diff --git a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts index 40e7be1ac1c..a3548351314 100644 --- a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts +++ b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts @@ -154,6 +154,11 @@ export class NativeWorkspaceEditingService extends AbstractWorkspaceEditingServi } async enterWorkspace(workspaceUri: URI): Promise { + const stopped = await this.extensionService.stopExtensionHosts(localize('restartExtensionHost.reason', "Opening a multi-root workspace.")); + if (!stopped) { + return; + } + const result = await this.doEnterWorkspace(workspaceUri); if (result) { @@ -175,7 +180,7 @@ export class NativeWorkspaceEditingService extends AbstractWorkspaceEditingServi // Restart the extension host: entering a workspace means a new location for // storage and potentially a change in the workspace.rootPath property. else { - this.extensionService.restartExtensionHost(); + this.extensionService.startExtensionHosts(); } } } diff --git a/src/vs/workbench/test/browser/arrayOperation.test.ts b/src/vs/workbench/test/browser/arrayOperation.test.ts index 94f075e256f..d51b85c57b6 100644 --- a/src/vs/workbench/test/browser/arrayOperation.test.ts +++ b/src/vs/workbench/test/browser/arrayOperation.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import assert = require('assert'); +import * as assert from 'assert'; import { ArrayEdit, MonotonousIndexTransformer, SingleArrayEdit } from 'vs/workbench/services/textMate/browser/arrayOperation'; suite('array operation', () => { diff --git a/src/vs/workbench/test/browser/parts/editor/editor.test.ts b/src/vs/workbench/test/browser/parts/editor/editor.test.ts index 3ecf10644ed..a49e5dd00c1 100644 --- a/src/vs/workbench/test/browser/parts/editor/editor.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editor.test.ts @@ -105,12 +105,14 @@ suite('Workbench editor utils', () => { testInput1.capabilities = EditorInputCapabilities.None; assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.None), true); assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.Readonly), false); + assert.strictEqual(testInput1.isReadonly(), false); assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.Untitled), false); assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.RequiresTrust), false); assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.Singleton), false); testInput1.capabilities |= EditorInputCapabilities.Readonly; assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.Readonly), true); + assert.strictEqual(!!testInput1.isReadonly(), true); assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.None), false); assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.Untitled), false); assert.strictEqual(testInput1.hasCapability(EditorInputCapabilities.RequiresTrust), false); @@ -122,15 +124,18 @@ suite('Workbench editor utils', () => { const sideBySideInput = instantiationService.createInstance(SideBySideEditorInput, 'name', undefined, testInput1, testInput2); assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.MultipleEditors), true); assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Readonly), false); + assert.strictEqual(sideBySideInput.isReadonly(), false); assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Untitled), false); assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.RequiresTrust), false); assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Singleton), false); testInput1.capabilities |= EditorInputCapabilities.Readonly; assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Readonly), false); + assert.strictEqual(sideBySideInput.isReadonly(), false); testInput2.capabilities |= EditorInputCapabilities.Readonly; assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Readonly), true); + assert.strictEqual(!!sideBySideInput.isReadonly(), true); testInput1.capabilities |= EditorInputCapabilities.Untitled; assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Untitled), false); diff --git a/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts b/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts index 1b70d16389c..d5b2f9fa085 100644 --- a/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts @@ -814,6 +814,7 @@ suite('EditorGroupModel', () => { assert.strictEqual(group.count, 1); assert.strictEqual(group.getEditors(EditorsOrder.MOST_RECENTLY_ACTIVE).length, 1); + assert.strictEqual(group.findEditor(input1)![0], input1); assert.strictEqual(group.activeEditor, input1); assert.strictEqual(group.isActive(input1), true); assert.strictEqual(group.isPinned(input1), true); @@ -827,6 +828,7 @@ suite('EditorGroupModel', () => { assert.strictEqual(events.activated[0].editorIndex, 0); const index = group.indexOf(input1); + assert.strictEqual(group.findEditor(input1)![1], index); let event = group.closeEditor(input1, EditorCloseContext.UNPIN); assert.strictEqual(event?.editor, input1); assert.strictEqual(event?.editorIndex, index); 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 1a84f479395..2fd994d4639 100644 --- a/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts @@ -12,6 +12,7 @@ import { ILabelService } from 'vs/platform/label/common/label'; import { IFileService } from 'vs/platform/files/common/files'; import { EditorInputCapabilities, Verbosity } from 'vs/workbench/common/editor'; import { DisposableStore } from 'vs/base/common/lifecycle'; +import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; suite('ResourceEditorInput', () => { @@ -25,9 +26,10 @@ suite('ResourceEditorInput', () => { constructor( resource: URI, @ILabelService labelService: ILabelService, - @IFileService fileService: IFileService + @IFileService fileService: IFileService, + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService ) { - super(resource, resource, labelService, fileService); + super(resource, resource, labelService, fileService, filesConfigurationService); } } @@ -56,6 +58,7 @@ suite('ResourceEditorInput', () => { assert.ok(input.getTitle(Verbosity.LONG).length > 0); assert.strictEqual(input.hasCapability(EditorInputCapabilities.Readonly), false); + assert.strictEqual(input.isReadonly(), false); assert.strictEqual(input.hasCapability(EditorInputCapabilities.Untitled), true); }); }); diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 55c6dee7f71..3994e6bb1e5 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -14,7 +14,7 @@ import { EditorInputWithOptions, IEditorIdentifier, IUntitledTextResourceEditorI import { EditorServiceImpl, IEditorGroupView, IEditorGroupsAccessor, IEditorGroupTitleHeight } from 'vs/workbench/browser/parts/editor/editor'; import { Event, Emitter } from 'vs/base/common/event'; import { IResolvedWorkingCopyBackup, IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; -import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; +import { IConfigurationService, ConfigurationTarget, IConfigurationValue } from 'vs/platform/configuration/common/configuration'; import { IWorkbenchLayoutService, PanelAlignment, Parts, Position as PartPosition } from 'vs/workbench/services/layout/browser/layoutService'; import { TextModelResolverService } from 'vs/workbench/services/textmodelResolver/common/textModelResolverService'; import { ITextModelService } from 'vs/editor/common/services/resolverService'; @@ -53,7 +53,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IDecorationsService, IResourceDecorationChangeEvent, IDecoration, IDecorationData, IDecorationsProvider } from 'vs/workbench/services/decorations/common/decorations'; import { IDisposable, toDisposable, Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { IEditorGroupsService, IEditorGroup, GroupsOrder, GroupsArrangement, GroupDirection, IAddGroupOptions, IMergeGroupOptions, IEditorReplacement, IFindGroupScope, EditorGroupLayout, ICloseEditorOptions, GroupOrientation, ICloseAllEditorsOptions, ICloseEditorsFilter } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService, ISaveEditorsOptions, IRevertAllEditorsOptions, PreferredGroup, IEditorsChangeEvent } from 'vs/workbench/services/editor/common/editorService'; +import { IEditorService, ISaveEditorsOptions, IRevertAllEditorsOptions, PreferredGroup, IEditorsChangeEvent, ISaveEditorsResult } from 'vs/workbench/services/editor/common/editorService'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { IEditorPaneRegistry, EditorPaneDescriptor } from 'vs/workbench/browser/editor'; import { Dimension, IDimension } from 'vs/base/browser/dom'; @@ -122,10 +122,10 @@ import { SideBySideEditor } from 'vs/workbench/browser/parts/editor/sideBySideEd import { IEnterWorkspaceResult, IRecent, IRecentlyOpened, IWorkspaceFolderCreationData, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; import { IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'vs/platform/workspace/common/workspaceTrust'; import { TestWorkspaceTrustManagementService, TestWorkspaceTrustRequestService } from 'vs/workbench/services/workspaces/test/common/testWorkspaceTrustService'; -import { IExtensionTerminalProfile, IShellLaunchConfig, ITerminalProfile, TerminalIcon, TerminalLocation, TerminalShellType } from 'vs/platform/terminal/common/terminal'; +import { IExtensionTerminalProfile, IShellLaunchConfig, ITerminalBackend, ITerminalProfile, TerminalIcon, TerminalLocation, TerminalShellType } from 'vs/platform/terminal/common/terminal'; import { ICreateTerminalOptions, IDeserializedTerminalEditorInput, ITerminalEditorService, ITerminalGroup, ITerminalGroupService, ITerminalInstance, ITerminalInstanceService, TerminalEditorLocation } from 'vs/workbench/contrib/terminal/browser/terminal'; import { assertIsDefined } from 'vs/base/common/types'; -import { IRegisterContributedProfileArgs, IShellLaunchConfigResolveOptions, ITerminalBackend, ITerminalProfileProvider, ITerminalProfileResolverService, ITerminalProfileService } from 'vs/workbench/contrib/terminal/common/terminal'; +import { IRegisterContributedProfileArgs, IShellLaunchConfigResolveOptions, ITerminalProfileProvider, ITerminalProfileResolverService, ITerminalProfileService } from 'vs/workbench/contrib/terminal/common/terminal'; import { EditorResolverService } from 'vs/workbench/services/editor/browser/editorResolverService'; import { FILE_EDITOR_INPUT_ID } from 'vs/workbench/contrib/files/common/files'; import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; @@ -156,17 +156,17 @@ import { IExtensionHostExitInfo, IRemoteAgentConnection, IRemoteAgentService } f import { ILanguageDetectionService } from 'vs/workbench/services/languageDetection/common/languageDetectionWorkerService'; import { IDiagnosticInfoOptions, IDiagnosticInfo } from 'vs/platform/diagnostics/common/diagnostics'; import { ExtensionType, IExtension, IExtensionDescription, IRelaxedExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; -import { ISocketFactory } from 'vs/platform/remote/common/remoteAgentConnection'; import { IRemoteAgentEnvironment } from 'vs/platform/remote/common/remoteAgentEnvironment'; import { ILayoutOffsetInfo } from 'vs/platform/layout/browser/layoutService'; import { IUserDataProfile, IUserDataProfilesService, toUserDataProfile, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; import { UserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfileService'; import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; -import { EnablementState, IExtensionManagementServer, IScannedExtension, IWebExtensionsScannerService, IWorkbenchExtensionEnablementService, IWorkbenchExtensionManagementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; -import { InstallVSIXOptions, ILocalExtension, IGalleryExtension, InstallOptions, IExtensionIdentifier, UninstallOptions, IExtensionsControlManifest, IGalleryMetadata, IExtensionManagementParticipant, Metadata } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { EnablementState, IScannedExtension, IWebExtensionsScannerService, IWorkbenchExtensionEnablementService, IWorkbenchExtensionManagementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; +import { InstallVSIXOptions, ILocalExtension, IGalleryExtension, InstallOptions, IExtensionIdentifier, UninstallOptions, IExtensionsControlManifest, IGalleryMetadata, IExtensionManagementParticipant, Metadata, InstallExtensionResult, InstallExtensionInfo } from 'vs/platform/extensionManagement/common/extensionManagement'; import { Codicon } from 'vs/base/common/codicons'; import { IHoverOptions, IHoverService, IHoverWidget } from 'vs/workbench/services/hover/browser/hover'; import { IRemoteExtensionsScannerService } from 'vs/platform/remote/common/remoteExtensionsScanner'; +import { IRemoteSocketFactoryService, RemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService'; export function createFileEditorInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput { return instantiationService.createInstance(FileEditorInput, resource, undefined, undefined, undefined, undefined, undefined, undefined); @@ -233,6 +233,7 @@ export function workbenchInstantiationService( overrides?: { environmentService?: (instantiationService: IInstantiationService) => IEnvironmentService; fileService?: (instantiationService: IInstantiationService) => IFileService; + workingCopyBackupService?: (instantiationService: IInstantiationService) => IWorkingCopyBackupService; configurationService?: (instantiationService: IInstantiationService) => TestConfigurationService; textFileService?: (instantiationService: IInstantiationService) => ITextFileService; pathService?: (instantiationService: IInstantiationService) => IPathService; @@ -262,7 +263,6 @@ export function workbenchInstantiationService( } }); instantiationService.stub(IConfigurationService, configService); - instantiationService.stub(IFilesConfigurationService, disposables.add(new TestFilesConfigurationService(contextKeyService, configService, workspaceContextService))); instantiationService.stub(ITextResourceConfigurationService, new TestTextResourceConfigurationService(configService)); instantiationService.stub(IUntitledTextEditorService, disposables.add(instantiationService.createInstance(UntitledTextEditorService))); instantiationService.stub(IStorageService, disposables.add(new TestStorageService())); @@ -288,10 +288,11 @@ export function workbenchInstantiationService( const fileService = overrides?.fileService ? overrides.fileService(instantiationService) : new TestFileService(); instantiationService.stub(IFileService, fileService); const uriIdentityService = new UriIdentityService(fileService); + instantiationService.stub(IFilesConfigurationService, disposables.add(new TestFilesConfigurationService(contextKeyService, configService, workspaceContextService, environmentService, uriIdentityService, fileService))); instantiationService.stub(IUriIdentityService, uriIdentityService); const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, new NullLogService())); instantiationService.stub(IUserDataProfileService, new UserDataProfileService(userDataProfilesService.defaultProfile, userDataProfilesService)); - instantiationService.stub(IWorkingCopyBackupService, new TestWorkingCopyBackupService()); + instantiationService.stub(IWorkingCopyBackupService, overrides?.workingCopyBackupService ? overrides?.workingCopyBackupService(instantiationService) : new TestWorkingCopyBackupService()); instantiationService.stub(ITelemetryService, NullTelemetryService); instantiationService.stub(INotificationService, new TestNotificationService()); instantiationService.stub(IUntitledTextEditorService, disposables.add(instantiationService.createInstance(UntitledTextEditorService))); @@ -319,11 +320,12 @@ export function workbenchInstantiationService( instantiationService.stub(IPaneCompositePartService, new TestPaneCompositeService()); instantiationService.stub(IListService, new TestListService()); const hoverService = instantiationService.stub(IHoverService, instantiationService.createInstance(TestHoverService)); - instantiationService.stub(IQuickInputService, disposables.add(new QuickInputService(configService, instantiationService, keybindingService, contextKeyService, themeService, accessibilityService, layoutService, hoverService))); + instantiationService.stub(IQuickInputService, disposables.add(new QuickInputService(configService, instantiationService, keybindingService, contextKeyService, themeService, layoutService, hoverService))); instantiationService.stub(IWorkspacesService, new TestWorkspacesService()); instantiationService.stub(IWorkspaceTrustManagementService, new TestWorkspaceTrustManagementService()); instantiationService.stub(ITerminalInstanceService, new TestTerminalInstanceService()); instantiationService.stub(IElevatedFileService, new BrowserElevatedFileService()); + instantiationService.stub(IRemoteSocketFactoryService, new RemoteSocketFactoryService()); return instantiationService; } @@ -434,7 +436,8 @@ export class TestTextFileService extends BrowserTextFileService { encoding: 'utf8', value: await createTextBufferFactoryFromStream(content.value), size: 10, - readonly: false + readonly: false, + locked: false }; } @@ -558,6 +561,7 @@ export class TestFileDialogService implements IFileDialogService { async defaultFilePath(_schemeFilter?: string): Promise { return this.pathService.userHome(); } async defaultFolderPath(_schemeFilter?: string): Promise { return this.pathService.userHome(); } async defaultWorkspacePath(_schemeFilter?: string): Promise { return this.pathService.userHome(); } + async preferredHome(_schemeFilter?: string): Promise { return this.pathService.userHome(); } pickFileFolderAndOpen(_options: IPickAndOpenOptions): Promise { return Promise.resolve(0); } pickFileAndOpen(_options: IPickAndOpenOptions): Promise { return Promise.resolve(0); } pickFolderAndOpen(_options: IPickAndOpenOptions): Promise { return Promise.resolve(0); } @@ -996,8 +1000,8 @@ export class TestEditorService implements EditorServiceImpl { isOpened(_editor: IResourceEditorInputIdentifier): boolean { return false; } isVisible(_editor: EditorInput): boolean { return false; } replaceEditors(_editors: any, _group: any) { return Promise.resolve(undefined); } - save(editors: IEditorIdentifier[], options?: ISaveEditorsOptions): Promise { throw new Error('Method not implemented.'); } - saveAll(options?: ISaveEditorsOptions): Promise { throw new Error('Method not implemented.'); } + save(editors: IEditorIdentifier[], options?: ISaveEditorsOptions): Promise { throw new Error('Method not implemented.'); } + saveAll(options?: ISaveEditorsOptions): Promise { throw new Error('Method not implemented.'); } revert(editors: IEditorIdentifier[], options?: IRevertOptions): Promise { throw new Error('Method not implemented.'); } revertAll(options?: IRevertAllEditorsOptions): Promise { throw new Error('Method not implemented.'); } } @@ -1332,6 +1336,10 @@ export class TestTextResourceConfigurationService implements ITextResourceConfig return this.configurationService.getValue(section, { resource }); } + inspect(resource: URI | undefined, position: IPosition | null, section: string): IConfigurationValue> { + return this.configurationService.inspect(section, { resource }); + } + updateValue(resource: URI, key: string, value: any, configurationTarget?: ConfigurationTarget): Promise { return this.configurationService.updateValue(key, value); } @@ -1593,6 +1601,7 @@ export class TestFileEditorInput extends EditorInput implements IFileEditorInput gotSavedAs = false; gotReverted = false; dirty = false; + modified: boolean | undefined; private fails = false; disableToUntyped = false; @@ -1660,6 +1669,10 @@ export class TestFileEditorInput extends EditorInput implements IFileEditorInput } return { resource: this.resource }; } + setModified(): void { this.modified = true; } + override isModified(): boolean { + return this.modified === undefined ? this.dirty : this.modified; + } setDirty(): void { this.dirty = true; } override isDirty(): boolean { return this.dirty; @@ -1787,6 +1800,8 @@ export class TestTerminalInstanceService implements ITerminalInstanceService { preparePathForTerminalAsync(path: string, executable: string | undefined, title: string, shellType: TerminalShellType, remoteAuthority: string | undefined): Promise { throw new Error('Method not implemented.'); } createInstance(options: ICreateTerminalOptions, target: TerminalLocation): ITerminalInstance { throw new Error('Method not implemented.'); } async getBackend(remoteAuthority?: string): Promise { throw new Error('Method not implemented.'); } + didRegisterBackend(remoteAuthority?: string): void { throw new Error('Method not implemented.'); } + getRegisteredBackends(): IterableIterator { throw new Error('Method not implemented.'); } } export class TestTerminalEditorService implements ITerminalEditorService { @@ -1799,11 +1814,10 @@ export class TestTerminalEditorService implements ITerminalEditorService { onDidChangeActiveInstance = Event.None; onDidChangeInstances = Event.None; openEditor(instance: ITerminalInstance, editorOptions?: TerminalEditorLocation): Promise { throw new Error('Method not implemented.'); } - detachActiveEditorInstance(): ITerminalInstance { throw new Error('Method not implemented.'); } detachInstance(instance: ITerminalInstance): void { throw new Error('Method not implemented.'); } splitInstance(instanceToSplit: ITerminalInstance, shellLaunchConfig?: IShellLaunchConfig): ITerminalInstance { throw new Error('Method not implemented.'); } revealActiveEditor(preserveFocus?: boolean): Promise { throw new Error('Method not implemented.'); } - resolveResource(instance: ITerminalInstance | URI): URI { throw new Error('Method not implemented.'); } + resolveResource(instance: ITerminalInstance): URI { throw new Error('Method not implemented.'); } reviveInput(deserializedInput: IDeserializedTerminalEditorInput): TerminalEditorInput { throw new Error('Method not implemented.'); } getInputFromResource(resource: URI): TerminalEditorInput { throw new Error('Method not implemented.'); } setActiveInstance(instance: ITerminalInstance): void { throw new Error('Method not implemented.'); } @@ -1850,6 +1864,7 @@ export class TestTerminalGroupService implements ITerminalGroupService { hidePanel(): void { throw new Error('Method not implemented.'); } focusTabs(): void { throw new Error('Method not implemented.'); } showTabs(): void { throw new Error('Method not implemented.'); } + focusHover(): void { throw new Error('Method not implemented.'); } setActiveInstance(instance: ITerminalInstance): void { throw new Error('Method not implemented.'); } focusActiveInstance(): Promise { throw new Error('Method not implemented.'); } getInstanceFromResource(resource: URI | undefined): ITerminalInstance | undefined { throw new Error('Method not implemented.'); } @@ -1934,10 +1949,6 @@ export class TestRemoteAgentService implements IRemoteAgentService { declare readonly _serviceBrand: undefined; - socketFactory: ISocketFactory = { - connect() { } - }; - getConnection(): IRemoteAgentConnection | null { return null; } async getEnvironment(): Promise { return null; } async getRawEnvironment(): Promise { return null; } @@ -1989,13 +2000,10 @@ export class TestWorkbenchExtensionManagementService implements IWorkbenchExtens installFromLocation(location: URI): Promise { throw new Error('Method not implemented.'); } - installExtensions(extensions: IGalleryExtension[], installOptions?: InstallOptions | undefined): Promise { + installGalleryExtensions(extensions: InstallExtensionInfo[]): Promise { throw new Error('Method not implemented.'); } async updateFromGallery(gallery: IGalleryExtension, extension: ILocalExtension, installOptions?: InstallOptions | undefined): Promise { return extension; } - getExtensionManagementServerToInstall(manifest: Readonly): IExtensionManagementServer | null { - throw new Error('Method not implemented.'); - } zip(extension: ILocalExtension): Promise { throw new Error('Method not implemented.'); } @@ -2038,7 +2046,7 @@ export class TestUserDataProfileService implements IUserDataProfileService { readonly _serviceBrand: undefined; readonly onDidUpdateCurrentProfile = Event.None; readonly onDidChangeCurrentProfile = Event.None; - readonly currentProfile = toUserDataProfile('test', 'test', URI.file('tests').with({ scheme: 'vscode-tests' })); + readonly currentProfile = toUserDataProfile('test', 'test', URI.file('tests').with({ scheme: 'vscode-tests' }), URI.file('tests').with({ scheme: 'vscode-tests' })); async updateCurrentProfile(): Promise { } getShortName(profile: IUserDataProfile): string { return profile.shortName ?? profile.name; } } diff --git a/src/vs/workbench/test/common/notifications.test.ts b/src/vs/workbench/test/common/notifications.test.ts index 126f512975b..bc96b826ea9 100644 --- a/src/vs/workbench/test/common/notifications.test.ts +++ b/src/vs/workbench/test/common/notifications.test.ts @@ -6,7 +6,7 @@ import * as assert from 'assert'; import { NotificationsModel, NotificationViewItem, INotificationChangeEvent, NotificationChangeType, NotificationViewItemContentChangeKind, IStatusMessageChangeEvent, StatusMessageChangeType } from 'vs/workbench/common/notifications'; import { Action } from 'vs/base/common/actions'; -import { INotification, Severity, NotificationsFilter } from 'vs/platform/notification/common/notification'; +import { INotification, Severity, NotificationsFilter, NotificationPriority } from 'vs/platform/notification/common/notification'; import { createErrorWithActions } from 'vs/base/common/errorMessage'; import { NotificationService } from 'vs/workbench/services/notification/common/notificationService'; import { TestStorageService } from 'vs/workbench/test/common/workbenchTestServices'; @@ -132,16 +132,16 @@ suite('Notifications', () => { // Filter const item8 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' }, NotificationsFilter.SILENT)!; - assert.strictEqual(item8.silent, true); + assert.strictEqual(item8.priority, NotificationPriority.SILENT); const item9 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' }, NotificationsFilter.OFF)!; - assert.strictEqual(item9.silent, false); + assert.strictEqual(item9.priority, NotificationPriority.DEFAULT); const item10 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' }, NotificationsFilter.ERROR)!; - assert.strictEqual(item10.silent, false); + assert.strictEqual(item10.priority, NotificationPriority.DEFAULT); const item11 = NotificationViewItem.create({ severity: Severity.Warning, message: 'Error Message' }, NotificationsFilter.ERROR)!; - assert.strictEqual(item11.silent, true); + assert.strictEqual(item11.priority, NotificationPriority.SILENT); }); test('Items - does not fire changed when message did not change (content, severity)', async () => { @@ -280,7 +280,7 @@ suite('Notifications', () => { service.info('hello there'); assert.strictEqual(addNotificationCount, 1); assert.strictEqual(notification.message, 'hello there'); - assert.strictEqual(notification.silent, false); + assert.strictEqual(notification.priority, NotificationPriority.DEFAULT); assert.strictEqual(notification.source, undefined); let notificationHandle = service.notify({ message: 'important message', severity: Severity.Warning }); @@ -297,10 +297,10 @@ suite('Notifications', () => { assert.strictEqual(removeNotificationCount, 1); assert.strictEqual(notification.message, 'important message'); - notificationHandle = service.notify({ silent: true, message: 'test', severity: Severity.Ignore }); + notificationHandle = service.notify({ priority: NotificationPriority.SILENT, message: 'test', severity: Severity.Ignore }); assert.strictEqual(addNotificationCount, 3); assert.strictEqual(notification.message, 'test'); - assert.strictEqual(notification.silent, true); + assert.strictEqual(notification.priority, NotificationPriority.SILENT); notificationHandle.close(); assert.strictEqual(removeNotificationCount, 2); }); diff --git a/src/vs/workbench/test/common/resources.test.ts b/src/vs/workbench/test/common/resources.test.ts new file mode 100644 index 00000000000..a7849b94648 --- /dev/null +++ b/src/vs/workbench/test/common/resources.test.ts @@ -0,0 +1,67 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as assert from 'assert'; +import { URI } from 'vs/base/common/uri'; +import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; +import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { ResourceGlobMatcher } from 'vs/workbench/common/resources'; +import { TestContextService } from 'vs/workbench/test/common/workbenchTestServices'; + +suite('ResourceGlobMatcher', () => { + + const SETTING = 'test.matcher'; + + let contextService: IWorkspaceContextService; + let configurationService: TestConfigurationService; + + setup(() => { + contextService = new TestContextService(); + configurationService = new TestConfigurationService({ + [SETTING]: { + '**/*.md': true, + '**/*.txt': false + } + }); + }); + + test('Basics', async () => { + const matcher = new ResourceGlobMatcher(() => configurationService.getValue(SETTING), e => e.affectsConfiguration(SETTING), contextService, configurationService); + + // Matching + assert.equal(matcher.matches(URI.file('/foo/bar')), false); + assert.equal(matcher.matches(URI.file('/foo/bar.md')), true); + assert.equal(matcher.matches(URI.file('/foo/bar.txt')), false); + + // Events + let eventCounter = 0; + matcher.onExpressionChange(() => eventCounter++); + + await configurationService.setUserConfiguration(SETTING, { '**/*.foo': true }); + configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: (key: string) => key === SETTING } as any); + assert.equal(eventCounter, 1); + + assert.equal(matcher.matches(URI.file('/foo/bar.md')), false); + assert.equal(matcher.matches(URI.file('/foo/bar.foo')), true); + + await configurationService.setUserConfiguration(SETTING, undefined); + configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: (key: string) => key === SETTING } as any); + assert.equal(eventCounter, 2); + + assert.equal(matcher.matches(URI.file('/foo/bar.md')), false); + assert.equal(matcher.matches(URI.file('/foo/bar.foo')), false); + + await configurationService.setUserConfiguration(SETTING, { + '**/*.md': true, + '**/*.txt': false, + 'C:/bar/**': true, + '/bar/**': true + }); + configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: (key: string) => key === SETTING } as any); + + assert.equal(matcher.matches(URI.file('/bar/foo.1')), true); + assert.equal(matcher.matches(URI.file('C:/bar/foo.1')), true); + }); +}); diff --git a/src/vs/workbench/test/common/utils.ts b/src/vs/workbench/test/common/utils.ts index c343653722c..498c5c499fe 100644 --- a/src/vs/workbench/test/common/utils.ts +++ b/src/vs/workbench/test/common/utils.ts @@ -12,6 +12,8 @@ import { LanguagesRegistry } from 'vs/editor/common/services/languagesRegistry'; * and can be used to add assertions. e.g. that registries are empty, etc. * * !! This is called directly by the testing framework. + * + * @skipMangle */ export function assertCleanState(): void { // If this test fails, it is a clear indication that diff --git a/src/vs/workbench/test/common/workbenchTestServices.ts b/src/vs/workbench/test/common/workbenchTestServices.ts index e1398daa91d..627f0ea0b77 100644 --- a/src/vs/workbench/test/common/workbenchTestServices.ts +++ b/src/vs/workbench/test/common/workbenchTestServices.ts @@ -17,13 +17,17 @@ import { IWorkingCopy, IWorkingCopyBackup, WorkingCopyCapabilities } from 'vs/wo import { NullExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { IWorkingCopyFileService, IWorkingCopyFileOperationParticipant, WorkingCopyFileEvent, IDeleteOperation, ICopyOperation, IMoveOperation, IFileOperationUndoRedoInfo, ICreateFileOperation, ICreateOperation, IStoredFileWorkingCopySaveParticipant } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; import { IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { IFileStatWithMetadata } from 'vs/platform/files/common/files'; -import { ISaveOptions, IRevertOptions, SaveReason } from 'vs/workbench/common/editor'; +import { IBaseFileStat, IFileStatWithMetadata } from 'vs/platform/files/common/files'; +import { ISaveOptions, IRevertOptions, SaveReason, GroupIdentifier } from 'vs/workbench/common/editor'; import { CancellationToken } from 'vs/base/common/cancellation'; import product from 'vs/platform/product/common/product'; import { IActivity, IActivityService } from 'vs/workbench/services/activity/common/activity'; import { IStoredFileWorkingCopySaveEvent } from 'vs/workbench/services/workingCopy/common/storedFileWorkingCopy'; import { AbstractLoggerService, ILogger, LogLevel, NullLogger } from 'vs/platform/log/common/log'; +import { IResourceEditorInput } from 'vs/platform/editor/common/editor'; +import { EditorInput } from 'vs/workbench/common/editor/editorInput'; +import { IHistoryService } from 'vs/workbench/services/history/common/history'; +import { AutoSaveMode, IAutoSaveConfiguration, IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; export class TestLoggerService extends AbstractLoggerService { constructor(logsHome?: URI) { @@ -140,6 +144,27 @@ export class TestStorageService extends InMemoryStorageService { } } +export class TestHistoryService implements IHistoryService { + + declare readonly _serviceBrand: undefined; + + constructor(private root?: URI) { } + + async reopenLastClosedEditor(): Promise { } + async goForward(): Promise { } + async goBack(): Promise { } + async goPrevious(): Promise { } + async goLast(): Promise { } + removeFromHistory(_input: EditorInput | IResourceEditorInput): void { } + clear(): void { } + clearRecentlyOpened(): void { } + getHistory(): readonly (EditorInput | IResourceEditorInput)[] { return []; } + async openNextRecentlyUsedEditor(group?: GroupIdentifier): Promise { } + async openPreviouslyUsedEditor(group?: GroupIdentifier): Promise { } + getLastActiveWorkspaceRoot(_schemeFilter: string): URI | undefined { return this.root; } + getLastActiveFile(_schemeFilter: string): URI | undefined { return undefined; } +} + export class TestWorkingCopy extends Disposable implements IWorkingCopy { private readonly _onDidChangeDirty = this._register(new Emitter()); @@ -178,6 +203,10 @@ export class TestWorkingCopy extends Disposable implements IWorkingCopy { return this.dirty; } + isModified(): boolean { + return this.isDirty(); + } + async save(options?: ISaveOptions, stat?: IFileStatWithMetadata): Promise { this._onDidSave.fire({ reason: options?.reason ?? SaveReason.EXPLICIT, stat: stat ?? createFileStat(this.resource), source: options?.source }); @@ -204,6 +233,7 @@ export function createFileStat(resource: URI, readonly = false): IFileStatWithMe isDirectory: false, isSymbolicLink: false, readonly, + locked: false, name: basename(resource), children: undefined }; @@ -266,3 +296,22 @@ export class TestActivityService implements IActivityService { dispose() { } } + +export const NullFilesConfigurationService = new class implements IFilesConfigurationService { + + _serviceBrand: undefined; + + readonly onAutoSaveConfigurationChange = Event.None; + readonly onReadonlyChange = Event.None; + readonly onFilesAssociationChange = Event.None; + + readonly isHotExitEnabled = false; + readonly hotExitConfiguration = undefined; + + getAutoSaveConfiguration(): IAutoSaveConfiguration { throw new Error('Method not implemented.'); } + getAutoSaveMode(): AutoSaveMode { throw new Error('Method not implemented.'); } + toggleAutoSave(): Promise { throw new Error('Method not implemented.'); } + isReadonly(resource: URI, stat?: IBaseFileStat | undefined): boolean { return false; } + async updateReadonly(resource: URI, readonly: boolean | 'toggle' | 'reset'): Promise { } + preventSaveConflicts(resource: URI, language?: string | undefined): boolean { throw new Error('Method not implemented.'); } +}; diff --git a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts b/src/vs/workbench/test/electron-browser/workbenchTestServices.ts deleted file mode 100644 index 715a8781680..00000000000 --- a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts +++ /dev/null @@ -1,215 +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 { ITestInstantiationService, TestLifecycleService, TestFilesConfigurationService, TestFileService, TestFileDialogService, TestPathService, TestEncodingOracle } from 'vs/workbench/test/browser/workbenchTestServices'; -import { TestNativeHostService, workbenchInstantiationService as electronSandboxWorkbenchInstantiationService } from 'vs/workbench/test/electron-sandbox/workbenchTestServices'; -import { NativeTextFileService, } from 'vs/workbench/services/textfile/electron-sandbox/nativeTextFileService'; -import { FileOperationError, IFileService } from 'vs/platform/files/common/files'; -import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService'; -import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IModelService } from 'vs/editor/common/services/model'; -import { INativeWorkbenchEnvironmentService, NativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService'; -import { IDialogService, IFileDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; -import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { URI } from 'vs/base/common/uri'; -import { IReadTextFileOptions, ITextFileStreamContent, ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { createTextBufferFactoryFromStream } from 'vs/editor/common/model/textModel'; -import { INativeWindowConfiguration } from 'vs/platform/window/common/window'; -import { parseArgs, OPTIONS } from 'vs/platform/environment/node/argv'; -import { LogLevel, ILogService, NullLogService } from 'vs/platform/log/common/log'; -import { IPathService } from 'vs/workbench/services/path/common/pathService'; -import { IWorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { ModelService } from 'vs/editor/common/services/modelService'; -import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; -import { NodeTestWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test'; -import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { TestContextService, TestProductService } from 'vs/workbench/test/common/workbenchTestServices'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { INativeHostService } from 'vs/platform/native/common/native'; -import { homedir, release, tmpdir, hostname } from 'os'; -import { IEnvironmentService, INativeEnvironmentService } from 'vs/platform/environment/common/environment'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { getUserDataPath } from 'vs/platform/environment/node/userDataPath'; -import product from 'vs/platform/product/common/product'; -import { IElevatedFileService } from 'vs/workbench/services/files/common/elevatedFileService'; -import { IDecorationsService } from 'vs/workbench/services/decorations/common/decorations'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { joinPath } from 'vs/base/common/resources'; -import { UserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfileService'; -import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; - -const args = parseArgs(process.argv, OPTIONS); - -const homeDir = homedir(); -const NULL_PROFILE = { - name: '', - id: '', - shortName: '', - isDefault: false, - location: URI.file(homeDir), - settingsResource: joinPath(URI.file(homeDir), 'settings.json'), - globalStorageHome: joinPath(URI.file(homeDir), 'globalStorage'), - keybindingsResource: joinPath(URI.file(homeDir), 'keybindings.json'), - tasksResource: joinPath(URI.file(homeDir), 'tasks.json'), - snippetsHome: joinPath(URI.file(homeDir), 'snippets'), - extensionsResource: joinPath(URI.file(homeDir), 'extensions.json') -}; - -export const TestNativeWindowConfiguration: INativeWindowConfiguration = { - windowId: 0, - machineId: 'testMachineId', - logLevel: LogLevel.Error, - loggers: { global: [], window: [] }, - mainPid: 0, - appRoot: '', - userEnv: {}, - execPath: process.execPath, - perfMarks: [], - colorScheme: { dark: true, highContrast: false }, - os: { release: release(), hostname: hostname() }, - product, - homeDir: homeDir, - tmpDir: tmpdir(), - userDataDir: getUserDataPath(args, product.nameShort), - profiles: { profile: NULL_PROFILE, all: [NULL_PROFILE], home: URI.file(homeDir) }, - preferUtilityProcess: false, - ...args -}; - -export const TestEnvironmentService = new NativeWorkbenchEnvironmentService(TestNativeWindowConfiguration, TestProductService); - -export class TestTextFileService extends NativeTextFileService { - private resolveTextContentError!: FileOperationError | null; - - constructor( - @IFileService fileService: IFileService, - @IUntitledTextEditorService untitledTextEditorService: IUntitledTextEditorService, - @ILifecycleService lifecycleService: ILifecycleService, - @IInstantiationService instantiationService: IInstantiationService, - @IModelService modelService: IModelService, - @INativeWorkbenchEnvironmentService environmentService: INativeWorkbenchEnvironmentService, - @IDialogService dialogService: IDialogService, - @IFileDialogService fileDialogService: IFileDialogService, - @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, - @ICodeEditorService codeEditorService: ICodeEditorService, - @IPathService pathService: IPathService, - @IWorkingCopyFileService workingCopyFileService: IWorkingCopyFileService, - @ILogService logService: ILogService, - @IUriIdentityService uriIdentityService: IUriIdentityService, - @ILanguageService languageService: ILanguageService, - @IElevatedFileService elevatedFileService: IElevatedFileService, - @IDecorationsService decorationsService: IDecorationsService - ) { - super( - fileService, - untitledTextEditorService, - lifecycleService, - instantiationService, - modelService, - environmentService, - dialogService, - fileDialogService, - textResourceConfigurationService, - filesConfigurationService, - codeEditorService, - pathService, - workingCopyFileService, - uriIdentityService, - languageService, - elevatedFileService, - logService, - decorationsService - ); - } - - setResolveTextContentErrorOnce(error: FileOperationError): void { - this.resolveTextContentError = error; - } - - override async readStream(resource: URI, options?: IReadTextFileOptions): Promise { - if (this.resolveTextContentError) { - const error = this.resolveTextContentError; - this.resolveTextContentError = null; - - throw error; - } - - const content = await this.fileService.readFileStream(resource, options); - return { - resource: content.resource, - name: content.name, - mtime: content.mtime, - ctime: content.ctime, - etag: content.etag, - encoding: 'utf8', - value: await createTextBufferFactoryFromStream(content.value), - size: 10, - readonly: false - }; - } -} - -export class TestNativeTextFileServiceWithEncodingOverrides extends NativeTextFileService { - - private _testEncoding: TestEncodingOracle | undefined; - override get encoding(): TestEncodingOracle { - if (!this._testEncoding) { - this._testEncoding = this._register(this.instantiationService.createInstance(TestEncodingOracle)); - } - - return this._testEncoding; - } -} - -export function workbenchInstantiationService(disposables = new DisposableStore()): ITestInstantiationService { - const instantiationService = electronSandboxWorkbenchInstantiationService({ - textFileService: insta => insta.createInstance(TestTextFileService), - pathService: insta => insta.createInstance(TestNativePathService) - }, disposables); - - instantiationService.stub(IEnvironmentService, TestEnvironmentService); - instantiationService.stub(INativeEnvironmentService, TestEnvironmentService); - instantiationService.stub(IWorkbenchEnvironmentService, TestEnvironmentService); - instantiationService.stub(INativeWorkbenchEnvironmentService, TestEnvironmentService); - const fileService = new FileService(new NullLogService()); - const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(TestEnvironmentService, fileService, new UriIdentityService(fileService), new NullLogService())); - instantiationService.stub(IUserDataProfileService, new UserDataProfileService(userDataProfilesService.defaultProfile, userDataProfilesService)); - - return instantiationService; -} - -export class TestServiceAccessor { - constructor( - @ILifecycleService public lifecycleService: TestLifecycleService, - @ITextFileService public textFileService: TestTextFileService, - @IFilesConfigurationService public filesConfigurationService: TestFilesConfigurationService, - @IWorkspaceContextService public contextService: TestContextService, - @IModelService public modelService: ModelService, - @IFileService public fileService: TestFileService, - @INativeHostService public nativeHostService: TestNativeHostService, - @IFileDialogService public fileDialogService: TestFileDialogService, - @IWorkingCopyBackupService public workingCopyBackupService: NodeTestWorkingCopyBackupService, - @IWorkingCopyService public workingCopyService: IWorkingCopyService, - @IEditorService public editorService: IEditorService - ) { - } -} - -export class TestNativePathService extends TestPathService { - - constructor() { - super(URI.file(homedir())); - } -} diff --git a/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts b/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts index c0fde1d3fc0..45fa3e437b7 100644 --- a/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts +++ b/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; -import { workbenchInstantiationService as browserWorkbenchInstantiationService, ITestInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices'; +import { workbenchInstantiationService as browserWorkbenchInstantiationService, ITestInstantiationService, TestEncodingOracle, TestEnvironmentService, TestFileDialogService, TestFilesConfigurationService, TestFileService, TestLifecycleService, TestTextFileService } from 'vs/workbench/test/browser/workbenchTestServices'; import { ISharedProcessService } from 'vs/platform/ipc/electron-sandbox/services'; import { INativeHostService, IOSProperties, IOSStatistics } from 'vs/platform/native/common/native'; -import { VSBuffer } from 'vs/base/common/buffer'; +import { VSBuffer, VSBufferReadable, VSBufferReadableStream } from 'vs/base/common/buffer'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; -import { INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs'; +import { IFileDialogService, INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs'; import { IPartsSplash } from 'vs/platform/theme/common/themeService'; import { IOpenedWindow, IOpenEmptyWindowOptions, IWindowOpenable, IOpenWindowOptions, IColorScheme } from 'vs/platform/window/common/window'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; @@ -28,6 +28,24 @@ import { IExtensionRecommendationNotificationService } from 'vs/platform/extensi import { IProductService } from 'vs/platform/product/common/productService'; import { IStorageService } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { IModelService } from 'vs/editor/common/services/model'; +import { ModelService } from 'vs/editor/common/services/modelService'; +import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; +import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle'; +import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; +import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; +import { TestContextService } from 'vs/workbench/test/common/workbenchTestServices'; +import { NativeTextFileService } from 'vs/workbench/services/textfile/electron-sandbox/nativeTextFileService'; +import { insert } from 'vs/base/common/arrays'; +import { Schemas } from 'vs/base/common/network'; +import { FileService } from 'vs/platform/files/common/fileService'; +import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; +import { NullLogService } from 'vs/platform/log/common/log'; +import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; +import { IWorkingCopyIdentifier } from 'vs/workbench/services/workingCopy/common/workingCopy'; +import { NativeWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/electron-sandbox/workingCopyBackupService'; +import { CancellationToken } from 'vs/base/common/cancellation'; export class TestSharedProcessService implements ISharedProcessService { @@ -89,6 +107,7 @@ export class TestNativeHostService implements INativeHostService { async setRepresentedFilename(path: string): Promise { } async isAdmin(): Promise { return false; } async writeElevated(source: URI, target: URI): Promise { } + async isRunningUnderARM64Translation(): Promise { return false; } async getOSProperties(): Promise { return Object.create(null); } async getOSStatistics(): Promise { return Object.create(null); } async getOSVirtualMachineHint(): Promise { return 0; } @@ -116,7 +135,6 @@ export class TestNativeHostService implements INativeHostService { async exit(code: number): Promise { } async openDevTools(options?: Electron.OpenDevToolsOptions | undefined): Promise { } async toggleDevTools(): Promise { } - async toggleSharedProcessWindow(): Promise { } async resolveProxy(url: string): Promise { return undefined; } async findFreePort(startPort: number, giveUpAfter: number, timeout: number, stride?: number): Promise { return -1; } async readClipboardText(type?: 'selection' | 'clipboard' | undefined): Promise { return ''; } @@ -129,7 +147,6 @@ export class TestNativeHostService implements INativeHostService { async sendInputEvent(event: any): Promise { } async windowsGetStringRegKey(hive: 'HKEY_CURRENT_USER' | 'HKEY_LOCAL_MACHINE' | 'HKEY_CLASSES_ROOT' | 'HKEY_USERS' | 'HKEY_CURRENT_CONFIG', path: string, name: string): Promise { return undefined; } async profileRenderer(): Promise { throw new Error(); } - async enableSandbox(enabled: boolean): Promise { throw new Error('Method not implemented.'); } } export class TestExtensionTipsService extends AbstractNativeExtensionTipsService { @@ -158,9 +175,122 @@ export function workbenchInstantiationService(overrides?: { contextKeyService?: (instantiationService: IInstantiationService) => IContextKeyService; textEditorService?: (instantiationService: IInstantiationService) => ITextEditorService; }, disposables = new DisposableStore()): ITestInstantiationService { - const instantiationService = browserWorkbenchInstantiationService(overrides, disposables); + const instantiationService = browserWorkbenchInstantiationService({ + workingCopyBackupService: (instantiationService: IInstantiationService) => new TestNativeWorkingCopyBackupService(), + ...overrides + }, disposables); instantiationService.stub(INativeHostService, new TestNativeHostService()); return instantiationService; } + +export class TestServiceAccessor { + constructor( + @ILifecycleService public lifecycleService: TestLifecycleService, + @ITextFileService public textFileService: TestTextFileService, + @IFilesConfigurationService public filesConfigurationService: TestFilesConfigurationService, + @IWorkspaceContextService public contextService: TestContextService, + @IModelService public modelService: ModelService, + @IFileService public fileService: TestFileService, + @INativeHostService public nativeHostService: TestNativeHostService, + @IFileDialogService public fileDialogService: TestFileDialogService, + @IWorkingCopyBackupService public workingCopyBackupService: TestNativeWorkingCopyBackupService, + @IWorkingCopyService public workingCopyService: IWorkingCopyService, + @IEditorService public editorService: IEditorService + ) { + } +} + +export class TestNativeTextFileServiceWithEncodingOverrides extends NativeTextFileService { + + private _testEncoding: TestEncodingOracle | undefined; + override get encoding(): TestEncodingOracle { + if (!this._testEncoding) { + this._testEncoding = this._register(this.instantiationService.createInstance(TestEncodingOracle)); + } + + return this._testEncoding; + } +} + +export class TestNativeWorkingCopyBackupService extends NativeWorkingCopyBackupService { + + private backupResourceJoiners: Function[]; + private discardBackupJoiners: Function[]; + discardedBackups: IWorkingCopyIdentifier[]; + discardedAllBackups: boolean; + private pendingBackupsArr: Promise[]; + + constructor() { + const environmentService = TestEnvironmentService; + const logService = new NullLogService(); + const fileService = new FileService(logService); + const lifecycleService = new TestLifecycleService(); + super(environmentService as any, fileService, logService, lifecycleService); + + const inMemoryFileSystemProvider = new InMemoryFileSystemProvider(); + fileService.registerProvider(Schemas.inMemory, inMemoryFileSystemProvider); + fileService.registerProvider(Schemas.vscodeUserData, new FileUserDataProvider(Schemas.file, inMemoryFileSystemProvider, Schemas.vscodeUserData, logService)); + + this.backupResourceJoiners = []; + this.discardBackupJoiners = []; + this.discardedBackups = []; + this.pendingBackupsArr = []; + this.discardedAllBackups = false; + } + + testGetFileService(): IFileService { + return this.fileService; + } + + async waitForAllBackups(): Promise { + await Promise.all(this.pendingBackupsArr); + } + + joinBackupResource(): Promise { + return new Promise(resolve => this.backupResourceJoiners.push(resolve)); + } + + override async backup(identifier: IWorkingCopyIdentifier, content?: VSBufferReadableStream | VSBufferReadable, versionId?: number, meta?: any, token?: CancellationToken): Promise { + const p = super.backup(identifier, content, versionId, meta, token); + const removeFromPendingBackups = insert(this.pendingBackupsArr, p.then(undefined, undefined)); + + try { + await p; + } finally { + removeFromPendingBackups(); + } + + while (this.backupResourceJoiners.length) { + this.backupResourceJoiners.pop()!(); + } + } + + joinDiscardBackup(): Promise { + return new Promise(resolve => this.discardBackupJoiners.push(resolve)); + } + + override async discardBackup(identifier: IWorkingCopyIdentifier): Promise { + await super.discardBackup(identifier); + this.discardedBackups.push(identifier); + + while (this.discardBackupJoiners.length) { + this.discardBackupJoiners.pop()!(); + } + } + + override async discardBackups(filter?: { except: IWorkingCopyIdentifier[] }): Promise { + this.discardedAllBackups = true; + + return super.discardBackups(filter); + } + + async getBackupContents(identifier: IWorkingCopyIdentifier): Promise { + const backupResource = this.toBackupResource(identifier); + + const fileContents = await this.fileService.readFile(backupResource); + + return fileContents.value.toString(); + } +} diff --git a/src/vs/workbench/workbench.common.main.ts b/src/vs/workbench/workbench.common.main.ts index d25396579f5..84fcf6128ee 100644 --- a/src/vs/workbench/workbench.common.main.ts +++ b/src/vs/workbench/workbench.common.main.ts @@ -55,6 +55,7 @@ import 'vs/workbench/browser/parts/views/viewsService'; import 'vs/platform/actions/common/actions.contribution'; import 'vs/platform/undoRedo/common/undoRedoService'; import 'vs/workbench/services/workspaces/common/editSessionIdentityService'; +import 'vs/workbench/services/workspaces/common/canonicalUriService'; import 'vs/workbench/services/extensions/browser/extensionUrlHandler'; import 'vs/workbench/services/keybinding/common/keybindingEditing'; import 'vs/workbench/services/decorations/browser/decorationsService'; @@ -89,6 +90,7 @@ import 'vs/workbench/services/userDataProfile/browser/userDataProfileManagement' import 'vs/workbench/services/userDataProfile/common/remoteUserDataProfiles'; import 'vs/workbench/services/remote/common/remoteExplorerService'; import 'vs/workbench/services/remote/common/remoteExtensionsScanner'; +import 'vs/workbench/services/terminal/common/embedderTerminalService'; import 'vs/workbench/services/workingCopy/common/workingCopyService'; import 'vs/workbench/services/workingCopy/common/workingCopyFileService'; import 'vs/workbench/services/workingCopy/common/workingCopyEditorService'; @@ -103,7 +105,11 @@ import 'vs/workbench/services/outline/browser/outlineService'; import 'vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl'; import 'vs/editor/common/services/languageFeaturesService'; import 'vs/editor/common/services/semanticTokensStylingService'; +import 'vs/editor/common/services/treeViewsDndService'; import 'vs/workbench/services/textMate/browser/textMateTokenizationFeature.contribution'; +import 'vs/workbench/services/userActivity/common/userActivityService'; +import 'vs/workbench/services/userActivity/browser/userActivityBrowser'; +import 'vs/workbench/services/issue/browser/issueTroubleshoot'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService'; @@ -168,6 +174,9 @@ import 'vs/workbench/contrib/contextmenu/browser/contextmenu.contribution'; // Notebook import 'vs/workbench/contrib/notebook/browser/notebook.contribution'; +import 'vs/workbench/contrib/chat/browser/chat.contribution'; +import 'vs/workbench/contrib/inlineChat/browser/inlineChat.contribution'; + // Interactive import 'vs/workbench/contrib/interactive/browser/interactive.contribution'; @@ -216,6 +225,9 @@ import 'vs/workbench/contrib/markers/browser/markers.contribution'; // Merge Editor import 'vs/workbench/contrib/mergeEditor/browser/mergeEditor.contribution'; +// Commands +import 'vs/workbench/contrib/commands/common/commands.contribution'; + // Comments import 'vs/workbench/contrib/comments/browser/comments.contribution'; @@ -241,11 +253,10 @@ import 'vs/workbench/contrib/output/browser/output.contribution'; import 'vs/workbench/contrib/output/browser/outputView'; // Terminal -import 'vs/workbench/contrib/terminal/common/environmentVariable.contribution'; -import 'vs/workbench/contrib/terminal/common/terminalExtensionPoints.contribution'; +import 'vs/workbench/contrib/terminal/terminal.all'; + +// External terminal import 'vs/workbench/contrib/externalTerminal/browser/externalTerminal.contribution'; -import 'vs/workbench/contrib/terminal/browser/terminal.contribution'; -import 'vs/workbench/contrib/terminal/browser/terminalView'; // Relauncher import 'vs/workbench/contrib/relauncher/browser/relauncher.contribution'; @@ -293,7 +304,6 @@ import 'vs/workbench/contrib/surveys/browser/ces.contribution'; import 'vs/workbench/contrib/surveys/browser/languageSurveys.contribution'; // Welcome -import 'vs/workbench/contrib/welcomeOverlay/browser/welcomeOverlay'; import 'vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution'; import 'vs/workbench/contrib/welcomeWalkthrough/browser/walkThrough.contribution'; import 'vs/workbench/contrib/welcomeViews/common/viewsWelcome.contribution'; @@ -315,9 +325,6 @@ import 'vs/workbench/contrib/languageDetection/browser/languageDetection.contrib // Language Status import 'vs/workbench/contrib/languageStatus/browser/languageStatus.contribution'; -// Experiments -import 'vs/workbench/contrib/experiments/browser/experiments.contribution'; - // Send a Smile import 'vs/workbench/contrib/feedback/browser/feedback.contribution'; @@ -357,4 +364,10 @@ import 'vs/workbench/contrib/deprecatedExtensionMigrator/browser/deprecatedExten // Bracket Pair Colorizer 2 Telemetry import 'vs/workbench/contrib/bracketPairColorizer2Telemetry/browser/bracketPairColorizer2Telemetry.contribution'; +// Accessibility +import 'vs/workbench/contrib/accessibility/browser/accessibility.contribution'; + +// Share +import 'vs/workbench/contrib/share/browser/share.contribution'; + //#endregion diff --git a/src/vs/workbench/workbench.desktop.main.ts b/src/vs/workbench/workbench.desktop.main.ts index 20ec06a9b8d..e943de4afff 100644 --- a/src/vs/workbench/workbench.desktop.main.ts +++ b/src/vs/workbench/workbench.desktop.main.ts @@ -38,6 +38,7 @@ import 'vs/workbench/services/textfile/electron-sandbox/nativeTextFileService'; import 'vs/workbench/services/dialogs/electron-sandbox/fileDialogService'; import 'vs/workbench/services/workspaces/electron-sandbox/workspacesService'; import 'vs/workbench/services/menubar/electron-sandbox/menubarService'; +import 'vs/workbench/services/issue/electron-sandbox/issueMainService'; import 'vs/workbench/services/issue/electron-sandbox/issueService'; import 'vs/workbench/services/update/electron-sandbox/updateService'; import 'vs/workbench/services/url/electron-sandbox/urlService'; @@ -57,12 +58,13 @@ import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionMana import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionUrlTrustService'; import 'vs/workbench/services/credentials/electron-sandbox/credentialsService'; import 'vs/workbench/services/encryption/electron-sandbox/encryptionService'; +import 'vs/workbench/services/secrets/electron-sandbox/secretStorageService'; import 'vs/workbench/services/localization/electron-sandbox/languagePackService'; import 'vs/workbench/services/telemetry/electron-sandbox/telemetryService'; import 'vs/workbench/services/extensions/electron-sandbox/extensionHostStarter'; import 'vs/platform/extensionResourceLoader/common/extensionResourceLoaderService'; import 'vs/workbench/services/localization/electron-sandbox/localeService'; -import 'vs/platform/extensionManagement/electron-sandbox/extensionsScannerService'; +import 'vs/workbench/services/extensions/electron-sandbox/extensionsScannerService'; import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementServerService'; import 'vs/workbench/services/extensionManagement/electron-sandbox/extensionTipsService'; import 'vs/workbench/services/userDataSync/electron-sandbox/userDataSyncMachinesService'; @@ -92,8 +94,9 @@ import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/ import { IUserDataInitializationService, UserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit'; import { IExtensionsProfileScannerService } from 'vs/platform/extensionManagement/common/extensionsProfileScannerService'; import { ExtensionsProfileScannerService } from 'vs/platform/extensionManagement/electron-sandbox/extensionsProfileScannerService'; +import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -registerSingleton(IUserDataInitializationService, UserDataInitializationService, InstantiationType.Delayed); +registerSingleton(IUserDataInitializationService, new SyncDescriptor(UserDataInitializationService, [[]], true)); registerSingleton(IExtensionsProfileScannerService, ExtensionsProfileScannerService, InstantiationType.Delayed); @@ -109,7 +112,6 @@ import 'vs/workbench/contrib/logs/electron-sandbox/logs.contribution'; import 'vs/workbench/contrib/localization/electron-sandbox/localization.contribution'; // Explorer -import 'vs/workbench/contrib/files/electron-sandbox/files.contribution'; import 'vs/workbench/contrib/files/electron-sandbox/fileActions.contribution'; // CodeEditor Contributions @@ -167,9 +169,6 @@ import 'vs/workbench/contrib/mergeEditor/electron-sandbox/mergeEditor.contributi // Remote Tunnel import 'vs/workbench/contrib/remoteTunnel/electron-sandbox/remoteTunnel.contribution'; -// Sandbox -import 'vs/workbench/contrib/sandbox/electron-sandbox/sandbox.contribution'; - //#endregion diff --git a/src/vs/workbench/workbench.web.main.ts b/src/vs/workbench/workbench.web.main.ts index b96b78442c8..8306e4eac0f 100644 --- a/src/vs/workbench/workbench.web.main.ts +++ b/src/vs/workbench/workbench.web.main.ts @@ -56,6 +56,7 @@ import 'vs/workbench/services/localization/browser/localeService'; import 'vs/workbench/services/path/browser/pathService'; import 'vs/workbench/services/themes/browser/browserHostColorSchemeService'; import 'vs/workbench/services/encryption/browser/encryptionService'; +import 'vs/workbench/services/secrets/browser/secretStorageService'; import 'vs/workbench/services/workingCopy/browser/workingCopyBackupService'; import 'vs/workbench/services/tunnel/browser/tunnelService'; import 'vs/workbench/services/files/browser/elevatedFileService'; @@ -116,9 +117,6 @@ registerSingleton(ILanguagePackService, WebLanguagePacksService, InstantiationTy // Logs import 'vs/workbench/contrib/logs/browser/logs.contribution'; -// Explorer -import 'vs/workbench/contrib/files/browser/files.web.contribution'; - // Localization import 'vs/workbench/contrib/localization/browser/localization.contribution'; @@ -134,6 +132,9 @@ import 'vs/workbench/contrib/debug/browser/extensionHostDebugService'; // Welcome Banner import 'vs/workbench/contrib/welcomeBanner/browser/welcomeBanner.contribution'; +// Welcome Dialog +import 'vs/workbench/contrib/welcomeDialog/browser/welcomeDialog.contribution'; + // Webview import 'vs/workbench/contrib/webview/browser/webview.web.contribution'; @@ -157,8 +158,8 @@ import 'vs/workbench/contrib/issue/browser/issue.contribution'; // Splash import 'vs/workbench/contrib/splash/browser/splash.contribution'; -// Offline -import 'vs/workbench/contrib/offline/browser/offline.contribution'; +// Remote Start Entry for the Web +import 'vs/workbench/contrib/remote/browser/remoteStartEntry.contribution'; //#endregion diff --git a/src/vscode-dts/vscode.d.ts b/src/vscode-dts/vscode.d.ts index 7fbd188bc2c..d819f00fa1c 100644 --- a/src/vscode-dts/vscode.d.ts +++ b/src/vscode-dts/vscode.d.ts @@ -733,7 +733,7 @@ declare module 'vscode' { */ OpenOpen = 0, /** - * The decoration's range will not widen when edits occur at the start of end. + * The decoration's range will not widen when edits occur at the start or end. */ ClosedClosed = 1, /** @@ -3710,7 +3710,18 @@ declare module 'vscode' { * the file is being created with. * @param metadata Optional metadata for the entry. */ - createFile(uri: Uri, options?: { readonly overwrite?: boolean; readonly ignoreIfExists?: boolean; readonly contents?: Uint8Array }, metadata?: WorkspaceEditEntryMetadata): void; + createFile(uri: Uri, options?: { + readonly overwrite?: boolean; + readonly ignoreIfExists?: boolean; + + /** + * The initial contents of the new file. + * + * If creating a file from a {@link DocumentDropEditProvider drop operation}, you can + * pass in a {@link DataTransferFile} to improve performance by avoiding extra data copying. + */ + readonly contents?: Uint8Array | DataTransferFile; + }, metadata?: WorkspaceEditEntryMetadata): void; /** * Delete a file or folder. @@ -6499,7 +6510,7 @@ declare module 'vscode' { /** * Outputs the given trace message to the channel. Use this method to log verbose information. * - * The message is only loggeed if the channel is configured to display {@link LogLevel.Trace trace} log level. + * The message is only logged if the channel is configured to display {@link LogLevel.Trace trace} log level. * * @param message trace message to log */ @@ -6508,7 +6519,7 @@ declare module 'vscode' { /** * Outputs the given debug message to the channel. * - * The message is only loggeed if the channel is configured to display {@link LogLevel.Debug debug} log level or lower. + * The message is only logged if the channel is configured to display {@link LogLevel.Debug debug} log level or lower. * * @param message debug message to log */ @@ -6517,7 +6528,7 @@ declare module 'vscode' { /** * Outputs the given information message to the channel. * - * The message is only loggeed if the channel is configured to display {@link LogLevel.Info info} log level or lower. + * The message is only logged if the channel is configured to display {@link LogLevel.Info info} log level or lower. * * @param message info message to log */ @@ -6526,7 +6537,7 @@ declare module 'vscode' { /** * Outputs the given warning message to the channel. * - * The message is only loggeed if the channel is configured to display {@link LogLevel.Warning warning} log level or lower. + * The message is only logged if the channel is configured to display {@link LogLevel.Warning warning} log level or lower. * * @param message warning message to log */ @@ -6535,7 +6546,7 @@ declare module 'vscode' { /** * Outputs the given error or error message to the channel. * - * The message is only loggeed if the channel is configured to display {@link LogLevel.Error error} log level or lower. + * The message is only logged if the channel is configured to display {@link LogLevel.Error error} log level or lower. * * @param error Error or error message to log */ @@ -7432,6 +7443,11 @@ declare module 'vscode' { * Controls whether the terminal is cleared before executing the task. */ clear?: boolean; + + /** + * Controls whether the terminal is closed after executing the task. + */ + close?: boolean; } /** @@ -10142,22 +10158,23 @@ declare module 'vscode' { /** * Creates a status bar {@link StatusBarItem item}. * - * @param alignment The alignment of the item. - * @param priority The priority of the item. Higher values mean the item should be shown more to the left. - * @return A new status bar item. - */ - export function createStatusBarItem(alignment?: StatusBarAlignment, priority?: number): StatusBarItem; - - /** - * Creates a status bar {@link StatusBarItem item}. - * - * @param id The unique identifier of the item. + * @param id The identifier of the item. Must be unique within the extension. * @param alignment The alignment of the item. * @param priority The priority of the item. Higher values mean the item should be shown more to the left. * @return A new status bar item. */ export function createStatusBarItem(id: string, alignment?: StatusBarAlignment, priority?: number): StatusBarItem; + /** + * Creates a status bar {@link StatusBarItem item}. + * + * @see {@link createStatusBarItem} for creating a status bar item with an identifier. + * @param alignment The alignment of the item. + * @param priority The priority of the item. Higher values mean the item should be shown more to the left. + * @return A new status bar item. + */ + export function createStatusBarItem(alignment?: StatusBarAlignment, priority?: number): StatusBarItem; + /** * Creates a {@link Terminal} with a backing shell process. The cwd of the terminal will be the workspace * directory if it exists. @@ -10375,6 +10392,44 @@ declare module 'vscode' { * An optional interface to implement drag and drop in the tree view. */ dragAndDropController?: TreeDragAndDropController; + + /** + * By default, when the children of a tree item have already been fetched, child checkboxes are automatically managed based on the checked state of the parent tree item. + * If the tree item is collapsed by default (meaning that the children haven't yet been fetched) then child checkboxes will not be updated. + * To override this behavior and manage child and parent checkbox state in the extension, set this to `true`. + * + * Examples where {@link TreeViewOptions.manageCheckboxStateManually} is false, the default behavior: + * + * 1. A tree item is checked, then its children are fetched. The children will be checked. + * + * 2. A tree item's parent is checked. The tree item and all of it's siblings will be checked. + * - [ ] Parent + * - [ ] Child 1 + * - [ ] Child 2 + * When the user checks Parent, the tree will look like this: + * - [x] Parent + * - [x] Child 1 + * - [x] Child 2 + * + * 3. A tree item and all of it's siblings are checked. The parent will be checked. + * - [ ] Parent + * - [ ] Child 1 + * - [ ] Child 2 + * When the user checks Child 1 and Child 2, the tree will look like this: + * - [x] Parent + * - [x] Child 1 + * - [x] Child 2 + * + * 4. A tree item is unchecked. The parent will be unchecked. + * - [x] Parent + * - [x] Child 1 + * - [x] Child 2 + * When the user unchecks Child 1, the tree will look like this: + * - [ ] Parent + * - [ ] Child 1 + * - [x] Child 2 + */ + manageCheckboxStateManually?: boolean; } /** @@ -10414,6 +10469,8 @@ declare module 'vscode' { /** * A file associated with a {@linkcode DataTransferItem}. + * + * Instances of this type can only be created by the editor and not by extensions. */ export interface DataTransferFile { /** @@ -10589,6 +10646,16 @@ declare module 'vscode' { readonly value: number; } + /** + * An event describing the change in a tree item's checkbox state. + */ + export interface TreeCheckboxChangeEvent { + /** + * The items that were checked or unchecked. + */ + readonly items: ReadonlyArray<[T, TreeItemCheckboxState]>; + } + /** * Represents a Tree view */ @@ -10624,6 +10691,11 @@ declare module 'vscode' { */ readonly onDidChangeVisibility: Event; + /** + * An event to signal that an element or root has either been checked or unchecked. + */ + readonly onDidChangeCheckboxState: Event>; + /** * An optional human-readable message that will be rendered in the view. * Setting the message to null, undefined, or empty string will remove the message from the view. @@ -10805,6 +10877,12 @@ declare module 'vscode' { */ accessibilityInformation?: AccessibilityInformation; + /** + * {@link TreeItemCheckboxState TreeItemCheckboxState} of the tree item. + * {@link TreeDataProvider.onDidChangeTreeData onDidChangeTreeData} should be fired when {@link TreeItem.checkboxState checkboxState} changes. + */ + checkboxState?: TreeItemCheckboxState | { readonly state: TreeItemCheckboxState; readonly tooltip?: string; readonly accessibilityInformation?: AccessibilityInformation }; + /** * @param label A human-readable string describing this item * @param collapsibleState {@link TreeItemCollapsibleState} of the tree item. Default is {@link TreeItemCollapsibleState.None} @@ -10853,6 +10931,20 @@ declare module 'vscode' { highlights?: [number, number][]; } + /** + * Checkbox state of the tree item + */ + export enum TreeItemCheckboxState { + /** + * Determines an item is unchecked + */ + Unchecked = 0, + /** + * Determines an item is checked + */ + Checked = 1 + } + /** * Value-object describing what options a terminal should use. */ @@ -11045,7 +11137,7 @@ declare module 'vscode' { * **Example:** Exit the terminal when "y" is pressed, otherwise show a notification. * ```typescript * const writeEmitter = new vscode.EventEmitter(); - * const closeEmitter = new vscode.EventEmitter(); + * const closeEmitter = new vscode.EventEmitter(); * const pty: vscode.Pseudoterminal = { * onDidWrite: writeEmitter.event, * onDidClose: closeEmitter.event, @@ -11058,7 +11150,8 @@ declare module 'vscode' { * closeEmitter.fire(); * } * }; - * vscode.window.createTerminal({ name: 'Exit example', pty }); + * const terminal = vscode.window.createTerminal({ name: 'Exit example', pty }); + * terminal.show(true); * ``` */ onDidClose?: Event; @@ -11244,6 +11337,12 @@ declare module 'vscode' { */ persistent: boolean; + /** + * A description for the environment variable collection, this will be used to describe the + * changes in the UI. + */ + description: string | MarkdownString | undefined; + /** * Replace an environment variable with a value. * @@ -12263,7 +12362,7 @@ declare module 'vscode' { * If you want to monitor file events across all opened workspace folders: * * ```ts - * vscode.workspace.createFileSystemWatcher('**​/*.js')); + * vscode.workspace.createFileSystemWatcher('**​/*.js'); * ``` * * *Note:* the array of workspace folders can be empty if no workspace is opened (empty window). @@ -12489,6 +12588,21 @@ declare module 'vscode' { */ export const onDidChangeNotebookDocument: Event; + /** + * An event that is emitted when a {@link NotebookDocument notebook document} will be saved to disk. + * + * *Note 1:* Subscribers can delay saving by registering asynchronous work. For the sake of data integrity the editor + * might save without firing this event. For instance when shutting down with dirty files. + * + * *Note 2:* Subscribers are called sequentially and they can {@link NotebookDocumentWillSaveEvent.waitUntil delay} saving + * by registering asynchronous work. Protection against misbehaving listeners is implemented as such: + * * there is an overall time budget that all listeners share and if that is exhausted no further listener is called + * * listeners that take a long time or produce errors frequently will not be called anymore + * + * The current thresholds are 1.5 seconds as overall time budget and a listener can misbehave 3 times before being ignored. + */ + export const onWillSaveNotebookDocument: Event; + /** * An event that is emitted when a {@link NotebookDocument notebook} is saved. */ @@ -13558,6 +13672,61 @@ declare module 'vscode' { readonly cellChanges: readonly NotebookDocumentCellChange[]; } + /** + * An event that is fired when a {@link NotebookDocument notebook document} will be saved. + * + * To make modifications to the document before it is being saved, call the + * {@linkcode NotebookDocumentWillSaveEvent.waitUntil waitUntil}-function with a thenable + * that resolves to a {@link WorkspaceEdit workspace edit}. + */ + export interface NotebookDocumentWillSaveEvent { + /** + * A cancellation token. + */ + readonly token: CancellationToken; + + /** + * The {@link NotebookDocument notebook document} that will be saved. + */ + readonly notebook: NotebookDocument; + + /** + * The reason why save was triggered. + */ + readonly reason: TextDocumentSaveReason; + + /** + * Allows to pause the event loop and to apply {@link WorkspaceEdit workspace edit}. + * Edits of subsequent calls to this function will be applied in order. The + * edits will be *ignored* if concurrent modifications of the notebook document happened. + * + * *Note:* This function can only be called during event dispatch and not + * in an asynchronous manner: + * + * ```ts + * workspace.onWillSaveNotebookDocument(event => { + * // async, will *throw* an error + * setTimeout(() => event.waitUntil(promise)); + * + * // sync, OK + * event.waitUntil(promise); + * }) + * ``` + * + * @param thenable A thenable that resolves to {@link WorkspaceEdit workspace edit}. + */ + waitUntil(thenable: Thenable): void; + + /** + * Allows to pause the event loop until the provided thenable resolved. + * + * *Note:* This function can only be called during event dispatch. + * + * @param thenable A thenable that delays saving. + */ + waitUntil(thenable: Thenable): void; + } + /** * The summary of a notebook cell execution. */ @@ -15564,18 +15733,35 @@ declare module 'vscode' { readonly label: string; } + /** + * Optional options to be used when calling {@link authentication.getSession} with the flag `forceNewSession`. + */ + export interface AuthenticationForceNewSessionOptions { + /** + * An optional message that will be displayed to the user when we ask to re-authenticate. Providing additional context + * as to why you are asking a user to re-authenticate can help increase the odds that they will accept. + */ + detail?: string; + } /** * Options to be used when getting an {@link AuthenticationSession} from an {@link AuthenticationProvider}. */ export interface AuthenticationGetSessionOptions { /** - * Whether the existing user session preference should be cleared. + * Whether the existing session preference should be cleared. * * For authentication providers that support being signed into multiple accounts at once, the user will be * prompted to select an account to use when {@link authentication.getSession getSession} is called. This preference * is remembered until {@link authentication.getSession getSession} is called with this flag. * + * Note: + * The preference is extension specific. So if one extension calls {@link authentication.getSession getSession}, it will not + * affect the session preference for another extension calling {@link authentication.getSession getSession}. Additionally, + * the preference is set for the current workspace and also globally. This means that new workspaces will use the "global" + * value at first and then when this flag is provided, a new value can be set for that workspace. This also means + * that pre-existing workspaces will not lose their preference if a new workspace sets this flag. + * * Defaults to false. */ clearSessionPreference?: boolean; @@ -15607,7 +15793,7 @@ declare module 'vscode' { * * This defaults to false. */ - forceNewSession?: boolean | { detail: string }; + forceNewSession?: boolean | AuthenticationForceNewSessionOptions; /** * Whether we should show the indication to sign in in the Accounts menu. @@ -15757,7 +15943,7 @@ declare module 'vscode' { * @param options The {@link AuthenticationGetSessionOptions} to use * @returns A thenable that resolves to an authentication session */ - export function getSession(providerId: string, scopes: readonly string[], options: AuthenticationGetSessionOptions & { forceNewSession: true | { detail: string } }): Thenable; + export function getSession(providerId: string, scopes: readonly string[], options: AuthenticationGetSessionOptions & { forceNewSession: true | AuthenticationForceNewSessionOptions }): Thenable; /** * Get an authentication session matching the desired scopes. Rejects if a provider with providerId is not @@ -15810,12 +15996,15 @@ declare module 'vscode' { * Marks a string for localization. If a localized bundle is available for the language specified by * {@link env.language} and the bundle has a localized value for this message, then that localized * value will be returned (with injected {@link args} values for any templated values). + * * @param message - The message to localize. Supports index templating where strings like `{0}` and `{1}` are * replaced by the item at that index in the {@link args} array. * @param args - The arguments to be used in the localized string. The index of the argument is used to * match the template placeholder in the localized string. * @returns localized string with injected arguments. - * @example `l10n.t('Hello {0}!', 'World');` + * + * @example + * l10n.t('Hello {0}!', 'World'); */ export function t(message: string, ...args: Array): string; @@ -15823,18 +16012,22 @@ declare module 'vscode' { * Marks a string for localization. If a localized bundle is available for the language specified by * {@link env.language} and the bundle has a localized value for this message, then that localized * value will be returned (with injected {@link args} values for any templated values). + * * @param message The message to localize. Supports named templating where strings like `{foo}` and `{bar}` are * replaced by the value in the Record for that key (foo, bar, etc). * @param args The arguments to be used in the localized string. The name of the key in the record is used to * match the template placeholder in the localized string. * @returns localized string with injected arguments. - * @example `l10n.t('Hello {name}', { name: 'Erich' });` + * + * @example + * l10n.t('Hello {name}', { name: 'Erich' }); */ export function t(message: string, args: Record): string; /** * Marks a string for localization. If a localized bundle is available for the language specified by * {@link env.language} and the bundle has a localized value for this message, then that localized * value will be returned (with injected args values for any templated values). + * * @param options The options to use when localizing the message. * @returns localized string with injected arguments. */ @@ -15946,6 +16139,13 @@ declare module 'vscode' { */ isDefault: boolean; + /** + * Whether this profile supports continuous running of requests. If so, + * then {@link TestRunRequest.continuous} may be set to `true`. Defaults + * to false. + */ + supportsContinuousRun: boolean; + /** * Associated tag for the profile. If this is set, only {@link TestItem} * instances with the same tag will be eligible to execute in this profile. @@ -15966,6 +16166,11 @@ declare module 'vscode' { * associated with the request should be created before the function returns * or the returned promise is resolved. * + * If {@link supportsContinuousRun} is set, then {@link TestRunRequest.continuous} + * may be `true`. In this case, the profile should observe changes to + * source code and create new test runs by calling {@link TestController.createTestRun}, + * until the cancellation is requested on the `token`. + * * @param request Request information for the test run. * @param cancellationToken Token that signals the used asked to abort the * test run. If cancellation is requested on this token, all {@link TestRun} @@ -16020,10 +16225,11 @@ declare module 'vscode' { * @param runHandler Function called to start a test run. * @param isDefault Whether this is the default action for its kind. * @param tag Profile test tag. + * @param supportsContinuousRun Whether the profile supports continuous running. * @returns An instance of a {@link TestRunProfile}, which is automatically * associated with this controller. */ - createRunProfile(label: string, kind: TestRunProfileKind, runHandler: (request: TestRunRequest, token: CancellationToken) => Thenable | void, isDefault?: boolean, tag?: TestTag): TestRunProfile; + createRunProfile(label: string, kind: TestRunProfileKind, runHandler: (request: TestRunRequest, token: CancellationToken) => Thenable | void, isDefault?: boolean, tag?: TestTag, supportsContinuousRun?: boolean): TestRunProfile; /** * A function provided by the extension that the editor may call to request @@ -16138,12 +16344,19 @@ declare module 'vscode' { */ readonly profile: TestRunProfile | undefined; + /** + * Whether the profile should run continuously as source code changes. Only + * relevant for profiles that set {@link TestRunProfile.supportsContinuousRun}. + */ + readonly continuous?: boolean; + /** * @param include Array of specific tests to run, or undefined to run all tests * @param exclude An array of tests to exclude from the run. * @param profile The run profile used for this request. + * @param continuous Whether to run tests continuously as source changes. */ - constructor(include?: readonly TestItem[], exclude?: readonly TestItem[], profile?: TestRunProfile); + constructor(include?: readonly TestItem[], exclude?: readonly TestItem[], profile?: TestRunProfile, continuous?: boolean); } /** @@ -16228,7 +16441,7 @@ declare module 'vscode' { appendOutput(output: string, location?: Location, test?: TestItem): void; /** - * Signals that the end of the test run. Any tests included in the run whose + * Signals the end of the test run. Any tests included in the run whose * states have not been updated will have their state reset. */ end(): void; @@ -16654,7 +16867,7 @@ declare module 'vscode' { } /** - * Represents the main editor area which consists of multple groups which contain tabs. + * Represents the main editor area which consists of multiple groups which contain tabs. */ export interface TabGroups { /** diff --git a/src/vscode-dts/vscode.proposed.authGetSessions.d.ts b/src/vscode-dts/vscode.proposed.authGetSessions.d.ts new file mode 100644 index 00000000000..20a692c0180 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.authGetSessions.d.ts @@ -0,0 +1,62 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + // https://github.com/microsoft/vscode/issues/152399 + + export interface AuthenticationForceNewSessionOptions { + /** + * The session that you are asking to be recreated. The Auth Provider can use this to + * help guide the user to log in to the correct account. + */ + sessionToRecreate?: AuthenticationSession; + } + + export namespace authentication { + /** + * Get all authentication sessions matching the desired scopes that this extension has access to. In order to request access, + * use {@link getSession}. To request an additional account, specify {@link AuthenticationGetSessionOptions.clearSessionPreference} + * and {@link AuthenticationGetSessionOptions.createIfNone} together. + * + * Currently, there are only two authentication providers that are contributed from built in extensions + * to the editor that implement GitHub and Microsoft authentication: their providerId's are 'github' and 'microsoft'. + * + * @param providerId The id of the provider to use + * @param scopes A list of scopes representing the permissions requested. These are dependent on the authentication provider + * @returns A thenable that resolves to a readonly array of authentication sessions. + */ + export function getSessions(providerId: string, scopes: readonly string[]): Thenable; + } + + /** + * The options passed in to the provider when creating a session. + */ + export interface AuthenticationProviderCreateSessionOptions { + /** + * The session that is being asked to be recreated. If this is passed in, the provider should + * attempt to recreate the session based on the information in this session. + */ + sessionToRecreate?: AuthenticationSession; + } + + export interface AuthenticationProvider { + /** + * Prompts a user to login. + * + * If login is successful, the onDidChangeSessions event should be fired. + * + * If login fails, a rejected promise should be returned. + * + * If the provider has specified that it does not support multiple accounts, + * then this should never be called if there is already an existing session matching these + * scopes. + * @param scopes A list of scopes, permissions, that the new session should be created with. + * @param options Additional options for creating a session. + * @returns A promise that resolves to an authentication session. + */ + createSession(scopes: readonly string[], options: AuthenticationProviderCreateSessionOptions): Thenable; + } +} diff --git a/src/vscode-dts/vscode.proposed.canonicalUriProvider.d.ts b/src/vscode-dts/vscode.proposed.canonicalUriProvider.d.ts new file mode 100644 index 00000000000..84ee599797d --- /dev/null +++ b/src/vscode-dts/vscode.proposed.canonicalUriProvider.d.ts @@ -0,0 +1,47 @@ +/*--------------------------------------------------------------------------------------------- + * 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/180582 + + export namespace workspace { + /** + * + * @param scheme The URI scheme that this provider can provide canonical URIs for. + * A canonical URI represents the conversion of a resource's alias into a source of truth URI. + * Multiple aliases may convert to the same source of truth URI. + * @param provider A provider which can convert URIs of scheme @param scheme to + * a canonical URI which is stable across machines. + */ + export function registerCanonicalUriProvider(scheme: string, provider: CanonicalUriProvider): Disposable; + + /** + * + * @param uri The URI to provide a canonical URI for. + * @param token A cancellation token for the request. + */ + export function getCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, token: CancellationToken): ProviderResult; + } + + export interface CanonicalUriProvider { + /** + * + * @param uri The URI to provide a canonical URI for. + * @param options Options that the provider should honor in the URI it returns. + * @param token A cancellation token for the request. + * @returns The canonical URI for the requested URI or undefined if no canonical URI can be provided. + */ + provideCanonicalUri(uri: Uri, options: CanonicalUriRequestOptions, token: CancellationToken): ProviderResult; + } + + export interface CanonicalUriRequestOptions { + /** + * + * The desired scheme of the canonical URI. + */ + targetScheme: string; + } +} diff --git a/src/vscode-dts/vscode.proposed.notebookControllerKind.d.ts b/src/vscode-dts/vscode.proposed.commentsDraftState.d.ts similarity index 67% rename from src/vscode-dts/vscode.proposed.notebookControllerKind.d.ts rename to src/vscode-dts/vscode.proposed.commentsDraftState.d.ts index b8a4a5376e8..ee41130910a 100644 --- a/src/vscode-dts/vscode.proposed.notebookControllerKind.d.ts +++ b/src/vscode-dts/vscode.proposed.commentsDraftState.d.ts @@ -5,12 +5,14 @@ declare module 'vscode' { - // https://github.com/microsoft/vscode-jupyter/issues/7373 + // https://github.com/microsoft/vscode/issues/171166 - export interface NotebookController { - /** - * The human-readable label used to categorise controllers. - */ - kind?: string; + export enum CommentState { + Published = 0, + Draft = 1 + } + + export interface Comment { + state?: CommentState; } } diff --git a/src/vscode-dts/vscode.proposed.contribShareMenu.d.ts b/src/vscode-dts/vscode.proposed.contribShareMenu.d.ts index a38d03f4fde..e308029d4e2 100644 --- a/src/vscode-dts/vscode.proposed.contribShareMenu.d.ts +++ b/src/vscode-dts/vscode.proposed.contribShareMenu.d.ts @@ -4,3 +4,4 @@ *--------------------------------------------------------------------------------------------*/ // empty placeholder declaration for the `file/share`-submenu contribution point +// https://github.com/microsoft/vscode/issues/176316 diff --git a/src/vscode-dts/vscode.proposed.contribStatusBarItems.d.ts b/src/vscode-dts/vscode.proposed.contribStatusBarItems.d.ts new file mode 100644 index 00000000000..2e5a578de7a --- /dev/null +++ b/src/vscode-dts/vscode.proposed.contribStatusBarItems.d.ts @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// empty placeholder for status bar items contribution + +// https://github.com/microsoft/vscode/issues/167874 @jrieken diff --git a/src/vscode-dts/vscode.proposed.debugFocus.d.ts b/src/vscode-dts/vscode.proposed.debugFocus.d.ts new file mode 100644 index 00000000000..73abb814bbe --- /dev/null +++ b/src/vscode-dts/vscode.proposed.debugFocus.d.ts @@ -0,0 +1,74 @@ +/*--------------------------------------------------------------------------------------------- + * 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' { + + // See https://github.com/microsoft/vscode/issues/63943 + + export class ThreadFocus { + /** + * Create a ThreadFocus + * @param session + * @param threadId + * @param frameId + */ + constructor( + session: DebugSession, + threadId?: number); + + + /** + * Debug session for thread. + */ + readonly session: DebugSession; + + /** + * Id of the associated thread (DAP id). May be undefined if thread has become unselected. + */ + readonly threadId: number | undefined; + } + + export class StackFrameFocus { + /** + * Create a StackFrameFocus + * @param session + * @param threadId + * @param frameId + */ + constructor( + session: DebugSession, + threadId?: number, + frameId?: number); + + + /** + * Debug session for thread. + */ + readonly session: DebugSession; + + /** + * Id of the associated thread (DAP id). May be undefined if a frame is unselected. + */ + readonly threadId: number | undefined; + /** + * Id of the stack frame (DAP id). May be undefined if a frame is unselected. + */ + readonly frameId: number | undefined; + } + + + export namespace debug { + /** + * The currently focused thread or stack frame id, or `undefined` if this has not been set. (e.g. not in debug mode). + */ + export let stackFrameFocus: ThreadFocus | StackFrameFocus | undefined; + + /** + * An {@link Event} which fires when the {@link debug.stackFrameFocus} changes. Provides a sessionId. threadId is not undefined + * when a thread of frame has gained focus. frameId is defined when a stackFrame has gained focus. + */ + export const onDidChangeStackFrameFocus: Event; + } +} diff --git a/src/vscode-dts/vscode.proposed.documentPaste.d.ts b/src/vscode-dts/vscode.proposed.documentPaste.d.ts index 57ea908f8ed..3ede35eacf5 100644 --- a/src/vscode-dts/vscode.proposed.documentPaste.d.ts +++ b/src/vscode-dts/vscode.proposed.documentPaste.d.ts @@ -37,13 +37,32 @@ declare module 'vscode' { * * @return Optional workspace edit that applies the paste. Return undefined to use standard pasting. */ - provideDocumentPasteEdits(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): ProviderResult; + provideDocumentPasteEdits?(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): ProviderResult; } /** * An operation applied on paste */ class DocumentPasteEdit { + /** + * Identifies the type of edit. + * + * This id should be unique within the extension but does not need to be unique across extensions. + */ + id: string; + + /** + * Human readable label that describes the edit. + */ + label: string; + + /** + * The relative priority of this edit. Higher priority items are shown first in the UI. + * + * Defaults to `0`. + */ + priority?: number; + /** * The text or snippet to insert at the pasted locations. */ @@ -56,17 +75,30 @@ declare module 'vscode' { /** * @param insertText The text or snippet to insert at the pasted locations. + * + * TODO: Reverse args, but this will break existing consumers :( */ - constructor(insertText: string | SnippetString); + constructor(insertText: string | SnippetString, id: string, label: string); } interface DocumentPasteProviderMetadata { /** - * Mime types that `provideDocumentPasteEdits` should be invoked for. - * - * Use the special `files` mimetype to indicate the provider should be invoked if any files are present in the `DataTransfer`. + * Mime types that {@link DocumentPasteEditProvider.prepareDocumentPaste provideDocumentPasteEdits} may add on copy. */ - readonly pasteMimeTypes: readonly string[]; + readonly copyMimeTypes?: readonly string[]; + + /** + * Mime types that {@link DocumentPasteEditProvider.provideDocumentPasteEdits provideDocumentPasteEdits} should be invoked for. + * + * This can either be an exact mime type such as `image/png`, or a wildcard pattern such as `image/*`. + * + * Use `text/uri-list` for resources dropped from the explorer or other tree views in the workbench. + * + * Use `files` to indicate that the provider should be invoked if any {@link DataTransferFile files} are present in the {@link DataTransfer}. + * Note that {@link DataTransferFile} entries are only created when dropping content from outside the editor, such as + * from the operating system. + */ + readonly pasteMimeTypes?: readonly string[]; } namespace languages { diff --git a/src/vscode-dts/vscode.proposed.dropMetadata.d.ts b/src/vscode-dts/vscode.proposed.dropMetadata.d.ts new file mode 100644 index 00000000000..33dd5a918cf --- /dev/null +++ b/src/vscode-dts/vscode.proposed.dropMetadata.d.ts @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + // https://github.com/microsoft/vscode/issues/179430 + + export interface DocumentDropEdit { + /** + * Identifies the type of edit. + * + * This id should be unique within the extension but does not need to be unique across extensions. + */ + id?: string; + + /** + * The relative priority of this edit. Higher priority items are shown first in the UI. + * + * Defaults to `0`. + */ + priority?: number; + + /** + * Human readable label that describes the edit. + */ + label?: string; + } + + export interface DocumentDropEditProviderMetadata { + /** + * List of data transfer types that the provider supports. + * + * This can either be an exact mime type such as `image/png`, or a wildcard pattern such as `image/*`. + * + * Use `text/uri-list` for resources dropped from the explorer or other tree views in the workbench. + * + * Use `files` to indicate that the provider should be invoked if any {@link DataTransferFile files} are present in the {@link DataTransfer}. + * Note that {@link DataTransferFile} entries are only created when dropping content from outside the editor, such as + * from the operating system. + */ + readonly dropMimeTypes: readonly string[]; + } + + export namespace languages { + export function registerDocumentDropEditProvider(selector: DocumentSelector, provider: DocumentDropEditProvider, metadata?: DocumentDropEditProviderMetadata): Disposable; + } +} diff --git a/src/vscode-dts/vscode.proposed.envCollectionOptions.d.ts b/src/vscode-dts/vscode.proposed.envCollectionOptions.d.ts new file mode 100644 index 00000000000..d25a92725a4 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.envCollectionOptions.d.ts @@ -0,0 +1,56 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + // https://github.com/microsoft/vscode/issues/179476 + + /** + * Options applied to the mutator. + */ + export interface EnvironmentVariableMutatorOptions { + /** + * Apply to the environment just before the process is created. + * + * Defaults to true. + */ + applyAtProcessCreation?: boolean; + + /** + * Apply to the environment in the shell integration script. Note that this _will not_ apply + * the mutator if shell integration is disabled or not working for some reason. + * + * Defaults to false. + */ + applyAtShellIntegration?: boolean; + } + + /** + * A type of mutation and its value to be applied to an environment variable. + */ + export interface EnvironmentVariableMutator { + /** + * Options applied to the mutator. + */ + readonly options: EnvironmentVariableMutatorOptions; + } + + export interface EnvironmentVariableCollection extends Iterable<[variable: string, mutator: EnvironmentVariableMutator]> { + /** + * @param options Options applied to the mutator. + */ + replace(variable: string, value: string, options?: EnvironmentVariableMutatorOptions): void; + + /** + * @param options Options applied to the mutator. + */ + append(variable: string, value: string, options?: EnvironmentVariableMutatorOptions): void; + + /** + * @param options Options applied to the mutator. + */ + prepend(variable: string, value: string, options?: EnvironmentVariableMutatorOptions): void; + } +} diff --git a/src/vscode-dts/vscode.proposed.envCollectionWorkspace.d.ts b/src/vscode-dts/vscode.proposed.envCollectionWorkspace.d.ts new file mode 100644 index 00000000000..01292e11652 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.envCollectionWorkspace.d.ts @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + // https://github.com/microsoft/vscode/issues/182069 + + // export interface ExtensionContext { + // /** + // * Gets the extension's environment variable collection for this workspace, enabling changes + // * to be applied to terminal environment variables. + // * + // * @param scope The scope to which the environment variable collection applies to. + // */ + // readonly environmentVariableCollection: EnvironmentVariableCollection & { getScopedEnvironmentVariableCollection(scope: EnvironmentVariableScope): EnvironmentVariableCollection }; + // } + + export type EnvironmentVariableScope = { + /** + * Any specific workspace folder to get collection for. If unspecified, collection applicable to all workspace folders is returned. + */ + workspaceFolder?: WorkspaceFolder; + }; +} diff --git a/src/vscode-dts/vscode.proposed.fileComments.d.ts b/src/vscode-dts/vscode.proposed.fileComments.d.ts new file mode 100644 index 00000000000..09c729145f2 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.fileComments.d.ts @@ -0,0 +1,85 @@ +/*--------------------------------------------------------------------------------------------- + * 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 interface CommentThread2 { + /** + * The uri of the document the thread has been created on. + */ + readonly uri: Uri; + + /** + * The range the comment thread is located within the document. The thread icon will be shown + * at the last line of the range. + */ + range: Range | undefined; + + /** + * The ordered comments of the thread. + */ + comments: readonly Comment[]; + + /** + * Whether the thread should be collapsed or expanded when opening the document. + * Defaults to Collapsed. + */ + collapsibleState: CommentThreadCollapsibleState; + + /** + * Whether the thread supports reply. + * Defaults to true. + */ + canReply: boolean; + + /** + * Context value of the comment thread. This can be used to contribute thread specific actions. + * For example, a comment thread is given a context value as `editable`. When contributing actions to `comments/commentThread/title` + * using `menus` extension point, you can specify context value for key `commentThread` in `when` expression like `commentThread == editable`. + * ```json + * "contributes": { + * "menus": { + * "comments/commentThread/title": [ + * { + * "command": "extension.deleteCommentThread", + * "when": "commentThread == editable" + * } + * ] + * } + * } + * ``` + * This will show action `extension.deleteCommentThread` only for comment threads with `contextValue` is `editable`. + */ + contextValue?: string; + + /** + * The optional human-readable label describing the {@link CommentThread Comment Thread} + */ + label?: string; + + /** + * The optional state of a comment thread, which may affect how the comment is displayed. + */ + state?: CommentThreadState; + + /** + * Dispose this comment thread. + * + * Once disposed, this comment thread will be removed from visible editors and Comment Panel when appropriate. + */ + dispose(): void; + } + + export interface CommentController { + createCommentThread(uri: Uri, range: Range | undefined, comments: readonly Comment[]): CommentThread | CommentThread2; + } + + export interface CommentingRangeProvider2 { + /** + * Provide a list of ranges which allow new comment threads creation or null for a given document + */ + provideCommentingRanges(document: TextDocument, token: CancellationToken): ProviderResult; + } +} diff --git a/src/vscode-dts/vscode.proposed.formatMultipleRanges.d.ts b/src/vscode-dts/vscode.proposed.formatMultipleRanges.d.ts new file mode 100644 index 00000000000..702bc14b4f8 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.formatMultipleRanges.d.ts @@ -0,0 +1,29 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + // https://github.com/microsoft/vscode/issues/158776 + + + export interface DocumentRangeFormattingEditProvider { + + /** + * Provide formatting edits for multiple ranges in a document. + * + * The given ranges are hints and providers can decide to format a smaller + * or larger range. Often this is done by adjusting the start and end + * of the range to full syntax nodes. + * + * @param document The document in which the command was invoked. + * @param ranges The ranges which should be formatted. + * @param options Options controlling formatting. + * @param token A cancellation token. + * @return A set of text edits or a thenable that resolves to such. The lack of a result can be + * signaled by returning `undefined`, `null`, or an empty array. + */ + provideDocumentRangesFormattingEdits?(document: TextDocument, ranges: Range[], options: FormattingOptions, token: CancellationToken): ProviderResult; + } +} diff --git a/src/vscode-dts/vscode.proposed.handleIssueUri.d.ts b/src/vscode-dts/vscode.proposed.handleIssueUri.d.ts new file mode 100644 index 00000000000..069720276e9 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.handleIssueUri.d.ts @@ -0,0 +1,31 @@ +/*--------------------------------------------------------------------------------------------- + * 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/46726 + + export interface IssueUriRequestHandler { + /** + *Handle the request by the issue reporter for the Uri you want to direct the user to. + */ + handleIssueUrlRequest(): ProviderResult; + } + + export namespace env { + /** + * Register an {@link IssueUriRequestHandler}. By registering an issue uri request handler, + * you can direct the built-in issue reporter to your issue reporting web experience of choice. + * The Uri that the handler returns will be opened in the user's browser. + * + * Examples of this include: + * - Using GitHub Issue Forms or GitHub Discussions you can pre-fill the issue creation with relevant information from the current workspace using query parameters + * - Directing to a different web form that isn't on GitHub for reporting issues + * + * @param handler the issue uri request handler to register for this extension. + */ + export function registerIssueUriRequestHandler(handler: IssueUriRequestHandler): Disposable; + } +} diff --git a/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts b/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts index 8db8257950a..c38c4e23671 100644 --- a/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts +++ b/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts @@ -7,6 +7,22 @@ declare module 'vscode' { // https://github.com/microsoft/vscode/issues/124024 @hediet @alexdima + export namespace languages { + /** + * Registers an inline completion provider. + * + * Multiple providers can be registered for a language. In that case providers are asked in + * parallel and the results are merged. A failing provider (rejected promise or exception) will + * not cause a failure of the whole operation. + * + * @param selector A selector that defines the documents this provider is applicable to. + * @param provider An inline completion provider. + * @param metadata Metadata about the provider. + * @return A {@link Disposable} that unregisters this provider when being disposed. + */ + export function registerInlineCompletionItemProvider(selector: DocumentSelector, provider: InlineCompletionItemProvider, metadata: InlineCompletionItemProviderMetadata): Disposable; + } + export interface InlineCompletionItem { /** * If set to `true`, unopened closing brackets are removed and unclosed opening brackets are closed. @@ -15,9 +31,21 @@ declare module 'vscode' { completeBracketPairs?: boolean; } + export interface InlineCompletionItemProviderMetadata { + /** + * Specifies a list of extension ids that this provider yields to if they return a result. + * If some inline completion provider registered by such an extension returns a result, this provider is not asked. + */ + yieldTo: string[]; + } + export interface InlineCompletionItemProvider { + /** + * @param completionItem The completion item that was shown. + * @param updatedInsertText The actual insert text (after brackets were fixed). + */ // eslint-disable-next-line local/vscode-dts-provider-naming - handleDidShowCompletionItem?(completionItem: InlineCompletionItem): void; + handleDidShowCompletionItem?(completionItem: InlineCompletionItem, updatedInsertText: string): void; /** * Is called when an inline completion item was accepted partially. @@ -33,5 +61,16 @@ declare module 'vscode' { * A list of commands associated with the inline completions of this list. */ commands?: Command[]; + + /** + * When set, overrides the user setting of `editor.inlineSuggest.suppressSuggestions`. + */ + suppressSuggestions?: boolean; + + /** + * When set and the user types a suggestion without derivating from it, the inline suggestion is not updated. + * Defaults to false (might change). + */ + enableForwardStability?: boolean; } } diff --git a/src/vscode-dts/vscode.proposed.interactive.d.ts b/src/vscode-dts/vscode.proposed.interactive.d.ts new file mode 100644 index 00000000000..916e425189c --- /dev/null +++ b/src/vscode-dts/vscode.proposed.interactive.d.ts @@ -0,0 +1,187 @@ +/*--------------------------------------------------------------------------------------------- + * 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 interface InteractiveEditorSlashCommand { + command: string; + detail?: string; + refer?: boolean; + // kind: CompletionItemKind; + } + + // todo@API make classes + export interface InteractiveEditorSession { + placeholder?: string; + slashCommands?: InteractiveEditorSlashCommand[]; + wholeRange?: Range; + message?: string; + } + + // todo@API make classes + export interface InteractiveEditorRequest { + session: InteractiveEditorSession; + prompt: string; + + selection: Selection; + wholeRange: Range; + attempt: number; + } + + // todo@API make classes + export interface InteractiveEditorResponse { + edits: TextEdit[] | WorkspaceEdit; + placeholder?: string; + wholeRange?: Range; + } + + // todo@API make classes + export interface InteractiveEditorMessageResponse { + contents: MarkdownString; + placeholder?: string; + wholeRange?: Range; + } + + export enum InteractiveEditorResponseFeedbackKind { + Unhelpful = 0, + Helpful = 1, + Undone = 2 + } + + export interface TextDocumentContext { + document: TextDocument; + selection: Selection; + action?: string; + } + + export interface InteractiveEditorSessionProvider { + // Create a session. The lifetime of this session is the duration of the editing session with the input mode widget. + prepareInteractiveEditorSession(context: TextDocumentContext, token: CancellationToken): ProviderResult; + + provideInteractiveEditorResponse(request: InteractiveEditorRequest, token: CancellationToken): ProviderResult; + + // eslint-disable-next-line local/vscode-dts-provider-naming + releaseInteractiveEditorSession?(session: S): any; + + // todo@API use enum instead of boolean + // eslint-disable-next-line local/vscode-dts-provider-naming + handleInteractiveEditorResponseFeedback?(session: S, response: R, kind: InteractiveEditorResponseFeedbackKind): void; + } + + + export interface InteractiveSessionState { } + + export interface InteractiveSessionParticipantInformation { + name: string; + + /** + * A full URI for the icon of the participant. + */ + icon?: Uri; + } + + export interface InteractiveSession { + requester: InteractiveSessionParticipantInformation; + responder: InteractiveSessionParticipantInformation; + inputPlaceholder?: string; + + saveState?(): InteractiveSessionState; + } + + export interface InteractiveSessionRequestArgs { + command: string; + args: any; + } + + export interface InteractiveRequest { + session: InteractiveSession; + message: string | InteractiveSessionReplyFollowup; + } + + export interface InteractiveResponseErrorDetails { + message: string; + responseIsIncomplete?: boolean; + responseIsFiltered?: boolean; + } + + export interface InteractiveResponseForProgress { + errorDetails?: InteractiveResponseErrorDetails; + } + + export interface InteractiveProgressContent { + content: string; + } + + export interface InteractiveProgressId { + responseId: string; + } + + export type InteractiveProgress = InteractiveProgressContent | InteractiveProgressId; + + export interface InteractiveResponseCommand { + commandId: string; + args?: any[]; + title: string; // supports codicon strings + } + + export interface InteractiveSessionSlashCommand { + command: string; + kind: CompletionItemKind; + detail?: string; + } + + export interface InteractiveSessionReplyFollowup { + message: string; + tooltip?: string; + title?: string; + + // Extensions can put any serializable data here, such as an ID/version + metadata?: any; + } + + export type InteractiveSessionFollowup = InteractiveSessionReplyFollowup | InteractiveResponseCommand; + + export type InteractiveWelcomeMessageContent = string | InteractiveSessionReplyFollowup[]; + + export interface InteractiveSessionProvider { + provideWelcomeMessage?(token: CancellationToken): ProviderResult; + provideFollowups?(session: S, token: CancellationToken): ProviderResult<(string | InteractiveSessionFollowup)[]>; + provideSlashCommands?(session: S, token: CancellationToken): ProviderResult; + + prepareSession(initialState: InteractiveSessionState | undefined, token: CancellationToken): ProviderResult; + resolveRequest(session: S, context: InteractiveSessionRequestArgs | string, token: CancellationToken): ProviderResult; + provideResponseWithProgress(request: InteractiveRequest, progress: Progress, token: CancellationToken): ProviderResult; + + // eslint-disable-next-line local/vscode-dts-provider-naming + removeRequest(session: S, requestId: string): void; + } + + export interface InteractiveSessionDynamicRequest { + /** + * The message that will be displayed in the UI + */ + message: string; + + /** + * Any extra metadata/context that will go to the provider. + * NOTE not actually used yet. + */ + metadata?: any; + } + + export namespace interactive { + // current version of the proposal. + export const _version: 1 | number; + + export function registerInteractiveSessionProvider(id: string, provider: InteractiveSessionProvider): Disposable; + export function addInteractiveRequest(context: InteractiveSessionRequestArgs): void; + + export function sendInteractiveRequestToProvider(providerId: string, message: InteractiveSessionDynamicRequest): void; + + export function registerInteractiveEditorSessionProvider(provider: InteractiveEditorSessionProvider): Disposable; + + export function transferChatSession(session: InteractiveSession, toWorkspace: Uri): void; + } +} diff --git a/src/vscode-dts/vscode.proposed.interactiveSlashCommands.d.ts b/src/vscode-dts/vscode.proposed.interactiveSlashCommands.d.ts new file mode 100644 index 00000000000..b07ecf06747 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.interactiveSlashCommands.d.ts @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + export interface InteractiveSlashCommandProvider { + provideSlashCommands(token: CancellationToken): ProviderResult; + resolveSlashCommand(command: string, token: CancellationToken): ProviderResult; + } + + export namespace interactiveSlashCommands { + export function registerSlashCommandProvider(chatProviderId: string, provider: InteractiveSlashCommandProvider): Disposable; + } +} diff --git a/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts b/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts new file mode 100644 index 00000000000..2e6bfe31f99 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts @@ -0,0 +1,70 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + export enum InteractiveSessionVoteDirection { + Up = 1, + Down = 2 + } + + export interface InteractiveSessionVoteAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'vote'; + responseId: string; + 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'; + responseId: string; + 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'; + responseId: string; + codeBlockIndex: number; + totalCharacters: number; + newFile?: boolean; + } + + export interface InteractiveSessionTerminalAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'runInTerminal'; + responseId: string; + codeBlockIndex: number; + languageId?: string; + } + + export interface InteractiveSessionCommandAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'command'; + command: InteractiveResponseCommand; + } + + export type InteractiveSessionUserAction = InteractiveSessionVoteAction | InteractiveSessionCopyAction | InteractiveSessionInsertAction | InteractiveSessionTerminalAction | InteractiveSessionCommandAction; + + export interface InteractiveSessionUserActionEvent { + action: InteractiveSessionUserAction; + providerId: string; + } + + export namespace interactive { + export const onDidPerformUserAction: Event; + } +} diff --git a/src/vs/platform/issue/electron-sandbox/issue.ts b/src/vscode-dts/vscode.proposed.notebookCodeActions.d.ts similarity index 52% rename from src/vs/platform/issue/electron-sandbox/issue.ts rename to src/vscode-dts/vscode.proposed.notebookCodeActions.d.ts index 478a49e8625..0768e7c2d48 100644 --- a/src/vs/platform/issue/electron-sandbox/issue.ts +++ b/src/vscode-dts/vscode.proposed.notebookCodeActions.d.ts @@ -3,11 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { ICommonIssueService } from 'vs/platform/issue/common/issue'; +declare module 'vscode' { -export const IIssueService = createDecorator('issueService'); + // https://github.com/microsoft/vscode/issues/179213 -export interface IIssueService extends ICommonIssueService { - stopTracing(): Promise; + export class NotebookCodeActionKind { + // can only return MULTI CELL workspaceEdits + // ex: notebook.organizeImprots + static readonly Notebook: CodeActionKind; + + constructor(value: string); + } } diff --git a/src/vscode-dts/vscode.proposed.notebookExecution.d.ts b/src/vscode-dts/vscode.proposed.notebookExecution.d.ts new file mode 100644 index 00000000000..59f9174768f --- /dev/null +++ b/src/vscode-dts/vscode.proposed.notebookExecution.d.ts @@ -0,0 +1,39 @@ +/*--------------------------------------------------------------------------------------------- + * 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' { + + /** + * A NotebookExecution is how {@link NotebookController notebook controller} can indicate whether the notebook controller is busy or not. + * + * When {@linkcode NotebookExecution.start start()} is called on the execution task, it causes the Notebook to enter a executing state . + * When {@linkcode NotebookExecution.end end()} is called, it enters the idle state. + */ + export interface NotebookExecution { + /** + * Signal that the execution has begun. + */ + start(): void; + + /** + * Signal that execution has ended. + */ + end(): void; + } + + export interface NotebookController { + /** + * Create an execution task. + * + * _Note_ that there can only be one execution per Notebook, that also includes NotebookCellExecutions and t an error is thrown if + * a cell execution or another NotebookExecution is created while another is still active. + * + * This should be used to indicate the {@link NotebookController notebook controller} is busy even though user may not have executed any cell though the UI. + * @param {NotebookDocument} notebook + * @returns A notebook execution. + */ + createNotebookExecution(notebook: NotebookDocument): NotebookExecution; + } +} diff --git a/src/vscode-dts/vscode.proposed.portsAttributes.d.ts b/src/vscode-dts/vscode.proposed.portsAttributes.d.ts index 7a563e13e04..35626315373 100644 --- a/src/vscode-dts/vscode.proposed.portsAttributes.d.ts +++ b/src/vscode-dts/vscode.proposed.portsAttributes.d.ts @@ -7,21 +7,36 @@ declare module 'vscode' { // https://github.com/microsoft/vscode/issues/115616 @alexr00 + /** + * The action that should be taken when a port is discovered through automatic port forwarding discovery. + */ export enum PortAutoForwardAction { + /** + * Notify the user that the port is being forwarded. This is the default action. + */ Notify = 1, + /** + * Once the port is forwarded, open the user's web browser to the forwarded port. + */ OpenBrowser = 2, + /** + * Once the port is forwarded, open the preview browser to the forwarded port. + */ OpenPreview = 3, + /** + * Forward the port silently. + */ Silent = 4, - Ignore = 5, - OpenBrowserOnce = 6 + /** + * Do not forward the port. + */ + Ignore = 5 } + /** + * The attributes that a forwarded port can have. + */ export class PortAttributes { - /** - * The port number associated with this this set of attributes. - */ - port: number; - /** * The action to be taken when this port is detected for auto forwarding. */ @@ -32,18 +47,41 @@ declare module 'vscode' { * @param port the port number * @param autoForwardAction the action to take when this port is detected */ - constructor(port: number, autoForwardAction: PortAutoForwardAction); + constructor(autoForwardAction: PortAutoForwardAction); } + /** + * A provider of port attributes. Port attributes are used to determine what action should be taken when a port is discovered. + */ export interface PortAttributesProvider { /** * Provides attributes for the given port. For ports that your extension doesn't know about, simply * return undefined. For example, if `providePortAttributes` is called with ports 3000 but your * extension doesn't know anything about 3000 you should return undefined. + * @param port The port number of the port that attributes are being requested for. + * @param pid The pid of the process that is listening on the port. If the pid is unknown, undefined will be passed. + * @param commandLine The command line of the process that is listening on the port. If the command line is unknown, undefined will be passed. + * @param token A cancellation token that indicates the result is no longer needed. */ providePortAttributes(port: number, pid: number | undefined, commandLine: string | undefined, token: CancellationToken): ProviderResult; } + /** + * A selector that will be used to filter which {@link PortAttributesProvider} should be called for each port. + */ + export interface PortAttributesSelector { + /** + * Specifying a port range will cause your provider to only be called for ports within the range. + * The start is inclusive and the end is exclusive. + */ + portRange?: [number, number] | number; + + /** + * Specifying a command pattern will cause your provider to only be called for processes whose command line matches the pattern. + */ + commandPattern?: RegExp; + } + export namespace workspace { /** * If your extension listens on ports, consider registering a PortAttributesProvider to provide information @@ -51,12 +89,12 @@ declare module 'vscode' { * this information with a PortAttributesProvider the extension can tell the editor that these ports should be * ignored, since they don't need to be user facing. * - * @param portSelector If registerPortAttributesProvider is called after you start your process then you may already - * know the range of ports or the pid of your process. All properties of a the portSelector must be true for your - * provider to get called. - * The `portRange` is start inclusive and end exclusive. - * @param provider The PortAttributesProvider + * The results of the PortAttributesProvider are merged with the user setting `remote.portsAttributes`. If the values conflict, the user setting takes precedence. + * + * @param portSelector It is best practice to specify a port selector to avoid unnecessary calls to your provider. + * If you don't specify a port selector your provider will be called for every port, which will result in slower port forwarding for the user. + * @param provider The {@link PortAttributesProvider PortAttributesProvider}. */ - export function registerPortAttributesProvider(portSelector: { pid?: number; portRange?: [number, number]; commandMatcher?: RegExp }, provider: PortAttributesProvider): Disposable; + export function registerPortAttributesProvider(portSelector: PortAttributesSelector, provider: PortAttributesProvider): Disposable; } } diff --git a/src/vscode-dts/vscode.proposed.quickPickItemIcon.d.ts b/src/vscode-dts/vscode.proposed.quickPickItemIcon.d.ts new file mode 100644 index 00000000000..b53c8350117 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.quickPickItemIcon.d.ts @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * 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' { + /** + * Represents an item that can be selected from + * a list of items. + */ + export interface QuickPickItem { + /** + * The icon path or {@link ThemeIcon} for the QuickPickItem. + */ + iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon; + } +} diff --git a/src/vscode-dts/vscode.proposed.quickPickItemTooltip.d.ts b/src/vscode-dts/vscode.proposed.quickPickItemTooltip.d.ts index 4e7d00fa5ed..ddf43ffd389 100644 --- a/src/vscode-dts/vscode.proposed.quickPickItemTooltip.d.ts +++ b/src/vscode-dts/vscode.proposed.quickPickItemTooltip.d.ts @@ -5,11 +5,11 @@ declare module 'vscode' { - // https://github.com/microsoft/vscode/issues/73904 + // https://github.com/microsoft/vscode/issues/175662 export interface QuickPickItem { /** - * An optional flag to sort the final results by index of first query match in label. Defaults to true. + * A tooltip that is rendered when hovering over the item. */ tooltip?: string | MarkdownString; } diff --git a/src/vscode-dts/vscode.proposed.readonlyMessage.d.ts b/src/vscode-dts/vscode.proposed.readonlyMessage.d.ts new file mode 100644 index 00000000000..03bad3a664b --- /dev/null +++ b/src/vscode-dts/vscode.proposed.readonlyMessage.d.ts @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// https://github.com/microsoft/vscode/issues/166971 + +declare module 'vscode' { + + export namespace workspace { + + export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, options?: { readonly isCaseSensitive?: boolean; readonly isReadonly?: boolean | MarkdownString }): Disposable; + } +} diff --git a/src/vscode-dts/vscode.proposed.resolvers.d.ts b/src/vscode-dts/vscode.proposed.resolvers.d.ts index c1c413bc31f..a1093a1b98e 100644 --- a/src/vscode-dts/vscode.proposed.resolvers.d.ts +++ b/src/vscode-dts/vscode.proposed.resolvers.d.ts @@ -16,6 +16,13 @@ declare module 'vscode' { export interface RemoteAuthorityResolverContext { resolveAttempt: number; + /** + * Exec server from a recursively-resolved remote authority. If the + * remote authority includes nested authorities delimited by `@`, it is + * resolved from outer to inner authorities with ExecServer passed down + * to each resolver in the chain. + */ + execServer?: ExecServer; } export class ResolvedAuthority { @@ -26,6 +33,23 @@ declare module 'vscode' { constructor(host: string, port: number, connectionToken?: string); } + export interface ManagedMessagePassing { + onDidReceiveMessage: Event; + onDidClose: Event; + onDidEnd: Event; + + send: (data: Uint8Array) => void; + end: () => void; + drain?: () => Thenable; + } + + export class ManagedResolvedAuthority { + readonly makeConnection: () => Thenable; + readonly connectionToken: string | undefined; + + constructor(makeConnection: () => Thenable, connectionToken?: string); + } + export interface ResolvedOptions { extensionHostEnv?: { [key: string]: string | null }; @@ -43,6 +67,13 @@ declare module 'vscode' { label: string; } + export namespace env { + /** Quality of the application. May be undefined if running from sources. */ + export const appQuality: string | undefined; + /** Commit of the application. May be undefined if running from sources. */ + export const appCommit: string | undefined; + } + interface TunnelOptions { remoteAddress: { port: number; host: string }; // The desired local port. If this port can't be used, then another will be chosen. @@ -109,7 +140,7 @@ declare module 'vscode' { Output = 2 } - export type ResolverResult = ResolvedAuthority & ResolvedOptions & TunnelInformation; + export type ResolverResult = (ResolvedAuthority | ManagedResolvedAuthority) & ResolvedOptions & TunnelInformation; export class RemoteAuthorityResolverError extends Error { static NotAvailable(message?: string, handled?: boolean): RemoteAuthorityResolverError; @@ -118,6 +149,12 @@ declare module 'vscode' { constructor(message?: string); } + /** + * Exec server used for nested resolvers. The type is currently not maintained + * in these types, and is a contract between extensions. + */ + export type ExecServer = unknown; + export interface RemoteAuthorityResolver { /** * Resolve the authority part of the current opened `vscode-remote://` URI. @@ -130,6 +167,15 @@ declare module 'vscode' { */ resolve(authority: string, context: RemoteAuthorityResolverContext): ResolverResult | Thenable; + /** + * Resolves an exec server interface for the authority. Called if an + * authority is a midpoint in a transit to the desired remote. + * + * @param authority The authority part of the current opened `vscode-remote://` URI. + * @returns The exec server interface, as defined in a contract between extensions. + */ + resolveExecServer?(remoteAuthority: string, context: RemoteAuthorityResolverContext): ExecServer | Thenable; + /** * Get the canonical URI (if applicable) for a `vscode-remote://` URI. * @@ -173,7 +219,7 @@ declare module 'vscode' { export interface ResourceLabelFormatting { label: string; // myLabel:/${path} // For historic reasons we use an or string here. Once we finalize this API we should start using enums instead and adopt it in extensions. - // eslint-disable-next-line local/vscode-dts-literal-or-types + // eslint-disable-next-line local/vscode-dts-literal-or-types, local/vscode-dts-string-type-literals separator: '/' | '\\' | ''; tildify?: boolean; normalizeDriveLetter?: boolean; @@ -186,6 +232,7 @@ declare module 'vscode' { export namespace workspace { export function registerRemoteAuthorityResolver(authorityPrefix: string, resolver: RemoteAuthorityResolver): Disposable; export function registerResourceLabelFormatter(formatter: ResourceLabelFormatter): Disposable; + export function getRemoteExecServer(authority: string): Thenable; } export namespace env { diff --git a/src/vscode-dts/vscode.proposed.saveEditor.d.ts b/src/vscode-dts/vscode.proposed.saveEditor.d.ts new file mode 100644 index 00000000000..c9da82d5542 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.saveEditor.d.ts @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// https://github.com/microsoft/vscode/issues/178713 + +declare module 'vscode' { + + export namespace workspace { + + /** + * Saves the editor identified by the given resource and returns the resulting resource or `undefined` + * if save was not successful or no editor with the given resource was found. + * + * **Note** that an editor with the provided resource must be opened in order to be saved. + * + * @param uri the associated uri for the opened editor to save. + * @return A thenable that resolves when the save operation has finished. + */ + export function save(uri: Uri): Thenable; + + /** + * Saves the editor identified by the given resource to a new file name as provided by the user and + * returns the resulting resource or `undefined` if save was not successful or cancelled or no editor + * with the given resource was found. + * + * **Note** that an editor with the provided resource must be opened in order to be saved as. + * + * @param uri the associated uri for the opened editor to save as. + * @return A thenable that resolves when the save-as operation has finished. + */ + export function saveAs(uri: Uri): Thenable; + } +} diff --git a/src/vscode-dts/vscode.proposed.scmTextDocument.d.ts b/src/vscode-dts/vscode.proposed.scmTextDocument.d.ts new file mode 100644 index 00000000000..8533c039a3f --- /dev/null +++ b/src/vscode-dts/vscode.proposed.scmTextDocument.d.ts @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + // https://github.com/microsoft/vscode/issues/166615 + + /** + * Represents the input box in the Source Control viewlet. + */ + export interface SourceControlInputBox { + + /** + * The {@link TextDocument text} of the input box. + */ + readonly document: TextDocument; + } +} diff --git a/src/vscode-dts/vscode.proposed.semanticSimilarity.d.ts b/src/vscode-dts/vscode.proposed.semanticSimilarity.d.ts new file mode 100644 index 00000000000..d2ffb823386 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.semanticSimilarity.d.ts @@ -0,0 +1,22 @@ +/*--------------------------------------------------------------------------------------------- + * 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 interface SemanticSimilarityProvider { + /** + * Computes the semantic similarity score between two strings. + * @param string1 The string to compare to all other strings. + * @param comparisons An array of strings to compare string1 to. An array allows you to batch multiple comparisons in one call. + * @param token A cancellation token. + * @return A promise that resolves to the semantic similarity scores between string1 and each string in comparisons. + * The score should be a number between 0 and 1, where 0 means no similarity and 1 means + * perfect similarity. + */ + provideSimilarityScore(string1: string, comparisons: string[], token: CancellationToken): Thenable; + } + export namespace ai { + export function registerSemanticSimilarityProvider(provider: SemanticSimilarityProvider): Disposable; + } +} diff --git a/src/vscode-dts/vscode.proposed.shareProvider.d.ts b/src/vscode-dts/vscode.proposed.shareProvider.d.ts new file mode 100644 index 00000000000..8c432341a72 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.shareProvider.d.ts @@ -0,0 +1,74 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// https://github.com/microsoft/vscode/issues/176316 @joyceerhl + +declare module 'vscode' { + + /** + * Data about an item which can be shared. + */ + export interface ShareableItem { + /** + * A resource in the workspace that can be shared. + */ + resourceUri: Uri; + + /** + * If present, a selection within the `resourceUri`. + */ + selection?: Range; + } + + /** + * A provider which generates share links for resources in the editor. + */ + export interface ShareProvider { + + /** + * A unique ID for the provider. + * This will be used to activate specific extensions contributing share providers if necessary. + */ + readonly id: string; + + /** + * A label which will be used to present this provider's options in the UI. + */ + readonly label: string; + + /** + * The order in which the provider should be listed in the UI when there are multiple providers. + */ + readonly priority: number; + + /** + * + * @param item Data about an item which can be shared. + * @param token A cancellation token. + * @returns A {@link Uri} representing an external link or sharing text. The provider result + * will be copied to the user's clipboard and presented in a confirmation dialog. + */ + provideShare(item: ShareableItem, token: CancellationToken): ProviderResult; + } + + export namespace window { + + /** + * Register a share provider. An extension may register multiple share providers. + * There may be multiple share providers for the same {@link ShareableItem}. + * @param selector A document selector to filter whether the provider should be shown for a {@link ShareableItem}. + * @param provider A share provider. + */ + export function registerShareProvider(selector: DocumentSelector, provider: ShareProvider): Disposable; + } + + export interface TreeItem { + + /** + * An optional property which, when set, inlines a `Share` option in the context menu for this tree item. + */ + shareableItem?: ShareableItem; + } +} diff --git a/src/vscode-dts/vscode.proposed.taskPresentationGroup.d.ts b/src/vscode-dts/vscode.proposed.taskPresentationGroup.d.ts index 52e631a0495..11f9e0374ea 100644 --- a/src/vscode-dts/vscode.proposed.taskPresentationGroup.d.ts +++ b/src/vscode-dts/vscode.proposed.taskPresentationGroup.d.ts @@ -12,10 +12,5 @@ declare module 'vscode' { * Controls whether the task is executed in a specific terminal group using split panes. */ group?: string; - - /** - * Controls whether the terminal is closed after executing the task. - */ - close?: boolean; } } diff --git a/src/vscode-dts/vscode.proposed.testContinuousRun.d.ts b/src/vscode-dts/vscode.proposed.testContinuousRun.d.ts deleted file mode 100644 index bb6240132a9..00000000000 --- a/src/vscode-dts/vscode.proposed.testContinuousRun.d.ts +++ /dev/null @@ -1,66 +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 interface TestRunProfile { - /** - * Whether this profile supports continuous running of requests. If so, - * then {@link TestRunRequest.continuous} may be set to `true`. Defaults - * to false. - */ - supportsContinuousRun: boolean; - - /** - * Handler called to start a test run. When invoked, the function should call - * {@link TestController.createTestRun} at least once, and all test runs - * associated with the request should be created before the function returns - * or the returned promise is resolved. - * - * If {@link supportsContinuousRun} is set, then {@link TestRunRequest2.continuous} - * may be `true`. In this case, the profile should observe changes to - * source code and create new test runs by calling {@link TestController.createTestRun}, - * until the cancellation is requested on the `token`. - * - * @param request Request information for the test run. - * @param cancellationToken Token that signals the used asked to abort the - * test run. If cancellation is requested on this token, all {@link TestRun} - * instances associated with the request will be - * automatically cancelled as well. - */ - runHandler: (request: TestRunRequest, token: CancellationToken) => Thenable | void; - } - - export interface TestController { - /** - * Creates a profile used for running tests. Extensions must create - * at least one profile in order for tests to be run. - * @param label A human-readable label for this profile. - * @param kind Configures what kind of execution this profile manages. - * @param runHandler Function called to start a test run. - * @param isDefault Whether this is the default action for its kind. - * @param tag Profile test tag. - * @param supportsContinuousRun Whether the profile supports continuous running. - * @returns An instance of a {@link TestRunProfile}, which is automatically - * associated with this controller. - */ - createRunProfile(label: string, kind: TestRunProfileKind, runHandler: (request: TestRunRequest, token: CancellationToken) => Thenable | void, isDefault?: boolean, tag?: TestTag, supportsContinuousRun?: boolean): TestRunProfile; - } - - export class TestRunRequest2 extends TestRunRequest { - /** - * Whether the profile should run continuously as source code changes. Only - * relevant for profiles that set {@link TestRunProfile.supportsContinuousRun}. - */ - readonly continuous?: boolean; - - /** - * @param tests Array of specific tests to run, or undefined to run all tests - * @param exclude An array of tests to exclude from the run. - * @param profile The run profile used for this request. - * @param continuous Whether to run tests continuously as source changes. - */ - constructor(include?: readonly TestItem[], exclude?: readonly TestItem[], profile?: TestRunProfile, continuous?: boolean); - } -} diff --git a/src/vscode-dts/vscode.proposed.testInvalidateResults.d.ts b/src/vscode-dts/vscode.proposed.testInvalidateResults.d.ts new file mode 100644 index 00000000000..87d21c13c16 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.testInvalidateResults.d.ts @@ -0,0 +1,30 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// https://github.com/microsoft/vscode/issues/134970 + +declare module 'vscode' { + + export interface TestController { + + /** + * Marks an item's results as being outdated. This is commonly called when + * code or configuration changes and previous results should no longer + * be considered relevant. The same logic used to mark results as outdated + * may be used to drive {@link TestRunRequest.continuous continuous test runs}. + * + * If an item is passed to this method, test results for the item and all of + * its children will be marked as outdated. If no item is passed, then all + * test owned by the TestController will be marked as outdated. + * + * Any test runs started before the moment this method is called, including + * runs which may still be ongoing, will be marked as outdated and deprioritized + * in the editor's UI. + * + * @param item Item to mark as outdated. If undefined, all the controller's items are marked outdated. + */ + invalidateTestResults(items?: TestItem | readonly TestItem[]): void; + } +} diff --git a/src/vscode-dts/vscode.proposed.treeItemCheckbox.d.ts b/src/vscode-dts/vscode.proposed.treeItemCheckbox.d.ts deleted file mode 100644 index 74337f3990b..00000000000 --- a/src/vscode-dts/vscode.proposed.treeItemCheckbox.d.ts +++ /dev/null @@ -1,45 +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 class TreeItem2 extends TreeItem { - /** - * [TreeItemCheckboxState](#TreeItemCheckboxState) of the tree item. - */ - checkboxState?: TreeItemCheckboxState | { readonly state: TreeItemCheckboxState; readonly tooltip?: string }; - } - - /** - * Checkbox state of the tree item - */ - export enum TreeItemCheckboxState { - /** - * Determines an item is unchecked - */ - Unchecked = 0, - /** - * Determines an item is checked - */ - Checked = 1 - } - - /** - * A data provider that provides tree data - */ - export interface TreeView { - /** - * An event to signal that an element or root has either been checked or unchecked. - */ - onDidChangeCheckboxState: Event>; - } - - export interface TreeCheckboxChangeEvent { - /** - * The item that was checked or unchecked. - */ - readonly items: ReadonlyArray<[T, TreeItemCheckboxState]>; - } -} diff --git a/src/vscode-dts/vscode.proposed.windowActivity.d.ts b/src/vscode-dts/vscode.proposed.windowActivity.d.ts new file mode 100644 index 00000000000..a0b1fde9760 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.windowActivity.d.ts @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * 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/181569 @connor4312 + + export interface WindowState { + /** + * Indicates whether the window has been interacted with recently. This will + * change immediately on activity, or after a short time of user inactivity. + */ + readonly active: boolean; + } +} diff --git a/test/automation/src/code.ts b/test/automation/src/code.ts index 5aa5e9c1253..e8ad52540b5 100644 --- a/test/automation/src/code.ts +++ b/test/automation/src/code.ts @@ -6,7 +6,7 @@ import * as cp from 'child_process'; import * as os from 'os'; import * as treekill from 'tree-kill'; -import { IElement, ILocaleInfo, ILocalizedStrings } from './driver'; +import { IElement, ILocaleInfo, ILocalizedStrings, ILogFile } from './driver'; import { Logger, measureAndLog } from './logger'; import { launch as launchPlaywrightBrowser } from './playwrightBrowser'; import { PlaywrightDriver } from './playwrightDriver'; @@ -242,14 +242,18 @@ export class Code { await this.poll(() => this.driver.writeInTerminal(selector, value), () => true, `writeInTerminal '${selector}'`); } - async getLocaleInfo(): Promise { + getLocaleInfo(): Promise { return this.driver.getLocaleInfo(); } - async getLocalizedStrings(): Promise { + getLocalizedStrings(): Promise { return this.driver.getLocalizedStrings(); } + getLogs(): Promise { + return this.driver.getLogs(); + } + private async poll( fn: () => Promise, acceptFn: (result: T) => boolean, diff --git a/test/automation/src/playwrightBrowser.ts b/test/automation/src/playwrightBrowser.ts index 2ef736c6669..7223c49a13b 100644 --- a/test/automation/src/playwrightBrowser.ts +++ b/test/automation/src/playwrightBrowser.ts @@ -32,6 +32,7 @@ export async function launch(options: LaunchOptions): Promise<{ serverProcess: C async function launchServer(options: LaunchOptions) { const { userDataDir, codePath, extensionsPath, logger, logsPath } = options; + const serverLogsPath = join(logsPath, 'server'); const codeServerPath = codePath ?? process.env.VSCODE_REMOTE_SERVER_PATH; const agentFolder = userDataDir; await measureAndLog(() => mkdirp(agentFolder), `mkdirp(${agentFolder})`, logger); @@ -49,7 +50,7 @@ async function launchServer(options: LaunchOptions) { `--extensions-dir=${extensionsPath}`, `--server-data-dir=${agentFolder}`, '--accept-server-license-terms', - `--logsPath=${logsPath}` + `--logsPath=${serverLogsPath}` ]; if (options.verbose) { @@ -68,7 +69,7 @@ async function launchServer(options: LaunchOptions) { logger.log(`Starting server out of sources from '${serverLocation}'`); } - logger.log(`Storing log files into '${logsPath}'`); + logger.log(`Storing log files into '${serverLogsPath}'`); logger.log(`Command line: '${serverLocation}' ${args.join(' ')}`); const serverProcess = spawn( @@ -88,7 +89,11 @@ async function launchServer(options: LaunchOptions) { async function launchBrowser(options: LaunchOptions, endpoint: string) { const { logger, workspacePath, tracing, headless } = options; - const browser = await measureAndLog(() => playwright[options.browser ?? 'chromium'].launch({ headless: headless ?? false }), 'playwright#launch', logger); + const browser = await measureAndLog(() => playwright[options.browser ?? 'chromium'].launch({ + headless: headless ?? false, + timeout: 0 + }), 'playwright#launch', logger); + browser.on('disconnected', () => logger.log(`Playwright: browser disconnected`)); const context = await measureAndLog(() => browser.newContext(), 'browser.newContext', logger); diff --git a/test/automation/src/playwrightDriver.ts b/test/automation/src/playwrightDriver.ts index 85595a13064..1b63f622f4e 100644 --- a/test/automation/src/playwrightDriver.ts +++ b/test/automation/src/playwrightDriver.ts @@ -4,7 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; -import { join } from 'path'; +import { dirname, join } from 'path'; +import { promises } from 'fs'; import { IWindowDriver } from './driver'; import { PageFunction } from 'playwright-core/types/structs'; import { measureAndLog } from './logger'; @@ -107,6 +108,15 @@ export class PlaywrightDriver { // Ignore } + // Web: Extract client logs + if (this.options.web) { + try { + await measureAndLog(() => this.saveWebClientLogs(), 'saveWebClientLogs()', this.options.logger); + } catch (error) { + this.options.logger.log(`Error saving web client logs (${error})`); + } + } + // Web: exit via `close` method if (this.options.web) { try { @@ -131,6 +141,17 @@ export class PlaywrightDriver { } } + private async saveWebClientLogs(): Promise { + const logs = await this.getLogs(); + + for (const log of logs) { + const absoluteLogsPath = join(this.options.logsPath, log.relativePath); + + await promises.mkdir(dirname(absoluteLogsPath), { recursive: true }); + await promises.writeFile(absoluteLogsPath, log.contents); + } + } + async dispatchKeybinding(keybinding: string) { const chords = keybinding.split(' '); for (let i = 0; i < chords.length; i++) { @@ -171,7 +192,7 @@ export class PlaywrightDriver { } async getTitle() { - return this.evaluateWithDriver(([driver]) => driver.getTitle()); + return this.page.title(); } async isActiveElement(selector: string) { @@ -206,6 +227,10 @@ export class PlaywrightDriver { return this.evaluateWithDriver(([driver]) => driver.getLocalizedStrings()); } + async getLogs() { + return this.page.evaluate(([driver]) => driver.getLogs(), [await this.getDriverHandle()] as const); + } + private async evaluateWithDriver(pageFunction: PageFunction[], T>) { return this.page.evaluate(pageFunction, [await this.getDriverHandle()]); } diff --git a/test/automation/src/playwrightElectron.ts b/test/automation/src/playwrightElectron.ts index 61a250f20ea..660320be235 100644 --- a/test/automation/src/playwrightElectron.ts +++ b/test/automation/src/playwrightElectron.ts @@ -17,12 +17,12 @@ export async function launch(options: LaunchOptions): Promise<{ electronProcess: args.push('--enable-smoke-test-driver'); // Launch electron via playwright - const { electron, context, page, windowLoadedPromise } = await launchElectron({ electronPath, args, env }, options); + const { electron, context, page } = await launchElectron({ electronPath, args, env }, options); const electronProcess = electron.process(); return { electronProcess, - driver: new PlaywrightDriver(electron, context, page, undefined /* no server process */, windowLoadedPromise, options) + driver: new PlaywrightDriver(electron, context, page, undefined /* no server process */, Promise.resolve() /* Window is open already */, options) }; } @@ -32,12 +32,14 @@ async function launchElectron(configuration: IElectronConfiguration, options: La const electron = await measureAndLog(() => playwright._electron.launch({ executablePath: configuration.electronPath, args: configuration.args, - env: configuration.env as { [key: string]: string } + env: configuration.env as { [key: string]: string }, + timeout: 0 }), 'playwright-electron#launch', logger); - const windowLoadedPromise = electron.waitForEvent('window'); - - const window = await measureAndLog(() => electron.firstWindow(), 'playwright-electron#firstWindow', logger); + let window = electron.windows()[0]; + if (!window) { + window = await measureAndLog(() => electron.waitForEvent('window', { timeout: 0 }), 'playwright-electron#firstWindow', logger); + } const context = window.context(); @@ -74,5 +76,5 @@ async function launchElectron(configuration: IElectronConfiguration, options: La } }); - return { electron, context, page: window, windowLoadedPromise }; + return { electron, context, page: window }; } diff --git a/test/automation/src/quickinput.ts b/test/automation/src/quickinput.ts index 382fd328ce3..2fc3db3a9c6 100644 --- a/test/automation/src/quickinput.ts +++ b/test/automation/src/quickinput.ts @@ -11,7 +11,8 @@ export class QuickInput { private static QUICK_INPUT_INPUT = `${QuickInput.QUICK_INPUT} .quick-input-box input`; private static QUICK_INPUT_ROW = `${QuickInput.QUICK_INPUT} .quick-input-list .monaco-list-row`; private static QUICK_INPUT_FOCUSED_ELEMENT = `${QuickInput.QUICK_INPUT_ROW}.focused .monaco-highlighted-label`; - private static QUICK_INPUT_ENTRY_LABEL = `${QuickInput.QUICK_INPUT_ROW} .label-name`; + // Note: this only grabs the label and not the description or detail + private static QUICK_INPUT_ENTRY_LABEL = `${QuickInput.QUICK_INPUT_ROW} .quick-input-list-row > .monaco-icon-label .label-name`; private static QUICK_INPUT_ENTRY_LABEL_SPAN = `${QuickInput.QUICK_INPUT_ROW} .monaco-highlighted-label`; constructor(private code: Code) { } diff --git a/test/automation/src/search.ts b/test/automation/src/search.ts index f05e5b8668c..844003955e7 100644 --- a/test/automation/src/search.ts +++ b/test/automation/src/search.ts @@ -35,7 +35,7 @@ export class Search extends Viewlet { async clearSearchResults(): Promise { await retry( - () => this.code.waitAndClick(`.sidebar .codicon-search-clear-results`), + () => this.code.waitAndClick(`.sidebar .title-actions .codicon-search-clear-results`), () => this.waitForNoResultText(10)); } diff --git a/test/integration/browser/src/index.ts b/test/integration/browser/src/index.ts index 821b9862bd9..66ef29ebd29 100644 --- a/test/integration/browser/src/index.ts +++ b/test/integration/browser/src/index.ts @@ -13,6 +13,10 @@ import { URI } from 'vscode-uri'; import * as kill from 'tree-kill'; import * as optimistLib from 'optimist'; import { promisify } from 'util'; +import { promises } from 'fs'; + +const root = path.join(__dirname, '..', '..', '..', '..'); +const logsPath = path.join(root, '.build', 'logs', 'integration-tests-browser'); const optimist = optimistLib .describe('workspacePath', 'path to the workspace (folder or *.code-workspace file) to open in the test').string('workspacePath') @@ -63,7 +67,18 @@ async function runTestsInBrowser(browserType: BrowserType, endpoint: url.UrlWith console[type](...args); }); - await page.exposeFunction('codeAutomationExit', async (code: number) => { + await page.exposeFunction('codeAutomationExit', async (code: number, logs: Array<{ readonly relativePath: string; readonly contents: string }>) => { + try { + for (const log of logs) { + const absoluteLogsPath = path.join(logsPath, log.relativePath); + + await promises.mkdir(path.dirname(absoluteLogsPath), { recursive: true }); + await promises.writeFile(absoluteLogsPath, log.contents); + } + } catch (error) { + console.error(`Error saving web client logs (${error})`); + } + try { await browser.close(); } catch (error) { @@ -123,9 +138,6 @@ async function launchServer(browserType: BrowserType): Promise<{ endpoint: url.U ...process.env }; - const root = path.join(__dirname, '..', '..', '..', '..'); - const logsPath = path.join(root, '.build', 'logs', 'integration-tests-browser'); - const serverArgs = ['--enable-proposed-api', '--disable-telemetry', '--server-data-dir', userDataDir, '--accept-server-license-terms', '--disable-workspace-trust']; let serverLocation: string; @@ -145,8 +157,9 @@ async function launchServer(browserType: BrowserType): Promise<{ endpoint: url.U } } - console.log(`Storing log files into '${logsPath}'`); - serverArgs.push('--logsPath', logsPath); + const serverLogsPath = path.join(logsPath, 'server'); + console.log(`Storing log files into '${serverLogsPath}'`); + serverArgs.push('--logsPath', serverLogsPath); const stdio: cp.StdioOptions = optimist.argv.debug ? 'pipe' : ['ignore', 'pipe', 'ignore']; diff --git a/test/smoke/package.json b/test/smoke/package.json index ef9ec209501..72ed55e68e1 100644 --- a/test/smoke/package.json +++ b/test/smoke/package.json @@ -11,7 +11,7 @@ "mocha": "node ../node_modules/mocha/bin/mocha" }, "dependencies": { - "@vscode/test-electron": "^2.2.1", + "@vscode/test-electron": "^2.3.2", "mkdirp": "^1.0.4", "ncp": "^2.0.0", "node-fetch": "^2.6.7", diff --git a/test/smoke/src/areas/workbench/data-loss.test.ts b/test/smoke/src/areas/workbench/data-loss.test.ts index 46af836e91c..9788813f225 100644 --- a/test/smoke/src/areas/workbench/data-loss.test.ts +++ b/test/smoke/src/areas/workbench/data-loss.test.ts @@ -9,6 +9,10 @@ import { createApp, timeout, installDiagnosticsHandler, installAppAfterHandler, export function setup(ensureStableCode: () => string | undefined, logger: Logger) { describe('Data Loss (insiders -> insiders)', function () { + + // Double the timeout since these tests involve 2 startups + this.timeout(4 * 60 * 1000); + let app: Application | undefined = undefined; // Shared before/after handling @@ -130,6 +134,10 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger }); describe('Data Loss (stable -> insiders)', function () { + + // Double the timeout since these tests involve 2 startups + this.timeout(4 * 60 * 1000); + let insidersApp: Application | undefined = undefined; let stableApp: Application | undefined = undefined; diff --git a/test/smoke/src/areas/workbench/localization.test.ts b/test/smoke/src/areas/workbench/localization.test.ts index 15a71ff505c..4a5b62d8d7a 100644 --- a/test/smoke/src/areas/workbench/localization.test.ts +++ b/test/smoke/src/areas/workbench/localization.test.ts @@ -22,11 +22,8 @@ export function setup(logger: Logger) { const result = await app.workbench.localization.getLocalizedStrings(); const localeInfo = await app.workbench.localization.getLocaleInfo(); - // The smoke tests will only work on a machine that uses English as the OS language. - // The build machine is configured to use English as the OS language so that is why - // we can hardcode the expected values here. - if (localeInfo.locale === undefined || !localeInfo.locale.toLowerCase().startsWith('en')) { - throw new Error(`The requested locale for VS Code was not English. The received value is: ${localeInfo.locale === undefined ? 'not set' : localeInfo.locale}`); + if (localeInfo.locale === undefined || localeInfo.locale.toLowerCase() !== 'de') { + throw new Error(`The requested locale for VS Code was not German. The received value is: ${localeInfo.locale === undefined ? 'not set' : localeInfo.locale}`); } if (localeInfo.language.toLowerCase() !== 'de') { diff --git a/test/smoke/yarn.lock b/test/smoke/yarn.lock index ab0960284b8..9c7dbcbe089 100644 --- a/test/smoke/yarn.lock +++ b/test/smoke/yarn.lock @@ -71,15 +71,15 @@ "@types/glob" "*" "@types/node" "*" -"@vscode/test-electron@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.2.1.tgz#6d1ac128e27c18e1d20bcb299e830b50587f74ca" - integrity sha512-DUdwSYVc9p/PbGveaq20dbAAXHfvdq4zQ24ILp6PKizOBxrOfMsOq8Vts5nMzeIo0CxtA/RxZLFyDv001PiUSg== +"@vscode/test-electron@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.3.2.tgz#25db8d1a94e8274c27015cf806ae8b180c83545b" + integrity sha512-CRfQIs5Wi5Ok5SUCC3PTvRRXa74LD43cSXHC8EuNlmHHEPaJa/AGrv76brcA1hVSxrdja9tiYwp95Lq8kwY0tw== dependencies: http-proxy-agent "^4.0.1" https-proxy-agent "^5.0.0" - rimraf "^3.0.2" - unzipper "^0.10.11" + jszip "^3.10.1" + semver "^7.3.8" agent-base@6: version "6.0.2" @@ -105,24 +105,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -big-integer@^1.6.17: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -131,16 +113,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= - call-bind@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" @@ -149,13 +121,6 @@ call-bind@^1.0.0: function-bind "^1.1.1" get-intrinsic "^1.0.0" -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= - dependencies: - traverse ">=0.3.0 <0.4" - chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -224,13 +189,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -291,16 +249,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -332,11 +280,6 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -graceful-fs@^4.2.2: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -376,6 +319,11 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -384,7 +332,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -450,10 +398,22 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" load-json-file@^4.0.0: version "4.0.0" @@ -465,6 +425,13 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -494,18 +461,11 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -"mkdirp@>=0.5 0": - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -585,6 +545,11 @@ once@^1.3.0: dependencies: wrappy "1" +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -639,7 +604,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.0.2, readable-stream@~2.3.6: +readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -660,14 +625,7 @@ resolve@^1.10.0: is-core-module "^2.1.0" path-parse "^1.0.6" -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@3.0.2, rimraf@^3.0.2: +rimraf@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -684,10 +642,17 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -setimmediate@~1.0.4: +semver@^7.3.8: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== shebang-command@^1.2.0: version "1.2.0" @@ -781,27 +746,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= - -unzipper@^0.10.11: - version "0.10.11" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" - integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -847,3 +791,8 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/test/unit/README.md b/test/unit/README.md index 9ad1c7a6a15..58d569d571f 100644 --- a/test/unit/README.md +++ b/test/unit/README.md @@ -4,7 +4,7 @@ ./scripts/test.[sh|bat] -All unit tests are run inside a electron-browser environment which access to DOM and Nodejs api. This is the closest to the environment in which VS Code itself ships. Notes: +All unit tests are run inside a Electron renderer environment which access to DOM and Nodejs api. This is the closest to the environment in which VS Code itself ships. Notes: - use the `--debug` to see an electron window with dev tools which allows for debugging - to run only a subset of tests use the `--run` or `--glob` options diff --git a/test/unit/browser/index.js b/test/unit/browser/index.js index 87ada258bf4..668227d2fa5 100644 --- a/test/unit/browser/index.js +++ b/test/unit/browser/index.js @@ -67,7 +67,7 @@ function ensureIsArray(a) { const testModules = (async function () { - const excludeGlob = '**/{node,electron-sandbox,electron-browser,electron-main}/**/*.test.js'; + const excludeGlob = '**/{node,electron-sandbox,electron-main}/**/*.test.js'; let isDefaultModules = true; let promise; @@ -131,7 +131,13 @@ async function runTestsInBrowser(testModules, browserType) { const page = await context.newPage(); const target = url.pathToFileURL(path.join(__dirname, 'renderer.html')); if (argv.build) { - target.search = `?build=true`; + if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) { + target.search = `?build=true&ci=true`; + } else { + target.search = `?build=true`; + } + } else if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) { + target.search = `?ci=true`; } const emitter = new events.EventEmitter(); diff --git a/test/unit/browser/renderer.html b/test/unit/browser/renderer.html index 2bf6e3a2cab..540dd2a82aa 100644 --- a/test/unit/browser/renderer.html +++ b/test/unit/browser/renderer.html @@ -31,9 +31,12 @@ } }); + const urlParams = new URLSearchParams(window.location.search); + const isCI = urlParams.get('ci'); + mocha.setup({ ui: 'tdd', - timeout: 5000 + timeout: isCI ? 30000 : 5000 }); @@ -42,7 +45,6 @@